Browse Source

Added support for linear and pixel art scaling for palettized textures

Sam Lantinga 1 week ago
parent
commit
134b47730b
43 changed files with 10072 additions and 5921 deletions
  1. 0 1
      include/SDL3/SDL_render.h
  2. 1 9
      src/render/SDL_render.c
  3. 228 48
      src/render/direct3d/D3D9_PixelShader_Palette.h
  4. 0 19
      src/render/direct3d/D3D9_PixelShader_Palette.hlsl
  5. 49 0
      src/render/direct3d/D3D9_PixelShader_Palette.hlsli
  6. 209 0
      src/render/direct3d/D3D9_PixelShader_Palette_Linear.h
  7. 7 0
      src/render/direct3d/D3D9_PixelShader_Palette_Linear.hlsl
  8. 95 0
      src/render/direct3d/D3D9_PixelShader_Palette_Nearest.h
  9. 7 0
      src/render/direct3d/D3D9_PixelShader_Palette_Nearest.hlsl
  10. 23 11
      src/render/direct3d/SDL_render_d3d.c
  11. 8 3
      src/render/direct3d/SDL_shaders_d3d.c
  12. 2 1
      src/render/direct3d/SDL_shaders_d3d.h
  13. 2 1
      src/render/direct3d/compile_shaders.bat
  14. 685 119
      src/render/direct3d11/D3D11_PixelShader_Advanced.h
  15. 48 15
      src/render/direct3d11/D3D11_PixelShader_Common.hlsli
  16. 38 14
      src/render/direct3d11/SDL_render_d3d11.c
  17. 736 488
      src/render/direct3d12/D3D12_PixelShader_Advanced.h
  18. 48 15
      src/render/direct3d12/D3D12_PixelShader_Common.hlsli
  19. 38 14
      src/render/direct3d12/SDL_render_d3d12.c
  20. 46 24
      src/render/gpu/SDL_render_gpu.c
  21. 505 381
      src/render/gpu/shaders/texture_advanced.frag.dxil.h
  22. 49 16
      src/render/gpu/shaders/texture_advanced.frag.hlsl
  23. 486 215
      src/render/gpu/shaders/texture_advanced.frag.msl.h
  24. 1240 914
      src/render/gpu/shaders/texture_advanced.frag.spv.h
  25. 40 14
      src/render/metal/SDL_render_metal.m
  26. 48 13
      src/render/metal/SDL_shaders_metal.metal
  27. 680 496
      src/render/metal/SDL_shaders_metal_ios.h
  28. 741 577
      src/render/metal/SDL_shaders_metal_iphonesimulator.h
  29. 1710 1030
      src/render/metal/SDL_shaders_metal_macos.h
  30. 680 496
      src/render/metal/SDL_shaders_metal_tvos.h
  31. 701 481
      src/render/metal/SDL_shaders_metal_tvsimulator.h
  32. 42 25
      src/render/opengl/SDL_render_gl.c
  33. 125 44
      src/render/opengl/SDL_shaders_gl.c
  34. 4 2
      src/render/opengl/SDL_shaders_gl.h
  35. 53 22
      src/render/opengles2/SDL_render_gles2.c
  36. 128 51
      src/render/opengles2/SDL_shaders_gles2.c
  37. 9 7
      src/render/opengles2/SDL_shaders_gles2.h
  38. 37 11
      src/render/vulkan/SDL_render_vulkan.c
  39. 430 311
      src/render/vulkan/VULKAN_PixelShader_Advanced.h
  40. 9 9
      src/render/vulkan/VULKAN_PixelShader_Colors.h
  41. 45 12
      src/render/vulkan/VULKAN_PixelShader_Common.hlsli
  42. 9 9
      src/render/vulkan/VULKAN_PixelShader_Textures.h
  43. 31 3
      test/testscale.c

+ 0 - 1
include/SDL3/SDL_render.h

@@ -1234,7 +1234,6 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture, S
  * The default texture scale mode is SDL_SCALEMODE_LINEAR.
  * The default texture scale mode is SDL_SCALEMODE_LINEAR.
  *
  *
  * If the scale mode is not supported, the closest supported mode is chosen.
  * If the scale mode is not supported, the closest supported mode is chosen.
- * Palettized textures will always use SDL_SCALEMODE_NEAREST.
  *
  *
  * \param texture the texture to update.
  * \param texture the texture to update.
  * \param scaleMode the SDL_ScaleMode to use for texture scaling.
  * \param scaleMode the SDL_ScaleMode to use for texture scaling.

+ 1 - 9
src/render/SDL_render.c

@@ -1525,11 +1525,7 @@ SDL_Texture *SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_Propert
     texture->color.b = 1.0f;
     texture->color.b = 1.0f;
     texture->color.a = 1.0f;
     texture->color.a = 1.0f;
     texture->blendMode = SDL_ISPIXELFORMAT_ALPHA(format) ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE;
     texture->blendMode = SDL_ISPIXELFORMAT_ALPHA(format) ? SDL_BLENDMODE_BLEND : SDL_BLENDMODE_NONE;
-    if (SDL_ISPIXELFORMAT_INDEXED(format)) {
-        texture->scaleMode = SDL_SCALEMODE_NEAREST;
-    } else {
-        texture->scaleMode = renderer->scale_mode;
-    }
+    texture->scaleMode = renderer->scale_mode;
     texture->view.pixel_w = w;
     texture->view.pixel_w = w;
     texture->view.pixel_h = h;
     texture->view.pixel_h = h;
     texture->view.viewport.w = -1;
     texture->view.viewport.w = -1;
@@ -2162,12 +2158,8 @@ bool SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode)
 
 
     switch (scaleMode) {
     switch (scaleMode) {
     case SDL_SCALEMODE_NEAREST:
     case SDL_SCALEMODE_NEAREST:
-        break;
     case SDL_SCALEMODE_PIXELART:
     case SDL_SCALEMODE_PIXELART:
     case SDL_SCALEMODE_LINEAR:
     case SDL_SCALEMODE_LINEAR:
-        if (SDL_ISPIXELFORMAT_INDEXED(texture->format)) {
-            scaleMode = SDL_SCALEMODE_NEAREST;
-        }
         break;
         break;
     default:
     default:
         return SDL_InvalidParamError("scaleMode");
         return SDL_InvalidParamError("scaleMode");

+ 228 - 48
src/render/direct3d/D3D9_PixelShader_Palette.h

@@ -6,83 +6,263 @@
 //
 //
 //   sampler2D image;
 //   sampler2D image;
 //   sampler1D palette;
 //   sampler1D palette;
+//   float4 texel_size;
+//   float texture_type;
 //
 //
 //
 //
 // Registers:
 // Registers:
 //
 //
 //   Name         Reg   Size
 //   Name         Reg   Size
 //   ------------ ----- ----
 //   ------------ ----- ----
+//   texture_type c0       1
+//   texel_size   c1       1
 //   image        s0       1
 //   image        s0       1
 //   palette      s1       1
 //   palette      s1       1
 //
 //
 
 
     ps_2_0
     ps_2_0
-    def c0, 0.99609375, 0.001953125, 0, 0
-    dcl t0.xy
+    def c2, -1, 255, 0.5, 0.00390625
+    def c3, -2, 0, 0, 0
+    def c4, 1, 0, 0, 1
     dcl v0
     dcl v0
+    dcl t0.xy
     dcl_2d s0
     dcl_2d s0
     dcl_2d s1
     dcl_2d s1
-    texld r0, t0, s0
-    mad r0.xy, r0.x, c0.x, c0.y
-    texld r0, r0, s1
+    mov r0.xz, c2
+    mad r1.x, t0.x, c1.z, r0.z
+    mad r1.y, t0.y, c1.w, r0.z
+    frc r0.yz, r1.zxyw
+    add r1.xy, -r0.yzxw, r1
+    add r1.zw, r1.wzyx, -c2.z
+    add r1.xy, r1, c2.z
+    mul r1.xy, r1, c1
+    mul r2.xy, r1.wzyx, c1
+    mov r3.x, r2.x
+    mov r3.y, r1.y
+    mov r4.y, r2.y
+    mov r4.x, r1.x
+    texld r3, r3, s0
+    texld r2, r2, s0
+    texld r1, r1, s0
+    texld r4, r4, s0
+    texld r5, t0, s0
+    mad r0.w, r3.x, c2.y, c2.z
+    mul r3.xy, r0.w, c2.w
+    mad r0.w, r2.x, c2.y, c2.z
+    mul r2.xy, r0.w, c2.w
+    mad r0.w, r1.x, c2.y, c2.z
+    mul r1.xy, r0.w, c2.w
+    mad r0.w, r4.x, c2.y, c2.z
+    mul r4.xy, r0.w, c2.w
+    mad r0.w, r5.x, c2.y, c2.z
+    mul r5.xy, r0.w, c2.w
+    texld r3, r3, s1
+    texld r2, r2, s1
+    texld r1, r1, s1
+    texld r4, r4, s1
+    texld r5, r5, s1
+    lrp r6, r0.z, r3, r2
+    lrp r2, r0.z, r1, r4
+    lrp r1, r0.y, r2, r6
+    mov r2.x, c0.x
+    add r0.y, r2.x, c3.x
+    mul r0.y, r0.y, r0.y
+    cmp r1, -r0.y, r1, c4
+    add r0.x, r0.x, c0.x
+    mul r0.x, r0.x, r0.x
+    cmp r0, -r0.x, r5, r1
     mul r0, r0, v0
     mul r0, r0, v0
     mov oC0, r0
     mov oC0, r0
 
 
-// approximately 5 instruction slots used (2 texture, 3 arithmetic)
+// approximately 45 instruction slots used (10 texture, 35 arithmetic)
 #endif
 #endif
 
 
 const BYTE g_ps20_main[] =
 const BYTE g_ps20_main[] =
 {
 {
       0,   2, 255, 255, 254, 255,
       0,   2, 255, 255, 254, 255,
-     42,   0,  67,  84,  65,  66,
-     28,   0,   0,   0, 123,   0,
+     67,   0,  67,  84,  65,  66,
+     28,   0,   0,   0, 223,   0,
       0,   0,   0,   2, 255, 255,
       0,   0,   0,   2, 255, 255,
-      2,   0,   0,   0,  28,   0,
+      4,   0,   0,   0,  28,   0,
       0,   0,   0,   1,   0,   0,
       0,   0,   0,   1,   0,   0,
-    116,   0,   0,   0,  68,   0,
+    216,   0,   0,   0, 108,   0,
       0,   0,   3,   0,   0,   0,
       0,   0,   3,   0,   0,   0,
-      1,   0,   0,   0,  76,   0,
+      1,   0,   0,   0, 116,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-     92,   0,   0,   0,   3,   0,
+    132,   0,   0,   0,   3,   0,
       1,   0,   1,   0,   0,   0,
       1,   0,   1,   0,   0,   0,
-    100,   0,   0,   0,   0,   0,
-      0,   0, 105, 109,  97, 103,
-    101,   0, 171, 171,   4,   0,
-     12,   0,   1,   0,   1,   0,
-      1,   0,   0,   0,   0,   0,
-      0,   0, 112,  97, 108, 101,
-    116, 116, 101,   0,   4,   0,
-     11,   0,   1,   0,   1,   0,
-      1,   0,   0,   0,   0,   0,
-      0,   0, 112, 115,  95,  50,
-     95,  48,   0,  77, 105,  99,
-    114, 111, 115, 111, 102, 116,
-     32,  40,  82,  41,  32,  72,
-     76,  83,  76,  32,  83, 104,
-     97, 100, 101, 114,  32,  67,
-    111, 109, 112, 105, 108, 101,
-    114,  32,  49,  48,  46,  49,
-      0, 171,  81,   0,   0,   5,
-      0,   0,  15, 160,   0,   0,
-    127,  63,   0,   0,   0,  59,
+    140,   0,   0,   0,   0,   0,
+      0,   0, 156,   0,   0,   0,
+      2,   0,   1,   0,   1,   0,
+      0,   0, 168,   0,   0,   0,
+      0,   0,   0,   0, 184,   0,
+      0,   0,   2,   0,   0,   0,
+      1,   0,   0,   0, 200,   0,
+      0,   0,   0,   0,   0,   0,
+    105, 109,  97, 103, 101,   0,
+    171, 171,   4,   0,  12,   0,
+      1,   0,   1,   0,   1,   0,
+      0,   0,   0,   0,   0,   0,
+    112,  97, 108, 101, 116, 116,
+    101,   0,   4,   0,  11,   0,
+      1,   0,   1,   0,   1,   0,
+      0,   0,   0,   0,   0,   0,
+    116, 101, 120, 101, 108,  95,
+    115, 105, 122, 101,   0, 171,
+      1,   0,   3,   0,   1,   0,
+      4,   0,   1,   0,   0,   0,
+      0,   0,   0,   0, 116, 101,
+    120, 116, 117, 114, 101,  95,
+    116, 121, 112, 101,   0, 171,
+    171, 171,   0,   0,   3,   0,
+      1,   0,   1,   0,   1,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      0,   0,  31,   0,   0,   2,
-      0,   0,   0, 128,   0,   0,
-      3, 176,  31,   0,   0,   2,
-      0,   0,   0, 128,   0,   0,
-     15, 144,  31,   0,   0,   2,
-      0,   0,   0, 144,   0,   8,
-     15, 160,  31,   0,   0,   2,
-      0,   0,   0, 144,   1,   8,
-     15, 160,  66,   0,   0,   3,
-      0,   0,  15, 128,   0,   0,
-    228, 176,   0,   8, 228, 160,
-      4,   0,   0,   4,   0,   0,
-      3, 128,   0,   0,   0, 128,
-      0,   0,   0, 160,   0,   0,
-     85, 160,  66,   0,   0,   3,
-      0,   0,  15, 128,   0,   0,
+    112, 115,  95,  50,  95,  48,
+      0,  77, 105,  99, 114, 111,
+    115, 111, 102, 116,  32,  40,
+     82,  41,  32,  72,  76,  83,
+     76,  32,  83, 104,  97, 100,
+    101, 114,  32,  67, 111, 109,
+    112, 105, 108, 101, 114,  32,
+     49,  48,  46,  49,   0, 171,
+     81,   0,   0,   5,   2,   0,
+     15, 160,   0,   0, 128, 191,
+      0,   0, 127,  67,   0,   0,
+      0,  63,   0,   0, 128,  59,
+     81,   0,   0,   5,   3,   0,
+     15, 160,   0,   0,   0, 192,
+      0,   0,   0,   0,   0,   0,
+      0,   0,   0,   0,   0,   0,
+     81,   0,   0,   5,   4,   0,
+     15, 160,   0,   0, 128,  63,
+      0,   0,   0,   0,   0,   0,
+      0,   0,   0,   0, 128,  63,
+     31,   0,   0,   2,   0,   0,
+      0, 128,   0,   0,  15, 144,
+     31,   0,   0,   2,   0,   0,
+      0, 128,   0,   0,   3, 176,
+     31,   0,   0,   2,   0,   0,
+      0, 144,   0,   8,  15, 160,
+     31,   0,   0,   2,   0,   0,
+      0, 144,   1,   8,  15, 160,
+      1,   0,   0,   2,   0,   0,
+      5, 128,   2,   0, 228, 160,
+      4,   0,   0,   4,   1,   0,
+      1, 128,   0,   0,   0, 176,
+      1,   0, 170, 160,   0,   0,
+    170, 128,   4,   0,   0,   4,
+      1,   0,   2, 128,   0,   0,
+     85, 176,   1,   0, 255, 160,
+      0,   0, 170, 128,  19,   0,
+      0,   2,   0,   0,   6, 128,
+      1,   0, 210, 128,   2,   0,
+      0,   3,   1,   0,   3, 128,
+      0,   0, 201, 129,   1,   0,
+    228, 128,   2,   0,   0,   3,
+      1,   0,  12, 128,   1,   0,
+     27, 128,   2,   0, 170, 161,
+      2,   0,   0,   3,   1,   0,
+      3, 128,   1,   0, 228, 128,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   1,   0,   3, 128,
+      1,   0, 228, 128,   1,   0,
+    228, 160,   5,   0,   0,   3,
+      2,   0,   3, 128,   1,   0,
+     27, 128,   1,   0, 228, 160,
+      1,   0,   0,   2,   3,   0,
+      1, 128,   2,   0,   0, 128,
+      1,   0,   0,   2,   3,   0,
+      2, 128,   1,   0,  85, 128,
+      1,   0,   0,   2,   4,   0,
+      2, 128,   2,   0,  85, 128,
+      1,   0,   0,   2,   4,   0,
+      1, 128,   1,   0,   0, 128,
+     66,   0,   0,   3,   3,   0,
+     15, 128,   3,   0, 228, 128,
+      0,   8, 228, 160,  66,   0,
+      0,   3,   2,   0,  15, 128,
+      2,   0, 228, 128,   0,   8,
+    228, 160,  66,   0,   0,   3,
+      1,   0,  15, 128,   1,   0,
+    228, 128,   0,   8, 228, 160,
+     66,   0,   0,   3,   4,   0,
+     15, 128,   4,   0, 228, 128,
+      0,   8, 228, 160,  66,   0,
+      0,   3,   5,   0,  15, 128,
+      0,   0, 228, 176,   0,   8,
+    228, 160,   4,   0,   0,   4,
+      0,   0,   8, 128,   3,   0,
+      0, 128,   2,   0,  85, 160,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   3,   0,   3, 128,
+      0,   0, 255, 128,   2,   0,
+    255, 160,   4,   0,   0,   4,
+      0,   0,   8, 128,   2,   0,
+      0, 128,   2,   0,  85, 160,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   2,   0,   3, 128,
+      0,   0, 255, 128,   2,   0,
+    255, 160,   4,   0,   0,   4,
+      0,   0,   8, 128,   1,   0,
+      0, 128,   2,   0,  85, 160,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   1,   0,   3, 128,
+      0,   0, 255, 128,   2,   0,
+    255, 160,   4,   0,   0,   4,
+      0,   0,   8, 128,   4,   0,
+      0, 128,   2,   0,  85, 160,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   4,   0,   3, 128,
+      0,   0, 255, 128,   2,   0,
+    255, 160,   4,   0,   0,   4,
+      0,   0,   8, 128,   5,   0,
+      0, 128,   2,   0,  85, 160,
+      2,   0, 170, 160,   5,   0,
+      0,   3,   5,   0,   3, 128,
+      0,   0, 255, 128,   2,   0,
+    255, 160,  66,   0,   0,   3,
+      3,   0,  15, 128,   3,   0,
     228, 128,   1,   8, 228, 160,
     228, 128,   1,   8, 228, 160,
+     66,   0,   0,   3,   2,   0,
+     15, 128,   2,   0, 228, 128,
+      1,   8, 228, 160,  66,   0,
+      0,   3,   1,   0,  15, 128,
+      1,   0, 228, 128,   1,   8,
+    228, 160,  66,   0,   0,   3,
+      4,   0,  15, 128,   4,   0,
+    228, 128,   1,   8, 228, 160,
+     66,   0,   0,   3,   5,   0,
+     15, 128,   5,   0, 228, 128,
+      1,   8, 228, 160,  18,   0,
+      0,   4,   6,   0,  15, 128,
+      0,   0, 170, 128,   3,   0,
+    228, 128,   2,   0, 228, 128,
+     18,   0,   0,   4,   2,   0,
+     15, 128,   0,   0, 170, 128,
+      1,   0, 228, 128,   4,   0,
+    228, 128,  18,   0,   0,   4,
+      1,   0,  15, 128,   0,   0,
+     85, 128,   2,   0, 228, 128,
+      6,   0, 228, 128,   1,   0,
+      0,   2,   2,   0,   1, 128,
+      0,   0,   0, 160,   2,   0,
+      0,   3,   0,   0,   2, 128,
+      2,   0,   0, 128,   3,   0,
+      0, 160,   5,   0,   0,   3,
+      0,   0,   2, 128,   0,   0,
+     85, 128,   0,   0,  85, 128,
+     88,   0,   0,   4,   1,   0,
+     15, 128,   0,   0,  85, 129,
+      1,   0, 228, 128,   4,   0,
+    228, 160,   2,   0,   0,   3,
+      0,   0,   1, 128,   0,   0,
+      0, 128,   0,   0,   0, 160,
+      5,   0,   0,   3,   0,   0,
+      1, 128,   0,   0,   0, 128,
+      0,   0,   0, 128,  88,   0,
+      0,   4,   0,   0,  15, 128,
+      0,   0,   0, 129,   5,   0,
+    228, 128,   1,   0, 228, 128,
       5,   0,   0,   3,   0,   0,
       5,   0,   0,   3,   0,   0,
      15, 128,   0,   0, 228, 128,
      15, 128,   0,   0, 228, 128,
       0,   0, 228, 144,   1,   0,
       0,   0, 228, 144,   1,   0,

+ 0 - 19
src/render/direct3d/D3D9_PixelShader_Palette.hlsl

@@ -1,19 +0,0 @@
-
-uniform sampler2D image;
-uniform sampler1D palette;
-
-struct PixelShaderInput
-{
-    float4 pos : SV_POSITION;
-    float2 tex : TEXCOORD0;
-    float4 color : COLOR0;
-};
-
-float4 main(PixelShaderInput input) : SV_TARGET
-{
-    float4 Output;
-    float index;
-    index = tex2D(image, input.tex).r;
-    Output = tex1D(palette, index * (255. / 256) + (0.5 / 256));
-    return Output * input.color;
-}

+ 49 - 0
src/render/direct3d/D3D9_PixelShader_Palette.hlsli

@@ -0,0 +1,49 @@
+
+cbuffer Constants
+{
+    float4 texel_size;
+};
+
+uniform sampler2D image;
+uniform sampler1D palette;
+
+struct PixelShaderInput
+{
+    float4 pos : SV_POSITION;
+    float2 tex : TEXCOORD0;
+    float4 color : COLOR0;
+};
+
+static const float TEXTURETYPE_NONE = 0;
+static const float TEXTURETYPE_PALETTE_NEAREST = 1;
+static const float TEXTURETYPE_PALETTE_LINEAR = 2;
+
+float4 SamplePaletteNearest(float2 uv)
+{
+    float index = tex2D(image, uv).r * 255;
+    return tex1D(palette, (index + 0.5) / 256);
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(float2 uv)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = frac(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(uv_min_max.zw);
+
+    // bilinear interpolation
+    return lerp(lerp(texelA, texelB, uv_frac.y), lerp(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+

+ 209 - 0
src/render/direct3d/D3D9_PixelShader_Palette_Linear.h

@@ -0,0 +1,209 @@
+#if 0
+//
+// Generated by Microsoft (R) HLSL Shader Compiler 10.1
+//
+// Parameters:
+//
+//   sampler2D image;
+//   sampler1D palette;
+//   float4 texel_size;
+//
+//
+// Registers:
+//
+//   Name         Reg   Size
+//   ------------ ----- ----
+//   texel_size   c0       1
+//   image        s0       1
+//   palette      s1       1
+//
+
+    ps_2_0
+    def c1, 0.5, -0.5, 255, 0.00390625
+    dcl t0.xy
+    dcl v0
+    dcl_2d s0
+    dcl_2d s1
+    mov r0.w, c1.x
+    mad r0.x, t0.x, c0.z, r0.w
+    mad r0.y, t0.y, c0.w, r0.w
+    frc r0.zw, r0.wzyx
+    add r0.xy, -r0.wzyx, r0
+    add r1.xy, r0, c1.y
+    add r0.xy, r0, c1.x
+    mul r0.xy, r0, c0
+    mul r1.xy, r1, c0
+    mov r2.x, r1.x
+    mov r2.y, r0.y
+    mov r3.y, r1.y
+    mov r3.x, r0.x
+    texld r2, r2, s0
+    texld r1, r1, s0
+    texld r4, r0, s0
+    texld r3, r3, s0
+    mad r0.x, r2.x, c1.z, c1.x
+    mul r0.xy, r0.x, c1.w
+    mad r1.x, r1.x, c1.z, c1.x
+    mul r1.xy, r1.x, c1.w
+    mad r1.z, r4.x, c1.z, c1.x
+    mul r2.xy, r1.z, c1.w
+    mad r1.z, r3.x, c1.z, c1.x
+    mul r3.xy, r1.z, c1.w
+    texld r4, r0, s1
+    texld r1, r1, s1
+    texld r2, r2, s1
+    texld r3, r3, s1
+    lrp r5, r0.z, r4, r1
+    lrp r1, r0.z, r2, r3
+    lrp r2, r0.w, r1, r5
+    mul r0, r2, v0
+    mov oC0, r0
+
+// approximately 34 instruction slots used (8 texture, 26 arithmetic)
+#endif
+
+const BYTE g_ps20_main[] =
+{
+      0,   2, 255, 255, 254, 255,
+     54,   0,  67,  84,  65,  66,
+     28,   0,   0,   0, 171,   0,
+      0,   0,   0,   2, 255, 255,
+      3,   0,   0,   0,  28,   0,
+      0,   0,   0,   1,   0,   0,
+    164,   0,   0,   0,  88,   0,
+      0,   0,   3,   0,   0,   0,
+      1,   0,   0,   0,  96,   0,
+      0,   0,   0,   0,   0,   0,
+    112,   0,   0,   0,   3,   0,
+      1,   0,   1,   0,   0,   0,
+    120,   0,   0,   0,   0,   0,
+      0,   0, 136,   0,   0,   0,
+      2,   0,   0,   0,   1,   0,
+      0,   0, 148,   0,   0,   0,
+      0,   0,   0,   0, 105, 109,
+     97, 103, 101,   0, 171, 171,
+      4,   0,  12,   0,   1,   0,
+      1,   0,   1,   0,   0,   0,
+      0,   0,   0,   0, 112,  97,
+    108, 101, 116, 116, 101,   0,
+      4,   0,  11,   0,   1,   0,
+      1,   0,   1,   0,   0,   0,
+      0,   0,   0,   0, 116, 101,
+    120, 101, 108,  95, 115, 105,
+    122, 101,   0, 171,   1,   0,
+      3,   0,   1,   0,   4,   0,
+      1,   0,   0,   0,   0,   0,
+      0,   0, 112, 115,  95,  50,
+     95,  48,   0,  77, 105,  99,
+    114, 111, 115, 111, 102, 116,
+     32,  40,  82,  41,  32,  72,
+     76,  83,  76,  32,  83, 104,
+     97, 100, 101, 114,  32,  67,
+    111, 109, 112, 105, 108, 101,
+    114,  32,  49,  48,  46,  49,
+      0, 171,  81,   0,   0,   5,
+      1,   0,  15, 160,   0,   0,
+      0,  63,   0,   0,   0, 191,
+      0,   0, 127,  67,   0,   0,
+    128,  59,  31,   0,   0,   2,
+      0,   0,   0, 128,   0,   0,
+      3, 176,  31,   0,   0,   2,
+      0,   0,   0, 128,   0,   0,
+     15, 144,  31,   0,   0,   2,
+      0,   0,   0, 144,   0,   8,
+     15, 160,  31,   0,   0,   2,
+      0,   0,   0, 144,   1,   8,
+     15, 160,   1,   0,   0,   2,
+      0,   0,   8, 128,   1,   0,
+      0, 160,   4,   0,   0,   4,
+      0,   0,   1, 128,   0,   0,
+      0, 176,   0,   0, 170, 160,
+      0,   0, 255, 128,   4,   0,
+      0,   4,   0,   0,   2, 128,
+      0,   0,  85, 176,   0,   0,
+    255, 160,   0,   0, 255, 128,
+     19,   0,   0,   2,   0,   0,
+     12, 128,   0,   0,  27, 128,
+      2,   0,   0,   3,   0,   0,
+      3, 128,   0,   0,  27, 129,
+      0,   0, 228, 128,   2,   0,
+      0,   3,   1,   0,   3, 128,
+      0,   0, 228, 128,   1,   0,
+     85, 160,   2,   0,   0,   3,
+      0,   0,   3, 128,   0,   0,
+    228, 128,   1,   0,   0, 160,
+      5,   0,   0,   3,   0,   0,
+      3, 128,   0,   0, 228, 128,
+      0,   0, 228, 160,   5,   0,
+      0,   3,   1,   0,   3, 128,
+      1,   0, 228, 128,   0,   0,
+    228, 160,   1,   0,   0,   2,
+      2,   0,   1, 128,   1,   0,
+      0, 128,   1,   0,   0,   2,
+      2,   0,   2, 128,   0,   0,
+     85, 128,   1,   0,   0,   2,
+      3,   0,   2, 128,   1,   0,
+     85, 128,   1,   0,   0,   2,
+      3,   0,   1, 128,   0,   0,
+      0, 128,  66,   0,   0,   3,
+      2,   0,  15, 128,   2,   0,
+    228, 128,   0,   8, 228, 160,
+     66,   0,   0,   3,   1,   0,
+     15, 128,   1,   0, 228, 128,
+      0,   8, 228, 160,  66,   0,
+      0,   3,   4,   0,  15, 128,
+      0,   0, 228, 128,   0,   8,
+    228, 160,  66,   0,   0,   3,
+      3,   0,  15, 128,   3,   0,
+    228, 128,   0,   8, 228, 160,
+      4,   0,   0,   4,   0,   0,
+      1, 128,   2,   0,   0, 128,
+      1,   0, 170, 160,   1,   0,
+      0, 160,   5,   0,   0,   3,
+      0,   0,   3, 128,   0,   0,
+      0, 128,   1,   0, 255, 160,
+      4,   0,   0,   4,   1,   0,
+      1, 128,   1,   0,   0, 128,
+      1,   0, 170, 160,   1,   0,
+      0, 160,   5,   0,   0,   3,
+      1,   0,   3, 128,   1,   0,
+      0, 128,   1,   0, 255, 160,
+      4,   0,   0,   4,   1,   0,
+      4, 128,   4,   0,   0, 128,
+      1,   0, 170, 160,   1,   0,
+      0, 160,   5,   0,   0,   3,
+      2,   0,   3, 128,   1,   0,
+    170, 128,   1,   0, 255, 160,
+      4,   0,   0,   4,   1,   0,
+      4, 128,   3,   0,   0, 128,
+      1,   0, 170, 160,   1,   0,
+      0, 160,   5,   0,   0,   3,
+      3,   0,   3, 128,   1,   0,
+    170, 128,   1,   0, 255, 160,
+     66,   0,   0,   3,   4,   0,
+     15, 128,   0,   0, 228, 128,
+      1,   8, 228, 160,  66,   0,
+      0,   3,   1,   0,  15, 128,
+      1,   0, 228, 128,   1,   8,
+    228, 160,  66,   0,   0,   3,
+      2,   0,  15, 128,   2,   0,
+    228, 128,   1,   8, 228, 160,
+     66,   0,   0,   3,   3,   0,
+     15, 128,   3,   0, 228, 128,
+      1,   8, 228, 160,  18,   0,
+      0,   4,   5,   0,  15, 128,
+      0,   0, 170, 128,   4,   0,
+    228, 128,   1,   0, 228, 128,
+     18,   0,   0,   4,   1,   0,
+     15, 128,   0,   0, 170, 128,
+      2,   0, 228, 128,   3,   0,
+    228, 128,  18,   0,   0,   4,
+      2,   0,  15, 128,   0,   0,
+    255, 128,   1,   0, 228, 128,
+      5,   0, 228, 128,   5,   0,
+      0,   3,   0,   0,  15, 128,
+      2,   0, 228, 128,   0,   0,
+    228, 144,   1,   0,   0,   2,
+      0,   8,  15, 128,   0,   0,
+    228, 128, 255, 255,   0,   0
+};

+ 7 - 0
src/render/direct3d/D3D9_PixelShader_Palette_Linear.hlsl

@@ -0,0 +1,7 @@
+
+#include "D3D9_PixelShader_Palette.hlsli"
+
+float4 main(PixelShaderInput input) : SV_TARGET
+{
+    return SamplePaletteLinear(input.tex) * input.color;
+}

+ 95 - 0
src/render/direct3d/D3D9_PixelShader_Palette_Nearest.h

@@ -0,0 +1,95 @@
+#if 0
+//
+// Generated by Microsoft (R) HLSL Shader Compiler 10.1
+//
+// Parameters:
+//
+//   sampler2D image;
+//   sampler1D palette;
+//
+//
+// Registers:
+//
+//   Name         Reg   Size
+//   ------------ ----- ----
+//   image        s0       1
+//   palette      s1       1
+//
+
+    ps_2_0
+    def c0, 255, 0.5, 0.00390625, 0
+    dcl t0.xy
+    dcl v0
+    dcl_2d s0
+    dcl_2d s1
+    texld r0, t0, s0
+    mad r0.x, r0.x, c0.x, c0.y
+    mul r0.xy, r0.x, c0.z
+    texld r0, r0, s1
+    mul r0, r0, v0
+    mov oC0, r0
+
+// approximately 6 instruction slots used (2 texture, 4 arithmetic)
+#endif
+
+const BYTE g_ps20_main[] =
+{
+      0,   2, 255, 255, 254, 255,
+     42,   0,  67,  84,  65,  66,
+     28,   0,   0,   0, 123,   0,
+      0,   0,   0,   2, 255, 255,
+      2,   0,   0,   0,  28,   0,
+      0,   0,   0,   1,   0,   0,
+    116,   0,   0,   0,  68,   0,
+      0,   0,   3,   0,   0,   0,
+      1,   0,   0,   0,  76,   0,
+      0,   0,   0,   0,   0,   0,
+     92,   0,   0,   0,   3,   0,
+      1,   0,   1,   0,   0,   0,
+    100,   0,   0,   0,   0,   0,
+      0,   0, 105, 109,  97, 103,
+    101,   0, 171, 171,   4,   0,
+     12,   0,   1,   0,   1,   0,
+      1,   0,   0,   0,   0,   0,
+      0,   0, 112,  97, 108, 101,
+    116, 116, 101,   0,   4,   0,
+     11,   0,   1,   0,   1,   0,
+      1,   0,   0,   0,   0,   0,
+      0,   0, 112, 115,  95,  50,
+     95,  48,   0,  77, 105,  99,
+    114, 111, 115, 111, 102, 116,
+     32,  40,  82,  41,  32,  72,
+     76,  83,  76,  32,  83, 104,
+     97, 100, 101, 114,  32,  67,
+    111, 109, 112, 105, 108, 101,
+    114,  32,  49,  48,  46,  49,
+      0, 171,  81,   0,   0,   5,
+      0,   0,  15, 160,   0,   0,
+    127,  67,   0,   0,   0,  63,
+      0,   0, 128,  59,   0,   0,
+      0,   0,  31,   0,   0,   2,
+      0,   0,   0, 128,   0,   0,
+      3, 176,  31,   0,   0,   2,
+      0,   0,   0, 128,   0,   0,
+     15, 144,  31,   0,   0,   2,
+      0,   0,   0, 144,   0,   8,
+     15, 160,  31,   0,   0,   2,
+      0,   0,   0, 144,   1,   8,
+     15, 160,  66,   0,   0,   3,
+      0,   0,  15, 128,   0,   0,
+    228, 176,   0,   8, 228, 160,
+      4,   0,   0,   4,   0,   0,
+      1, 128,   0,   0,   0, 128,
+      0,   0,   0, 160,   0,   0,
+     85, 160,   5,   0,   0,   3,
+      0,   0,   3, 128,   0,   0,
+      0, 128,   0,   0, 170, 160,
+     66,   0,   0,   3,   0,   0,
+     15, 128,   0,   0, 228, 128,
+      1,   8, 228, 160,   5,   0,
+      0,   3,   0,   0,  15, 128,
+      0,   0, 228, 128,   0,   0,
+    228, 144,   1,   0,   0,   2,
+      0,   8,  15, 128,   0,   0,
+    228, 128, 255, 255,   0,   0
+};

+ 7 - 0
src/render/direct3d/D3D9_PixelShader_Palette_Nearest.hlsl

@@ -0,0 +1,7 @@
+
+#include "D3D9_PixelShader_Palette.hlsli"
+
+float4 main(PixelShaderInput input) : SV_TARGET
+{
+    return SamplePaletteNearest(input.tex) * input.color;
+}

+ 23 - 11
src/render/direct3d/SDL_render_d3d.c

@@ -86,9 +86,7 @@ typedef struct
     IDirect3DSurface9 *defaultRenderTarget;
     IDirect3DSurface9 *defaultRenderTarget;
     IDirect3DSurface9 *currentRenderTarget;
     IDirect3DSurface9 *currentRenderTarget;
     void *d3dxDLL;
     void *d3dxDLL;
-#ifdef SDL_HAVE_YUV
     LPDIRECT3DPIXELSHADER9 shaders[NUM_SHADERS];
     LPDIRECT3DPIXELSHADER9 shaders[NUM_SHADERS];
-#endif
     LPDIRECT3DVERTEXBUFFER9 vertexBuffers[8];
     LPDIRECT3DVERTEXBUFFER9 vertexBuffers[8];
     size_t vertexBufferSize[8];
     size_t vertexBufferSize[8];
     int currentVertexBuffer;
     int currentVertexBuffer;
@@ -100,8 +98,9 @@ typedef struct
 typedef struct
 typedef struct
 {
 {
     D3D_TextureRep texture;
     D3D_TextureRep texture;
-    D3D9_Shader shader;
+    UINT shader_params_length;
     const float *shader_params;
     const float *shader_params;
+    float palette_shader_params[4];
 
 
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     // YV12 texture support
     // YV12 texture support
@@ -657,7 +656,12 @@ static bool D3D_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
         return false;
         return false;
     }
     }
     if (texture->format == SDL_PIXELFORMAT_INDEX8) {
     if (texture->format == SDL_PIXELFORMAT_INDEX8) {
-        texturedata->shader = SHADER_PALETTE;
+        texturedata->shader_params_length = 1; // The palette shader takes 1 float4 parameters
+        texturedata->shader_params = texturedata->palette_shader_params;
+        texturedata->palette_shader_params[0] = 1.0f / texture->w;
+        texturedata->palette_shader_params[1] = 1.0f / texture->h;
+        texturedata->palette_shader_params[2] = texture->w;
+        texturedata->palette_shader_params[3] = texture->h;
     }
     }
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     if (texture->format == SDL_PIXELFORMAT_YV12 ||
     if (texture->format == SDL_PIXELFORMAT_YV12 ||
@@ -672,7 +676,7 @@ static bool D3D_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_
             return false;
             return false;
         }
         }
 
 
-        texturedata->shader = SHADER_YUV;
+        texturedata->shader_params_length = 4; // The YUV shader takes 4 float4 parameters
         texturedata->shader_params = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8);
         texturedata->shader_params = SDL_GetYCbCRtoRGBConversionMatrix(texture->colorspace, texture->w, texture->h, 8);
         if (texturedata->shader_params == NULL) {
         if (texturedata->shader_params == NULL) {
             return SDL_SetError("Unsupported YUV colorspace");
             return SDL_SetError("Unsupported YUV colorspace");
@@ -1041,7 +1045,7 @@ static void UpdateTextureAddressMode(D3D_RenderData *data, SDL_TextureAddressMod
     }
     }
 }
 }
 
 
-static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, D3D9_Shader *shader, const float **shader_params)
+static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, SDL_ScaleMode scale_mode, D3D9_Shader *shader, const float **shader_params)
 {
 {
     D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal;
     D3D_TextureData *texturedata = (D3D_TextureData *)texture->internal;
 
 
@@ -1049,7 +1053,15 @@ static bool SetupTextureState(D3D_RenderData *data, SDL_Texture *texture, D3D9_S
         return SDL_SetError("Texture is not currently available");
         return SDL_SetError("Texture is not currently available");
     }
     }
 
 
-    *shader = texturedata->shader;
+    if (texture->format == SDL_PIXELFORMAT_INDEX8) {
+        if (scale_mode == SDL_SCALEMODE_LINEAR) {
+            *shader = SHADER_PALETTE_LINEAR;
+        } else {
+            *shader = SHADER_PALETTE_NEAREST;
+        }
+    } else if (texturedata->yuv) {
+        *shader = SHADER_YUV;
+    }
     *shader_params = texturedata->shader_params;
     *shader_params = texturedata->shader_params;
 
 
     if (!BindTextureRep(data->device, &texturedata->texture, 0)) {
     if (!BindTextureRep(data->device, &texturedata->texture, 0)) {
@@ -1099,11 +1111,10 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
             IDirect3DDevice9_SetTexture(data->device, 2, NULL);
             IDirect3DDevice9_SetTexture(data->device, 2, NULL);
         }
         }
 #endif
 #endif
-        if (texture && !SetupTextureState(data, texture, &shader, &shader_params)) {
+        if (texture && !SetupTextureState(data, texture, cmd->data.draw.texture_scale_mode, &shader, &shader_params)) {
             return false;
             return false;
         }
         }
 
 
-#ifdef SDL_HAVE_YUV
         if (shader != data->drawstate.shader) {
         if (shader != data->drawstate.shader) {
             const HRESULT result = IDirect3DDevice9_SetPixelShader(data->device, data->shaders[shader]);
             const HRESULT result = IDirect3DDevice9_SetPixelShader(data->device, data->shaders[shader]);
             if (FAILED(result)) {
             if (FAILED(result)) {
@@ -1122,7 +1133,6 @@ static bool SetDrawState(D3D_RenderData *data, const SDL_RenderCommand *cmd)
             }
             }
             data->drawstate.shader_params = shader_params;
             data->drawstate.shader_params = shader_params;
         }
         }
-#endif // SDL_HAVE_YUV
 
 
         data->drawstate.texture = texture;
         data->drawstate.texture = texture;
     } else if (texture) {
     } else if (texture) {
@@ -1877,7 +1887,9 @@ static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P
             D3D_SetError("CreatePixelShader()", result);
             D3D_SetError("CreatePixelShader()", result);
         }
         }
     }
     }
-    if (caps.MaxSimultaneousTextures >= 2 && data->shaders[SHADER_PALETTE]) {
+    if (caps.MaxSimultaneousTextures >= 2 &&
+        data->shaders[SHADER_PALETTE_NEAREST] &&
+        data->shaders[SHADER_PALETTE_LINEAR]) {
         SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
         SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_INDEX8);
     }
     }
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV

+ 8 - 3
src/render/direct3d/SDL_shaders_d3d.c

@@ -30,8 +30,12 @@
 
 
 // The shaders here were compiled with compile_shaders.bat
 // The shaders here were compiled with compile_shaders.bat
 
 
-#define g_ps20_main D3D9_PixelShader_Palette
-#include "D3D9_PixelShader_Palette.h"
+#define g_ps20_main D3D9_PixelShader_Palette_Nearest
+#include "D3D9_PixelShader_Palette_Nearest.h"
+#undef g_ps20_main
+
+#define g_ps20_main D3D9_PixelShader_Palette_Linear
+#include "D3D9_PixelShader_Palette_Linear.h"
 #undef g_ps20_main
 #undef g_ps20_main
 
 
 #define g_ps20_main D3D9_PixelShader_YUV
 #define g_ps20_main D3D9_PixelShader_YUV
@@ -40,7 +44,8 @@
 
 
 static const BYTE *D3D9_shaders[] = {
 static const BYTE *D3D9_shaders[] = {
     NULL,
     NULL,
-    D3D9_PixelShader_Palette,
+    D3D9_PixelShader_Palette_Nearest,
+    D3D9_PixelShader_Palette_Linear,
     D3D9_PixelShader_YUV
     D3D9_PixelShader_YUV
 };
 };
 SDL_COMPILE_TIME_ASSERT(D3D9_shaders, SDL_arraysize(D3D9_shaders) == NUM_SHADERS);
 SDL_COMPILE_TIME_ASSERT(D3D9_shaders, SDL_arraysize(D3D9_shaders) == NUM_SHADERS);

+ 2 - 1
src/render/direct3d/SDL_shaders_d3d.h

@@ -25,7 +25,8 @@
 typedef enum
 typedef enum
 {
 {
     SHADER_NONE,
     SHADER_NONE,
-    SHADER_PALETTE,
+    SHADER_PALETTE_NEAREST,
+    SHADER_PALETTE_LINEAR,
     SHADER_YUV,
     SHADER_YUV,
     NUM_SHADERS
     NUM_SHADERS
 } D3D9_Shader;
 } D3D9_Shader;

+ 2 - 1
src/render/direct3d/compile_shaders.bat

@@ -1,2 +1,3 @@
-fxc /T ps_2_0 /Fh D3D9_PixelShader_Palette.h D3D9_PixelShader_Palette.hlsl
+fxc /T ps_2_0 /Fh D3D9_PixelShader_Palette_Nearest.h D3D9_PixelShader_Palette_Nearest.hlsl
+fxc /T ps_2_0 /Fh D3D9_PixelShader_Palette_Linear.h D3D9_PixelShader_Palette_Linear.hlsl
 fxc /T ps_2_0 /Fh D3D9_PixelShader_YUV.h D3D9_PixelShader_YUV.hlsl
 fxc /T ps_2_0 /Fh D3D9_PixelShader_YUV.h D3D9_PixelShader_YUV.hlsl

+ 685 - 119
src/render/direct3d11/D3D11_PixelShader_Advanced.h

@@ -64,7 +64,7 @@ dcl_resource_texture2d (float,float,float,float) t2
 dcl_input_ps linear v1.xy
 dcl_input_ps linear v1.xy
 dcl_input_ps linear v2.xyzw
 dcl_input_ps linear v2.xyzw
 dcl_output o0.xyzw
 dcl_output o0.xyzw
-dcl_temps 7
+dcl_temps 8
 eq r0.xyzw, cb0[0].yzzz, l(0.000000, 3.000000, 2.000000, 1.000000)
 eq r0.xyzw, cb0[0].yzzz, l(0.000000, 3.000000, 2.000000, 1.000000)
 if_nz r0.x
 if_nz r0.x
   mov r1.xyzw, l(1.000000,1.000000,1.000000,1.000000)
   mov r1.xyzw, l(1.000000,1.000000,1.000000,1.000000)
@@ -107,37 +107,123 @@ else
       else
       else
         eq r0.x, cb0[0].y, l(4.000000)
         eq r0.x, cb0[0].y, l(4.000000)
         if_nz r0.x
         if_nz r0.x
-          sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
-          sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zxyw, s0
-          add r2.xyz, r2.xyzx, cb0[3].xyzx
-          dp3 r1.x, r2.xyzx, cb0[4].xyzx
-          dp3 r1.y, r2.xyzx, cb0[5].xyzx
-          dp3 r1.z, r2.xyzx, cb0[6].xyzx
+          mad r2.xy, v1.xyxx, cb0[1].zwzz, l(0.500000, 0.500000, 0.000000, 0.000000)
+          round_ni r3.xyzw, r2.xyxy
+          add r3.xyzw, r3.xyzw, l(-0.500000, -0.500000, 0.500000, 0.500000)
+          mul r3.xyzw, r3.xyzw, cb0[1].xyxy
+          frc r2.xy, r2.xyxx
+          sample_indexable(texture2d)(float,float,float,float) r0.x, r3.xyxx, t0.xyzw, s0
+          mad r0.x, r0.x, l(255.000000), l(0.500000)
+          mul r4.x, r0.x, l(0.003906)
+          mov r4.yw, l(0,0.500000,0,0.500000)
+          sample_indexable(texture2d)(float,float,float,float) r5.xyzw, r4.xyxx, t1.xyzw, s1
+          sample_indexable(texture2d)(float,float,float,float) r0.x, r3.xwxx, t0.xyzw, s0
+          mad r0.x, r0.x, l(255.000000), l(0.500000)
+          mul r4.z, r0.x, l(0.003906)
+          sample_indexable(texture2d)(float,float,float,float) r4.xyzw, r4.zwzz, t1.xyzw, s1
+          sample_indexable(texture2d)(float,float,float,float) r0.x, r3.zyzz, t0.xyzw, s0
+          mad r0.x, r0.x, l(255.000000), l(0.500000)
+          mul r6.x, r0.x, l(0.003906)
+          mov r6.yw, l(0,0.500000,0,0.500000)
+          sample_indexable(texture2d)(float,float,float,float) r7.xyzw, r6.xyxx, t1.xyzw, s1
+          sample_indexable(texture2d)(float,float,float,float) r0.x, r3.zwzz, t0.xyzw, s0
+          mad r0.x, r0.x, l(255.000000), l(0.500000)
+          mul r6.z, r0.x, l(0.003906)
+          sample_indexable(texture2d)(float,float,float,float) r3.xyzw, r6.zwzz, t1.xyzw, s1
+          add r4.xyzw, -r5.xyzw, r4.xyzw
+          mad r4.xyzw, r2.yyyy, r4.xyzw, r5.xyzw
+          add r3.xyzw, -r7.xyzw, r3.xyzw
+          mad r3.xyzw, r2.yyyy, r3.xyzw, r7.xyzw
+          add r3.xyzw, -r4.xyzw, r3.xyzw
+          mad r1.xyzw, r2.xxxx, r3.xyzw, r4.xyzw
         else
         else
           eq r0.x, cb0[0].y, l(5.000000)
           eq r0.x, cb0[0].y, l(5.000000)
           if_nz r0.x
           if_nz r0.x
-            sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
-            sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zyxw, s0
-            add r2.xyz, r2.xyzx, cb0[3].xyzx
-            dp3 r1.x, r2.xyzx, cb0[4].xyzx
-            dp3 r1.y, r2.xyzx, cb0[5].xyzx
-            dp3 r1.z, r2.xyzx, cb0[6].xyzx
+            deriv_rtx_coarse r2.xy, v1.xyxx
+            deriv_rty_coarse r2.zw, v1.xxxy
+            add r2.xy, |r2.zwzz|, |r2.xyxx|
+            mul r2.xy, r2.xyxx, cb0[1].zwzz
+            max r2.xy, r2.xyxx, l(0.000010, 0.000010, 0.000000, 0.000000)
+            min r2.xy, r2.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
+            mul r2.zw, r2.xxxy, l(0.000000, 0.000000, 0.500000, 0.500000)
+            mad r2.zw, v1.xxxy, cb0[1].zzzw, -r2.zzzw
+            add r2.xy, -r2.xyxx, l(1.000000, 1.000000, 0.000000, 0.000000)
+            frc r3.xy, r2.zwzz
+            add r3.zw, -r2.xxxy, l(0.000000, 0.000000, 1.000000, 1.000000)
+            add r2.xy, -r2.xyxx, r3.xyxx
+            div r3.xy, l(1.000000, 1.000000, 1.000000, 1.000000), r3.zwzz
+            mul_sat r2.xy, r2.xyxx, r3.xyxx
+            mad r3.xy, r2.xyxx, l(-2.000000, -2.000000, 0.000000, 0.000000), l(3.000000, 3.000000, 0.000000, 0.000000)
+            mul r2.xy, r2.xyxx, r2.xyxx
+            round_ni r2.zw, r2.zzzw
+            mad r2.xy, r3.xyxx, r2.xyxx, r2.zwzz
+            add r2.xy, r2.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000)
+            mul r2.xy, r2.xyxx, cb0[1].xyxx
+            mad r2.xy, r2.xyxx, cb0[1].zwzz, l(0.500000, 0.500000, 0.000000, 0.000000)
+            round_ni r3.xyzw, r2.xyxy
+            add r3.xyzw, r3.xyzw, l(-0.500000, -0.500000, 0.500000, 0.500000)
+            mul r3.xyzw, r3.xyzw, cb0[1].xyxy
+            frc r2.xy, r2.xyxx
+            sample_indexable(texture2d)(float,float,float,float) r0.x, r3.xyxx, t0.xyzw, s0
+            mad r0.x, r0.x, l(255.000000), l(0.500000)
+            mul r4.x, r0.x, l(0.003906)
+            mov r4.yw, l(0,0.500000,0,0.500000)
+            sample_indexable(texture2d)(float,float,float,float) r5.xyzw, r4.xyxx, t1.xyzw, s1
+            sample_indexable(texture2d)(float,float,float,float) r0.x, r3.xwxx, t0.xyzw, s0
+            mad r0.x, r0.x, l(255.000000), l(0.500000)
+            mul r4.z, r0.x, l(0.003906)
+            sample_indexable(texture2d)(float,float,float,float) r4.xyzw, r4.zwzz, t1.xyzw, s1
+            sample_indexable(texture2d)(float,float,float,float) r0.x, r3.zyzz, t0.xyzw, s0
+            mad r0.x, r0.x, l(255.000000), l(0.500000)
+            mul r6.x, r0.x, l(0.003906)
+            mov r6.yw, l(0,0.500000,0,0.500000)
+            sample_indexable(texture2d)(float,float,float,float) r7.xyzw, r6.xyxx, t1.xyzw, s1
+            sample_indexable(texture2d)(float,float,float,float) r0.x, r3.zwzz, t0.xyzw, s0
+            mad r0.x, r0.x, l(255.000000), l(0.500000)
+            mul r6.z, r0.x, l(0.003906)
+            sample_indexable(texture2d)(float,float,float,float) r3.xyzw, r6.zwzz, t1.xyzw, s1
+            add r4.xyzw, -r5.xyzw, r4.xyzw
+            mad r4.xyzw, r2.yyyy, r4.xyzw, r5.xyzw
+            add r3.xyzw, -r7.xyzw, r3.xyzw
+            mad r3.xyzw, r2.yyyy, r3.xyzw, r7.xyzw
+            add r3.xyzw, -r4.xyzw, r3.xyzw
+            mad r1.xyzw, r2.xxxx, r3.xyzw, r4.xyzw
           else
           else
             eq r0.x, cb0[0].y, l(6.000000)
             eq r0.x, cb0[0].y, l(6.000000)
             if_nz r0.x
             if_nz r0.x
               sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
               sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
-              sample_indexable(texture2d)(float,float,float,float) r2.y, v1.xyxx, t1.yxzw, s0
-              sample_indexable(texture2d)(float,float,float,float) r2.z, v1.xyxx, t2.yzxw, s0
+              sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zxyw, s0
               add r2.xyz, r2.xyzx, cb0[3].xyzx
               add r2.xyz, r2.xyzx, cb0[3].xyzx
               dp3 r1.x, r2.xyzx, cb0[4].xyzx
               dp3 r1.x, r2.xyzx, cb0[4].xyzx
               dp3 r1.y, r2.xyzx, cb0[5].xyzx
               dp3 r1.y, r2.xyzx, cb0[5].xyzx
               dp3 r1.z, r2.xyzx, cb0[6].xyzx
               dp3 r1.z, r2.xyzx, cb0[6].xyzx
             else
             else
-              mov r1.xyz, l(1.000000,0,0,0)
+              eq r0.x, cb0[0].y, l(7.000000)
+              if_nz r0.x
+                sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
+                sample_indexable(texture2d)(float,float,float,float) r2.yz, v1.xyxx, t1.zyxw, s0
+                add r2.xyz, r2.xyzx, cb0[3].xyzx
+                dp3 r1.x, r2.xyzx, cb0[4].xyzx
+                dp3 r1.y, r2.xyzx, cb0[5].xyzx
+                dp3 r1.z, r2.xyzx, cb0[6].xyzx
+              else
+                eq r0.x, cb0[0].y, l(8.000000)
+                if_nz r0.x
+                  sample_indexable(texture2d)(float,float,float,float) r2.x, v1.xyxx, t0.xyzw, s0
+                  sample_indexable(texture2d)(float,float,float,float) r2.y, v1.xyxx, t1.yxzw, s0
+                  sample_indexable(texture2d)(float,float,float,float) r2.z, v1.xyxx, t2.yzxw, s0
+                  add r2.xyz, r2.xyzx, cb0[3].xyzx
+                  dp3 r1.x, r2.xyzx, cb0[4].xyzx
+                  dp3 r1.y, r2.xyzx, cb0[5].xyzx
+                  dp3 r1.z, r2.xyzx, cb0[6].xyzx
+                else
+                  mov r1.xyz, l(1.000000,0,1.000000,0)
+                endif
+              endif
             endif
             endif
+            mov r1.w, l(1.000000)
           endif
           endif
         endif
         endif
-        mov r1.w, l(1.000000)
       endif
       endif
     endif
     endif
   endif
   endif
@@ -225,20 +311,20 @@ else
 endif
 endif
 mul o0.xyzw, r1.xyzw, v2.xyzw
 mul o0.xyzw, r1.xyzw, v2.xyzw
 ret
 ret
-// Approximately 160 instruction slots used
+// Approximately 246 instruction slots used
 #endif
 #endif
 
 
 const BYTE g_main[] =
 const BYTE g_main[] =
 {
 {
-     68,  88,  66,  67, 189, 249,
-      3, 160, 168,  14, 177, 240,
-    224, 229,  45, 241, 216, 176,
-    187, 190,   1,   0,   0,   0,
-    172,  24,   0,   0,   5,   0,
+     68,  88,  66,  67, 218,  34,
+     85,  97,  34,  23, 186, 108,
+    107,  10,  84,  63, 204, 132,
+     47, 109,   1,   0,   0,   0,
+    236,  35,   0,   0,   5,   0,
       0,   0,  52,   0,   0,   0,
       0,   0,  52,   0,   0,   0,
     168,   4,   0,   0,  28,   5,
     168,   4,   0,   0,  28,   5,
       0,   0,  80,   5,   0,   0,
       0,   0,  80,   5,   0,   0,
-     16,  24,   0,   0,  82,  68,
+     80,  35,   0,   0,  82,  68,
      69,  70, 108,   4,   0,   0,
      69,  70, 108,   4,   0,   0,
       1,   0,   0,   0,  52,   1,
       1,   0,   0,   0,  52,   1,
       0,   0,   6,   0,   0,   0,
       0,   0,   6,   0,   0,   0,
@@ -457,8 +543,8 @@ const BYTE g_main[] =
      15,   0,   0,   0,  83,  86,
      15,   0,   0,   0,  83,  86,
      95,  84,  65,  82,  71,  69,
      95,  84,  65,  82,  71,  69,
      84,   0, 171, 171,  83,  72,
      84,   0, 171, 171,  83,  72,
-     69,  88, 184,  18,   0,   0,
-     80,   0,   0,   0, 174,   4,
+     69,  88, 248,  29,   0,   0,
+     80,   0,   0,   0, 126,   7,
       0,   0, 106,   8,   0,   1,
       0,   0, 106,   8,   0,   1,
      89,   0,   0,   4,  70, 142,
      89,   0,   0,   4,  70, 142,
      32,   0,   0,   0,   0,   0,
      32,   0,   0,   0,   0,   0,
@@ -481,7 +567,7 @@ const BYTE g_main[] =
       2,   0,   0,   0, 101,   0,
       2,   0,   0,   0, 101,   0,
       0,   3, 242,  32,  16,   0,
       0,   3, 242,  32,  16,   0,
       0,   0,   0,   0, 104,   0,
       0,   0,   0,   0, 104,   0,
-      0,   2,   7,   0,   0,   0,
+      0,   2,   8,   0,   0,   0,
      24,   0,   0,  11, 242,   0,
      24,   0,   0,  11, 242,   0,
      16,   0,   0,   0,   0,   0,
      16,   0,   0,   0,   0,   0,
     150, 138,  32,   0,   0,   0,
     150, 138,  32,   0,   0,   0,
@@ -690,64 +776,594 @@ const BYTE g_main[] =
       0,   0,   1,  64,   0,   0,
       0,   0,   1,  64,   0,   0,
       0,   0, 128,  64,  31,   0,
       0,   0, 128,  64,  31,   0,
       4,   3,  10,   0,  16,   0,
       4,   3,  10,   0,  16,   0,
-      0,   0,   0,   0,  69,   0,
+      0,   0,   0,   0,  50,   0,
+      0,  13,  50,   0,  16,   0,
+      2,   0,   0,   0,  70,  16,
+     16,   0,   1,   0,   0,   0,
+    230, 138,  32,   0,   0,   0,
+      0,   0,   1,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+      0,  63,   0,   0,   0,  63,
+      0,   0,   0,   0,   0,   0,
+      0,   0,  65,   0,   0,   5,
+    242,   0,  16,   0,   3,   0,
+      0,   0,  70,   4,  16,   0,
+      2,   0,   0,   0,   0,   0,
+      0,  10, 242,   0,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16,   0,   3,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+      0, 191,   0,   0,   0, 191,
+      0,   0,   0,  63,   0,   0,
+      0,  63,  56,   0,   0,   8,
+    242,   0,  16,   0,   3,   0,
+      0,   0,  70,  14,  16,   0,
+      3,   0,   0,   0,  70, 132,
+     32,   0,   0,   0,   0,   0,
+      1,   0,   0,   0,  26,   0,
+      0,   5,  50,   0,  16,   0,
+      2,   0,   0,   0,  70,   0,
+     16,   0,   2,   0,   0,   0,
+     69,   0,   0, 139, 194,   0,
+      0, 128,  67,  85,  21,   0,
+     18,   0,  16,   0,   0,   0,
+      0,   0,  70,   0,  16,   0,
+      3,   0,   0,   0,  70, 126,
+     16,   0,   0,   0,   0,   0,
+      0,  96,  16,   0,   0,   0,
+      0,   0,  50,   0,   0,   9,
+     18,   0,  16,   0,   0,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 127,  67,
+      1,  64,   0,   0,   0,   0,
+      0,  63,  56,   0,   0,   7,
+     18,   0,  16,   0,   4,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 128,  59,
+     54,   0,   0,   8, 162,   0,
+     16,   0,   4,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+      0,   0,   0,   0,   0,  63,
+      0,   0,   0,   0,   0,   0,
+      0,  63,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0, 242,   0,  16,   0,
+      5,   0,   0,   0,  70,   0,
+     16,   0,   4,   0,   0,   0,
+     70, 126,  16,   0,   1,   0,
+      0,   0,   0,  96,  16,   0,
+      1,   0,   0,   0,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0,  18,   0,
+     16,   0,   0,   0,   0,   0,
+    198,   0,  16,   0,   3,   0,
+      0,   0,  70, 126,  16,   0,
+      0,   0,   0,   0,   0,  96,
+     16,   0,   0,   0,   0,   0,
+     50,   0,   0,   9,  18,   0,
+     16,   0,   0,   0,   0,   0,
+     10,   0,  16,   0,   0,   0,
+      0,   0,   1,  64,   0,   0,
+      0,   0, 127,  67,   1,  64,
+      0,   0,   0,   0,   0,  63,
+     56,   0,   0,   7,  66,   0,
+     16,   0,   4,   0,   0,   0,
+     10,   0,  16,   0,   0,   0,
+      0,   0,   1,  64,   0,   0,
+      0,   0, 128,  59,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0, 242,   0,
+     16,   0,   4,   0,   0,   0,
+    230,  10,  16,   0,   4,   0,
+      0,   0,  70, 126,  16,   0,
+      1,   0,   0,   0,   0,  96,
+     16,   0,   1,   0,   0,   0,
+     69,   0,   0, 139, 194,   0,
+      0, 128,  67,  85,  21,   0,
+     18,   0,  16,   0,   0,   0,
+      0,   0, 102,  10,  16,   0,
+      3,   0,   0,   0,  70, 126,
+     16,   0,   0,   0,   0,   0,
+      0,  96,  16,   0,   0,   0,
+      0,   0,  50,   0,   0,   9,
+     18,   0,  16,   0,   0,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 127,  67,
+      1,  64,   0,   0,   0,   0,
+      0,  63,  56,   0,   0,   7,
+     18,   0,  16,   0,   6,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 128,  59,
+     54,   0,   0,   8, 162,   0,
+     16,   0,   6,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+      0,   0,   0,   0,   0,  63,
+      0,   0,   0,   0,   0,   0,
+      0,  63,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0, 242,   0,  16,   0,
+      7,   0,   0,   0,  70,   0,
+     16,   0,   6,   0,   0,   0,
+     70, 126,  16,   0,   1,   0,
+      0,   0,   0,  96,  16,   0,
+      1,   0,   0,   0,  69,   0,
       0, 139, 194,   0,   0, 128,
       0, 139, 194,   0,   0, 128,
      67,  85,  21,   0,  18,   0,
      67,  85,  21,   0,  18,   0,
+     16,   0,   0,   0,   0,   0,
+    230,  10,  16,   0,   3,   0,
+      0,   0,  70, 126,  16,   0,
+      0,   0,   0,   0,   0,  96,
+     16,   0,   0,   0,   0,   0,
+     50,   0,   0,   9,  18,   0,
+     16,   0,   0,   0,   0,   0,
+     10,   0,  16,   0,   0,   0,
+      0,   0,   1,  64,   0,   0,
+      0,   0, 127,  67,   1,  64,
+      0,   0,   0,   0,   0,  63,
+     56,   0,   0,   7,  66,   0,
+     16,   0,   6,   0,   0,   0,
+     10,   0,  16,   0,   0,   0,
+      0,   0,   1,  64,   0,   0,
+      0,   0, 128,  59,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0, 242,   0,
+     16,   0,   3,   0,   0,   0,
+    230,  10,  16,   0,   6,   0,
+      0,   0,  70, 126,  16,   0,
+      1,   0,   0,   0,   0,  96,
+     16,   0,   1,   0,   0,   0,
+      0,   0,   0,   8, 242,   0,
+     16,   0,   4,   0,   0,   0,
+     70,  14,  16, 128,  65,   0,
+      0,   0,   5,   0,   0,   0,
+     70,  14,  16,   0,   4,   0,
+      0,   0,  50,   0,   0,   9,
+    242,   0,  16,   0,   4,   0,
+      0,   0,  86,   5,  16,   0,
+      2,   0,   0,   0,  70,  14,
+     16,   0,   4,   0,   0,   0,
+     70,  14,  16,   0,   5,   0,
+      0,   0,   0,   0,   0,   8,
+    242,   0,  16,   0,   3,   0,
+      0,   0,  70,  14,  16, 128,
+     65,   0,   0,   0,   7,   0,
+      0,   0,  70,  14,  16,   0,
+      3,   0,   0,   0,  50,   0,
+      0,   9, 242,   0,  16,   0,
+      3,   0,   0,   0,  86,   5,
+     16,   0,   2,   0,   0,   0,
+     70,  14,  16,   0,   3,   0,
+      0,   0,  70,  14,  16,   0,
+      7,   0,   0,   0,   0,   0,
+      0,   8, 242,   0,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16, 128,  65,   0,   0,   0,
+      4,   0,   0,   0,  70,  14,
+     16,   0,   3,   0,   0,   0,
+     50,   0,   0,   9, 242,   0,
+     16,   0,   1,   0,   0,   0,
+      6,   0,  16,   0,   2,   0,
+      0,   0,  70,  14,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16,   0,   4,   0,   0,   0,
+     18,   0,   0,   1,  24,   0,
+      0,   8,  18,   0,  16,   0,
+      0,   0,   0,   0,  26, 128,
+     32,   0,   0,   0,   0,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 160,  64,
+     31,   0,   4,   3,  10,   0,
+     16,   0,   0,   0,   0,   0,
+    122,   0,   0,   5,  50,   0,
      16,   0,   2,   0,   0,   0,
      16,   0,   2,   0,   0,   0,
      70,  16,  16,   0,   1,   0,
      70,  16,  16,   0,   1,   0,
+      0,   0, 124,   0,   0,   5,
+    194,   0,  16,   0,   2,   0,
+      0,   0,   6,  20,  16,   0,
+      1,   0,   0,   0,   0,   0,
+      0,   9,  50,   0,  16,   0,
+      2,   0,   0,   0, 230,  10,
+     16, 128, 129,   0,   0,   0,
+      2,   0,   0,   0,  70,   0,
+     16, 128, 129,   0,   0,   0,
+      2,   0,   0,   0,  56,   0,
+      0,   8,  50,   0,  16,   0,
+      2,   0,   0,   0,  70,   0,
+     16,   0,   2,   0,   0,   0,
+    230, 138,  32,   0,   0,   0,
+      0,   0,   1,   0,   0,   0,
+     52,   0,   0,  10,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0,   2,  64,   0,   0,
+    172, 197,  39,  55, 172, 197,
+     39,  55,   0,   0,   0,   0,
+      0,   0,   0,   0,  51,   0,
+      0,  10,  50,   0,  16,   0,
+      2,   0,   0,   0,  70,   0,
+     16,   0,   2,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+    128,  63,   0,   0, 128,  63,
+      0,   0,   0,   0,   0,   0,
+      0,   0,  56,   0,   0,  10,
+    194,   0,  16,   0,   2,   0,
+      0,   0,   6,   4,  16,   0,
+      2,   0,   0,   0,   2,  64,
+      0,   0,   0,   0,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      0,  63,   0,   0,   0,  63,
+     50,   0,   0,  11, 194,   0,
+     16,   0,   2,   0,   0,   0,
+      6,  20,  16,   0,   1,   0,
+      0,   0, 166, 142,  32,   0,
+      0,   0,   0,   0,   1,   0,
+      0,   0, 166,  14,  16, 128,
+     65,   0,   0,   0,   2,   0,
+      0,   0,   0,   0,   0,  11,
+     50,   0,  16,   0,   2,   0,
+      0,   0,  70,   0,  16, 128,
+     65,   0,   0,   0,   2,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0, 128,  63,   0,   0,
+    128,  63,   0,   0,   0,   0,
+      0,   0,   0,   0,  26,   0,
+      0,   5,  50,   0,  16,   0,
+      3,   0,   0,   0, 230,  10,
+     16,   0,   2,   0,   0,   0,
+      0,   0,   0,  11, 194,   0,
+     16,   0,   3,   0,   0,   0,
+      6,   4,  16, 128,  65,   0,
+      0,   0,   2,   0,   0,   0,
+      2,  64,   0,   0,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      0,   0, 128,  63,   0,   0,
+    128,  63,   0,   0,   0,   8,
+     50,   0,  16,   0,   2,   0,
+      0,   0,  70,   0,  16, 128,
+     65,   0,   0,   0,   2,   0,
+      0,   0,  70,   0,  16,   0,
+      3,   0,   0,   0,  14,   0,
+      0,  10,  50,   0,  16,   0,
+      3,   0,   0,   0,   2,  64,
+      0,   0,   0,   0, 128,  63,
+      0,   0, 128,  63,   0,   0,
+    128,  63,   0,   0, 128,  63,
+    230,  10,  16,   0,   3,   0,
+      0,   0,  56,  32,   0,   7,
+     50,   0,  16,   0,   2,   0,
+      0,   0,  70,   0,  16,   0,
+      2,   0,   0,   0,  70,   0,
+     16,   0,   3,   0,   0,   0,
+     50,   0,   0,  15,  50,   0,
+     16,   0,   3,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0, 192,   0,   0,
+      0, 192,   0,   0,   0,   0,
+      0,   0,   0,   0,   2,  64,
+      0,   0,   0,   0,  64,  64,
+      0,   0,  64,  64,   0,   0,
+      0,   0,   0,   0,   0,   0,
+     56,   0,   0,   7,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0,  70,   0,  16,   0,
+      2,   0,   0,   0,  65,   0,
+      0,   5, 194,   0,  16,   0,
+      2,   0,   0,   0, 166,  14,
+     16,   0,   2,   0,   0,   0,
+     50,   0,   0,   9,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   3,   0,
+      0,   0,  70,   0,  16,   0,
+      2,   0,   0,   0, 230,  10,
+     16,   0,   2,   0,   0,   0,
+      0,   0,   0,  10,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0,  63,   0,   0,
+      0,  63,   0,   0,   0,   0,
+      0,   0,   0,   0,  56,   0,
+      0,   8,  50,   0,  16,   0,
+      2,   0,   0,   0,  70,   0,
+     16,   0,   2,   0,   0,   0,
+     70, 128,  32,   0,   0,   0,
+      0,   0,   1,   0,   0,   0,
+     50,   0,   0,  13,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0, 230, 138,  32,   0,
+      0,   0,   0,   0,   1,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0,  63,   0,   0,
+      0,  63,   0,   0,   0,   0,
+      0,   0,   0,   0,  65,   0,
+      0,   5, 242,   0,  16,   0,
+      3,   0,   0,   0,  70,   4,
+     16,   0,   2,   0,   0,   0,
+      0,   0,   0,  10, 242,   0,
+     16,   0,   3,   0,   0,   0,
+     70,  14,  16,   0,   3,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0, 191,   0,   0,
+      0, 191,   0,   0,   0,  63,
+      0,   0,   0,  63,  56,   0,
+      0,   8, 242,   0,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16,   0,   3,   0,   0,   0,
+     70, 132,  32,   0,   0,   0,
+      0,   0,   1,   0,   0,   0,
+     26,   0,   0,   5,  50,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   0,  16,   0,   2,   0,
+      0,   0,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0,  18,   0,  16,   0,
+      0,   0,   0,   0,  70,   0,
+     16,   0,   3,   0,   0,   0,
+     70, 126,  16,   0,   0,   0,
+      0,   0,   0,  96,  16,   0,
+      0,   0,   0,   0,  50,   0,
+      0,   9,  18,   0,  16,   0,
+      0,   0,   0,   0,  10,   0,
+     16,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    127,  67,   1,  64,   0,   0,
+      0,   0,   0,  63,  56,   0,
+      0,   7,  18,   0,  16,   0,
+      4,   0,   0,   0,  10,   0,
+     16,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    128,  59,  54,   0,   0,   8,
+    162,   0,  16,   0,   4,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      0,  63,   0,   0,   0,   0,
+      0,   0,   0,  63,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0, 242,   0,
+     16,   0,   5,   0,   0,   0,
+     70,   0,  16,   0,   4,   0,
       0,   0,  70, 126,  16,   0,
       0,   0,  70, 126,  16,   0,
-      0,   0,   0,   0,   0,  96,
+      1,   0,   0,   0,   0,  96,
+     16,   0,   1,   0,   0,   0,
+     69,   0,   0, 139, 194,   0,
+      0, 128,  67,  85,  21,   0,
+     18,   0,  16,   0,   0,   0,
+      0,   0, 198,   0,  16,   0,
+      3,   0,   0,   0,  70, 126,
      16,   0,   0,   0,   0,   0,
      16,   0,   0,   0,   0,   0,
+      0,  96,  16,   0,   0,   0,
+      0,   0,  50,   0,   0,   9,
+     18,   0,  16,   0,   0,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 127,  67,
+      1,  64,   0,   0,   0,   0,
+      0,  63,  56,   0,   0,   7,
+     66,   0,  16,   0,   4,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 128,  59,
      69,   0,   0, 139, 194,   0,
      69,   0,   0, 139, 194,   0,
       0, 128,  67,  85,  21,   0,
       0, 128,  67,  85,  21,   0,
-     98,   0,  16,   0,   2,   0,
-      0,   0,  70,  16,  16,   0,
-      1,   0,   0,   0,  38, 125,
+    242,   0,  16,   0,   4,   0,
+      0,   0, 230,  10,  16,   0,
+      4,   0,   0,   0,  70, 126,
+     16,   0,   1,   0,   0,   0,
+      0,  96,  16,   0,   1,   0,
+      0,   0,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0,  18,   0,  16,   0,
+      0,   0,   0,   0, 102,  10,
+     16,   0,   3,   0,   0,   0,
+     70, 126,  16,   0,   0,   0,
+      0,   0,   0,  96,  16,   0,
+      0,   0,   0,   0,  50,   0,
+      0,   9,  18,   0,  16,   0,
+      0,   0,   0,   0,  10,   0,
+     16,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    127,  67,   1,  64,   0,   0,
+      0,   0,   0,  63,  56,   0,
+      0,   7,  18,   0,  16,   0,
+      6,   0,   0,   0,  10,   0,
+     16,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    128,  59,  54,   0,   0,   8,
+    162,   0,  16,   0,   6,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      0,  63,   0,   0,   0,   0,
+      0,   0,   0,  63,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0, 242,   0,
+     16,   0,   7,   0,   0,   0,
+     70,   0,  16,   0,   6,   0,
+      0,   0,  70, 126,  16,   0,
+      1,   0,   0,   0,   0,  96,
      16,   0,   1,   0,   0,   0,
      16,   0,   1,   0,   0,   0,
+     69,   0,   0, 139, 194,   0,
+      0, 128,  67,  85,  21,   0,
+     18,   0,  16,   0,   0,   0,
+      0,   0, 230,  10,  16,   0,
+      3,   0,   0,   0,  70, 126,
+     16,   0,   0,   0,   0,   0,
       0,  96,  16,   0,   0,   0,
       0,  96,  16,   0,   0,   0,
+      0,   0,  50,   0,   0,   9,
+     18,   0,  16,   0,   0,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 127,  67,
+      1,  64,   0,   0,   0,   0,
+      0,  63,  56,   0,   0,   7,
+     66,   0,  16,   0,   6,   0,
+      0,   0,  10,   0,  16,   0,
+      0,   0,   0,   0,   1,  64,
+      0,   0,   0,   0, 128,  59,
+     69,   0,   0, 139, 194,   0,
+      0, 128,  67,  85,  21,   0,
+    242,   0,  16,   0,   3,   0,
+      0,   0, 230,  10,  16,   0,
+      6,   0,   0,   0,  70, 126,
+     16,   0,   1,   0,   0,   0,
+      0,  96,  16,   0,   1,   0,
       0,   0,   0,   0,   0,   8,
       0,   0,   0,   0,   0,   8,
-    114,   0,  16,   0,   2,   0,
+    242,   0,  16,   0,   4,   0,
+      0,   0,  70,  14,  16, 128,
+     65,   0,   0,   0,   5,   0,
+      0,   0,  70,  14,  16,   0,
+      4,   0,   0,   0,  50,   0,
+      0,   9, 242,   0,  16,   0,
+      4,   0,   0,   0,  86,   5,
+     16,   0,   2,   0,   0,   0,
+     70,  14,  16,   0,   4,   0,
+      0,   0,  70,  14,  16,   0,
+      5,   0,   0,   0,   0,   0,
+      0,   8, 242,   0,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16, 128,  65,   0,   0,   0,
+      7,   0,   0,   0,  70,  14,
+     16,   0,   3,   0,   0,   0,
+     50,   0,   0,   9, 242,   0,
+     16,   0,   3,   0,   0,   0,
+     86,   5,  16,   0,   2,   0,
+      0,   0,  70,  14,  16,   0,
+      3,   0,   0,   0,  70,  14,
+     16,   0,   7,   0,   0,   0,
+      0,   0,   0,   8, 242,   0,
+     16,   0,   3,   0,   0,   0,
+     70,  14,  16, 128,  65,   0,
+      0,   0,   4,   0,   0,   0,
+     70,  14,  16,   0,   3,   0,
+      0,   0,  50,   0,   0,   9,
+    242,   0,  16,   0,   1,   0,
+      0,   0,   6,   0,  16,   0,
+      2,   0,   0,   0,  70,  14,
+     16,   0,   3,   0,   0,   0,
+     70,  14,  16,   0,   4,   0,
+      0,   0,  18,   0,   0,   1,
+     24,   0,   0,   8,  18,   0,
+     16,   0,   0,   0,   0,   0,
+     26, 128,  32,   0,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    192,  64,  31,   0,   4,   3,
+     10,   0,  16,   0,   0,   0,
+      0,   0,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0,  18,   0,  16,   0,
+      2,   0,   0,   0,  70,  16,
+     16,   0,   1,   0,   0,   0,
+     70, 126,  16,   0,   0,   0,
+      0,   0,   0,  96,  16,   0,
+      0,   0,   0,   0,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0,  98,   0,
+     16,   0,   2,   0,   0,   0,
+     70,  16,  16,   0,   1,   0,
+      0,   0,  38, 125,  16,   0,
+      1,   0,   0,   0,   0,  96,
+     16,   0,   0,   0,   0,   0,
+      0,   0,   0,   8, 114,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   2,  16,   0,   2,   0,
+      0,   0,  70, 130,  32,   0,
+      0,   0,   0,   0,   3,   0,
+      0,   0,  16,   0,   0,   8,
+     18,   0,  16,   0,   1,   0,
       0,   0,  70,   2,  16,   0,
       0,   0,  70,   2,  16,   0,
       2,   0,   0,   0,  70, 130,
       2,   0,   0,   0,  70, 130,
      32,   0,   0,   0,   0,   0,
      32,   0,   0,   0,   0,   0,
-      3,   0,   0,   0,  16,   0,
-      0,   8,  18,   0,  16,   0,
+      4,   0,   0,   0,  16,   0,
+      0,   8,  34,   0,  16,   0,
       1,   0,   0,   0,  70,   2,
       1,   0,   0,   0,  70,   2,
      16,   0,   2,   0,   0,   0,
      16,   0,   2,   0,   0,   0,
      70, 130,  32,   0,   0,   0,
      70, 130,  32,   0,   0,   0,
-      0,   0,   4,   0,   0,   0,
-     16,   0,   0,   8,  34,   0,
+      0,   0,   5,   0,   0,   0,
+     16,   0,   0,   8,  66,   0,
      16,   0,   1,   0,   0,   0,
      16,   0,   1,   0,   0,   0,
      70,   2,  16,   0,   2,   0,
      70,   2,  16,   0,   2,   0,
       0,   0,  70, 130,  32,   0,
       0,   0,  70, 130,  32,   0,
-      0,   0,   0,   0,   5,   0,
+      0,   0,   0,   0,   6,   0,
+      0,   0,  18,   0,   0,   1,
+     24,   0,   0,   8,  18,   0,
+     16,   0,   0,   0,   0,   0,
+     26, 128,  32,   0,   0,   0,
+      0,   0,   0,   0,   0,   0,
+      1,  64,   0,   0,   0,   0,
+    224,  64,  31,   0,   4,   3,
+     10,   0,  16,   0,   0,   0,
+      0,   0,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0,  18,   0,  16,   0,
+      2,   0,   0,   0,  70,  16,
+     16,   0,   1,   0,   0,   0,
+     70, 126,  16,   0,   0,   0,
+      0,   0,   0,  96,  16,   0,
+      0,   0,   0,   0,  69,   0,
+      0, 139, 194,   0,   0, 128,
+     67,  85,  21,   0,  98,   0,
+     16,   0,   2,   0,   0,   0,
+     70,  16,  16,   0,   1,   0,
+      0,   0, 102, 124,  16,   0,
+      1,   0,   0,   0,   0,  96,
+     16,   0,   0,   0,   0,   0,
+      0,   0,   0,   8, 114,   0,
+     16,   0,   2,   0,   0,   0,
+     70,   2,  16,   0,   2,   0,
+      0,   0,  70, 130,  32,   0,
+      0,   0,   0,   0,   3,   0,
       0,   0,  16,   0,   0,   8,
       0,   0,  16,   0,   0,   8,
-     66,   0,  16,   0,   1,   0,
+     18,   0,  16,   0,   1,   0,
       0,   0,  70,   2,  16,   0,
       0,   0,  70,   2,  16,   0,
       2,   0,   0,   0,  70, 130,
       2,   0,   0,   0,  70, 130,
      32,   0,   0,   0,   0,   0,
      32,   0,   0,   0,   0,   0,
-      6,   0,   0,   0,  18,   0,
-      0,   1,  24,   0,   0,   8,
-     18,   0,  16,   0,   0,   0,
-      0,   0,  26, 128,  32,   0,
+      4,   0,   0,   0,  16,   0,
+      0,   8,  34,   0,  16,   0,
+      1,   0,   0,   0,  70,   2,
+     16,   0,   2,   0,   0,   0,
+     70, 130,  32,   0,   0,   0,
+      0,   0,   5,   0,   0,   0,
+     16,   0,   0,   8,  66,   0,
+     16,   0,   1,   0,   0,   0,
+     70,   2,  16,   0,   2,   0,
+      0,   0,  70, 130,  32,   0,
+      0,   0,   0,   0,   6,   0,
+      0,   0,  18,   0,   0,   1,
+     24,   0,   0,   8,  18,   0,
+     16,   0,   0,   0,   0,   0,
+     26, 128,  32,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      0,   0,   1,  64,   0,   0,
-      0,   0, 160,  64,  31,   0,
-      4,   3,  10,   0,  16,   0,
+      1,  64,   0,   0,   0,   0,
+      0,  65,  31,   0,   4,   3,
+     10,   0,  16,   0,   0,   0,
+      0,   0,  69,   0,   0, 139,
+    194,   0,   0, 128,  67,  85,
+     21,   0,  18,   0,  16,   0,
+      2,   0,   0,   0,  70,  16,
+     16,   0,   1,   0,   0,   0,
+     70, 126,  16,   0,   0,   0,
+      0,   0,   0,  96,  16,   0,
       0,   0,   0,   0,  69,   0,
       0,   0,   0,   0,  69,   0,
       0, 139, 194,   0,   0, 128,
       0, 139, 194,   0,   0, 128,
-     67,  85,  21,   0,  18,   0,
+     67,  85,  21,   0,  34,   0,
      16,   0,   2,   0,   0,   0,
      16,   0,   2,   0,   0,   0,
      70,  16,  16,   0,   1,   0,
      70,  16,  16,   0,   1,   0,
-      0,   0,  70, 126,  16,   0,
-      0,   0,   0,   0,   0,  96,
+      0,   0,  22, 126,  16,   0,
+      1,   0,   0,   0,   0,  96,
      16,   0,   0,   0,   0,   0,
      16,   0,   0,   0,   0,   0,
      69,   0,   0, 139, 194,   0,
      69,   0,   0, 139, 194,   0,
       0, 128,  67,  85,  21,   0,
       0, 128,  67,  85,  21,   0,
-     98,   0,  16,   0,   2,   0,
+     66,   0,  16,   0,   2,   0,
       0,   0,  70,  16,  16,   0,
       0,   0,  70,  16,  16,   0,
-      1,   0,   0,   0, 102, 124,
-     16,   0,   1,   0,   0,   0,
+      1,   0,   0,   0, 150, 124,
+     16,   0,   2,   0,   0,   0,
       0,  96,  16,   0,   0,   0,
       0,  96,  16,   0,   0,   0,
       0,   0,   0,   0,   0,   8,
       0,   0,   0,   0,   0,   8,
     114,   0,  16,   0,   2,   0,
     114,   0,  16,   0,   2,   0,
@@ -771,69 +1387,19 @@ const BYTE g_main[] =
       2,   0,   0,   0,  70, 130,
       2,   0,   0,   0,  70, 130,
      32,   0,   0,   0,   0,   0,
      32,   0,   0,   0,   0,   0,
       6,   0,   0,   0,  18,   0,
       6,   0,   0,   0,  18,   0,
-      0,   1,  24,   0,   0,   8,
-     18,   0,  16,   0,   0,   0,
-      0,   0,  26, 128,  32,   0,
-      0,   0,   0,   0,   0,   0,
-      0,   0,   1,  64,   0,   0,
-      0,   0, 192,  64,  31,   0,
-      4,   3,  10,   0,  16,   0,
-      0,   0,   0,   0,  69,   0,
-      0, 139, 194,   0,   0, 128,
-     67,  85,  21,   0,  18,   0,
-     16,   0,   2,   0,   0,   0,
-     70,  16,  16,   0,   1,   0,
-      0,   0,  70, 126,  16,   0,
-      0,   0,   0,   0,   0,  96,
-     16,   0,   0,   0,   0,   0,
-     69,   0,   0, 139, 194,   0,
-      0, 128,  67,  85,  21,   0,
-     34,   0,  16,   0,   2,   0,
-      0,   0,  70,  16,  16,   0,
-      1,   0,   0,   0,  22, 126,
-     16,   0,   1,   0,   0,   0,
-      0,  96,  16,   0,   0,   0,
-      0,   0,  69,   0,   0, 139,
-    194,   0,   0, 128,  67,  85,
-     21,   0,  66,   0,  16,   0,
-      2,   0,   0,   0,  70,  16,
-     16,   0,   1,   0,   0,   0,
-    150, 124,  16,   0,   2,   0,
-      0,   0,   0,  96,  16,   0,
-      0,   0,   0,   0,   0,   0,
-      0,   8, 114,   0,  16,   0,
-      2,   0,   0,   0,  70,   2,
-     16,   0,   2,   0,   0,   0,
-     70, 130,  32,   0,   0,   0,
-      0,   0,   3,   0,   0,   0,
-     16,   0,   0,   8,  18,   0,
-     16,   0,   1,   0,   0,   0,
-     70,   2,  16,   0,   2,   0,
-      0,   0,  70, 130,  32,   0,
-      0,   0,   0,   0,   4,   0,
-      0,   0,  16,   0,   0,   8,
-     34,   0,  16,   0,   1,   0,
-      0,   0,  70,   2,  16,   0,
-      2,   0,   0,   0,  70, 130,
-     32,   0,   0,   0,   0,   0,
-      5,   0,   0,   0,  16,   0,
-      0,   8,  66,   0,  16,   0,
-      1,   0,   0,   0,  70,   2,
-     16,   0,   2,   0,   0,   0,
-     70, 130,  32,   0,   0,   0,
-      0,   0,   6,   0,   0,   0,
-     18,   0,   0,   1,  54,   0,
-      0,   8, 114,   0,  16,   0,
-      1,   0,   0,   0,   2,  64,
+      0,   1,  54,   0,   0,   8,
+    114,   0,  16,   0,   1,   0,
+      0,   0,   2,  64,   0,   0,
+      0,   0, 128,  63,   0,   0,
+      0,   0,   0,   0, 128,  63,
+      0,   0,   0,   0,  21,   0,
+      0,   1,  21,   0,   0,   1,
+     21,   0,   0,   1,  54,   0,
+      0,   5, 130,   0,  16,   0,
+      1,   0,   0,   0,   1,  64,
       0,   0,   0,   0, 128,  63,
       0,   0,   0,   0, 128,  63,
-      0,   0,   0,   0,   0,   0,
-      0,   0,   0,   0,   0,   0,
      21,   0,   0,   1,  21,   0,
      21,   0,   0,   1,  21,   0,
       0,   1,  21,   0,   0,   1,
       0,   1,  21,   0,   0,   1,
-     54,   0,   0,   5, 130,   0,
-     16,   0,   1,   0,   0,   0,
-      1,  64,   0,   0,   0,   0,
-    128,  63,  21,   0,   0,   1,
      21,   0,   0,   1,  21,   0,
      21,   0,   0,   1,  21,   0,
       0,   1,  21,   0,   0,   1,
       0,   1,  21,   0,   0,   1,
      47,   0,   0,   6, 114,   0,
      47,   0,   0,   6, 114,   0,
@@ -1258,21 +1824,21 @@ const BYTE g_main[] =
      16,   0,   2,   0,   0,   0,
      16,   0,   2,   0,   0,   0,
      62,   0,   0,   1,  83,  84,
      62,   0,   0,   1,  83,  84,
      65,  84, 148,   0,   0,   0,
      65,  84, 148,   0,   0,   0,
-    160,   0,   0,   0,   7,   0,
+    246,   0,   0,   0,   8,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      3,   0,   0,   0,  95,   0,
+      3,   0,   0,   0, 155,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      0,   0,   0,   0,  11,   0,
-      0,   0,  13,   0,   0,   0,
+      0,   0,   0,   0,  13,   0,
+      0,   0,  15,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      0,   0,  10,   0,   0,   0,
+      0,   0,  26,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
-      1,   0,   0,   0,   4,   0,
+      1,   0,   0,   0,   8,   0,
       0,   0,  10,   0,   0,   0,
       0,   0,  10,   0,   0,   0,
-      5,   0,   0,   0,   0,   0,
+     11,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,
       0,   0,   0,   0,   0,   0,

+ 48 - 15
src/render/direct3d11/D3D11_PixelShader_Common.hlsli

@@ -20,10 +20,12 @@ static const float TONEMAP_CHROME = 2;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
-static const float TEXTURETYPE_NV12 = 4;
-static const float TEXTURETYPE_NV21 = 5;
-static const float TEXTURETYPE_YUV = 6;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
+static const float TEXTURETYPE_NV12 = 6;
+static const float TEXTURETYPE_NV21 = 7;
+static const float TEXTURETYPE_YUV = 8;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -118,21 +120,48 @@ float3 ApplyTonemap(float3 v)
     return v;
     return v;
 }
 }
 
 
-float2 GetPixelArtUV(PixelShaderInput input)
+float4 SamplePaletteNearest(float2 uv)
+{
+    float index = texture0.Sample(sampler0, uv).r * 255;
+    return texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(float2 uv)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = frac(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(uv_min_max.zw);
+
+    // bilinear interpolation
+    return lerp(lerp(texelA, texelB, uv_frac.y), lerp(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+
+float2 GetPixelArtUV(float2 uv)
 {
 {
     // box filter size in texel units
     // box filter size in texel units
-    float2 boxSize = clamp(fwidth(input.tex) * texel_size.zw, 1e-5, 1);
+    float2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1);
 
 
     // scale uv by texture size to get texel coordinate
     // scale uv by texture size to get texel coordinate
-    float2 tx = input.tex * texel_size.zw - 0.5 * boxSize;
+    float2 tx = uv * texel_size.zw - 0.5 * boxSize;
 
 
     // compute offset for pixel-sized box filter
     // compute offset for pixel-sized box filter
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
 
 
     // compute bilinear sample uv coordinates
     // compute bilinear sample uv coordinates
-    float2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;
-
-    return uv;
+    return (floor(tx) + 0.5 + txOffset) * texel_size.xy;
 }
 }
 
 
 float4 GetInputColor(PixelShaderInput input)
 float4 GetInputColor(PixelShaderInput input)
@@ -144,11 +173,15 @@ float4 GetInputColor(PixelShaderInput input)
     } else if (texture_type == TEXTURETYPE_RGB) {
     } else if (texture_type == TEXTURETYPE_RGB) {
         rgba = texture0.Sample(sampler0, input.tex);
         rgba = texture0.Sample(sampler0, input.tex);
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
-        float2 uv = GetPixelArtUV(input);
+        float2 uv = GetPixelArtUV(input.tex);
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
-    } else if (texture_type == TEXTURETYPE_PALETTE) {
-        float index = texture0.Sample(sampler0, input.tex).r * 255;
-        rgba = texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+    } else if (texture_type == TEXTURETYPE_PALETTE_NEAREST) {
+        rgba = SamplePaletteNearest(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_LINEAR) {
+        rgba = SamplePaletteLinear(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_PIXELART) {
+        float2 uv = GetPixelArtUV(input.tex);
+        rgba = SamplePaletteLinear(uv);
     } else if (texture_type == TEXTURETYPE_NV12) {
     } else if (texture_type == TEXTURETYPE_NV12) {
         float3 yuv;
         float3 yuv;
         yuv.x = texture0.Sample(sampler0, input.tex).r;
         yuv.x = texture0.Sample(sampler0, input.tex).r;
@@ -184,7 +217,7 @@ float4 GetInputColor(PixelShaderInput input)
         // Error!
         // Error!
         rgba.r = 1.0;
         rgba.r = 1.0;
         rgba.g = 0.0;
         rgba.g = 0.0;
-        rgba.b = 0.0;
+        rgba.b = 1.0;
         rgba.a = 1.0;
         rgba.a = 1.0;
     }
     }
     return rgba;
     return rgba;

+ 38 - 14
src/render/direct3d11/SDL_render_d3d11.c

@@ -69,10 +69,12 @@ static const float TONEMAP_CHROME = 2;
 //static const float TEXTURETYPE_NONE = 0;
 //static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
-static const float TEXTURETYPE_NV12 = 4;
-static const float TEXTURETYPE_NV21 = 5;
-static const float TEXTURETYPE_YUV = 6;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
+static const float TEXTURETYPE_NV12 = 6;
+static const float TEXTURETYPE_NV21 = 7;
+static const float TEXTURETYPE_YUV = 8;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -2189,8 +2191,20 @@ static void D3D11_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
 
 
         switch (texture->format) {
         switch (texture->format) {
         case SDL_PIXELFORMAT_INDEX8:
         case SDL_PIXELFORMAT_INDEX8:
-            constants->texture_type = TEXTURETYPE_PALETTE;
-            constants->input_type = INPUTTYPE_UNSPECIFIED;
+            switch (cmd->data.draw.texture_scale_mode) {
+            case SDL_SCALEMODE_NEAREST:
+                constants->texture_type = TEXTURETYPE_PALETTE_NEAREST;
+                break;
+            case SDL_SCALEMODE_LINEAR:
+                constants->texture_type = TEXTURETYPE_PALETTE_LINEAR;
+                break;
+            case SDL_SCALEMODE_PIXELART:
+                constants->texture_type = TEXTURETYPE_PALETTE_PIXELART;
+                break;
+            default:
+                SDL_assert(!"Unknown scale mode");
+                break;
+            }
             break;
             break;
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_IYUV:
         case SDL_PIXELFORMAT_IYUV:
@@ -2212,10 +2226,6 @@ static void D3D11_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
         default:
         default:
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
-                constants->texture_width = texture->w;
-                constants->texture_height = texture->h;
-                constants->texel_width = 1.0f / constants->texture_width;
-                constants->texel_height = 1.0f / constants->texture_height;
             } else {
             } else {
                 constants->texture_type = TEXTURETYPE_RGB;
                 constants->texture_type = TEXTURETYPE_RGB;
             }
             }
@@ -2230,6 +2240,15 @@ static void D3D11_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
             break;
             break;
         }
         }
 
 
+        if (constants->texture_type == TEXTURETYPE_PALETTE_LINEAR ||
+            constants->texture_type == TEXTURETYPE_PALETTE_PIXELART ||
+            constants->texture_type == TEXTURETYPE_RGB_PIXELART) {
+            constants->texture_width = texture->w;
+            constants->texture_height = texture->h;
+            constants->texel_width = 1.0f / constants->texture_width;
+            constants->texel_height = 1.0f / constants->texture_height;
+        }
+
         constants->sdr_white_point = texture->SDR_white_point;
         constants->sdr_white_point = texture->SDR_white_point;
 
 
         if (renderer->target) {
         if (renderer->target) {
@@ -2429,7 +2448,7 @@ static bool D3D11_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *
     return true;
     return true;
 }
 }
 
 
-static ID3D11SamplerState *D3D11_GetSamplerState(D3D11_RenderData *data, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
+static ID3D11SamplerState *D3D11_GetSamplerState(D3D11_RenderData *data, SDL_PixelFormat format, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
 {
 {
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     SDL_assert(key < SDL_arraysize(data->samplers));
     SDL_assert(key < SDL_arraysize(data->samplers));
@@ -2448,7 +2467,12 @@ static ID3D11SamplerState *D3D11_GetSamplerState(D3D11_RenderData *data, SDL_Sca
             break;
             break;
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_LINEAR:
         case SDL_SCALEMODE_LINEAR:
-            samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+            if (format == SDL_PIXELFORMAT_INDEX8) {
+                // We'll do linear sampling in the shader
+                samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
+            } else {
+                samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
+            }
             break;
             break;
         default:
         default:
             SDL_SetError("Unknown scale mode: %d", scale_mode);
             SDL_SetError("Unknown scale mode: %d", scale_mode);
@@ -2506,7 +2530,7 @@ static bool D3D11_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
 
 
     shaderResources[numShaderResources++] = textureData->mainTextureResourceView;
     shaderResources[numShaderResources++] = textureData->mainTextureResourceView;
 
 
-    shaderSamplers[numShaderSamplers] = D3D11_GetSamplerState(rendererData, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
+    shaderSamplers[numShaderSamplers] = D3D11_GetSamplerState(rendererData, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
     if (!shaderSamplers[numShaderSamplers]) {
     if (!shaderSamplers[numShaderSamplers]) {
         return false;
         return false;
     }
     }
@@ -2517,7 +2541,7 @@ static bool D3D11_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
 
 
         shaderResources[numShaderResources++] = palette->resourceView;
         shaderResources[numShaderResources++] = palette->resourceView;
 
 
-        shaderSamplers[numShaderSamplers] = D3D11_GetSamplerState(rendererData, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
+        shaderSamplers[numShaderSamplers] = D3D11_GetSamplerState(rendererData, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
         if (!shaderSamplers[numShaderSamplers]) {
         if (!shaderSamplers[numShaderSamplers]) {
             return false;
             return false;
         }
         }

File diff suppressed because it is too large
+ 736 - 488
src/render/direct3d12/D3D12_PixelShader_Advanced.h


+ 48 - 15
src/render/direct3d12/D3D12_PixelShader_Common.hlsli

@@ -21,10 +21,12 @@ static const float TONEMAP_CHROME = 2;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
-static const float TEXTURETYPE_NV12 = 4;
-static const float TEXTURETYPE_NV21 = 5;
-static const float TEXTURETYPE_YUV = 6;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
+static const float TEXTURETYPE_NV12 = 6;
+static const float TEXTURETYPE_NV21 = 7;
+static const float TEXTURETYPE_YUV = 8;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -119,21 +121,48 @@ float3 ApplyTonemap(float3 v)
     return v;
     return v;
 }
 }
 
 
-float2 GetPixelArtUV(PixelShaderInput input)
+float4 SamplePaletteNearest(float2 uv)
+{
+    float index = texture0.Sample(sampler0, uv).r * 255;
+    return texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(float2 uv)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = frac(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(uv_min_max.zw);
+
+    // bilinear interpolation
+    return lerp(lerp(texelA, texelB, uv_frac.y), lerp(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+
+float2 GetPixelArtUV(float2 uv)
 {
 {
     // box filter size in texel units
     // box filter size in texel units
-    float2 boxSize = clamp(fwidth(input.tex) * texel_size.zw, 1e-5, 1);
+    float2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1);
 
 
     // scale uv by texture size to get texel coordinate
     // scale uv by texture size to get texel coordinate
-    float2 tx = input.tex * texel_size.zw - 0.5 * boxSize;
+    float2 tx = uv * texel_size.zw - 0.5 * boxSize;
 
 
     // compute offset for pixel-sized box filter
     // compute offset for pixel-sized box filter
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
 
 
     // compute bilinear sample uv coordinates
     // compute bilinear sample uv coordinates
-    float2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;
-
-    return uv;
+    return (floor(tx) + 0.5 + txOffset) * texel_size.xy;
 }
 }
 
 
 float4 GetInputColor(PixelShaderInput input)
 float4 GetInputColor(PixelShaderInput input)
@@ -145,11 +174,15 @@ float4 GetInputColor(PixelShaderInput input)
     } else if (texture_type == TEXTURETYPE_RGB) {
     } else if (texture_type == TEXTURETYPE_RGB) {
         rgba = texture0.Sample(sampler0, input.tex);
         rgba = texture0.Sample(sampler0, input.tex);
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
-        float2 uv = GetPixelArtUV(input);
+        float2 uv = GetPixelArtUV(input.tex);
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
-    } else if (texture_type == TEXTURETYPE_PALETTE) {
-        float index = texture0.Sample(sampler0, input.tex).r * 255;
-        rgba = texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+    } else if (texture_type == TEXTURETYPE_PALETTE_NEAREST) {
+        rgba = SamplePaletteNearest(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_LINEAR) {
+        rgba = SamplePaletteLinear(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_PIXELART) {
+        float2 uv = GetPixelArtUV(input.tex);
+        rgba = SamplePaletteLinear(uv);
     } else if (texture_type == TEXTURETYPE_NV12) {
     } else if (texture_type == TEXTURETYPE_NV12) {
         float3 yuv;
         float3 yuv;
         yuv.x = texture0.Sample(sampler0, input.tex).r;
         yuv.x = texture0.Sample(sampler0, input.tex).r;
@@ -185,7 +218,7 @@ float4 GetInputColor(PixelShaderInput input)
         // Error!
         // Error!
         rgba.r = 1.0;
         rgba.r = 1.0;
         rgba.g = 0.0;
         rgba.g = 0.0;
-        rgba.b = 0.0;
+        rgba.b = 1.0;
         rgba.a = 1.0;
         rgba.a = 1.0;
     }
     }
     return rgba;
     return rgba;

+ 38 - 14
src/render/direct3d12/SDL_render_d3d12.c

@@ -70,10 +70,12 @@ static const float TONEMAP_CHROME = 2;
 //static const float TEXTURETYPE_NONE = 0;
 //static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
-static const float TEXTURETYPE_NV12 = 4;
-static const float TEXTURETYPE_NV21 = 5;
-static const float TEXTURETYPE_YUV = 6;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
+static const float TEXTURETYPE_NV12 = 6;
+static const float TEXTURETYPE_NV21 = 7;
+static const float TEXTURETYPE_YUV = 8;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -2599,8 +2601,20 @@ static void D3D12_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
 
 
         switch (texture->format) {
         switch (texture->format) {
         case SDL_PIXELFORMAT_INDEX8:
         case SDL_PIXELFORMAT_INDEX8:
-            constants->texture_type = TEXTURETYPE_PALETTE;
-            constants->input_type = INPUTTYPE_UNSPECIFIED;
+            switch (cmd->data.draw.texture_scale_mode) {
+            case SDL_SCALEMODE_NEAREST:
+                constants->texture_type = TEXTURETYPE_PALETTE_NEAREST;
+                break;
+            case SDL_SCALEMODE_LINEAR:
+                constants->texture_type = TEXTURETYPE_PALETTE_LINEAR;
+                break;
+            case SDL_SCALEMODE_PIXELART:
+                constants->texture_type = TEXTURETYPE_PALETTE_PIXELART;
+                break;
+            default:
+                SDL_assert(!"Unknown scale mode");
+                break;
+            }
             break;
             break;
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_IYUV:
         case SDL_PIXELFORMAT_IYUV:
@@ -2622,10 +2636,6 @@ static void D3D12_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
         default:
         default:
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
-                constants->texture_width = texture->w;
-                constants->texture_height = texture->h;
-                constants->texel_width = 1.0f / constants->texture_width;
-                constants->texel_height = 1.0f / constants->texture_height;
             } else {
             } else {
                 constants->texture_type = TEXTURETYPE_RGB;
                 constants->texture_type = TEXTURETYPE_RGB;
             }
             }
@@ -2640,6 +2650,15 @@ static void D3D12_SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderC
             break;
             break;
         }
         }
 
 
+        if (constants->texture_type == TEXTURETYPE_PALETTE_LINEAR ||
+            constants->texture_type == TEXTURETYPE_PALETTE_PIXELART ||
+            constants->texture_type == TEXTURETYPE_RGB_PIXELART) {
+            constants->texture_width = texture->w;
+            constants->texture_height = texture->h;
+            constants->texel_width = 1.0f / constants->texture_width;
+            constants->texel_height = 1.0f / constants->texture_height;
+        }
+
         constants->sdr_white_point = texture->SDR_white_point;
         constants->sdr_white_point = texture->SDR_white_point;
 
 
         if (renderer->target) {
         if (renderer->target) {
@@ -2848,7 +2867,7 @@ static bool D3D12_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *
     return true;
     return true;
 }
 }
 
 
-static D3D12_CPU_DESCRIPTOR_HANDLE *D3D12_GetSamplerState(D3D12_RenderData *data, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
+static D3D12_CPU_DESCRIPTOR_HANDLE *D3D12_GetSamplerState(D3D12_RenderData *data, SDL_PixelFormat format, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
 {
 {
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     SDL_assert(key < SDL_arraysize(data->samplers));
     SDL_assert(key < SDL_arraysize(data->samplers));
@@ -2867,7 +2886,12 @@ static D3D12_CPU_DESCRIPTOR_HANDLE *D3D12_GetSamplerState(D3D12_RenderData *data
             break;
             break;
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_LINEAR:
         case SDL_SCALEMODE_LINEAR:
-            samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
+            if (format == SDL_PIXELFORMAT_INDEX8) {
+                // We'll do linear sampling in the shader
+                samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_POINT;
+            } else {
+                samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
+            }
             break;
             break;
         default:
         default:
             SDL_SetError("Unknown scale mode: %d", scale_mode);
             SDL_SetError("Unknown scale mode: %d", scale_mode);
@@ -2923,7 +2947,7 @@ static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
     textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
     textureData->mainResourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
     shaderResources[numShaderResources++] = textureData->mainTextureResourceView;
     shaderResources[numShaderResources++] = textureData->mainTextureResourceView;
 
 
-    textureSampler = D3D12_GetSamplerState(rendererData, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
+    textureSampler = D3D12_GetSamplerState(rendererData, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
     if (!textureSampler) {
     if (!textureSampler) {
         return false;
         return false;
     }
     }
@@ -2936,7 +2960,7 @@ static bool D3D12_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *
         palette->resourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
         palette->resourceState = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
         shaderResources[numShaderResources++] = palette->resourceView;
         shaderResources[numShaderResources++] = palette->resourceView;
 
 
-        textureSampler = D3D12_GetSamplerState(rendererData, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
+        textureSampler = D3D12_GetSamplerState(rendererData, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
         if (!textureSampler) {
         if (!textureSampler) {
             return false;
             return false;
         }
         }

+ 46 - 24
src/render/gpu/SDL_render_gpu.c

@@ -70,10 +70,12 @@ static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGBA = 3;
 static const float TEXTURETYPE_RGBA = 3;
 static const float TEXTURETYPE_RGBA_PIXELART = 4;
 static const float TEXTURETYPE_RGBA_PIXELART = 4;
-static const float TEXTURETYPE_PALETTE = 5;
-static const float TEXTURETYPE_NV12 = 6;
-static const float TEXTURETYPE_NV21 = 7;
-static const float TEXTURETYPE_YUV = 8;
+static const float TEXTURETYPE_PALETTE_NEAREST = 5;
+static const float TEXTURETYPE_PALETTE_LINEAR = 6;
+static const float TEXTURETYPE_PALETTE_PIXELART = 7;
+static const float TEXTURETYPE_NV12 = 8;
+static const float TEXTURETYPE_NV21 = 9;
+static const float TEXTURETYPE_YUV = 10;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -748,7 +750,7 @@ static void SetViewportAndScissor(GPU_RenderData *data)
     }
     }
 }
 }
 
 
-static SDL_GPUSampler *GetSampler(GPU_RenderData *data, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
+static SDL_GPUSampler *GetSampler(GPU_RenderData *data, SDL_PixelFormat format, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
 {
 {
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     SDL_assert(key < SDL_arraysize(data->samplers));
     SDL_assert(key < SDL_arraysize(data->samplers));
@@ -763,9 +765,16 @@ static SDL_GPUSampler *GetSampler(GPU_RenderData *data, SDL_ScaleMode scale_mode
             break;
             break;
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_LINEAR:
         case SDL_SCALEMODE_LINEAR:
-            sci.min_filter = SDL_GPU_FILTER_LINEAR;
-            sci.mag_filter = SDL_GPU_FILTER_LINEAR;
-            sci.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_LINEAR;
+            if (format == SDL_PIXELFORMAT_INDEX8) {
+                // We'll do linear sampling in the shader
+                sci.min_filter = SDL_GPU_FILTER_NEAREST;
+                sci.mag_filter = SDL_GPU_FILTER_NEAREST;
+                sci.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_NEAREST;
+            } else {
+                sci.min_filter = SDL_GPU_FILTER_LINEAR;
+                sci.mag_filter = SDL_GPU_FILTER_LINEAR;
+                sci.mipmap_mode = SDL_GPU_SAMPLERMIPMAPMODE_LINEAR;
+            }
             break;
             break;
         default:
         default:
             SDL_SetError("Unknown scale mode: %d", scale_mode);
             SDL_SetError("Unknown scale mode: %d", scale_mode);
@@ -810,6 +819,22 @@ static void CalculateAdvancedShaderConstants(SDL_Renderer *renderer, const SDL_R
     constants->color_scale = cmd->data.draw.color_scale;
     constants->color_scale = cmd->data.draw.color_scale;
 
 
     switch (texture->format) {
     switch (texture->format) {
+    case SDL_PIXELFORMAT_INDEX8:
+        switch (cmd->data.draw.texture_scale_mode) {
+        case SDL_SCALEMODE_NEAREST:
+            constants->texture_type = TEXTURETYPE_PALETTE_NEAREST;
+            break;
+        case SDL_SCALEMODE_LINEAR:
+            constants->texture_type = TEXTURETYPE_PALETTE_LINEAR;
+            break;
+        case SDL_SCALEMODE_PIXELART:
+            constants->texture_type = TEXTURETYPE_PALETTE_PIXELART;
+            break;
+        default:
+            SDL_assert(!"Unknown scale mode");
+            break;
+        }
+        break;
     case SDL_PIXELFORMAT_YV12:
     case SDL_PIXELFORMAT_YV12:
     case SDL_PIXELFORMAT_IYUV:
     case SDL_PIXELFORMAT_IYUV:
         constants->texture_type = TEXTURETYPE_YUV;
         constants->texture_type = TEXTURETYPE_YUV;
@@ -829,9 +854,6 @@ static void CalculateAdvancedShaderConstants(SDL_Renderer *renderer, const SDL_R
         break;
         break;
     default:
     default:
         switch (texture->format) {
         switch (texture->format) {
-        case SDL_PIXELFORMAT_INDEX8:
-            constants->texture_type = TEXTURETYPE_PALETTE;
-            break;
         case SDL_PIXELFORMAT_BGRX32:
         case SDL_PIXELFORMAT_BGRX32:
         case SDL_PIXELFORMAT_RGBX32:
         case SDL_PIXELFORMAT_RGBX32:
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
@@ -840,23 +862,13 @@ static void CalculateAdvancedShaderConstants(SDL_Renderer *renderer, const SDL_R
                 constants->texture_type = TEXTURETYPE_RGB;
                 constants->texture_type = TEXTURETYPE_RGB;
             }
             }
             break;
             break;
-        case SDL_PIXELFORMAT_BGRA32:
-        case SDL_PIXELFORMAT_RGBA32:
-        case SDL_PIXELFORMAT_ABGR2101010:
-        case SDL_PIXELFORMAT_RGBA64_FLOAT:
+        default:
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
                 constants->texture_type = TEXTURETYPE_RGBA_PIXELART;
                 constants->texture_type = TEXTURETYPE_RGBA_PIXELART;
-                constants->texture_width = texture->w;
-                constants->texture_height = texture->h;
-                constants->texel_width = 1.0f / constants->texture_width;
-                constants->texel_height = 1.0f / constants->texture_height;
             } else {
             } else {
                 constants->texture_type = TEXTURETYPE_RGBA;
                 constants->texture_type = TEXTURETYPE_RGBA;
             }
             }
             break;
             break;
-        default:
-            SDL_assert(!"Unhandled pixel format");
-            break;
         }
         }
         if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
         if (texture->colorspace == SDL_COLORSPACE_SRGB_LINEAR) {
             constants->input_type = INPUTTYPE_SCRGB;
             constants->input_type = INPUTTYPE_SCRGB;
@@ -869,6 +881,16 @@ static void CalculateAdvancedShaderConstants(SDL_Renderer *renderer, const SDL_R
         break;
         break;
     }
     }
 
 
+    if (constants->texture_type == TEXTURETYPE_PALETTE_LINEAR ||
+        constants->texture_type == TEXTURETYPE_PALETTE_PIXELART ||
+        constants->texture_type == TEXTURETYPE_RGB_PIXELART ||
+        constants->texture_type == TEXTURETYPE_RGBA_PIXELART) {
+        constants->texture_width = texture->w;
+        constants->texture_height = texture->h;
+        constants->texel_width = 1.0f / constants->texture_width;
+        constants->texel_height = 1.0f / constants->texture_height;
+    }
+
     constants->sdr_white_point = texture->SDR_white_point;
     constants->sdr_white_point = texture->SDR_white_point;
 
 
     if (renderer->target) {
     if (renderer->target) {
@@ -968,7 +990,7 @@ static void Draw(
         GPU_TextureData *tdata = (GPU_TextureData *)texture->internal;
         GPU_TextureData *tdata = (GPU_TextureData *)texture->internal;
         SDL_GPUTextureSamplerBinding sampler_bind;
         SDL_GPUTextureSamplerBinding sampler_bind;
         SDL_zero(sampler_bind);
         SDL_zero(sampler_bind);
-        sampler_bind.sampler = GetSampler(data, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
+        sampler_bind.sampler = GetSampler(data, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
         sampler_bind.texture = tdata->texture;
         sampler_bind.texture = tdata->texture;
         SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
         SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
 
 
@@ -976,7 +998,7 @@ static void Draw(
             if (texture->palette) {
             if (texture->palette) {
                 GPU_PaletteData *palette = (GPU_PaletteData *)texture->palette->internal;
                 GPU_PaletteData *palette = (GPU_PaletteData *)texture->palette->internal;
 
 
-                sampler_bind.sampler = GetSampler(data, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
+                sampler_bind.sampler = GetSampler(data, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
                 sampler_bind.texture = palette->texture;
                 sampler_bind.texture = palette->texture;
                 SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
                 SDL_BindGPUFragmentSamplers(pass, sampler_slot++, &sampler_bind, 1);
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV

+ 505 - 381
src/render/gpu/shaders/texture_advanced.frag.dxil.h

@@ -1,7 +1,7 @@
 static const unsigned char texture_advanced_frag_dxil[] = {
 static const unsigned char texture_advanced_frag_dxil[] = {
-  0x44, 0x58, 0x42, 0x43, 0x87, 0xd1, 0x2b, 0xae, 0x43, 0x0c, 0x5c, 0x59,
-  0xbd, 0x26, 0xab, 0xe9, 0x83, 0xa8, 0xa0, 0x6c, 0x01, 0x00, 0x00, 0x00,
-  0x20, 0x25, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+  0x44, 0x58, 0x42, 0x43, 0xd4, 0xfc, 0x30, 0x59, 0xc7, 0xf8, 0xb0, 0x68,
+  0x13, 0xf8, 0xe2, 0x91, 0x10, 0x66, 0x8d, 0xcf, 0x01, 0x00, 0x00, 0x00,
+  0xf0, 0x2a, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
   0x38, 0x02, 0x00, 0x00, 0x80, 0x0c, 0x00, 0x00, 0x9c, 0x0c, 0x00, 0x00,
   0x38, 0x02, 0x00, 0x00, 0x80, 0x0c, 0x00, 0x00, 0x9c, 0x0c, 0x00, 0x00,
   0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -122,8 +122,8 @@ static const unsigned char texture_advanced_frag_dxil[] = {
   0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24,
   0xc6, 0x04, 0x43, 0x22, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24,
   0xca, 0xa0, 0xc0, 0x03, 0xca, 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4,
   0xca, 0xa0, 0xc0, 0x03, 0xca, 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4,
   0x34, 0x0a, 0xa8, 0x90, 0x0a, 0xaa, 0xb0, 0x0a, 0xac, 0x00, 0x03, 0x0a,
   0x34, 0x0a, 0xa8, 0x90, 0x0a, 0xaa, 0xb0, 0x0a, 0xac, 0x00, 0x03, 0x0a,
-  0x34, 0xa0, 0x80, 0x03, 0xca, 0xa3, 0x7c, 0xca, 0x99, 0xa0, 0x90, 0x11,
-  0xca, 0x82, 0x8a, 0x92, 0x18, 0x01, 0x28, 0x82, 0x42, 0x28, 0x10, 0xe2,
+  0x34, 0xa0, 0x80, 0x03, 0xca, 0xa3, 0x84, 0x4a, 0xf3, 0xa0, 0x50, 0x19,
+  0xca, 0x86, 0x8a, 0x92, 0x18, 0x01, 0x28, 0x82, 0x42, 0x28, 0x10, 0xe2,
   0x6a, 0x80, 0xc6, 0x19, 0x00, 0x22, 0x67, 0x00, 0xa8, 0x9c, 0x01, 0xa0,
   0x6a, 0x80, 0xc6, 0x19, 0x00, 0x22, 0x67, 0x00, 0xa8, 0x9c, 0x01, 0xa0,
   0x73, 0x06, 0x80, 0xd0, 0xb1, 0x10, 0x83, 0x08, 0x04, 0x02, 0x79, 0x1e,
   0x73, 0x06, 0x80, 0xd0, 0xb1, 0x10, 0x83, 0x08, 0x04, 0x02, 0x79, 0x1e,
   0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
@@ -266,12 +266,12 @@ static const unsigned char texture_advanced_frag_dxil[] = {
   0x4d, 0x08, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x46, 0xf0, 0x0c, 0x97, 0xef,
   0x4d, 0x08, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x46, 0xf0, 0x0c, 0x97, 0xef,
   0x3c, 0x3e, 0xd5, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03,
   0x3c, 0x3e, 0xd5, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x6d, 0x00, 0x04, 0x03,
   0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48,
   0x20, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48,
-  0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x41, 0x54, 0x3c,
-  0x83, 0x93, 0xd5, 0x7c, 0x6b, 0x35, 0x4a, 0x0a, 0x1f, 0xeb, 0xd1, 0x6d,
-  0x44, 0x58, 0x49, 0x4c, 0x7c, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x1f, 0x06, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x64, 0x18, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde,
-  0x21, 0x0c, 0x00, 0x00, 0x16, 0x06, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
+  0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x9d, 0xc5, 0xbc,
+  0x54, 0xca, 0x8e, 0x09, 0xf3, 0x58, 0x6e, 0x8b, 0x04, 0x4d, 0xdb, 0xb2,
+  0x44, 0x58, 0x49, 0x4c, 0x4c, 0x1e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00,
+  0x93, 0x07, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x34, 0x1e, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde,
+  0x21, 0x0c, 0x00, 0x00, 0x8a, 0x07, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
   0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91,
   0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
   0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c,
   0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02,
   0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02,
@@ -422,374 +422,498 @@ static const unsigned char texture_advanced_frag_dxil[] = {
   0xf3, 0xf8, 0x13, 0x11, 0x4d, 0x08, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x46,
   0xf3, 0xf8, 0x13, 0x11, 0x4d, 0x08, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x46,
   0xf0, 0x0c, 0x97, 0xef, 0x3c, 0x3e, 0xd5, 0x00, 0x11, 0xe6, 0x17, 0xb7,
   0xf0, 0x0c, 0x97, 0xef, 0x3c, 0x3e, 0xd5, 0x00, 0x11, 0xe6, 0x17, 0xb7,
   0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
   0x6d, 0x00, 0x04, 0x03, 0x20, 0x0d, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00,
-  0x51, 0x04, 0x00, 0x00, 0x13, 0x04, 0xa3, 0x10, 0x0b, 0x04, 0x00, 0x00,
-  0x5c, 0x00, 0x00, 0x00, 0xc4, 0x8d, 0x00, 0x50, 0x51, 0x02, 0x65, 0x40,
-  0x44, 0xf9, 0x95, 0x43, 0xb1, 0x94, 0x4d, 0xa1, 0x06, 0x94, 0x69, 0x40,
-  0xc9, 0x95, 0x42, 0xb9, 0x15, 0x42, 0x21, 0x15, 0x5e, 0xa9, 0x94, 0x4b,
-  0x19, 0x95, 0x5d, 0x71, 0xcd, 0x00, 0xd0, 0x30, 0x46, 0xe0, 0xf6, 0xb1,
-  0x68, 0x7b, 0x63, 0x04, 0xef, 0x9e, 0x96, 0xf7, 0x37, 0x46, 0xa0, 0xb3,
-  0xe6, 0x1c, 0x82, 0xc1, 0x18, 0x81, 0x98, 0x8b, 0x69, 0xff, 0x8d, 0x11,
-  0x80, 0x25, 0xcf, 0xc6, 0xbf, 0x30, 0x46, 0x30, 0xa6, 0xab, 0x9a, 0xfb,
-  0xc2, 0x18, 0xc1, 0x3f, 0x93, 0xfe, 0xef, 0x0b, 0x63, 0x04, 0x74, 0x0d,
-  0x8a, 0xf9, 0x37, 0x46, 0xd0, 0xc2, 0x71, 0x0c, 0xfa, 0xc2, 0x18, 0xc1,
-  0xdc, 0xb7, 0x69, 0xea, 0x0b, 0x63, 0x04, 0xad, 0x1b, 0xf2, 0xbc, 0x2f,
-  0x8c, 0x11, 0xf0, 0x39, 0xeb, 0xe3, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20,
-  0x0a, 0x06, 0x63, 0x04, 0x20, 0x08, 0x82, 0x2a, 0x18, 0x8c, 0x11, 0x80,
-  0x20, 0xe8, 0xdf, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0xdc, 0x8d, 0x11,
-  0x80, 0x20, 0x08, 0xb2, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0xe8, 0x82,
-  0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x0c, 0x06, 0x63, 0x04, 0x2c, 0x7b,
-  0x86, 0xf2, 0x37, 0x46, 0x80, 0xfa, 0x65, 0xac, 0x7e, 0x63, 0x04, 0xf9,
-  0xa9, 0x8b, 0xb3, 0x37, 0x46, 0xa0, 0xd7, 0xe0, 0x8e, 0x7b, 0x63, 0x04,
-  0x2a, 0x9e, 0xdb, 0xf6, 0x37, 0x46, 0xf0, 0xf6, 0x29, 0x3d, 0x7a, 0x63,
-  0x04, 0xeb, 0x1c, 0xb3, 0xa8, 0x37, 0x46, 0x90, 0x86, 0x30, 0xba, 0x7b,
-  0x63, 0x04, 0x77, 0x1b, 0xab, 0xf6, 0x37, 0x46, 0x10, 0xf3, 0x60, 0x9f,
-  0x7b, 0x63, 0x04, 0xe6, 0xbd, 0xae, 0xb2, 0x37, 0x46, 0x00, 0x82, 0x30,
-  0x1e, 0x8e, 0xc1, 0x18, 0xc1, 0x3a, 0xe2, 0x31, 0x0b, 0x06, 0x63, 0x04,
-  0x20, 0x48, 0xb7, 0x39, 0x18, 0x8c, 0x11, 0x80, 0x20, 0xb8, 0xe6, 0x60,
-  0x30, 0x46, 0x00, 0x82, 0x20, 0x5b, 0xff, 0xc2, 0x18, 0x01, 0xdb, 0xce,
-  0x3f, 0xe9, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xbf, 0x30, 0x46, 0xc0,
-  0xb6, 0xf1, 0x2b, 0x6f, 0x63, 0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c,
-  0x11, 0xf4, 0xb1, 0xe8, 0xe2, 0xdf, 0x18, 0x41, 0xad, 0xd6, 0x6a, 0xfb,
-  0x8d, 0x11, 0xc8, 0xa2, 0xdb, 0xd3, 0x60, 0x30, 0x46, 0xc0, 0xc3, 0xab,
-  0x4e, 0x77, 0x63, 0x04, 0x20, 0x08, 0x82, 0x24, 0x18, 0x8c, 0x11, 0x80,
-  0x20, 0x08, 0x82, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0x08, 0x7f, 0x23,
-  0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x37, 0x03, 0x00, 0x00, 0x00,
-  0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xd0, 0xe1, 0x42, 0x1f, 0xb8, 0xc2,
-  0x2c, 0xcc, 0x82, 0x29, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0x97,
-  0x0b, 0x7e, 0xf0, 0x0a, 0xb8, 0x80, 0x0b, 0xa7, 0x30, 0x62, 0x90, 0x00,
-  0x20, 0x08, 0x06, 0x9d, 0x2e, 0xfc, 0x01, 0x2c, 0xe0, 0x02, 0x2e, 0xa0,
-  0xc2, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x74, 0xbb, 0x00, 0x0a, 0xa7,
-  0xa0, 0x0b, 0xba, 0x90, 0x0a, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xd0,
-  0xf1, 0x42, 0x28, 0xa0, 0x82, 0x2e, 0xe8, 0x82, 0x2a, 0x8c, 0x18, 0x24,
-  0x00, 0x08, 0x82, 0x41, 0xd7, 0x0b, 0xa2, 0x20, 0x0b, 0xbb, 0xb0, 0x0b,
-  0xab, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0xc6, 0x39, 0x80, 0x42,
-  0x2f, 0xf0, 0x02, 0x2d, 0xe0, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18,
-  0x18, 0xe8, 0x10, 0x0a, 0xbe, 0xd0, 0x0b, 0xac, 0x90, 0x07, 0x23, 0x06,
-  0x09, 0x00, 0x82, 0x60, 0x60, 0xa4, 0x83, 0x28, 0xf8, 0x82, 0x2f, 0xd8,
-  0x82, 0x1e, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x81, 0xa1, 0x0e, 0xa3,
-  0xf0, 0x0b, 0xbf, 0xe0, 0x0a, 0x7b, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08,
-  0x06, 0xc6, 0x3a, 0x90, 0x02, 0x38, 0x80, 0xc3, 0x2d, 0xf0, 0xc1, 0x88,
-  0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xec, 0x50, 0x0a, 0xe1, 0x10, 0x0e,
-  0xaf, 0xd0, 0x07, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x80, 0x99, 0x03,
-  0x28, 0x1c, 0xe2, 0x30, 0x9a, 0x10, 0x04, 0xc3, 0x11, 0x41, 0x14, 0x7c,
-  0xb3, 0x0c, 0x51, 0x10, 0x0c, 0x47, 0x08, 0x55, 0xf0, 0xcd, 0x32, 0x08,
-  0x43, 0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0xcd, 0x3b, 0xa0, 0x82,
-  0xc3, 0x28, 0x49, 0x14, 0x99, 0x83, 0x39, 0x88, 0x42, 0x34, 0x9a, 0x10,
-  0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30,
-  0x4b, 0x10, 0x0d, 0x47, 0x20, 0x7a, 0x10, 0x7c, 0xb3, 0x0c, 0x44, 0x11,
-  0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x43, 0x0f, 0xb4, 0x00, 0x8d,
-  0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x53, 0x0f, 0xb5, 0x00, 0x8d, 0x18,
-  0x18, 0x00, 0x08, 0x82, 0xc1, 0x63, 0x0f, 0xec, 0x20, 0x8c, 0x18, 0x18,
-  0x00, 0x08, 0x82, 0xc1, 0x73, 0x0f, 0xed, 0x20, 0x8c, 0x18, 0x18, 0x00,
-  0x08, 0x82, 0xc1, 0x83, 0x0f, 0xb9, 0x40, 0x8d, 0x18, 0x18, 0x00, 0x08,
-  0x82, 0xc1, 0x93, 0x0f, 0xba, 0x40, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82,
-  0xc1, 0xa3, 0x0f, 0xf0, 0x20, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1,
-  0xb3, 0x0f, 0xf1, 0x20, 0x98, 0x60, 0xc0, 0xc7, 0x04, 0x03, 0x3e, 0x23,
-  0x06, 0x07, 0x00, 0x82, 0x60, 0x80, 0xe9, 0x03, 0x2d, 0x6c, 0xf7, 0x30,
-  0x9a, 0x10, 0x08, 0xa3, 0x09, 0xc2, 0x60, 0x42, 0x21, 0x1f, 0x13, 0x0a,
-  0xf9, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x24, 0x12, 0xba, 0x20,
-  0xc4, 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x23, 0xb1, 0x0b,
-  0x82, 0x1c, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x44, 0x12, 0xe0,
-  0x20, 0xa4, 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x25, 0x11,
-  0x0e, 0x82, 0x1a, 0x18, 0x32, 0x06, 0xf2, 0x31, 0x64, 0x0c, 0xe4, 0x63,
-  0xc4, 0x1b, 0xc8, 0xc7, 0x08, 0x38, 0x90, 0x8f, 0x11, 0x42, 0x7c, 0x8c,
-  0x10, 0xe2, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f, 0x4b, 0xbc,
-  0x83, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, 0x4b, 0xc0, 0x83,
-  0x60, 0x42, 0x1d, 0xc0, 0xc7, 0x04, 0x3b, 0x80, 0xcf, 0x88, 0x81, 0x01,
-  0x80, 0x20, 0x18, 0x3c, 0x31, 0x41, 0x0f, 0xc6, 0x88, 0x81, 0x01, 0x80,
-  0x20, 0x18, 0x3c, 0x32, 0x51, 0x0f, 0x86, 0x39, 0xa2, 0x00, 0x1f, 0x0b,
-  0x06, 0xf8, 0xd8, 0x43, 0x0a, 0xf0, 0xb1, 0x80, 0x80, 0x8f, 0x0d, 0x12,
-  0x7d, 0x4c, 0x90, 0xe8, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f,
-  0x4e, 0xf4, 0x83, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, 0x4e,
-  0xf8, 0x83, 0x60, 0x82, 0x28, 0xc8, 0xc7, 0x84, 0x51, 0x90, 0x8f, 0x95,
-  0x82, 0x10, 0x1f, 0x33, 0x05, 0x21, 0x3e, 0x66, 0x18, 0xf2, 0xb1, 0x60,
-  0x90, 0x8f, 0x1d, 0x87, 0x7c, 0x2c, 0x20, 0xe4, 0x63, 0xd4, 0x00, 0x1f,
-  0xa3, 0x04, 0xf8, 0x8c, 0x26, 0x9c, 0x01, 0x30, 0x9a, 0x80, 0x06, 0x81,
-  0x11, 0x82, 0x7c, 0x8c, 0x10, 0xe4, 0x33, 0x62, 0x50, 0x01, 0x20, 0x08,
-  0x06, 0xd3, 0x59, 0xb8, 0x44, 0x2a, 0x9c, 0x82, 0x10, 0xb0, 0x02, 0x2b,
-  0x84, 0x45, 0x58, 0xf4, 0x43, 0x1d, 0xd0, 0x01, 0x2b, 0xc4, 0x01, 0x1c,
-  0xb0, 0x02, 0x2b, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26,
-  0x0c, 0xc2, 0x68, 0x02, 0x31, 0xcc, 0x12, 0x44, 0xc3, 0x11, 0xa3, 0x20,
-  0x0b, 0xc1, 0x37, 0xcb, 0x60, 0x1c, 0xc1, 0x88, 0xc1, 0x03, 0x80, 0x20,
-  0x18, 0x34, 0x70, 0x91, 0x12, 0xaf, 0xd0, 0x0a, 0xab, 0xa0, 0x0a, 0xb2,
-  0x20, 0x0b, 0x67, 0x71, 0x16, 0x23, 0x21, 0x0b, 0xa3, 0x09, 0x01, 0x30,
-  0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x4b, 0x10, 0x0d, 0x47, 0xa0,
-  0x82, 0x2e, 0x04, 0xdf, 0x2c, 0x03, 0x92, 0x04, 0x23, 0x06, 0x06, 0x00,
-  0x82, 0x60, 0xf0, 0xd0, 0x05, 0x4d, 0xc0, 0xc2, 0x88, 0x81, 0x01, 0x80,
-  0x20, 0x18, 0x3c, 0x75, 0x51, 0x13, 0xb0, 0x30, 0x62, 0x60, 0x00, 0x20,
-  0x08, 0x06, 0x8f, 0x5d, 0xb0, 0x85, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08,
-  0x06, 0xcf, 0x5d, 0xb4, 0x85, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06,
-  0x0f, 0x5e, 0xe4, 0x04, 0x2d, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1,
-  0x93, 0x17, 0x3a, 0x41, 0x0b, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0,
-  0xe8, 0x05, 0x5c, 0x08, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xec,
-  0x45, 0x5c, 0x08, 0x26, 0x18, 0xf0, 0x31, 0xc1, 0x80, 0xcf, 0x88, 0xc1,
-  0x01, 0x80, 0x20, 0x18, 0x60, 0x7a, 0x41, 0x13, 0xbb, 0x70, 0x17, 0xa3,
-  0x09, 0x81, 0x30, 0x9a, 0x20, 0x0c, 0x26, 0x14, 0xf2, 0x31, 0xa1, 0x90,
-  0xcf, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0xa2, 0xa1, 0x13, 0x42,
-  0x3c, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x34, 0x1a, 0x3b, 0x21,
-  0xc8, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0xa4, 0x01, 0x16,
-  0x42, 0x3a, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x54, 0x1a, 0x61,
-  0x21, 0xa8, 0x83, 0x21, 0xe3, 0x20, 0x1f, 0x43, 0xc6, 0x41, 0x3e, 0x46,
-  0xbc, 0x83, 0x7c, 0x8c, 0x80, 0x07, 0xf9, 0x18, 0x21, 0xc4, 0xc7, 0x08,
-  0x21, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xb4, 0xc6, 0x5b,
-  0x08, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xb8, 0x06, 0x5c, 0x08,
-  0x26, 0xd4, 0x03, 0x7c, 0x4c, 0xb0, 0x07, 0xf8, 0x8c, 0x18, 0x18, 0x00,
-  0x08, 0x82, 0xc1, 0x13, 0x1b, 0x74, 0x61, 0x8c, 0x18, 0x18, 0x00, 0x08,
-  0x82, 0xc1, 0x23, 0x1b, 0x75, 0x61, 0x98, 0x23, 0x12, 0xf0, 0xb1, 0x60,
-  0x80, 0x8f, 0x3d, 0x24, 0x01, 0x1f, 0x0b, 0x08, 0xf8, 0xd8, 0x20, 0xd1,
-  0xc7, 0x04, 0x89, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xe4,
-  0x46, 0x5f, 0x08, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xe8, 0x86,
-  0x5f, 0x08, 0x26, 0x88, 0x84, 0x7c, 0x4c, 0x18, 0x09, 0xf9, 0x58, 0x49,
-  0x08, 0xf1, 0x31, 0x93, 0x10, 0xe2, 0x63, 0x86, 0x21, 0x1f, 0x0b, 0x06,
-  0xf9, 0xd8, 0x71, 0xc8, 0xc7, 0x02, 0x42, 0x3e, 0x46, 0x0d, 0xf0, 0x31,
-  0x4a, 0x80, 0xcf, 0x68, 0xc2, 0x19, 0x00, 0xa3, 0x09, 0x68, 0x10, 0x18,
-  0x21, 0xc8, 0xc7, 0x08, 0x41, 0x3e, 0x23, 0x06, 0x15, 0x00, 0x82, 0x60,
-  0x30, 0x9d, 0x87, 0x6b, 0xa4, 0xc4, 0x49, 0x08, 0x01, 0x4b, 0xb0, 0x44,
-  0x78, 0x84, 0x47, 0x5f, 0xd4, 0x01, 0x1d, 0xb0, 0x44, 0x1c, 0xc0, 0x01,
-  0x4b, 0xb0, 0xc4, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2,
-  0x20, 0xcc, 0x12, 0x44, 0xc3, 0x11, 0x22, 0x31, 0x17, 0xc1, 0x37, 0xcb,
-  0xa0, 0x2c, 0xc1, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0xef, 0x81,
-  0x1a, 0x2e, 0xc1, 0x12, 0x2a, 0x91, 0x12, 0x31, 0x11, 0x13, 0xe6, 0x61,
-  0x1e, 0xa2, 0x11, 0x13, 0xa3, 0x09, 0x01, 0x60, 0x41, 0x5d, 0xc8, 0xc7,
-  0x82, 0xba, 0x80, 0xcf, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0xf3,
-  0xc1, 0x1a, 0x33, 0x11, 0x13, 0x01, 0x4e, 0xd4, 0x44, 0x4d, 0xa8, 0x87,
-  0x7a, 0x98, 0x46, 0x4d, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c,
-  0x26, 0x0c, 0xc2, 0x68, 0x02, 0x31, 0xcc, 0x12, 0x44, 0xc3, 0x11, 0x2c,
-  0xa1, 0x17, 0xc1, 0x37, 0xcb, 0xc0, 0x34, 0xc1, 0x88, 0xc1, 0x03, 0x80,
-  0x20, 0x18, 0x34, 0xf9, 0x21, 0x1b, 0x38, 0x61, 0x13, 0x34, 0x31, 0x13,
-  0x3b, 0xb1, 0x13, 0xf0, 0x01, 0x1f, 0xac, 0xb1, 0x13, 0xa3, 0x09, 0x01,
-  0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0xcd, 0x7e, 0xd0, 0xc6, 0x4e,
-  0xe0, 0x84, 0x4d, 0xd4, 0x44, 0x4f, 0xf4, 0x84, 0x7c, 0xc8, 0x87, 0x6b,
-  0xf4, 0xc4, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x88, 0xc1, 0x01,
-  0x80, 0x20, 0x18, 0x60, 0xf9, 0x31, 0x1b, 0x3a, 0x11, 0x1f, 0xa3, 0x09,
-  0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x60, 0x03, 0x02, 0x1f,
-  0x1b, 0x0e, 0xf8, 0xd8, 0x70, 0xc0, 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10,
-  0x0c, 0x30, 0x10, 0xd1, 0x8d, 0xb0, 0x00, 0x8f, 0xd1, 0x84, 0x00, 0x18,
-  0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18, 0x31, 0x58, 0x00, 0x10, 0x04,
-  0x83, 0xaa, 0x44, 0xca, 0xe3, 0x30, 0x8a, 0x41, 0x08, 0x46, 0x0c, 0x0e,
-  0x00, 0x04, 0xc1, 0x00, 0x2b, 0x91, 0xdf, 0x30, 0x8b, 0xf3, 0x18, 0x4d,
-  0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d, 0x18, 0x84, 0x11, 0x83, 0x05,
-  0x00, 0x41, 0x30, 0xa8, 0x54, 0x44, 0x3d, 0x98, 0x45, 0x19, 0x84, 0x60,
-  0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x30, 0x15, 0x21, 0x8f, 0xb5, 0x20,
-  0x91, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18,
-  0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0xea, 0x45, 0xde, 0x23, 0x82, 0x9e,
-  0x41, 0x08, 0x66, 0x09, 0xa2, 0xe1, 0x08, 0xb4, 0xa8, 0x8d, 0xe0, 0x9b,
-  0x65, 0x70, 0x9e, 0x60, 0xc4, 0xe0, 0x01, 0x40, 0x10, 0x0c, 0x9a, 0x1a,
-  0x71, 0x0f, 0xba, 0x90, 0x0b, 0xb8, 0x78, 0x8b, 0xbb, 0xb8, 0x0b, 0x16,
-  0x61, 0x11, 0xf4, 0xb8, 0x8b, 0xd1, 0x84, 0x00, 0x18, 0x31, 0x78, 0x00,
-  0x10, 0x04, 0x83, 0xe6, 0x46, 0xe0, 0xe3, 0x2e, 0xe8, 0x42, 0x2e, 0xe2,
-  0x22, 0x2f, 0xf2, 0xc2, 0x45, 0x5c, 0x44, 0x3d, 0xf2, 0x62, 0x34, 0x21,
-  0x00, 0x46, 0x13, 0x84, 0x60, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xb0,
-  0x1a, 0x79, 0x0f, 0xbb, 0x68, 0x91, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10,
-  0x82, 0xd1, 0x84, 0x41, 0xb0, 0x01, 0x81, 0x8f, 0x0d, 0x06, 0x7c, 0x6c,
-  0x40, 0xe0, 0x33, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x18, 0x8f, 0xd8,
-  0x47, 0x5f, 0xf0, 0xc7, 0x68, 0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68,
-  0xc2, 0x20, 0x8c, 0x18, 0x2c, 0x00, 0x08, 0x82, 0x41, 0x15, 0x26, 0x21,
-  0x72, 0x18, 0xc5, 0x20, 0x04, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x80,
-  0x85, 0xc9, 0x7e, 0x88, 0xc6, 0x88, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82,
-  0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x88, 0xc1, 0x02, 0x80, 0x20, 0x18, 0x54,
-  0x66, 0x62, 0x22, 0xcc, 0xa2, 0x0c, 0x42, 0x30, 0x62, 0x70, 0x00, 0x20,
-  0x08, 0x06, 0x98, 0x99, 0x80, 0xc8, 0x69, 0x80, 0xc9, 0x68, 0x42, 0x00,
-  0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x18, 0x2c, 0x00, 0x08,
-  0x82, 0x41, 0xb5, 0x26, 0x2b, 0x12, 0x41, 0xcf, 0x20, 0x04, 0xb3, 0x04,
-  0xd1, 0x70, 0x04, 0x69, 0xc0, 0x47, 0xf0, 0xcd, 0x32, 0x40, 0x51, 0x30,
-  0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x4d, 0x9c, 0xa8, 0x08, 0x6c, 0xb8,
-  0x06, 0x6b, 0xac, 0xc6, 0x6c, 0xcc, 0x06, 0x9a, 0xa0, 0x09, 0x89, 0xcc,
-  0xc6, 0x68, 0x42, 0x00, 0x8c, 0x18, 0x3c, 0x00, 0x08, 0x82, 0x41, 0x33,
-  0x27, 0x2c, 0x32, 0x1b, 0xb0, 0xe1, 0x1a, 0xad, 0x51, 0x1b, 0xb5, 0xa1,
-  0x26, 0x6a, 0x62, 0x22, 0xb5, 0x31, 0x9a, 0x10, 0x00, 0x23, 0x06, 0x0f,
-  0x00, 0x82, 0x60, 0xd0, 0xd4, 0x89, 0x8b, 0xd8, 0x86, 0x6c, 0xc0, 0xc6,
-  0x6b, 0xdc, 0xc6, 0x6d, 0xb0, 0x09, 0x9b, 0xa0, 0xc8, 0x6d, 0x8c, 0x26,
-  0x04, 0xc0, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0x72, 0xc2, 0x22,
-  0xb3, 0xa1, 0x26, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09,
-  0x83, 0x60, 0x43, 0x02, 0x1f, 0x1b, 0x10, 0xf8, 0xd8, 0x70, 0xc0, 0x67,
-  0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xb0, 0x3c, 0x99, 0x11, 0xdd, 0xc8,
-  0x91, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, 0x84, 0x41, 0x18,
-  0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0xca, 0x4f, 0x7c, 0xe4, 0x30, 0x8a,
-  0x41, 0x08, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0x00, 0xf3, 0x13, 0x1c,
-  0xf9, 0x0d, 0x30, 0x19, 0x4d, 0x08, 0x80, 0xd1, 0x04, 0x21, 0x18, 0x4d,
-  0x18, 0x84, 0x11, 0x83, 0x05, 0x00, 0x41, 0x30, 0xa8, 0x46, 0x65, 0x4c,
-  0x98, 0x45, 0x19, 0x84, 0x60, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0xb0,
-  0x51, 0xe9, 0x11, 0xf2, 0xe8, 0x93, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10,
-  0x82, 0xd1, 0x84, 0x41, 0x18, 0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0x0a,
-  0x55, 0xd0, 0x24, 0x82, 0x9e, 0x41, 0x08, 0x66, 0x09, 0xa2, 0x81, 0xaa,
-  0x01, 0x7c, 0x00, 0xbd, 0x11, 0x48, 0x85, 0xc0, 0x13, 0x83, 0x34, 0x10,
-  0xb9, 0x50, 0x50, 0x82, 0x81, 0x05, 0xc7, 0x82, 0xc0, 0xe7, 0x19, 0xa8,
-  0x1a, 0xc4, 0x07, 0xd0, 0x1b, 0x81, 0x54, 0x08, 0x3c, 0x31, 0x48, 0x03,
-  0x91, 0x0b, 0x05, 0x24, 0x18, 0x54, 0x70, 0x1c, 0x88, 0x7c, 0x9e, 0x81,
-  0xaa, 0x81, 0x7c, 0x00, 0xbd, 0x11, 0x48, 0x85, 0xc0, 0x13, 0x83, 0x34,
-  0x10, 0xb9, 0x50, 0xf0, 0x81, 0x01, 0x05, 0xc7, 0x80, 0xcc, 0xe7, 0x19,
-  0xa8, 0x1a, 0xcc, 0x07, 0xd0, 0x1b, 0x81, 0x54, 0x08, 0xf3, 0x31, 0xcc,
-  0x07, 0x91, 0x0b, 0xc5, 0x7c, 0x18, 0xf3, 0x71, 0xcc, 0x07, 0x32, 0x9f,
-  0x67, 0x34, 0xc1, 0x3c, 0x84, 0xe1, 0x88, 0x20, 0x3f, 0x82, 0x6f, 0x96,
-  0x41, 0x9a, 0x82, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x64, 0x05,
-  0x55, 0x8c, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x66, 0x25, 0x55,
-  0x8c, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x68, 0x45, 0x55, 0x8c,
-  0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x6a, 0xa5, 0x4d, 0x86, 0x11,
-  0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x6c, 0xc5, 0x4d, 0x86, 0x11, 0x03,
-  0x03, 0x00, 0x41, 0x30, 0x78, 0x6e, 0xe5, 0x4d, 0x06, 0x1b, 0x50, 0x44,
-  0x3e, 0x36, 0xa4, 0x88, 0x7c, 0x6c, 0x50, 0x11, 0xf9, 0x8c, 0x18, 0x18,
-  0x00, 0x08, 0x82, 0xc1, 0xb3, 0x2b, 0x74, 0x32, 0x8c, 0x18, 0x18, 0x00,
-  0x08, 0x82, 0xc1, 0xc3, 0x2b, 0x75, 0x32, 0x8c, 0x18, 0x18, 0x00, 0x08,
-  0x82, 0xc1, 0xd3, 0x2b, 0x76, 0x32, 0xd8, 0xf0, 0x22, 0xf0, 0xb1, 0x01,
-  0x46, 0xe0, 0x63, 0x43, 0x8c, 0xc0, 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10,
-  0x0c, 0x22, 0x70, 0xc1, 0x93, 0xc1, 0x44, 0x46, 0x0c, 0x0e, 0x00, 0x04,
-  0xc1, 0x20, 0x0a, 0x97, 0x3c, 0x19, 0x4e, 0x64, 0xc4, 0xe0, 0x00, 0x40,
-  0x10, 0x0c, 0x22, 0x71, 0xd1, 0x93, 0x01, 0x45, 0x2c, 0xb1, 0x11, 0xf9,
-  0x58, 0x72, 0x23, 0xf2, 0xb1, 0x04, 0x47, 0xe4, 0x63, 0x3a, 0x32, 0xc4,
-  0xc7, 0x76, 0x64, 0x88, 0x8f, 0xf1, 0xc8, 0x10, 0x1f, 0x4b, 0x06, 0xfa,
-  0x58, 0x32, 0xd0, 0xc7, 0x92, 0x81, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82,
-  0x60, 0xf0, 0xb4, 0xcb, 0xb8, 0x0c, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60,
-  0xf0, 0xb8, 0x0b, 0xb9, 0x0c, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0,
-  0xbc, 0x4b, 0xb9, 0x0c, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xc0,
-  0x0b, 0xaa, 0x0c, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xc4, 0x4b,
-  0xaa, 0x0c, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xc8, 0x8b, 0xaa,
-  0x0c, 0x36, 0x9c, 0x89, 0x7c, 0x6c, 0x40, 0x13, 0xf9, 0xd8, 0x90, 0x26,
-  0xf2, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x5e, 0x5e, 0x65,
-  0x18, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xe7, 0x5e, 0x60, 0x65, 0x18,
-  0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x07, 0x5f, 0x62, 0x65, 0xb0, 0xc1,
-  0x4d, 0xe4, 0x63, 0xc3, 0x9b, 0xc8, 0xc7, 0x06, 0x38, 0x91, 0xcf, 0x88,
-  0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0xf8, 0x22, 0x2b, 0x39, 0x12, 0x2f,
-  0xa3, 0x09, 0xc1, 0x60, 0x45, 0x40, 0x1f, 0x2b, 0x04, 0xfa, 0x58, 0x31,
-  0xd0, 0x67, 0x96, 0x60, 0x1a, 0xa8, 0x18, 0x0c, 0x49, 0x1d, 0xa2, 0x81,
-  0x8a, 0xc1, 0x90, 0xd4, 0x21, 0x1a, 0xa8, 0x18, 0x0c, 0x49, 0x1d, 0xa2,
-  0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0xc0, 0x40, 0x46, 0x57, 0xc2, 0x24,
-  0x5f, 0x46, 0x13, 0x02, 0x60, 0x38, 0x22, 0x58, 0x13, 0xe7, 0x9b, 0x65,
-  0xa0, 0xba, 0x60, 0x38, 0x42, 0x58, 0x93, 0xe0, 0x9b, 0x65, 0xa8, 0xac,
-  0x60, 0x34, 0x81, 0x08, 0x2c, 0x40, 0xe4, 0x63, 0x02, 0x22, 0x1f, 0x1b,
-  0x10, 0xf9, 0xcc, 0x12, 0x74, 0xc3, 0x11, 0xc7, 0x9c, 0x04, 0xdf, 0x2c,
-  0xc3, 0xd5, 0x05, 0xc3, 0x11, 0x7d, 0x40, 0x27, 0xc1, 0x37, 0xcb, 0x80,
-  0x65, 0x81, 0x35, 0xae, 0x22, 0x9f, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30,
-  0xd0, 0x54, 0x86, 0x5c, 0x5c, 0xa5, 0x09, 0x46, 0x0c, 0x10, 0x00, 0x04,
-  0xc1, 0x40, 0x5b, 0x99, 0x72, 0x71, 0x95, 0x26, 0x30, 0xc8, 0x55, 0xe4,
-  0x33, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x5a, 0xcb, 0x9c, 0x8b, 0xab,
-  0x40, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x68, 0x2e, 0x83, 0x2e,
-  0xae, 0x02, 0x05, 0x36, 0xb9, 0x8a, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04,
-  0xc1, 0x40, 0x83, 0x19, 0x75, 0x71, 0x95, 0x29, 0x18, 0x31, 0x40, 0x00,
-  0x10, 0x04, 0x03, 0x2d, 0x66, 0xd6, 0xc5, 0x55, 0xa6, 0x60, 0x96, 0x20,
-  0x1b, 0xa8, 0x18, 0x1c, 0x8c, 0x0d, 0xae, 0x81, 0x8a, 0x41, 0xc1, 0xd8,
-  0xe0, 0x1a, 0xa8, 0x18, 0x0c, 0x8c, 0x0d, 0xae, 0x11, 0x83, 0x03, 0x00,
-  0x41, 0x30, 0x88, 0x72, 0x26, 0x5e, 0x84, 0x60, 0xc4, 0xe0, 0x00, 0x40,
-  0x10, 0x0c, 0x22, 0x9d, 0x91, 0x17, 0x22, 0x18, 0x8e, 0x08, 0x42, 0x45,
-  0xf8, 0x66, 0x19, 0xb4, 0x2d, 0x18, 0x4d, 0xc8, 0x02, 0x1b, 0x02, 0xf9,
-  0x58, 0x30, 0x2a, 0xf0, 0x19, 0x4d, 0xe0, 0x04, 0x33, 0x02, 0xf9, 0x58,
-  0x60, 0x2a, 0xf0, 0x31, 0x22, 0xa0, 0x8f, 0x05, 0x8d, 0x7c, 0x4c, 0x68,
-  0xe4, 0x63, 0x43, 0x23, 0x9f, 0x59, 0x82, 0x6d, 0xa0, 0x62, 0x30, 0x34,
-  0x30, 0xc8, 0x06, 0x2a, 0x06, 0x43, 0x03, 0x83, 0x6c, 0xa0, 0x62, 0x30,
-  0x34, 0x30, 0xc8, 0x66, 0x19, 0xb8, 0xae, 0xb3, 0x41, 0x5f, 0xe4, 0x33,
-  0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x9a, 0xd9, 0x80, 0x8c, 0xbe, 0x0c,
-  0xc1, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x68, 0x67, 0x13, 0x32, 0xfa,
-  0x32, 0x04, 0x66, 0xe8, 0x8b, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1,
-  0x40, 0x4b, 0x9b, 0x91, 0xd1, 0x17, 0x23, 0x18, 0x31, 0x40, 0x00, 0x10,
-  0x04, 0x03, 0x4d, 0x6d, 0x48, 0x46, 0x5f, 0x8c, 0xc0, 0x12, 0x7d, 0x91,
-  0xcf, 0x88, 0x01, 0x02, 0x80, 0x20, 0x18, 0x68, 0x6c, 0x63, 0x32, 0xfa,
-  0x92, 0x04, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xa0, 0xb5, 0xcd, 0xc9,
-  0xe8, 0x4b, 0x12, 0xcc, 0x12, 0x74, 0x03, 0x2d, 0x03, 0x39, 0x4c, 0xb4,
-  0x50, 0x39, 0x1c, 0xb6, 0x91, 0x83, 0x35, 0xd0, 0x32, 0x90, 0xc3, 0x44,
-  0x0b, 0x95, 0xc2, 0x61, 0x1b, 0x39, 0x58, 0x03, 0x2d, 0x03, 0x39, 0x4c,
-  0xb4, 0x50, 0x19, 0x1c, 0xb6, 0x91, 0x83, 0x35, 0x1c, 0x61, 0x0e, 0xba,
-  0x12, 0x7c, 0xb3, 0x0c, 0x5e, 0x1a, 0x04, 0xa3, 0x09, 0xad, 0x02, 0x0c,
-  0x47, 0x04, 0xbd, 0xe2, 0x7c, 0xb3, 0x0c, 0x1f, 0x1a, 0x04, 0xc3, 0x11,
-  0xc6, 0xbb, 0x28, 0xdf, 0x2c, 0x43, 0x18, 0x80, 0x41, 0x60, 0x47, 0xbc,
-  0xc8, 0x67, 0x96, 0x40, 0x0c, 0x0c, 0x71, 0x19, 0xf8, 0x8c, 0x18, 0x18,
-  0x00, 0x08, 0x82, 0xc1, 0xc3, 0x37, 0x72, 0x13, 0x58, 0xf0, 0x32, 0xf2,
-  0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xc7, 0x6f, 0x6c, 0x26, 0xb0,
-  0x00, 0x66, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x0f, 0xe8,
-  0xe4, 0x4c, 0x30, 0x4b, 0x20, 0x06, 0x03, 0x15, 0x83, 0x03, 0x06, 0x42,
-  0x18, 0x0c, 0x47, 0x38, 0xf8, 0xa2, 0x7c, 0xb3, 0x0c, 0x64, 0x30, 0x06,
-  0x81, 0x3d, 0xfa, 0x22, 0x9f, 0x59, 0x82, 0x32, 0x30, 0xe8, 0x66, 0xe0,
-  0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f, 0xe9, 0xec, 0x4d, 0x60,
-  0x01, 0xce, 0xc8, 0x67, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x9e, 0xd3,
-  0xf9, 0x99, 0xc0, 0x82, 0x9c, 0x91, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20,
-  0x18, 0x3c, 0xa9, 0x23, 0x36, 0xc1, 0x2c, 0x41, 0x19, 0x0c, 0x54, 0x0c,
-  0xce, 0x18, 0x08, 0x64, 0x30, 0x1c, 0x61, 0x85, 0x8c, 0xf2, 0xcd, 0x32,
-  0x9c, 0x81, 0x19, 0x04, 0x76, 0x8d, 0x8c, 0x7c, 0x66, 0x09, 0xd0, 0xc0,
-  0x30, 0xb0, 0x81, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0xae,
-  0x43, 0x3a, 0x81, 0x05, 0x61, 0x23, 0x9f, 0x11, 0x03, 0x03, 0x00, 0x41,
-  0x30, 0x78, 0x60, 0x07, 0x6d, 0x02, 0x0b, 0xc4, 0x46, 0x3e, 0x23, 0x06,
-  0x06, 0x00, 0x82, 0x60, 0xf0, 0xc8, 0xce, 0xda, 0x04, 0xb3, 0x04, 0x68,
-  0x30, 0xd0, 0x31, 0x90, 0xc1, 0x19, 0x90, 0x81, 0x19, 0x80, 0x82, 0x37,
-  0xd0, 0x31, 0x50, 0x67, 0x40, 0x99, 0x01, 0x28, 0x78, 0x03, 0x1d, 0x83,
-  0x71, 0x06, 0x92, 0x19, 0x80, 0x82, 0x37, 0x9a, 0xc0, 0x2e, 0x83, 0x11,
-  0x81, 0x7c, 0x8c, 0x10, 0xe4, 0x63, 0xc4, 0x20, 0x9f, 0x59, 0x02, 0x51,
-  0x18, 0x8e, 0x50, 0x89, 0x90, 0x09, 0xbe, 0xd1, 0x84, 0x78, 0x19, 0x66,
-  0x19, 0xd4, 0xa0, 0x0e, 0x04, 0x4b, 0x83, 0x40, 0x3e, 0x96, 0x06, 0x82,
-  0x7c, 0x2c, 0x0d, 0x06, 0xf9, 0x8c, 0x26, 0xd4, 0x0b, 0x30, 0x1c, 0x11,
-  0x94, 0x8c, 0xf3, 0xcd, 0x32, 0x88, 0xc2, 0x1a, 0x04, 0xc3, 0x11, 0x85,
-  0xca, 0x28, 0xdf, 0x2c, 0x43, 0x1b, 0xb0, 0x41, 0x60, 0x06, 0xcb, 0xc8,
-  0x67, 0x96, 0xc0, 0x0d, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x19,
-  0x9f, 0xdc, 0x39, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x21, 0x1f,
-  0xbe, 0x09, 0x2c, 0x80, 0x19, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82,
-  0xc1, 0x63, 0x3e, 0x7f, 0x13, 0x58, 0x30, 0x33, 0xf2, 0xb1, 0xa0, 0x66,
-  0xe0, 0x33, 0x4b, 0xe0, 0x06, 0x03, 0x15, 0x83, 0xc3, 0x06, 0x42, 0x1b,
-  0x0c, 0x47, 0x34, 0x33, 0xa3, 0x7c, 0xb3, 0x0c, 0x70, 0xf0, 0x06, 0x81,
-  0x39, 0x35, 0x23, 0x9f, 0x59, 0x82, 0x38, 0x18, 0x31, 0x30, 0x00, 0x10,
-  0x04, 0x83, 0x87, 0x7d, 0xc4, 0xe7, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04,
-  0x83, 0xa7, 0x7d, 0x4a, 0x27, 0xb0, 0x20, 0x67, 0xe4, 0x33, 0x62, 0x60,
-  0x00, 0x20, 0x08, 0x06, 0xcf, 0xfb, 0xa0, 0x4e, 0x60, 0x01, 0xcf, 0xc8,
-  0xc7, 0x02, 0x9f, 0x81, 0xcf, 0x2c, 0x41, 0x1c, 0x0c, 0x54, 0x0c, 0xce,
-  0x1b, 0x08, 0x70, 0x30, 0x1c, 0x51, 0xf1, 0x8c, 0xf2, 0xcd, 0x32, 0xcc,
-  0x81, 0x1c, 0x04, 0x66, 0xf9, 0x8c, 0x7c, 0x66, 0x09, 0xe8, 0x60, 0xc4,
-  0xc0, 0x00, 0x40, 0x10, 0x0c, 0x9e, 0xfa, 0x59, 0x9f, 0x6b, 0xc4, 0xc0,
-  0x00, 0x40, 0x10, 0x0c, 0x1e, 0xfb, 0x71, 0x9d, 0xc0, 0x02, 0xb1, 0x91,
-  0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0xf8, 0x13, 0x3b, 0x81,
-  0x05, 0x65, 0x23, 0x1f, 0x0b, 0xce, 0x06, 0x3e, 0xb3, 0x04, 0x74, 0x30,
-  0x50, 0x31, 0x38, 0x72, 0x20, 0xcc, 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20,
-  0x18, 0x44, 0xfb, 0x33, 0x3b, 0x53, 0xd8, 0x8c, 0x18, 0x1c, 0x00, 0x08,
-  0x82, 0x41, 0xc4, 0x3f, 0xb4, 0xb3, 0x88, 0xcd, 0x88, 0xc1, 0x01, 0x80,
-  0x20, 0x18, 0x44, 0xfd, 0x53, 0x3b, 0xc3, 0xd8, 0x8c, 0x18, 0x1c, 0x00,
-  0x08, 0x82, 0x41, 0xe4, 0x3f, 0xba, 0x33, 0x8c, 0xcd, 0x88, 0xc1, 0x01,
-  0x80, 0x20, 0x18, 0x44, 0xff, 0xb3, 0x3b, 0x03, 0xd9, 0x8c, 0x18, 0x1c,
-  0x00, 0x08, 0x82, 0x41, 0x04, 0x42, 0xbc, 0x33, 0x94, 0xcd, 0x2c, 0x81,
-  0x28, 0xcc, 0x32, 0xd8, 0x41, 0x28, 0xc4, 0x85, 0xbd, 0x82, 0xec, 0xc8,
-  0x67, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x34, 0xff, 0xc1, 0x1d, 0xd9,
-  0x79, 0x85, 0x60, 0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xb4, 0xff, 0xc9,
-  0x1d, 0xd9, 0x79, 0x85, 0xc0, 0x64, 0x41, 0x76, 0xe4, 0x33, 0x62, 0x80,
-  0x00, 0x20, 0x08, 0x06, 0x5a, 0x08, 0xed, 0x8e, 0xec, 0xc8, 0x42, 0x30,
-  0x62, 0x80, 0x00, 0x20, 0x08, 0x06, 0x9a, 0x08, 0xf1, 0x8e, 0xec, 0xc8,
-  0x42, 0x60, 0xb5, 0x20, 0x3b, 0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04,
-  0x03, 0x8d, 0x84, 0x7c, 0x47, 0x76, 0x6a, 0x21, 0x18, 0x31, 0x40, 0x00,
-  0x10, 0x04, 0x03, 0xad, 0x84, 0x7e, 0x47, 0x76, 0x6a, 0x21, 0xb0, 0x03,
-  0x0e, 0xe4, 0x63, 0x45, 0x1c, 0xc8, 0xc7, 0x06, 0x39, 0x90, 0xcf, 0x68,
-  0x02, 0xd9, 0x00, 0xc3, 0x11, 0x01, 0xdd, 0x38, 0xdf, 0x2c, 0x83, 0x28,
-  0xdc, 0x41, 0x30, 0x1c, 0x51, 0xe4, 0x8d, 0xf2, 0xcd, 0x32, 0xe4, 0x01,
-  0x1e, 0x04, 0x66, 0xec, 0x8d, 0x7c, 0x66, 0x09, 0xf4, 0x60, 0xc4, 0xc0,
-  0x00, 0x40, 0x10, 0x0c, 0x1e, 0x19, 0x42, 0xa1, 0x63, 0xc4, 0xc0, 0x00,
-  0x40, 0x10, 0x0c, 0x9e, 0x19, 0x5a, 0x9f, 0xc0, 0x82, 0xbf, 0x91, 0xcf,
-  0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0x35, 0xe4, 0x3e, 0x81, 0x05,
-  0xa2, 0x23, 0x1f, 0x0b, 0x48, 0x07, 0x3e, 0xb3, 0x04, 0x7a, 0x30, 0x50,
-  0x31, 0x38, 0x78, 0x20, 0xe4, 0xc1, 0x70, 0x44, 0x23, 0x3a, 0xca, 0x37,
-  0xcb, 0xc0, 0x07, 0x7b, 0x10, 0x98, 0x43, 0x3a, 0xf2, 0x99, 0x25, 0xe8,
-  0x83, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x76, 0x28, 0x86, 0x9e,
-  0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x78, 0x88, 0x7e, 0x02, 0x0b,
-  0x50, 0x47, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf8, 0xd0,
-  0xfd, 0x04, 0x16, 0xac, 0x8e, 0x7c, 0x2c, 0x68, 0x1d, 0xf8, 0xcc, 0x12,
-  0xf4, 0xc1, 0x40, 0xc5, 0xe0, 0xec, 0x81, 0xc0, 0x07, 0xc3, 0x11, 0xd5,
-  0xea, 0x28, 0xdf, 0x2c, 0xc3, 0x1f, 0xf8, 0x41, 0x60, 0x56, 0xeb, 0xc8,
-  0x67, 0x96, 0x00, 0x14, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x21,
-  0x23, 0x1d, 0xba, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x29, 0xa3,
-  0xfe, 0x09, 0x2c, 0x88, 0x1d, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82,
-  0xc1, 0x73, 0x46, 0x20, 0x14, 0x58, 0x40, 0x3b, 0xf2, 0xb1, 0xc0, 0x76,
-  0xe0, 0x33, 0x4b, 0x00, 0x0a, 0x03, 0x15, 0x83, 0xe3, 0x07, 0xc2, 0x1f,
-  0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xa4, 0x46, 0x22, 0x34, 0xc1,
-  0xce, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x6b, 0x34, 0x42, 0x4b,
-  0xec, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xc4, 0x46, 0x24, 0x34,
-  0xc8, 0xce, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x6d, 0x94, 0x42,
-  0x83, 0xec, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0xe4, 0x46, 0x2a,
-  0x34, 0xcc, 0xce, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x6f, 0xb4,
-  0x42, 0x03, 0xed, 0xcc, 0x12, 0x88, 0x82, 0xf9, 0x83, 0x2d, 0xc8, 0xc7,
-  0xfc, 0xe1, 0x16, 0xe4, 0x63, 0xfe, 0x80, 0x0b, 0xf2, 0x99, 0x25, 0x10,
-  0x85, 0x81, 0x9a, 0x41, 0x2f, 0xd0, 0xc0, 0x08, 0x05, 0x75, 0xa0, 0x03,
-  0xb8, 0x50, 0x03, 0x06, 0x14, 0x64, 0xc1, 0x0e, 0x06, 0x6a, 0x06, 0xbd,
-  0x40, 0x03, 0x23, 0x14, 0xd4, 0x81, 0x0e, 0xe0, 0x42, 0x0d, 0x18, 0x50,
-  0x90, 0x05, 0x3b, 0x18, 0xa8, 0x19, 0xf4, 0x02, 0x0d, 0x8c, 0x50, 0x50,
-  0x07, 0x3a, 0x80, 0x0b, 0x35, 0x60, 0x40, 0x41, 0x16, 0xec, 0xc0, 0x86,
-  0xd8, 0x91, 0x8f, 0x0d, 0xb1, 0x23, 0x1f, 0x1b, 0x62, 0x47, 0x3e, 0xb6,
-  0x1e, 0xb1, 0x23, 0x9f, 0x11, 0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xfa,
-  0x28, 0x87, 0xe6, 0x68, 0x8e, 0xd6, 0x88, 0x18, 0x31, 0x48, 0x00, 0x10,
-  0x04, 0x03, 0xa4, 0x8f, 0x72, 0x68, 0x8e, 0xe6, 0x48, 0x8c, 0x86, 0x11,
-  0x83, 0x04, 0x00, 0x41, 0x30, 0x40, 0xfa, 0x28, 0x87, 0xe6, 0x68, 0x8e,
-  0xd4, 0x48, 0x18, 0x31, 0x48, 0x00, 0x10, 0x04, 0x03, 0xa4, 0x8f, 0x72,
-  0x68, 0x8e, 0xe6, 0x28, 0x8c, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
+  0xc5, 0x05, 0x00, 0x00, 0x13, 0x04, 0xa7, 0x10, 0x0b, 0x04, 0x00, 0x00,
+  0x61, 0x00, 0x00, 0x00, 0xc4, 0x8d, 0x00, 0x50, 0x51, 0x02, 0x65, 0x40,
+  0x44, 0xf9, 0x95, 0x43, 0xa1, 0x06, 0x94, 0x69, 0x40, 0xc9, 0x95, 0x42,
+  0xb9, 0x15, 0x42, 0xb1, 0x94, 0x4d, 0x21, 0x95, 0x4a, 0xb9, 0x94, 0x51,
+  0x71, 0x95, 0x5d, 0xe1, 0xcd, 0x00, 0xd0, 0x30, 0x46, 0x00, 0x82, 0x30,
+  0x1e, 0x8e, 0xc1, 0x18, 0x81, 0x79, 0xaf, 0xab, 0xec, 0x8d, 0x11, 0xc4,
+  0x3c, 0xd8, 0xe7, 0xde, 0x18, 0x81, 0xdb, 0xc7, 0xa2, 0xed, 0x8d, 0x11,
+  0xbc, 0x7b, 0x5a, 0xde, 0xdf, 0x18, 0x81, 0xce, 0x9a, 0x73, 0x08, 0x06,
+  0x63, 0x04, 0x62, 0x2e, 0xa6, 0xfd, 0x37, 0x46, 0x00, 0x96, 0x3c, 0x1b,
+  0xff, 0xc2, 0x18, 0xc1, 0x98, 0xae, 0x6a, 0xee, 0x0b, 0x63, 0x04, 0xff,
+  0x4c, 0xfa, 0xbf, 0x2f, 0x8c, 0x11, 0xd0, 0x35, 0x28, 0xe6, 0xdf, 0x18,
+  0x41, 0x0b, 0xc7, 0x31, 0xe8, 0x0b, 0x63, 0x04, 0x73, 0xdf, 0xa6, 0xa9,
+  0x2f, 0x8c, 0x11, 0xb4, 0x6e, 0xc8, 0xf3, 0xbe, 0x30, 0x46, 0xc0, 0xe7,
+  0xac, 0x8f, 0x7f, 0x63, 0x04, 0x20, 0x08, 0x82, 0x28, 0x18, 0x8c, 0x11,
+  0x80, 0x20, 0x08, 0xaa, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0xc8, 0x82,
+  0xc1, 0x18, 0x01, 0x08, 0x82, 0xa0, 0x0b, 0x06, 0x63, 0x04, 0x20, 0x08,
+  0x82, 0x30, 0x18, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xc6, 0x60, 0x30, 0x46,
+  0x00, 0x82, 0x20, 0x28, 0x83, 0xc1, 0x18, 0x01, 0xcb, 0x9e, 0xa1, 0xfc,
+  0x8d, 0x11, 0xa0, 0x7e, 0x19, 0xab, 0xdf, 0x18, 0x41, 0x7e, 0xea, 0xe2,
+  0xec, 0x8d, 0x11, 0xe8, 0x35, 0xb8, 0xe3, 0xde, 0x18, 0x81, 0x8a, 0xe7,
+  0xb6, 0xfd, 0x8d, 0x11, 0xbc, 0x7d, 0x4a, 0x8f, 0xde, 0x18, 0xc1, 0x3a,
+  0xc7, 0x2c, 0xea, 0x8d, 0x11, 0xa4, 0x21, 0x8c, 0xee, 0xde, 0x18, 0xc1,
+  0xdd, 0xc6, 0xaa, 0xfd, 0x8d, 0x11, 0xac, 0x23, 0x1e, 0xb3, 0x60, 0x30,
+  0x46, 0x00, 0x82, 0x74, 0x9b, 0x83, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x6b,
+  0x0e, 0x06, 0x63, 0x04, 0x20, 0x08, 0xb2, 0xf5, 0x2f, 0x8c, 0x11, 0xb0,
+  0xed, 0xfc, 0x93, 0xde, 0x18, 0x01, 0x08, 0x82, 0x20, 0xfc, 0x0b, 0x63,
+  0x04, 0x6e, 0x1f, 0x8b, 0xb6, 0x2f, 0x8c, 0x11, 0xf4, 0xb1, 0xe8, 0xe2,
+  0xdf, 0x18, 0x41, 0xad, 0xd6, 0x6a, 0xfb, 0x8d, 0x11, 0xc8, 0xa2, 0xdb,
+  0xd3, 0x60, 0x30, 0x46, 0xc0, 0xc3, 0xab, 0x4e, 0x77, 0x63, 0x04, 0x20,
+  0x08, 0x82, 0xf8, 0x2f, 0x8c, 0x11, 0xb0, 0x6d, 0xfc, 0xca, 0xdb, 0x18,
+  0x01, 0x08, 0x82, 0x20, 0x09, 0x06, 0x63, 0x04, 0x20, 0x08, 0x82, 0x70,
+  0x37, 0x46, 0x00, 0x82, 0xa0, 0x7f, 0x7f, 0x63, 0x04, 0x20, 0x08, 0x82,
+  0x20, 0x18, 0x8c, 0x00, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xc2, 0xdf, 0x18,
+  0x01, 0x08, 0x82, 0x20, 0xfe, 0xcd, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00,
+  0x82, 0x60, 0xd0, 0xed, 0x82, 0x28, 0xc4, 0x82, 0x2d, 0xd8, 0x42, 0x2a,
+  0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41, 0xc7, 0x0b, 0xa3, 0x20, 0x0b,
+  0xbb, 0xb0, 0x0b, 0xaa, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x5d,
+  0x2f, 0x90, 0xc2, 0x2c, 0xec, 0xc2, 0x2e, 0xac, 0xc2, 0x88, 0x41, 0x02,
+  0x80, 0x20, 0x18, 0x74, 0xbe, 0x50, 0x0a, 0xaa, 0xd0, 0x0b, 0xbd, 0xc0,
+  0x0a, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xd0, 0xfd, 0x82, 0x29, 0xac,
+  0x42, 0x2f, 0xf4, 0x42, 0x2b, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x41,
+  0x07, 0x0e, 0xa7, 0x50, 0x0b, 0xbe, 0xe0, 0x0b, 0xae, 0x30, 0x62, 0x90,
+  0x00, 0x20, 0x08, 0x06, 0x86, 0x3a, 0x94, 0x02, 0x38, 0xfc, 0xc2, 0x2d,
+  0xec, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x18, 0xeb, 0x60, 0x0a,
+  0xe1, 0x00, 0x0e, 0xaf, 0xc0, 0x07, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60,
+  0x60, 0xb0, 0xc3, 0x29, 0x84, 0x43, 0x38, 0xe4, 0x42, 0x1f, 0x8c, 0x18,
+  0x24, 0x00, 0x08, 0x82, 0x81, 0xd1, 0x0e, 0xa8, 0x20, 0x0e, 0xe2, 0x10,
+  0x0b, 0x7e, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x86, 0x3b, 0xa4,
+  0xc2, 0x38, 0x8c, 0x83, 0x2e, 0xfc, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20,
+  0x18, 0x18, 0xef, 0xa0, 0x0a, 0xe4, 0x40, 0x0e, 0xb2, 0x00, 0x0a, 0x23,
+  0x06, 0x07, 0x00, 0x82, 0x60, 0x80, 0xa5, 0xc3, 0x28, 0x1c, 0xe5, 0x30,
+  0x9a, 0x10, 0x04, 0xc3, 0x11, 0x81, 0x14, 0x7c, 0xb3, 0x0c, 0x55, 0x10,
+  0x0c, 0x47, 0x08, 0x57, 0xf0, 0xcd, 0x32, 0x08, 0x43, 0x30, 0x62, 0xf0,
+  0x00, 0x20, 0x08, 0x06, 0x8d, 0x3c, 0x98, 0x82, 0xc3, 0x28, 0x49, 0x14,
+  0xa5, 0x43, 0x3a, 0x94, 0x42, 0x34, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42,
+  0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x4b, 0x50, 0x0d, 0x47,
+  0x20, 0x7a, 0x10, 0x7c, 0xb3, 0x0c, 0x44, 0x11, 0x8c, 0x18, 0x18, 0x00,
+  0x08, 0x82, 0xc1, 0x73, 0x0f, 0xb9, 0x00, 0x8d, 0x18, 0x18, 0x00, 0x08,
+  0x82, 0xc1, 0x83, 0x0f, 0xba, 0x00, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82,
+  0xc1, 0x93, 0x0f, 0xef, 0x20, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1,
+  0xa3, 0x0f, 0xf0, 0x20, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xb3,
+  0x0f, 0xbe, 0x40, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xc3, 0x0f,
+  0xbf, 0x40, 0x8d, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xd3, 0x0f, 0xf3,
+  0x20, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xe3, 0x0f, 0xf4, 0x20,
+  0x98, 0x60, 0xc0, 0xc7, 0x04, 0x03, 0x3e, 0x23, 0x06, 0x07, 0x00, 0x82,
+  0x60, 0x80, 0xf5, 0xc3, 0x2d, 0x6c, 0xfa, 0x30, 0x9a, 0x10, 0x08, 0xa3,
+  0x09, 0xc2, 0x60, 0x42, 0x21, 0x1f, 0x13, 0x0a, 0xf9, 0x8c, 0x18, 0x1c,
+  0x00, 0x08, 0x82, 0x41, 0x54, 0x12, 0xbe, 0x20, 0xb8, 0xc1, 0x88, 0xc1,
+  0x01, 0x80, 0x20, 0x18, 0x44, 0x26, 0xf1, 0x0b, 0xc2, 0x1b, 0x8c, 0x18,
+  0x1c, 0x00, 0x08, 0x82, 0x41, 0x74, 0x12, 0xe3, 0x20, 0xa4, 0xc1, 0x88,
+  0xc1, 0x01, 0x80, 0x20, 0x18, 0x44, 0x28, 0x41, 0x0e, 0x82, 0x1a, 0x18,
+  0x32, 0x06, 0xf2, 0x31, 0x64, 0x0c, 0xe4, 0x63, 0x84, 0x1b, 0xc8, 0xc7,
+  0x88, 0x37, 0x90, 0x8f, 0x11, 0x42, 0x7c, 0x8c, 0x10, 0xe2, 0x33, 0x62,
+  0x60, 0x00, 0x20, 0x08, 0x06, 0x0f, 0x4c, 0xb0, 0x83, 0x30, 0x62, 0x60,
+  0x00, 0x20, 0x08, 0x06, 0x4f, 0x4c, 0xb4, 0x83, 0x60, 0x02, 0x1d, 0xc0,
+  0xc7, 0x84, 0x3a, 0x80, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c,
+  0x34, 0x11, 0x0f, 0xc6, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0x35,
+  0x21, 0x0f, 0x86, 0x39, 0x7f, 0x00, 0x1f, 0x0b, 0x06, 0xf8, 0xd8, 0x13,
+  0x0a, 0xf0, 0xb1, 0x80, 0x80, 0x8f, 0x0d, 0x12, 0x7d, 0x4c, 0x90, 0xe8,
+  0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x0f, 0x4f, 0x80, 0x84, 0x30,
+  0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f, 0x4f, 0x84, 0x84, 0x60, 0x82,
+  0x28, 0xc8, 0xc7, 0x84, 0x51, 0x90, 0x8f, 0x9d, 0x82, 0x10, 0x1f, 0x43,
+  0x05, 0x21, 0x3e, 0x66, 0x18, 0xf2, 0xb1, 0x60, 0x90, 0x8f, 0x1d, 0x87,
+  0x7c, 0x2c, 0x20, 0xe4, 0x63, 0xd4, 0x00, 0x1f, 0xa3, 0x04, 0xf8, 0x8c,
+  0x26, 0x9c, 0x01, 0x30, 0x9a, 0x80, 0x06, 0x81, 0x11, 0x82, 0x7c, 0x8c,
+  0x10, 0xe4, 0x33, 0x62, 0x50, 0x01, 0x20, 0x08, 0x06, 0x93, 0x5a, 0xc4,
+  0x44, 0x2a, 0x9c, 0x82, 0x10, 0xb0, 0x02, 0x2b, 0x90, 0x05, 0x59, 0x80,
+  0x44, 0x1d, 0xd0, 0x01, 0x2b, 0xc4, 0x01, 0x1c, 0xb0, 0x02, 0x2b, 0x8c,
+  0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68, 0x02,
+  0x31, 0xcc, 0x12, 0x54, 0xc3, 0x11, 0xa3, 0x20, 0x0b, 0xc1, 0x37, 0xcb,
+  0x60, 0x1c, 0xc1, 0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0x73, 0x71,
+  0x12, 0xaf, 0xd0, 0x0a, 0xab, 0xa0, 0x0a, 0xb2, 0x20, 0x0b, 0x6a, 0xa1,
+  0x16, 0x26, 0x21, 0x0b, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3,
+  0x09, 0x83, 0x30, 0x4b, 0x50, 0x0d, 0x47, 0xa0, 0x82, 0x2e, 0x04, 0xdf,
+  0x2c, 0x03, 0x92, 0x04, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xdc,
+  0x45, 0x4e, 0xc0, 0xc2, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0x78,
+  0xa1, 0x13, 0xb0, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f, 0x5e,
+  0xbc, 0x85, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, 0x5e, 0xc0,
+  0x85, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xcf, 0x5e, 0xf8, 0x04,
+  0x2d, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xc3, 0x17, 0x3f, 0x41,
+  0x0b, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf4, 0xc5, 0x5c, 0x08,
+  0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf8, 0x05, 0x5d, 0x08, 0x26,
+  0x18, 0xf0, 0x31, 0xc1, 0x80, 0xcf, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18,
+  0x60, 0x7d, 0x71, 0x13, 0xbb, 0xa0, 0x17, 0xa3, 0x09, 0x81, 0x30, 0x9a,
+  0x20, 0x0c, 0x26, 0x14, 0xf2, 0x31, 0xa1, 0x90, 0xcf, 0x88, 0xc1, 0x01,
+  0x80, 0x20, 0x18, 0x44, 0xa5, 0xe1, 0x13, 0x82, 0x3b, 0x8c, 0x18, 0x1c,
+  0x00, 0x08, 0x82, 0x41, 0x64, 0x1a, 0x3f, 0x21, 0xbc, 0xc3, 0x88, 0xc1,
+  0x01, 0x80, 0x20, 0x18, 0x44, 0xa7, 0x31, 0x16, 0x42, 0x3a, 0x8c, 0x18,
+  0x1c, 0x00, 0x08, 0x82, 0x41, 0x84, 0x1a, 0x64, 0x21, 0xa8, 0x83, 0x21,
+  0xe3, 0x20, 0x1f, 0x43, 0xc6, 0x41, 0x3e, 0x46, 0xb8, 0x83, 0x7c, 0x8c,
+  0x78, 0x07, 0xf9, 0x18, 0x21, 0xc4, 0xc7, 0x08, 0x21, 0x3e, 0x23, 0x06,
+  0x06, 0x00, 0x82, 0x60, 0xf0, 0xc0, 0x06, 0x5b, 0x08, 0x23, 0x06, 0x06,
+  0x00, 0x82, 0x60, 0xf0, 0xc4, 0x46, 0x5b, 0x08, 0x26, 0xd0, 0x03, 0x7c,
+  0x4c, 0xa8, 0x07, 0xf8, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x43,
+  0x1b, 0x71, 0x61, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x53, 0x1b,
+  0x72, 0x61, 0x98, 0xf3, 0x0f, 0xf0, 0xb1, 0x60, 0x80, 0x8f, 0x3d, 0x21,
+  0x01, 0x1f, 0x0b, 0x08, 0xf8, 0xd8, 0x20, 0xd1, 0xc7, 0x04, 0x89, 0x3e,
+  0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf0, 0x06, 0x68, 0x08, 0x23,
+  0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf4, 0x46, 0x68, 0x08, 0x26, 0x88,
+  0x84, 0x7c, 0x4c, 0x18, 0x09, 0xf9, 0xd8, 0x49, 0x08, 0xf1, 0x31, 0x94,
+  0x10, 0xe2, 0x63, 0x86, 0x21, 0x1f, 0x0b, 0x06, 0xf9, 0xd8, 0x71, 0xc8,
+  0xc7, 0x02, 0x42, 0x3e, 0x46, 0x0d, 0xf0, 0x31, 0x4a, 0x80, 0xcf, 0x68,
+  0xc2, 0x19, 0x00, 0xa3, 0x09, 0x68, 0x10, 0x18, 0x21, 0xc8, 0xc7, 0x08,
+  0x41, 0x3e, 0x23, 0x06, 0x15, 0x00, 0x82, 0x60, 0x30, 0xa9, 0x47, 0x6c,
+  0xa4, 0xc4, 0x49, 0x08, 0x01, 0x4b, 0xb0, 0x04, 0x79, 0x90, 0x07, 0x68,
+  0xd4, 0x01, 0x1d, 0xb0, 0x44, 0x1c, 0xc0, 0x01, 0x4b, 0xb0, 0xc4, 0x68,
+  0x42, 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x68, 0xc2, 0x20, 0xcc, 0x12, 0x54,
+  0xc3, 0x11, 0x22, 0x31, 0x17, 0xc1, 0x37, 0xcb, 0xa0, 0x2c, 0xc1, 0x88,
+  0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0xf2, 0x61, 0x1a, 0x2e, 0xc1, 0x12,
+  0x2a, 0x91, 0x12, 0x31, 0x11, 0x13, 0xe9, 0x91, 0x1e, 0xa5, 0x11, 0x13,
+  0xa3, 0x09, 0x01, 0x60, 0x01, 0x4e, 0xc8, 0xc7, 0x02, 0x9d, 0x80, 0xcf,
+  0x88, 0xc1, 0x03, 0x80, 0x20, 0x18, 0x34, 0xf6, 0xa1, 0x1a, 0x33, 0x11,
+  0x13, 0xc1, 0x4d, 0xd4, 0x44, 0x4d, 0xb4, 0x47, 0x7b, 0xa4, 0x46, 0x4d,
+  0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0xc2, 0x68,
+  0x02, 0x31, 0xcc, 0x12, 0x54, 0xc3, 0x11, 0x2c, 0xc1, 0x17, 0xc1, 0x37,
+  0xcb, 0xc0, 0x34, 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0xf7,
+  0x11, 0x1b, 0x35, 0x41, 0x1f, 0xa3, 0x09, 0x81, 0x30, 0x9a, 0x20, 0x0c,
+  0x26, 0xdc, 0x84, 0x7c, 0x4c, 0xb8, 0x09, 0xf9, 0x98, 0x20, 0x16, 0xf0,
+  0x31, 0x61, 0x2c, 0xe0, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f,
+  0x88, 0xf8, 0x86, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xcf, 0x88,
+  0xfc, 0x86, 0x60, 0xc2, 0x5c, 0xc0, 0xc7, 0x04, 0xba, 0x80, 0xcf, 0x68,
+  0xc2, 0x02, 0x8c, 0x26, 0x30, 0x81, 0x11, 0x82, 0x7c, 0x8c, 0x10, 0xe4,
+  0x63, 0x08, 0x5b, 0xc0, 0xc7, 0x90, 0xb6, 0x80, 0x8f, 0x09, 0x86, 0x7c,
+  0x4c, 0x30, 0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, 0x8b,
+  0xac, 0x87, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xcf, 0x8b, 0xb0,
+  0x87, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x4d, 0x8c, 0x94, 0x47,
+  0x5b, 0xac, 0x05, 0x31, 0xc0, 0x05, 0x5c, 0xa0, 0x08, 0x8a, 0x90, 0x07,
+  0x5c, 0x8c, 0x26, 0x04, 0x80, 0x05, 0x77, 0x21, 0x1f, 0x0b, 0xf2, 0x02,
+  0x3e, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xd4, 0x48, 0x7a, 0xc8,
+  0x05, 0x5c, 0x04, 0x76, 0x41, 0x17, 0x74, 0xc1, 0x22, 0x2c, 0x82, 0x1e,
+  0x74, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08,
+  0xa3, 0x09, 0xc4, 0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x8e,
+  0xb8, 0x87, 0x5d, 0xd0, 0x45, 0x03, 0xe5, 0x45, 0x5e, 0xc4, 0x48, 0x8c,
+  0xb4, 0x47, 0x5e, 0x8c, 0x26, 0x04, 0x80, 0x05, 0xa0, 0x21, 0x1f, 0x0b,
+  0x44, 0x03, 0x3e, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xf8, 0x88,
+  0x7c, 0xec, 0x45, 0x5e, 0x04, 0x7f, 0xd1, 0x17, 0x7d, 0x51, 0x23, 0x35,
+  0x12, 0x1f, 0x7d, 0x31, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a,
+  0x30, 0x08, 0xa3, 0x09, 0xc4, 0x60, 0x0d, 0x11, 0x1f, 0x6b, 0x88, 0xf8,
+  0x58, 0x43, 0xc4, 0xc7, 0x1a, 0x22, 0x3e, 0x46, 0x5c, 0xf2, 0x31, 0x02,
+  0x93, 0x8f, 0x11, 0x99, 0x7c, 0x8c, 0xd0, 0xe4, 0x63, 0x04, 0x03, 0x1f,
+  0x23, 0x18, 0xf8, 0x18, 0xc1, 0xc0, 0xc7, 0x08, 0x06, 0x3e, 0x23, 0x06,
+  0x0f, 0x00, 0x82, 0x60, 0xd0, 0xbc, 0xc9, 0x88, 0xac, 0x46, 0x6a, 0x98,
+  0x41, 0x18, 0xb8, 0x86, 0x6b, 0x98, 0x89, 0x99, 0x88, 0x88, 0x6b, 0x8c,
+  0x26, 0x04, 0x80, 0x05, 0xb5, 0x21, 0x1f, 0x0b, 0x6e, 0x03, 0x3e, 0x23,
+  0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xcc, 0xc9, 0x89, 0xc0, 0x86, 0x6b,
+  0x04, 0xb4, 0x21, 0x1b, 0xb2, 0xa1, 0x26, 0x6a, 0x62, 0x22, 0xb2, 0x31,
+  0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09,
+  0xc4, 0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x0d, 0x9e, 0xb0, 0x08,
+  0x6d, 0xc8, 0xc6, 0x1b, 0xb8, 0xc1, 0x6d, 0xdc, 0xc6, 0x9b, 0xbc, 0xc9,
+  0x8a, 0xdc, 0xc6, 0x68, 0x42, 0x00, 0x58, 0xe0, 0x1b, 0xf2, 0xb1, 0x00,
+  0x3c, 0xe0, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x0d, 0x9f, 0xc0,
+  0x48, 0x6e, 0xdc, 0x46, 0xd0, 0x1b, 0xbb, 0xb1, 0x1b, 0x73, 0x32, 0x27,
+  0x2f, 0xb2, 0x1b, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09,
+  0x83, 0x30, 0x9a, 0x40, 0x0c, 0xd6, 0x10, 0xf1, 0xb1, 0x86, 0x88, 0x8f,
+  0x35, 0x44, 0x7c, 0xac, 0x21, 0xe2, 0x63, 0x44, 0x1d, 0xc8, 0xc7, 0x08,
+  0x3b, 0x90, 0x8f, 0x11, 0x77, 0x20, 0x1f, 0x23, 0xf0, 0x40, 0x3e, 0x46,
+  0x30, 0xf0, 0x31, 0x82, 0x81, 0x8f, 0x11, 0x0c, 0x7c, 0x8c, 0x60, 0xe0,
+  0x63, 0x62, 0x40, 0xc4, 0xc7, 0xc4, 0x80, 0x88, 0x8f, 0x89, 0x01, 0x11,
+  0x1f, 0x13, 0x03, 0x22, 0x3e, 0x46, 0x88, 0x82, 0x7c, 0x8c, 0x18, 0x05,
+  0xf9, 0x18, 0x41, 0x0a, 0xf2, 0x31, 0xa2, 0x14, 0xe4, 0x63, 0x04, 0x03,
+  0x1f, 0x23, 0x18, 0xf8, 0x18, 0xc1, 0xc0, 0xc7, 0x08, 0x06, 0x3e, 0xb3,
+  0x04, 0xd5, 0x70, 0x84, 0x7a, 0xe4, 0x48, 0xf0, 0xcd, 0x32, 0x38, 0x4f,
+  0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x4f, 0xae, 0xec, 0x89, 0x7c,
+  0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xa3, 0x2b, 0x7c, 0x22, 0x1f,
+  0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xec, 0x4a, 0xac, 0x08, 0x23,
+  0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xf0, 0x8a, 0xac, 0x08, 0x23, 0x06,
+  0x06, 0x00, 0x82, 0x60, 0xf0, 0xf4, 0x0a, 0xa8, 0xd8, 0xc7, 0x88, 0x81,
+  0x01, 0x80, 0x20, 0x18, 0x3c, 0xbe, 0x12, 0x2a, 0xf6, 0x31, 0x62, 0x60,
+  0x00, 0x20, 0x08, 0x06, 0xcf, 0xaf, 0xd4, 0x8a, 0x30, 0x62, 0x60, 0x00,
+  0x20, 0x08, 0x06, 0x0f, 0xb8, 0xd8, 0x8a, 0x60, 0x82, 0x01, 0x1f, 0x13,
+  0x0c, 0xf8, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0xf6, 0x2b, 0x79,
+  0xd2, 0x1f, 0xbc, 0x32, 0x9a, 0x10, 0x08, 0xa3, 0x09, 0xc2, 0x60, 0x42,
+  0x21, 0x1f, 0x13, 0x0a, 0xf9, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41,
+  0x74, 0x2e, 0xa0, 0x22, 0xc0, 0xc8, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18,
+  0x44, 0xe8, 0x12, 0x2a, 0x42, 0x8c, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82,
+  0x41, 0x94, 0x2e, 0xa5, 0x22, 0xac, 0xc8, 0x88, 0xc1, 0x01, 0x80, 0x20,
+  0x18, 0x44, 0xea, 0x62, 0x2a, 0x02, 0x8b, 0x18, 0x52, 0x22, 0xf2, 0x31,
+  0xa4, 0x44, 0xe4, 0x63, 0x04, 0x8c, 0xc8, 0xc7, 0x88, 0x18, 0x91, 0x8f,
+  0x11, 0x42, 0x7c, 0x8c, 0x10, 0xe2, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08,
+  0x06, 0x8f, 0xbc, 0xb8, 0x8a, 0x30, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06,
+  0xcf, 0xbc, 0xbc, 0x8a, 0x60, 0x82, 0x8d, 0xc0, 0xc7, 0x84, 0x1b, 0x81,
+  0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0xf6, 0x32, 0x2b, 0xc6,
+  0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0xf7, 0x42, 0x2b, 0x86, 0x39,
+  0x61, 0x02, 0x1f, 0x0b, 0x06, 0xf8, 0xd8, 0x33, 0x26, 0xf0, 0xb1, 0x80,
+  0x80, 0x8f, 0x0d, 0x12, 0x7d, 0x4c, 0x90, 0xe8, 0x33, 0x62, 0x60, 0x00,
+  0x20, 0x08, 0x06, 0x8f, 0xbf, 0x88, 0x8b, 0x30, 0x62, 0x60, 0x00, 0x20,
+  0x08, 0x06, 0xcf, 0xbf, 0x8c, 0x8b, 0x60, 0x02, 0x99, 0xc8, 0xc7, 0x84,
+  0x32, 0x91, 0x8f, 0xa5, 0x89, 0x10, 0x1f, 0x53, 0x13, 0x21, 0x3e, 0x66,
+  0x18, 0xf2, 0xb1, 0x60, 0x90, 0x8f, 0x1d, 0x87, 0x7c, 0x2c, 0x20, 0xe4,
+  0x63, 0xd4, 0x00, 0x1f, 0xa3, 0x04, 0xf8, 0x8c, 0x26, 0x9c, 0x01, 0x30,
+  0x9a, 0x80, 0x06, 0x81, 0xa1, 0x81, 0x20, 0x1f, 0x0b, 0x0a, 0xf9, 0x58,
+  0x1a, 0x0c, 0xf2, 0xb1, 0xc0, 0x90, 0x8f, 0x0d, 0x72, 0x02, 0x1f, 0x13,
+  0xe6, 0x04, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xc8, 0x8c,
+  0xbb, 0x08, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xcc, 0xcc, 0xbb,
+  0x08, 0x26, 0x8c, 0x0a, 0x7c, 0x4c, 0x20, 0x15, 0xf8, 0x98, 0xc0, 0xc8,
+  0xc7, 0x04, 0x46, 0x3e, 0x66, 0xe8, 0x09, 0x7c, 0xcc, 0xd8, 0x13, 0xf8,
+  0x98, 0x00, 0xc9, 0xc7, 0x04, 0x48, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82,
+  0x60, 0xf0, 0xf0, 0x4c, 0xbe, 0x30, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60,
+  0xf0, 0xf4, 0x8c, 0xbe, 0x30, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0,
+  0xfc, 0xcc, 0xbc, 0xec, 0x49, 0x9e, 0x10, 0x83, 0x9f, 0xf8, 0x89, 0xcd,
+  0xd8, 0x8c, 0xbc, 0xf8, 0xc9, 0x68, 0x42, 0x00, 0x58, 0x50, 0x2a, 0xf2,
+  0xb1, 0xe0, 0x54, 0xe0, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0xcd,
+  0xd8, 0xdc, 0x0b, 0xa8, 0xf8, 0x49, 0x40, 0x2a, 0xa2, 0x22, 0x2a, 0x3a,
+  0xa3, 0x33, 0xf6, 0x22, 0x2a, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04,
+  0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x0f, 0x00, 0x82,
+  0x60, 0xd0, 0xa0, 0x0d, 0xbf, 0x90, 0x8a, 0xa8, 0x34, 0xd0, 0xa9, 0x9c,
+  0xca, 0xcf, 0xfc, 0xcc, 0xbe, 0x9c, 0xca, 0x68, 0x42, 0x00, 0x58, 0xe0,
+  0x2a, 0xf2, 0xb1, 0x00, 0x56, 0xe0, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08,
+  0x06, 0x0d, 0xdb, 0x80, 0x4c, 0xaa, 0x9c, 0x4a, 0xd0, 0x2a, 0xab, 0xb2,
+  0x2a, 0x63, 0x33, 0x36, 0xff, 0xb2, 0x2a, 0xa3, 0x09, 0x01, 0x30, 0x9a,
+  0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, 0xd6, 0x10, 0xf1,
+  0xb1, 0x86, 0x88, 0x8f, 0x35, 0x44, 0x7c, 0xac, 0x21, 0xe2, 0x63, 0xc4,
+  0x25, 0x1f, 0x23, 0x30, 0xf9, 0x18, 0x91, 0xc9, 0xc7, 0x08, 0x4d, 0x3e,
+  0x46, 0x30, 0xf0, 0x31, 0x82, 0x81, 0x8f, 0x11, 0x0c, 0x7c, 0x8c, 0x60,
+  0xe0, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x4d, 0xdf, 0xc4, 0x4c,
+  0xae, 0xdc, 0x8a, 0x19, 0x84, 0x01, 0xaf, 0xf0, 0x0a, 0xdd, 0xd0, 0x0d,
+  0xcc, 0xf0, 0xca, 0x68, 0x42, 0x00, 0x58, 0x30, 0x2e, 0xf2, 0xb1, 0xa0,
+  0x5c, 0xe0, 0x33, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x4d, 0xe8, 0xd4,
+  0x8c, 0xaf, 0xf0, 0x4a, 0x20, 0x2e, 0xe0, 0x02, 0x2e, 0x78, 0x83, 0x37,
+  0x34, 0x03, 0x2e, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09,
+  0x83, 0x30, 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0,
+  0x98, 0x8e, 0xce, 0x88, 0x0b, 0xb8, 0xbc, 0x81, 0x1b, 0x94, 0x4b, 0xb9,
+  0xf4, 0x4d, 0xdf, 0xe4, 0x4c, 0xb9, 0x8c, 0x26, 0x04, 0x80, 0x05, 0xec,
+  0x22, 0x1f, 0x0b, 0xdc, 0x05, 0x3e, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60,
+  0xd0, 0xa8, 0x8e, 0xcf, 0x9c, 0x4b, 0xb9, 0x04, 0xeb, 0x92, 0x2e, 0xe9,
+  0x12, 0x3a, 0xa1, 0xd3, 0x33, 0xe9, 0x32, 0x9a, 0x10, 0x00, 0xa3, 0x09,
+  0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x60, 0x0d, 0x11, 0x1f,
+  0x6b, 0x88, 0xf8, 0x58, 0x43, 0xc4, 0xc7, 0x1a, 0x22, 0x3e, 0x46, 0xd4,
+  0x81, 0x7c, 0x8c, 0xb0, 0x03, 0xf9, 0x18, 0x71, 0x07, 0xf2, 0x31, 0x02,
+  0x0f, 0xe4, 0x63, 0x04, 0x03, 0x1f, 0x23, 0x18, 0xf8, 0x18, 0xc1, 0xc0,
+  0xc7, 0x08, 0x06, 0x3e, 0x26, 0x06, 0x44, 0x7c, 0x4c, 0x0c, 0x88, 0xf8,
+  0x98, 0x18, 0x10, 0xf1, 0x31, 0x31, 0x20, 0xe2, 0x63, 0x84, 0x28, 0xc8,
+  0xc7, 0x88, 0x51, 0x90, 0x8f, 0x11, 0xa4, 0x20, 0x1f, 0x23, 0x4a, 0x41,
+  0x3e, 0x46, 0x30, 0xf0, 0x31, 0x82, 0x81, 0x8f, 0x11, 0x0c, 0x7c, 0x8c,
+  0x60, 0xe0, 0x33, 0x4b, 0x50, 0x0d, 0x47, 0xe0, 0x8b, 0xd9, 0x04, 0xdf,
+  0x2c, 0x03, 0x14, 0x05, 0x23, 0x06, 0x0f, 0x00, 0x82, 0x60, 0xd0, 0xa0,
+  0x0f, 0xdf, 0x90, 0x8c, 0xc8, 0x80, 0xcc, 0xbf, 0x9c, 0xcc, 0xc9, 0xfc,
+  0xce, 0xef, 0xec, 0xcd, 0xc9, 0x8c, 0x26, 0x04, 0xc0, 0x88, 0xc1, 0x03,
+  0x80, 0x20, 0x18, 0x34, 0xea, 0xe3, 0x37, 0x27, 0x43, 0x32, 0x22, 0x13,
+  0x32, 0x29, 0x93, 0x32, 0xe1, 0x13, 0x3e, 0x7d, 0x93, 0x32, 0xa3, 0x09,
+  0x01, 0x30, 0x9a, 0x20, 0x04, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x80,
+  0xa1, 0x8f, 0xe8, 0x98, 0x0c, 0xf8, 0x8c, 0x26, 0x04, 0xc0, 0x68, 0x82,
+  0x10, 0x8c, 0x26, 0x0c, 0x82, 0x0d, 0x08, 0x7c, 0x6c, 0x38, 0xe0, 0x63,
+  0xc3, 0x01, 0x9f, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0xc0, 0xde, 0x27,
+  0x75, 0x5a, 0x26, 0x76, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46,
+  0x13, 0x06, 0x61, 0xc4, 0x60, 0x01, 0x40, 0x10, 0x0c, 0x2a, 0xfa, 0xb1,
+  0x9d, 0xc3, 0x28, 0x06, 0x21, 0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x03,
+  0x8c, 0x7e, 0x5c, 0x47, 0x66, 0x70, 0x67, 0x34, 0x21, 0x00, 0x46, 0x13,
+  0x84, 0x60, 0x34, 0x61, 0x10, 0x46, 0x0c, 0x16, 0x00, 0x04, 0xc1, 0xa0,
+  0xca, 0x9f, 0xdd, 0x61, 0x16, 0x65, 0x10, 0x82, 0x11, 0x83, 0x03, 0x00,
+  0x41, 0x30, 0xc0, 0xf2, 0x67, 0x76, 0x6e, 0x66, 0x7e, 0x46, 0x13, 0x02,
+  0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06, 0x61, 0xc4, 0x60, 0x01, 0x40,
+  0x10, 0x0c, 0x2a, 0xff, 0x01, 0x9f, 0x08, 0x7a, 0x06, 0x21, 0x98, 0x25,
+  0xa8, 0x86, 0x23, 0x68, 0x26, 0x74, 0x82, 0x6f, 0x96, 0x41, 0x9a, 0x82,
+  0x11, 0x83, 0x07, 0x00, 0x41, 0x30, 0x68, 0x48, 0x08, 0x77, 0xc0, 0xc6,
+  0x67, 0x78, 0x66, 0x67, 0xc6, 0x66, 0x6c, 0xf6, 0x67, 0x7f, 0x6e, 0x67,
+  0x6c, 0x46, 0x13, 0x02, 0x60, 0xc4, 0xe0, 0x01, 0x40, 0x10, 0x0c, 0x1a,
+  0x13, 0xd2, 0x9d, 0xb1, 0x01, 0x1b, 0x9f, 0xe9, 0x99, 0xb2, 0x29, 0x9b,
+  0xfe, 0xe9, 0x9f, 0xdc, 0x29, 0x9b, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10,
+  0x82, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0xc0, 0x48, 0xc8, 0x77, 0xc4,
+  0x86, 0x7f, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06,
+  0xc1, 0x06, 0x04, 0x3e, 0x36, 0x18, 0xf0, 0xb1, 0x01, 0x81, 0xcf, 0x88,
+  0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0x2b, 0x54, 0x3e, 0x69, 0xd3, 0x3e,
+  0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x62,
+  0xb0, 0x00, 0x20, 0x08, 0x06, 0x15, 0x0c, 0xc9, 0xcf, 0x61, 0x14, 0x83,
+  0x10, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x01, 0x06, 0x43, 0xea, 0xe3,
+  0x36, 0xf4, 0x33, 0x9a, 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30,
+  0x08, 0x23, 0x06, 0x0b, 0x00, 0x82, 0x60, 0x50, 0xd5, 0xd0, 0xfd, 0x30,
+  0x8b, 0x32, 0x08, 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x60, 0x35,
+  0xf4, 0x3e, 0x73, 0xf3, 0x42, 0xa3, 0x09, 0x01, 0x30, 0x9a, 0x20, 0x04,
+  0xa3, 0x09, 0x83, 0x30, 0x62, 0xb0, 0x00, 0x20, 0x08, 0x06, 0x95, 0x0e,
+  0xf1, 0x4f, 0x04, 0x3d, 0x83, 0x10, 0xcc, 0x12, 0x54, 0xc3, 0x11, 0x70,
+  0xc3, 0x3b, 0xc1, 0x37, 0xcb, 0x40, 0x55, 0xc1, 0x88, 0xc1, 0x03, 0x80,
+  0x20, 0x18, 0x34, 0x60, 0x44, 0x3f, 0x7c, 0xa3, 0x37, 0x78, 0x73, 0x37,
+  0x7f, 0xf3, 0x37, 0x37, 0x74, 0x43, 0xf3, 0xf3, 0x37, 0xa3, 0x09, 0x01,
+  0x30, 0x62, 0xf0, 0x00, 0x20, 0x08, 0x06, 0x8d, 0x18, 0xd9, 0xcf, 0xdf,
+  0xf0, 0x8d, 0xde, 0xe4, 0x4d, 0xe8, 0x84, 0x4e, 0x0e, 0xe5, 0x50, 0xfd,
+  0x84, 0xce, 0x68, 0x42, 0x00, 0x8c, 0x18, 0x3c, 0x00, 0x08, 0x82, 0x41,
+  0x43, 0x46, 0xf8, 0x23, 0x3a, 0x7e, 0xc3, 0x37, 0x7b, 0x33, 0x3a, 0xa3,
+  0xb3, 0x43, 0x3b, 0x74, 0x3f, 0xa3, 0x33, 0x9a, 0x10, 0x00, 0x23, 0x06,
+  0x07, 0x00, 0x82, 0x60, 0x80, 0x85, 0xd1, 0xfe, 0xfc, 0x4d, 0x0e, 0x8d,
+  0x26, 0x04, 0xc0, 0x68, 0x82, 0x10, 0x8c, 0x26, 0x0c, 0x82, 0x0d, 0x09,
+  0x7c, 0x6c, 0x40, 0xe0, 0x63, 0xc3, 0x01, 0x9f, 0x11, 0x83, 0x03, 0x00,
+  0x41, 0x30, 0xc0, 0xd0, 0x48, 0x84, 0x4c, 0x47, 0x85, 0x46, 0x13, 0x02,
+  0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06, 0x61, 0xc4, 0x60, 0x01, 0x40,
+  0x10, 0x0c, 0xaa, 0x36, 0x7a, 0xa1, 0xc3, 0x28, 0x06, 0x21, 0x18, 0x31,
+  0x38, 0x00, 0x10, 0x04, 0x03, 0xac, 0x8d, 0x4e, 0x68, 0x75, 0x62, 0x68,
+  0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, 0x61, 0x10, 0x46, 0x0c,
+  0x16, 0x00, 0x04, 0xc1, 0xa0, 0x92, 0x23, 0x1a, 0x62, 0x16, 0x65, 0x10,
+  0x82, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0xc0, 0xe4, 0x88, 0x85, 0x60,
+  0x87, 0x8d, 0x46, 0x13, 0x02, 0x60, 0x34, 0x41, 0x08, 0x46, 0x13, 0x06,
+  0x61, 0xc4, 0x60, 0x01, 0x40, 0x10, 0x0c, 0xaa, 0x3b, 0xca, 0xa1, 0x08,
+  0x7a, 0x06, 0x21, 0x98, 0x25, 0xa8, 0x06, 0xca, 0x06, 0xbc, 0x03, 0x64,
+  0x4e, 0xe0, 0x31, 0x02, 0xc6, 0x0c, 0x9e, 0x42, 0x54, 0x4a, 0x71, 0x1d,
+  0x46, 0x2e, 0x1c, 0x94, 0x80, 0x60, 0x41, 0xb2, 0x28, 0xbc, 0x9b, 0x06,
+  0xca, 0x06, 0xbd, 0x03, 0x64, 0x4e, 0xe0, 0x31, 0x02, 0xc6, 0x0c, 0x9e,
+  0x42, 0x54, 0x4a, 0x71, 0x1d, 0x46, 0x2e, 0x1c, 0x90, 0x80, 0x50, 0x41,
+  0x72, 0x28, 0xbf, 0x9b, 0x06, 0xca, 0x06, 0xbe, 0x03, 0x64, 0x4e, 0xe0,
+  0x31, 0x02, 0xc6, 0x0c, 0x9e, 0x42, 0x54, 0x4a, 0x71, 0x1d, 0x46, 0x2e,
+  0x1c, 0x7c, 0x80, 0x40, 0x41, 0x32, 0x28, 0xbe, 0x9b, 0x06, 0xca, 0x06,
+  0xbf, 0x03, 0x64, 0x4e, 0xe0, 0x31, 0xc2, 0xef, 0x0c, 0xbf, 0x43, 0x54,
+  0x4a, 0x71, 0x1d, 0x46, 0x2e, 0x1c, 0xbf, 0x83, 0xfc, 0x4e, 0xf2, 0x3b,
+  0xca, 0xef, 0xa6, 0xd1, 0x04, 0xd9, 0x11, 0x86, 0x23, 0x82, 0xf3, 0x09,
+  0xbe, 0x59, 0x06, 0xeb, 0x0a, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0,
+  0x09, 0xa5, 0x3b, 0x32, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x11,
+  0x25, 0x3c, 0x32, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x19, 0xa5,
+  0x3c, 0x32, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x21, 0xa5, 0x1e,
+  0x1a, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x29, 0x25, 0x1f, 0x1a,
+  0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x31, 0xa5, 0x1f, 0x1a, 0x6c,
+  0xb8, 0x1f, 0xf9, 0xd8, 0x80, 0x3f, 0xf2, 0xb1, 0x21, 0x7f, 0xe4, 0x33,
+  0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x8f, 0x2a, 0x91, 0xd1, 0x30, 0x62,
+  0x60, 0x00, 0x20, 0x08, 0x06, 0xcf, 0x2a, 0x95, 0xd1, 0x30, 0x62, 0x60,
+  0x00, 0x20, 0x08, 0x06, 0x0f, 0x2b, 0x99, 0xd1, 0x60, 0x83, 0xff, 0xc0,
+  0xc7, 0x86, 0xff, 0x81, 0x8f, 0x0d, 0x20, 0x04, 0x9f, 0x11, 0x83, 0x03,
+  0x00, 0x41, 0x30, 0x88, 0x5e, 0x09, 0x8d, 0x86, 0xf9, 0x19, 0x31, 0x38,
+  0x00, 0x10, 0x04, 0x83, 0x08, 0x96, 0xd2, 0x68, 0xa0, 0x9f, 0x11, 0x83,
+  0x03, 0x00, 0x41, 0x30, 0x88, 0x62, 0x49, 0x8d, 0x86, 0xfa, 0xb1, 0xa4,
+  0x84, 0xe4, 0x63, 0x89, 0x09, 0xc9, 0xc7, 0x92, 0x13, 0x92, 0x8f, 0xa5,
+  0xd0, 0x10, 0x1f, 0x53, 0xa1, 0x21, 0x3e, 0xb6, 0x42, 0x43, 0x7c, 0x2c,
+  0x19, 0xe8, 0x63, 0xc9, 0x40, 0x1f, 0x4b, 0x06, 0xfa, 0x8c, 0x18, 0x18,
+  0x00, 0x08, 0x82, 0xc1, 0xc3, 0x4b, 0xb2, 0x34, 0x8c, 0x18, 0x18, 0x00,
+  0x08, 0x82, 0xc1, 0xd3, 0x4b, 0xb3, 0x34, 0x8c, 0x18, 0x18, 0x00, 0x08,
+  0x82, 0xc1, 0xe3, 0x4b, 0xb4, 0x34, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82,
+  0xc1, 0xf3, 0x4b, 0x78, 0x34, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1,
+  0x03, 0x4e, 0x79, 0x34, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0x13,
+  0x4e, 0x7a, 0x34, 0xd8, 0x60, 0x43, 0xf2, 0xb1, 0xe1, 0x86, 0xe4, 0x63,
+  0x03, 0x0e, 0xc9, 0x67, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x9e, 0x72,
+  0xfa, 0xa3, 0x61, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x1e, 0x73, 0x02,
+  0xa5, 0x61, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x9e, 0x73, 0x0a, 0xa5,
+  0xc1, 0x86, 0x3d, 0x92, 0x8f, 0x0d, 0x7c, 0x24, 0x1f, 0x1b, 0xfa, 0x48,
+  0x3e, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x80, 0x9d, 0x53, 0x28, 0x95,
+  0x10, 0x38, 0x8d, 0x26, 0x04, 0x83, 0x15, 0x01, 0x7d, 0xac, 0x10, 0xe8,
+  0x63, 0xc5, 0x40, 0x9f, 0x59, 0x82, 0x6b, 0xa0, 0x62, 0x30, 0x2c, 0x75,
+  0xa8, 0x06, 0x2a, 0x06, 0xc3, 0x52, 0x87, 0x6a, 0xa0, 0x62, 0x30, 0x2c,
+  0x75, 0xa8, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0x00, 0x7b, 0xa7, 0x54,
+  0x6a, 0x21, 0x74, 0x1a, 0x4d, 0x08, 0x80, 0xe1, 0x88, 0x00, 0x87, 0x9c,
+  0x6f, 0x96, 0x01, 0x0b, 0x83, 0x60, 0x38, 0x42, 0xb8, 0xa1, 0xe0, 0x9b,
+  0x65, 0xc8, 0xb4, 0x60, 0x34, 0x81, 0x08, 0x2c, 0x40, 0xe4, 0x63, 0x02,
+  0x22, 0x1f, 0x1b, 0x10, 0xf9, 0xcc, 0x12, 0x84, 0xc1, 0x70, 0xc4, 0xf1,
+  0x43, 0xc1, 0x37, 0xcb, 0xb0, 0x85, 0x41, 0x30, 0x1c, 0xd1, 0x07, 0x60,
+  0x14, 0x7c, 0xb3, 0x0c, 0x5c, 0x17, 0x58, 0xa3, 0x47, 0xf2, 0x19, 0x31,
+  0x40, 0x00, 0x10, 0x04, 0x03, 0x2d, 0x9f, 0x6a, 0x49, 0x8f, 0x9a, 0x60,
+  0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0x34, 0x7d, 0xb2, 0x25, 0x3d, 0x6a,
+  0x02, 0x83, 0xf4, 0x48, 0x3e, 0x23, 0x06, 0x08, 0x00, 0x82, 0x60, 0xa0,
+  0xf1, 0x13, 0x2e, 0xe9, 0x11, 0x14, 0x8c, 0x18, 0x20, 0x00, 0x08, 0x82,
+  0x81, 0xd6, 0x4f, 0xb9, 0xa4, 0x47, 0x50, 0x60, 0x93, 0x1e, 0xc9, 0x67,
+  0xc4, 0x00, 0x01, 0x40, 0x10, 0x0c, 0xb4, 0x7f, 0xda, 0x25, 0x3d, 0x9a,
+  0x82, 0x11, 0x03, 0x04, 0x00, 0x41, 0x30, 0xd0, 0x40, 0x8a, 0x97, 0xf4,
+  0x68, 0x0a, 0x66, 0x09, 0xba, 0x81, 0x8a, 0xc1, 0xe1, 0xd8, 0x60, 0x1b,
+  0xa8, 0x18, 0x14, 0x8e, 0x0d, 0xb6, 0x81, 0x8a, 0xc1, 0xe0, 0xd8, 0x60,
+  0x1b, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x08, 0xa5, 0xc2, 0x49, 0x08,
+  0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0x20, 0x4a, 0x29, 0x71, 0x22, 0x82,
+  0xe1, 0x88, 0xc0, 0x8d, 0x84, 0x6f, 0x96, 0xc1, 0xfb, 0x82, 0xd1, 0x84,
+  0x2c, 0xb0, 0x21, 0x90, 0x8f, 0x05, 0x6f, 0x04, 0x9f, 0xd1, 0x04, 0x4e,
+  0x30, 0x23, 0x90, 0x8f, 0x05, 0x72, 0x04, 0x1f, 0x23, 0x02, 0xfa, 0x58,
+  0xd0, 0xc8, 0xc7, 0x84, 0x46, 0x3e, 0x36, 0x34, 0xf2, 0x99, 0x25, 0xf8,
+  0x06, 0x2a, 0x06, 0xc3, 0x03, 0x83, 0x6e, 0xa0, 0x62, 0x30, 0x3c, 0x30,
+  0xe8, 0x06, 0x2a, 0x06, 0xc3, 0x03, 0x83, 0x6e, 0x96, 0x01, 0x0c, 0xc2,
+  0xa0, 0xb3, 0xc1, 0x9c, 0xe4, 0x33, 0x62, 0x80, 0x00, 0x20, 0x08, 0x06,
+  0x5a, 0x4d, 0xc5, 0x93, 0x39, 0x0d, 0xc1, 0x88, 0x01, 0x02, 0x80, 0x20,
+  0x18, 0x68, 0x36, 0x25, 0x4f, 0xe6, 0x34, 0x04, 0x66, 0x98, 0x93, 0x7c,
+  0x46, 0x0c, 0x10, 0x00, 0x04, 0xc1, 0x40, 0xc3, 0x29, 0x7a, 0x32, 0x27,
+  0x23, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x03, 0x2d, 0xa7, 0xea, 0xc9,
+  0x9c, 0x8c, 0xc0, 0x12, 0x73, 0x92, 0xcf, 0x88, 0x01, 0x02, 0x80, 0x20,
+  0x18, 0x68, 0x3b, 0x75, 0x4f, 0xe6, 0x94, 0x04, 0x23, 0x06, 0x08, 0x00,
+  0x82, 0x60, 0xa0, 0xf1, 0x14, 0x3e, 0x99, 0x53, 0x12, 0xcc, 0x12, 0x84,
+  0xc1, 0x40, 0xcb, 0x40, 0x0e, 0x17, 0x2d, 0x64, 0x0e, 0x18, 0x60, 0x1f,
+  0x39, 0x68, 0x03, 0x2d, 0x03, 0x39, 0x5c, 0xb4, 0x90, 0x29, 0x60, 0x80,
+  0x7d, 0xe4, 0xa0, 0x0d, 0xb4, 0x0c, 0xe4, 0x70, 0xd1, 0x42, 0x66, 0x80,
+  0x01, 0xf6, 0x91, 0x83, 0x36, 0x1c, 0x61, 0x0e, 0xa6, 0x14, 0x7c, 0xb3,
+  0x0c, 0x62, 0xd0, 0x06, 0xc1, 0x68, 0x42, 0x1e, 0x01, 0xc3, 0x11, 0x81,
+  0x2a, 0x39, 0xdf, 0x2c, 0xc3, 0x18, 0xb0, 0x41, 0x30, 0x1c, 0x61, 0xe8,
+  0x93, 0xf2, 0xcd, 0x32, 0x94, 0x01, 0x19, 0x04, 0x76, 0xe8, 0x93, 0x7c,
+  0x66, 0x09, 0xcc, 0xc0, 0x10, 0x7d, 0x82, 0xcf, 0x88, 0x81, 0x01, 0x80,
+  0x20, 0x18, 0x3c, 0x6b, 0x15, 0x56, 0x81, 0x05, 0xfb, 0x24, 0x9f, 0x11,
+  0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0xda, 0xca, 0xa4, 0x02, 0x0b, 0xf8,
+  0x49, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xbc, 0x55, 0x4a,
+  0x05, 0xb3, 0x04, 0x66, 0x30, 0x50, 0x31, 0x38, 0x64, 0x20, 0x94, 0xc1,
+  0x70, 0x84, 0x33, 0x52, 0xca, 0x37, 0xcb, 0x80, 0x06, 0x67, 0x10, 0xd8,
+  0x33, 0x52, 0xf2, 0x99, 0x25, 0x48, 0x03, 0x83, 0x46, 0x0a, 0x3e, 0x23,
+  0x06, 0x06, 0x00, 0x82, 0x60, 0xf0, 0xd0, 0x95, 0x5a, 0x05, 0x16, 0x90,
+  0x94, 0x7c, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0xb1, 0xab, 0x97,
+  0x0a, 0x2c, 0x28, 0x29, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1,
+  0x83, 0x57, 0x32, 0x15, 0xcc, 0x12, 0xa4, 0xc1, 0x40, 0xc5, 0xe0, 0x9c,
+  0x81, 0x80, 0x06, 0xc3, 0x11, 0x16, 0x4b, 0x29, 0xdf, 0x2c, 0xc3, 0x1a,
+  0xa8, 0x41, 0x60, 0x17, 0x4b, 0xc9, 0x67, 0x96, 0x80, 0x0d, 0x0c, 0x63,
+  0x29, 0xf8, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0xc1, 0xd3, 0x57, 0x73,
+  0x15, 0x58, 0xd0, 0x52, 0xf2, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83,
+  0xe7, 0xaf, 0x70, 0x2a, 0xb0, 0xc0, 0xa5, 0xe4, 0x33, 0x62, 0x60, 0x00,
+  0x20, 0x08, 0x06, 0x4f, 0x68, 0xed, 0x54, 0x30, 0x4b, 0xc0, 0x06, 0x03,
+  0x1d, 0x03, 0x19, 0xac, 0x01, 0x19, 0xa8, 0x01, 0x28, 0x88, 0xc1, 0x40,
+  0xc7, 0x40, 0xad, 0x01, 0xa5, 0x06, 0xa0, 0x20, 0x06, 0x03, 0x1d, 0x83,
+  0xb1, 0x06, 0x92, 0x1a, 0x80, 0x82, 0x18, 0x8c, 0x26, 0xe0, 0xd2, 0x60,
+  0x44, 0x20, 0x1f, 0x23, 0x04, 0xf9, 0x18, 0x31, 0xc8, 0x67, 0x96, 0xc0,
+  0x14, 0x86, 0x23, 0x54, 0xa2, 0x9d, 0x82, 0x6f, 0x34, 0xa1, 0x97, 0x86,
+  0x59, 0x06, 0x37, 0xc8, 0x03, 0xc1, 0xd2, 0x20, 0x90, 0x8f, 0xa5, 0x81,
+  0x20, 0x1f, 0x4b, 0x83, 0x41, 0x3e, 0xa3, 0x09, 0xe1, 0x04, 0x0c, 0x47,
+  0x04, 0xf2, 0xe4, 0x7c, 0xb3, 0x0c, 0xa6, 0xf0, 0x06, 0xc1, 0x70, 0x44,
+  0xa1, 0x4f, 0xca, 0x37, 0xcb, 0x10, 0x07, 0x70, 0x10, 0x98, 0xc1, 0x4f,
+  0xf2, 0x99, 0x25, 0x90, 0x83, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78,
+  0x64, 0x0b, 0xb5, 0x8e, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x66,
+  0x8b, 0xad, 0x02, 0x0b, 0x40, 0x4a, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82,
+  0x60, 0xf0, 0xd4, 0xd6, 0x5b, 0x05, 0x16, 0x8c, 0x94, 0x7c, 0x2c, 0x28,
+  0x29, 0xf8, 0xcc, 0x12, 0xc8, 0xc1, 0x40, 0xc5, 0xe0, 0xc0, 0x81, 0x10,
+  0x07, 0xc3, 0x11, 0xcd, 0x48, 0x29, 0xdf, 0x2c, 0x03, 0x1d, 0xcc, 0x41,
+  0x60, 0x4e, 0x49, 0xc9, 0x67, 0x96, 0xa0, 0x0e, 0x46, 0x0c, 0x0c, 0x00,
+  0x04, 0xc1, 0xe0, 0xd9, 0xad, 0xd8, 0x7a, 0x46, 0x0c, 0x0c, 0x00, 0x04,
+  0xc1, 0xe0, 0xe1, 0xad, 0xba, 0x0a, 0x2c, 0x48, 0x29, 0xf9, 0x8c, 0x18,
+  0x18, 0x00, 0x08, 0x82, 0xc1, 0xe3, 0x5b, 0x78, 0x15, 0x58, 0xc0, 0x52,
+  0xf2, 0xb1, 0xc0, 0xa5, 0xe0, 0x33, 0x4b, 0x50, 0x07, 0x03, 0x15, 0x83,
+  0x33, 0x07, 0x02, 0x1d, 0x0c, 0x47, 0x54, 0x2c, 0xa5, 0x7c, 0xb3, 0x0c,
+  0x77, 0x60, 0x07, 0x81, 0x59, 0x2e, 0x25, 0x9f, 0x59, 0x02, 0x3c, 0x18,
+  0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x87, 0xbc, 0x74, 0xeb, 0x1a, 0x31,
+  0x30, 0x00, 0x10, 0x04, 0x83, 0xa7, 0xbc, 0xfc, 0x2a, 0xb0, 0x40, 0xa6,
+  0xe4, 0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0xcf, 0x79, 0x85, 0x56,
+  0x60, 0x41, 0x4d, 0xc9, 0xc7, 0x82, 0x9b, 0x82, 0xcf, 0x2c, 0x01, 0x1e,
+  0x0c, 0x54, 0x0c, 0x8e, 0x1d, 0x08, 0x77, 0x30, 0x62, 0x70, 0x00, 0x20,
+  0x08, 0x06, 0x91, 0x7a, 0x8d, 0xd6, 0xe4, 0x52, 0x23, 0x06, 0x07, 0x00,
+  0x82, 0x60, 0x10, 0xad, 0x17, 0x69, 0x2d, 0x2f, 0x35, 0x62, 0x70, 0x00,
+  0x20, 0x08, 0x06, 0x11, 0x7b, 0x95, 0xd6, 0x00, 0x53, 0x23, 0x06, 0x07,
+  0x00, 0x82, 0x60, 0x10, 0xb5, 0x57, 0x6a, 0x0d, 0x2f, 0x35, 0x62, 0x70,
+  0x00, 0x20, 0x08, 0x06, 0x91, 0x7b, 0xa9, 0xd6, 0x00, 0x53, 0x23, 0x06,
+  0x07, 0x00, 0x82, 0x60, 0x10, 0xbd, 0xd7, 0x6a, 0x0d, 0x31, 0x35, 0x4b,
+  0x60, 0x0a, 0xb3, 0x0c, 0x7a, 0x50, 0x0a, 0x71, 0x61, 0xaf, 0xe0, 0x57,
+  0xf2, 0x19, 0x31, 0x40, 0x00, 0x10, 0x04, 0x03, 0xad, 0xbd, 0x52, 0xcb,
+  0xaf, 0x5e, 0x21, 0x18, 0x31, 0x40, 0x00, 0x10, 0x04, 0x03, 0xcd, 0xbd,
+  0x54, 0xcb, 0xaf, 0x5e, 0x21, 0x30, 0x59, 0xf0, 0x2b, 0xf9, 0x8c, 0x18,
+  0x20, 0x00, 0x08, 0x82, 0x81, 0x06, 0x5f, 0xac, 0xe5, 0x57, 0xb2, 0x10,
+  0x8c, 0x18, 0x20, 0x00, 0x08, 0x82, 0x81, 0x16, 0x5f, 0xad, 0xe5, 0x57,
+  0xb2, 0x10, 0x58, 0x2d, 0xf8, 0x95, 0x7c, 0x46, 0x0c, 0x10, 0x00, 0x04,
+  0xc1, 0x40, 0x9b, 0xaf, 0xd7, 0xf2, 0xab, 0x5a, 0x08, 0x46, 0x0c, 0x10,
+  0x00, 0x04, 0xc1, 0x40, 0xa3, 0x2f, 0xd8, 0xf2, 0xab, 0x5a, 0x08, 0xec,
+  0x80, 0x03, 0xf9, 0x58, 0x11, 0x07, 0xf2, 0xb1, 0x41, 0x0e, 0xe4, 0x33,
+  0x9a, 0x00, 0x53, 0xc0, 0x70, 0x44, 0x10, 0x56, 0xce, 0x37, 0xcb, 0x60,
+  0x0a, 0x7b, 0x10, 0x0c, 0x47, 0x14, 0x69, 0xa5, 0x7c, 0xb3, 0x0c, 0x7d,
+  0xc0, 0x07, 0x81, 0x19, 0x6b, 0x25, 0x9f, 0x59, 0x02, 0x3f, 0x18, 0x31,
+  0x30, 0x00, 0x10, 0x04, 0x83, 0x27, 0xc4, 0xee, 0xeb, 0x18, 0x31, 0x30,
+  0x00, 0x10, 0x04, 0x83, 0x47, 0xc4, 0x76, 0x2b, 0xb0, 0xe0, 0xad, 0xe4,
+  0x33, 0x62, 0x60, 0x00, 0x20, 0x08, 0x06, 0x0f, 0x89, 0xf9, 0x56, 0x60,
+  0x81, 0x5c, 0xc9, 0xc7, 0x02, 0xba, 0x82, 0xcf, 0x2c, 0x81, 0x1f, 0x0c,
+  0x54, 0x0c, 0x0e, 0x1f, 0x08, 0x7d, 0x30, 0x1c, 0xd1, 0xc8, 0x95, 0xf2,
+  0xcd, 0x32, 0x80, 0xc2, 0x1f, 0x04, 0xe6, 0xd0, 0x95, 0x7c, 0x66, 0x09,
+  0x42, 0x61, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x1e, 0x15, 0x03, 0xb1,
+  0x67, 0xc4, 0xc0, 0x00, 0x40, 0x10, 0x0c, 0x9e, 0x15, 0x23, 0xaf, 0xc0,
+  0x02, 0xbc, 0x92, 0xcf, 0x88, 0x81, 0x01, 0x80, 0x20, 0x18, 0x3c, 0x2d,
+  0x76, 0x5e, 0x81, 0x05, 0x7b, 0x25, 0x1f, 0x0b, 0xfa, 0x0a, 0x3e, 0xb3,
+  0x04, 0xa1, 0x30, 0x50, 0x31, 0x38, 0x7f, 0x20, 0x80, 0xc2, 0x70, 0x44,
+  0xb5, 0x57, 0xca, 0x37, 0xcb, 0x30, 0x0a, 0xa2, 0x10, 0x98, 0xd5, 0x57,
+  0xf2, 0x99, 0x25, 0x20, 0x85, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78,
+  0x66, 0x2c, 0xc5, 0xae, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, 0x78, 0x68,
+  0xac, 0xbd, 0x02, 0x0b, 0x42, 0x4b, 0x3e, 0x23, 0x06, 0x06, 0x00, 0x82,
+  0x60, 0xf0, 0xd8, 0x18, 0x7c, 0x05, 0x16, 0x90, 0x96, 0x7c, 0x2c, 0x30,
+  0x2d, 0xf8, 0xcc, 0x12, 0x90, 0xc2, 0x40, 0xc5, 0xe0, 0x88, 0x82, 0x30,
+  0x0a, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0xe5, 0x98, 0x7c, 0x4d,
+  0x7d, 0x35, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x91, 0x8e, 0xcd, 0xd7,
+  0xe2, 0x57, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0xed, 0x18, 0x7d,
+  0x0d, 0x7f, 0x35, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x11, 0x8f, 0xe1,
+  0xd7, 0xe0, 0x57, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x10, 0xf5, 0x58,
+  0x7e, 0x0d, 0x7f, 0x35, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x91, 0x8f,
+  0xe9, 0xd7, 0x00, 0x5a, 0xb3, 0x04, 0xa6, 0x60, 0xfe, 0x60, 0x0b, 0xf2,
+  0x31, 0x7f, 0xb8, 0x05, 0xf9, 0x98, 0x3f, 0xe0, 0x82, 0x7c, 0x66, 0x09,
+  0x4c, 0x61, 0xa0, 0x66, 0xd0, 0x0b, 0x36, 0x30, 0x4a, 0x41, 0x1d, 0xf0,
+  0x00, 0x2e, 0xdc, 0x80, 0x21, 0x05, 0x59, 0xd0, 0x83, 0x81, 0x9a, 0x41,
+  0x2f, 0xd8, 0xc0, 0x28, 0x05, 0x75, 0xc0, 0x03, 0xb8, 0x70, 0x03, 0x86,
+  0x14, 0x64, 0x41, 0x0f, 0x06, 0x6a, 0x06, 0xbd, 0x60, 0x03, 0xa3, 0x14,
+  0xd4, 0x01, 0x0f, 0xe0, 0xc2, 0x0d, 0x18, 0x52, 0x90, 0x05, 0x3d, 0xb0,
+  0xa1, 0xaf, 0xe4, 0x63, 0x43, 0x5f, 0xc9, 0xc7, 0x86, 0xbe, 0x92, 0x8f,
+  0xad, 0x47, 0x5f, 0xc9, 0x67, 0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x10,
+  0x36, 0x53, 0x31, 0x31, 0x13, 0x33, 0x1d, 0x23, 0x46, 0x0c, 0x12, 0x00,
+  0x04, 0xc1, 0x00, 0x61, 0x33, 0x15, 0x13, 0x33, 0x31, 0x8b, 0xb1, 0x61,
+  0xc4, 0x20, 0x01, 0x40, 0x10, 0x0c, 0x10, 0x36, 0x53, 0x31, 0x31, 0x13,
+  0xb3, 0x1c, 0x13, 0x46, 0x0c, 0x12, 0x00, 0x04, 0xc1, 0x00, 0x61, 0x33,
+  0x15, 0x13, 0x33, 0x31, 0x83, 0xb1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00
 };
 };
-static const unsigned int texture_advanced_frag_dxil_len = 9504;
+static const unsigned int texture_advanced_frag_dxil_len = 10992;

+ 49 - 16
src/render/gpu/shaders/texture_advanced.frag.hlsl

@@ -43,10 +43,12 @@ static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGBA = 3;
 static const float TEXTURETYPE_RGBA = 3;
 static const float TEXTURETYPE_RGBA_PIXELART = 4;
 static const float TEXTURETYPE_RGBA_PIXELART = 4;
-static const float TEXTURETYPE_PALETTE = 5;
-static const float TEXTURETYPE_NV12 = 6;
-static const float TEXTURETYPE_NV21 = 7;
-static const float TEXTURETYPE_YUV = 8;
+static const float TEXTURETYPE_PALETTE_NEAREST = 5;
+static const float TEXTURETYPE_PALETTE_LINEAR = 6;
+static const float TEXTURETYPE_PALETTE_PIXELART = 7;
+static const float TEXTURETYPE_NV12 = 8;
+static const float TEXTURETYPE_NV21 = 9;
+static const float TEXTURETYPE_YUV = 10;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -122,21 +124,48 @@ float3 ApplyTonemap(float3 v)
     return v;
     return v;
 }
 }
 
 
-float2 GetPixelArtUV(PSInput input)
+float4 SamplePaletteNearest(float2 uv)
+{
+    float index = texture0.Sample(sampler0, uv).r * 255;
+    return texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(float2 uv)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = frac(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(uv_min_max.zw);
+
+    // bilinear interpolation
+    return lerp(lerp(texelA, texelB, uv_frac.y), lerp(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+
+float2 GetPixelArtUV(float2 uv)
 {
 {
     // box filter size in texel units
     // box filter size in texel units
-    float2 boxSize = clamp(fwidth(input.v_uv) * texel_size.zw, 1e-5, 1);
+    float2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1);
 
 
     // scale uv by texture size to get texel coordinate
     // scale uv by texture size to get texel coordinate
-    float2 tx = input.v_uv * texel_size.zw - 0.5 * boxSize;
+    float2 tx = uv * texel_size.zw - 0.5 * boxSize;
 
 
     // compute offset for pixel-sized box filter
     // compute offset for pixel-sized box filter
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
 
 
     // compute bilinear sample uv coordinates
     // compute bilinear sample uv coordinates
-    float2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;
-
-    return uv;
+    return (floor(tx) + 0.5 + txOffset) * texel_size.xy;
 }
 }
 
 
 float4 GetInputColor(PSInput input)
 float4 GetInputColor(PSInput input)
@@ -148,16 +177,20 @@ float4 GetInputColor(PSInput input)
     } else if (texture_type == TEXTURETYPE_RGBA) {
     } else if (texture_type == TEXTURETYPE_RGBA) {
         rgba = texture0.Sample(sampler0, input.v_uv);
         rgba = texture0.Sample(sampler0, input.v_uv);
     } else if (texture_type == TEXTURETYPE_RGBA_PIXELART) {
     } else if (texture_type == TEXTURETYPE_RGBA_PIXELART) {
-        float2 uv = GetPixelArtUV(input);
+        float2 uv = GetPixelArtUV(input.v_uv);
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.v_uv), ddy(input.v_uv));
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.v_uv), ddy(input.v_uv));
     } else if (texture_type == TEXTURETYPE_RGB) {
     } else if (texture_type == TEXTURETYPE_RGB) {
         rgba = float4(texture0.Sample(sampler0, input.v_uv).rgb, 1.0);
         rgba = float4(texture0.Sample(sampler0, input.v_uv).rgb, 1.0);
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
-        float2 uv = GetPixelArtUV(input);
+        float2 uv = GetPixelArtUV(input.v_uv);
         rgba = float4(texture0.SampleGrad(sampler0, uv, ddx(input.v_uv), ddy(input.v_uv)).rgb, 1.0);
         rgba = float4(texture0.SampleGrad(sampler0, uv, ddx(input.v_uv), ddy(input.v_uv)).rgb, 1.0);
-    } else if (texture_type == TEXTURETYPE_PALETTE) {
-        float index = texture0.Sample(sampler0, input.v_uv).r * 255;
-        rgba = texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+    } else if (texture_type == TEXTURETYPE_PALETTE_NEAREST) {
+        rgba = SamplePaletteNearest(input.v_uv);
+    } else if (texture_type == TEXTURETYPE_PALETTE_LINEAR) {
+        rgba = SamplePaletteLinear(input.v_uv);
+    } else if (texture_type == TEXTURETYPE_PALETTE_PIXELART) {
+        float2 uv = GetPixelArtUV(input.v_uv);
+        rgba = SamplePaletteLinear(uv);
     } else if (texture_type == TEXTURETYPE_NV12) {
     } else if (texture_type == TEXTURETYPE_NV12) {
         float3 yuv;
         float3 yuv;
         yuv.x = texture0.Sample(sampler0, input.v_uv).r;
         yuv.x = texture0.Sample(sampler0, input.v_uv).r;
@@ -193,7 +226,7 @@ float4 GetInputColor(PSInput input)
         // Error!
         // Error!
         rgba.r = 1.0;
         rgba.r = 1.0;
         rgba.g = 0.0;
         rgba.g = 0.0;
-        rgba.b = 0.0;
+        rgba.b = 1.0;
         rgba.a = 1.0;
         rgba.a = 1.0;
     }
     }
     return rgba;
     return rgba;

File diff suppressed because it is too large
+ 486 - 215
src/render/gpu/shaders/texture_advanced.frag.msl.h


+ 1240 - 914
src/render/gpu/shaders/texture_advanced.frag.spv.h

@@ -1,6 +1,6 @@
 static const unsigned char texture_advanced_frag_spv[] = {
 static const unsigned char texture_advanced_frag_spv[] = {
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00,
   0x03, 0x02, 0x23, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00,
-  0x37, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
+  0xf0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x02, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
   0x47, 0x4c, 0x53, 0x4c, 0x2e, 0x73, 0x74, 0x64, 0x2e, 0x34, 0x35, 0x30,
   0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -118,49 +118,49 @@ static const unsigned char texture_advanced_frag_spv[] = {
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xe0, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x00, 0x00, 0xe0, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2b, 0x00, 0x04, 0x00,
   0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x8c, 0x9d, 0x20, 0x3f,
+  0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x41,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
-  0xc8, 0x97, 0xa8, 0x3e, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x1c, 0x00, 0x00, 0x00, 0xf9, 0x68, 0x31, 0x3d, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xba, 0x82, 0x8d, 0x3d,
+  0x00, 0x00, 0x20, 0x41, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x1c, 0x00, 0x00, 0x00, 0x8c, 0x9d, 0x20, 0x3f, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0xc8, 0x97, 0xa8, 0x3e,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
-  0x0a, 0x67, 0x6b, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x1f, 0x00, 0x00, 0x00, 0xaf, 0x27, 0x3a, 0x3c, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x6b, 0x46, 0x86, 0x3c,
+  0xf9, 0x68, 0x31, 0x3d, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x1f, 0x00, 0x00, 0x00, 0xba, 0x82, 0x8d, 0x3d, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0a, 0x67, 0x6b, 0x3f,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
-  0x29, 0x40, 0xb4, 0x3d, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x22, 0x00, 0x00, 0x00, 0xb7, 0x45, 0x65, 0x3f, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x22, 0x8b, 0xd4, 0x3f,
+  0xaf, 0x27, 0x3a, 0x3c, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x22, 0x00, 0x00, 0x00, 0x6b, 0x46, 0x86, 0x3c, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x29, 0x40, 0xb4, 0x3d,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,
-  0xa0, 0x70, 0x16, 0xbf, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x25, 0x00, 0x00, 0x00, 0x23, 0x2d, 0x95, 0xbd, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x7f, 0x12, 0xff, 0xbd,
+  0xb7, 0x45, 0x65, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x25, 0x00, 0x00, 0x00, 0x22, 0x8b, 0xd4, 0x3f, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0xa0, 0x70, 0x16, 0xbf,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00,
-  0xb4, 0x02, 0x91, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x28, 0x00, 0x00, 0x00, 0x0d, 0xc6, 0x08, 0xbc, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xb3, 0xb7, 0x94, 0xbc,
+  0x23, 0x2d, 0x95, 0xbd, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x28, 0x00, 0x00, 0x00, 0x7f, 0x12, 0xff, 0xbd, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0xb4, 0x02, 0x91, 0x3f,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00,
-  0xcd, 0x05, 0xce, 0xbd, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x3c, 0x33, 0x8f, 0x3f, 0x15, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
-  0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
-  0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0x0d, 0xc6, 0x08, 0xbc, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x00, 0x00, 0xb3, 0xb7, 0x94, 0xbc, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0xcd, 0x05, 0xce, 0xbd,
+  0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00,
+  0x3c, 0x33, 0x8f, 0x3f, 0x15, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x17, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x43, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
-  0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
   0x37, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
   0x37, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
   0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x0c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x3f, 0x2b, 0x00, 0x04, 0x00,
   0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x3f, 0x2b, 0x00, 0x04, 0x00,
   0x10, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x96, 0x41,
   0x10, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x96, 0x41,
@@ -181,936 +181,1262 @@ static const unsigned char texture_advanced_frag_spv[] = {
   0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
   0x44, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00,
   0x3d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x3d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x45, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1c, 0x46, 0x2b, 0x00, 0x04, 0x00,
   0x45, 0x00, 0x00, 0x00, 0x00, 0x40, 0x1c, 0x46, 0x2b, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2c, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x2e, 0x00, 0x00, 0x00,
   0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
   0x48, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
   0x3f, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x3f, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
   0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x2c, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
   0xac, 0xc5, 0x27, 0x37, 0x17, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
   0xac, 0xc5, 0x27, 0x37, 0x17, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
   0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00,
   0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00,
   0x4b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
   0x4b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
   0x4e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
   0x4e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
-  0x35, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xe6, 0xae, 0x25, 0x3d,
+  0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x3f, 0x2c, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
-  0x52, 0xb8, 0x4e, 0x41, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x52, 0x00, 0x00, 0x00, 0xae, 0x47, 0x61, 0x3d, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3d, 0x0a, 0x87, 0x3f,
+  0x00, 0x00, 0x7f, 0x43, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x52, 0x00, 0x00, 0x00, 0xe6, 0xae, 0x25, 0x3d, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x52, 0xb8, 0x4e, 0x41,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
   0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
-  0x9a, 0x99, 0x19, 0x40, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x55, 0x00, 0x00, 0x00, 0x1c, 0x2e, 0x4d, 0x3b, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x55, 0x55, 0xd5, 0x3e,
-  0x1e, 0x00, 0x0f, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xae, 0x47, 0x61, 0x3d, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x55, 0x00, 0x00, 0x00, 0x3d, 0x0a, 0x87, 0x3f, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x9a, 0x99, 0x19, 0x40,
+  0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0x1c, 0x2e, 0x4d, 0x3b, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x58, 0x00, 0x00, 0x00, 0x55, 0x55, 0xd5, 0x3e, 0x1e, 0x00, 0x0f, 0x00,
+  0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
   0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x06, 0x00, 0x00, 0x00, 0x19, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00,
-  0x5a, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x5d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x13, 0x00, 0x02, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00,
-  0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x14, 0x00, 0x02, 0x00, 0x61, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x58, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x58, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00,
-  0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x59, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x3b, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
-  0x5d, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
-  0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
-  0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00,
-  0x63, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00,
-  0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00,
-  0x26, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
-  0x29, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x06, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00,
-  0x67, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x80, 0x3b, 0x2e, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x6c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x6d, 0x00, 0x00, 0x00, 0x6f, 0xa7, 0x72, 0x3f, 0x2b, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x91, 0x83, 0x9e, 0x3d,
-  0x01, 0x00, 0x03, 0x00, 0x32, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0x2c, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x71, 0x00, 0x00, 0x00, 0x36, 0x00, 0x05, 0x00, 0x5e, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x72, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x75, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
-  0x75, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x77, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x79, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x78, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x7a, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x7b, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
-  0x7e, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7d, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
-  0x80, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x82, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x7c, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
-  0x15, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x84, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x83, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x85, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0x87, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x89, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
-  0x89, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
-  0x87, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0x8d, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
-  0x8c, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00,
-  0x8e, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0x90, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0x95, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
-  0x89, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0x97, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0x99, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0xd0, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00,
-  0x74, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x9c, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00,
-  0x58, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00,
-  0x9c, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x9a, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x84, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00,
-  0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
-  0x76, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x9e, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x59, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+  0x19, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x02, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x5c, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00,
+  0x5d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x13, 0x00, 0x02, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0x21, 0x00, 0x03, 0x00, 0x61, 0x00, 0x00, 0x00,
+  0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x02, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x59, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5a, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x5a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00,
+  0x5d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x3b, 0x00, 0x04, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x00, 0x00,
+  0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00,
+  0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
+  0x20, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00,
+  0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x5c, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00,
+  0x66, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
+  0x26, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
+  0x29, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x06, 0x00,
+  0x5c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00,
+  0x6a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3b,
+  0x2e, 0x00, 0x03, 0x00, 0x34, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
+  0x6f, 0xa7, 0x72, 0x3f, 0x2b, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x70, 0x00, 0x00, 0x00, 0x91, 0x83, 0x9e, 0x3d, 0x01, 0x00, 0x03, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x74, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x75, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x79, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x7b, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x7a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7c, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x7d, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0xa4, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00,
-  0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00,
-  0xa4, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
-  0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xa8, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x50, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00,
-  0xa6, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9f, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
-  0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xab, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xaa, 0x00, 0x00, 0x00,
-  0xac, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xac, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0xae, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xb0, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
-  0xb0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00,
-  0xae, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0xb4, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00,
-  0xb3, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00,
-  0xb5, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0xb7, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00,
-  0x4e, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x83, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x80, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x85, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00,
+  0x88, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x87, 0x00, 0x00, 0x00,
+  0xd1, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0x8a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+  0x8a, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x8c, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00,
+  0x8c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x8e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0x8d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x91, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00,
+  0x4e, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x93, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x95, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x91, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x96, 0x00, 0x00, 0x00, 0x95, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00,
+  0x96, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00,
+  0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00,
+  0x97, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x9c, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
+  0x9a, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x08, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00,
+  0x99, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00,
+  0x9d, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xa1, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xa0, 0x00, 0x00, 0x00,
+  0xa2, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xa2, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xa4, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
+  0xa4, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa9, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00,
+  0xa7, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00,
+  0xa9, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xa3, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0xac, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0xac, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00,
+  0xaf, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xae, 0x00, 0x00, 0x00,
+  0xd1, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0xb1, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00,
+  0xb1, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xb3, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00,
+  0xb3, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xb5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xb8, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00,
+  0x4e, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x4c, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0xbc, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00,
-  0xb0, 0x00, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x31, 0x00, 0x00, 0x00, 0xb9, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0xba, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xb8, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xbd, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00,
+  0xbd, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00,
+  0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
+  0xbe, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xc3, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x04, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00,
+  0xc1, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x58, 0x00, 0x08, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00,
+  0xc0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00,
+  0xc4, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xc7, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00,
+  0xc6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xca, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00,
+  0xc9, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xaf, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0xcb, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0xd1, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00,
+  0xd1, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00,
+  0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xd5, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00,
+  0xd4, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xd9, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00,
+  0xd5, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00,
+  0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xcc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xce, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0xdc, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xde, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xe1, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00,
+  0xe1, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xe5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xe4, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xe6, 0x00, 0x00, 0x00, 0xe5, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00,
+  0xe1, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
-  0xbe, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00,
-  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xc0, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x04, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0xd0, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00,
-  0x74, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0xc3, 0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
-  0x58, 0x00, 0x08, 0x00, 0x32, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
-  0xc3, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0xc1, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00,
+  0xe8, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00,
+  0xe5, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00,
+  0xe7, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xeb, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00,
+  0xe8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xc6, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00,
-  0xc4, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00,
-  0xc6, 0x00, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xab, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xad, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0xc9, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0xc9, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00,
-  0xcc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xcb, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00,
+  0xee, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00,
+  0xeb, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00,
+  0xee, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xf0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0xe4, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xf1, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0xf4, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00,
+  0xf4, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00,
+  0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0xfc, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00,
+  0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00,
+  0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
   0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
   0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xce, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00,
-  0xce, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xd0, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+  0x01, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+  0x01, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x03, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xd1, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00,
-  0xd1, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
+  0x04, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
+  0x04, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00,
   0x0e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x0e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xd5, 0x00, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00,
-  0xd5, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
-  0x4c, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x00,
-  0x35, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0xd8, 0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00,
-  0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00,
-  0xd8, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xca, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xcc, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0xda, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0xda, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00,
-  0xdd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdc, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00,
+  0x08, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
+  0x08, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x0b, 0x01, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00,
+  0x0b, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
+  0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x0e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x0e, 0x01, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00,
+  0x0d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x13, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0x15, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x17, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
+  0x17, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
+  0x15, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x1a, 0x01, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x1b, 0x01, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x1e, 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00,
+  0x1e, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
+  0x1f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x22, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00,
+  0x21, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x26, 0x01, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00,
+  0x22, 0x01, 0x00, 0x00, 0x23, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00,
+  0x26, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x2a, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00,
+  0x29, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00,
+  0x2a, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x2c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x1a, 0x01, 0x00, 0x00, 0x28, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00,
+  0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00,
+  0x2d, 0x01, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00, 0x2d, 0x01, 0x00, 0x00,
+  0x0c, 0x00, 0x08, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00,
+  0x2c, 0x01, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xdd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdf, 0x00, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x31, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x30, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x32, 0x01, 0x00, 0x00, 0xd1, 0x00, 0x04, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00,
+  0x36, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x38, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00,
+  0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00,
+  0x4d, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x37, 0x01, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x3b, 0x01, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00,
+  0x3a, 0x01, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00,
+  0x39, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x3e, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x3c, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x3f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x3d, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00,
+  0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00,
+  0x40, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00,
+  0x3f, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x43, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00,
+  0x43, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x45, 0x01, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00,
+  0x45, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x49, 0x01, 0x00, 0x00, 0x48, 0x01, 0x00, 0x00, 0x43, 0x01, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x00,
+  0x47, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x4a, 0x01, 0x00, 0x00,
+  0x43, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x4c, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00,
+  0x49, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x4f, 0x01, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+  0x4c, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00,
+  0x4f, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x51, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x46, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x52, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x55, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00,
+  0x55, 0x01, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00,
+  0x56, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00, 0x57, 0x01, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x59, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00,
+  0x58, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x5d, 0x01, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x00,
+  0x59, 0x01, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x00,
+  0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+  0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00,
   0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
   0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xdf, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00,
-  0xdf, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xe1, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
+  0x62, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0x61, 0x01, 0x00, 0x00,
+  0x62, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x64, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xe2, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x52, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00,
-  0xe2, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
+  0x65, 0x01, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00,
+  0x65, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00,
+  0x0e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x69, 0x01, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00,
+  0x69, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00,
+  0x4c, 0x00, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x6c, 0x01, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0x68, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00,
+  0x6c, 0x01, 0x00, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00,
+  0x50, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x6f, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00,
+  0x6f, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00,
+  0x6e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x74, 0x01, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00,
   0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
   0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
-  0xe5, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
-  0x0f, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x00,
-  0xe5, 0x00, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xe7, 0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0xe8, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00,
-  0xea, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00,
-  0xeb, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
-  0xed, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00,
-  0xed, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0xef, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
-  0xec, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xf2, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xf2, 0x00, 0x00, 0x00,
-  0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xf4, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00,
-  0xf6, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xdb, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdd, 0x00, 0x00, 0x00,
-  0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00,
-  0x76, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0xfa, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
+  0x76, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x78, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00,
+  0x78, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x75, 0x01, 0x00, 0x00,
+  0x76, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x7b, 0x01, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x7c, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00,
+  0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
+  0x7f, 0x01, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
+  0x7f, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00,
+  0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00,
+  0x51, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0x83, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00,
+  0x82, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00,
+  0x6d, 0x00, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x4c, 0x00, 0x00, 0x00,
+  0x87, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
+  0x83, 0x01, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
+  0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x8b, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00,
+  0x8a, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2e, 0x00, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00,
+  0x8b, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x8d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
+  0x7b, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x8b, 0x01, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00,
+  0x51, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00,
+  0x8e, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x8e, 0x01, 0x00, 0x00,
+  0x0c, 0x00, 0x08, 0x00, 0x34, 0x00, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00,
+  0x8d, 0x01, 0x00, 0x00, 0x8f, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x31, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x33, 0x01, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x91, 0x01, 0x00, 0x00,
+  0x78, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x92, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x91, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x93, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x00, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
-  0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
-  0x00, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
-  0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
-  0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x08, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
+  0x97, 0x01, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
+  0x97, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x99, 0x01, 0x00, 0x00,
+  0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x9a, 0x01, 0x00, 0x00, 0x99, 0x01, 0x00, 0x00,
+  0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x08, 0x00, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
   0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00,
-  0x06, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00,
-  0x57, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00,
-  0x06, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00,
-  0x03, 0x01, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x0a, 0x01, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00, 0x0a, 0x01, 0x00, 0x00,
-  0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x9d, 0x01, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00,
+  0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00,
+  0x9d, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00,
+  0x9a, 0x01, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xa1, 0x01, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0xa1, 0x01, 0x00, 0x00,
+  0xa1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x0c, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
+  0xa3, 0x01, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00,
-  0x0e, 0x01, 0x00, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xa5, 0x01, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xa6, 0x01, 0x00, 0x00,
+  0xa5, 0x01, 0x00, 0x00, 0xa5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00,
-  0x0f, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
-  0x11, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00,
-  0x11, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x13, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xa7, 0x01, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00,
+  0xa6, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0xa8, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00,
+  0xa8, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xaa, 0x01, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00,
-  0x0c, 0x01, 0x00, 0x00, 0x13, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x16, 0x01, 0x00, 0x00, 0x15, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00, 0x16, 0x01, 0x00, 0x00,
-  0x16, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00,
+  0xa3, 0x01, 0x00, 0x00, 0xaa, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xad, 0x01, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xae, 0x01, 0x00, 0x00, 0xad, 0x01, 0x00, 0x00,
+  0xad, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x18, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x17, 0x01, 0x00, 0x00,
-  0x50, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00,
-  0x10, 0x01, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x18, 0x01, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xfb, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
-  0x19, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x1b, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x1a, 0x01, 0x00, 0x00,
-  0x1c, 0x01, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1c, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x1e, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
-  0x1e, 0x01, 0x00, 0x00, 0x1f, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00,
-  0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x21, 0x01, 0x00, 0x00,
+  0xaf, 0x01, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00, 0xae, 0x01, 0x00, 0x00,
+  0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
+  0xa7, 0x01, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00, 0xaf, 0x01, 0x00, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x94, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0xb1, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xb2, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xb1, 0x01, 0x00, 0x00,
+  0xb3, 0x01, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xb3, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
+  0xb5, 0x01, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00,
+  0xb5, 0x01, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xba, 0x01, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x23, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00,
-  0x23, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00,
-  0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00,
-  0x28, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x0c, 0x00, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
-  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00,
-  0x28, 0x01, 0x00, 0x00, 0x29, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00, 0x2a, 0x01, 0x00, 0x00,
-  0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x2c, 0x01, 0x00, 0x00, 0x2b, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x2d, 0x01, 0x00, 0x00, 0x22, 0x01, 0x00, 0x00, 0x27, 0x01, 0x00, 0x00,
-  0x2c, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
-  0x2e, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00,
-  0x2e, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x30, 0x01, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00, 0x2f, 0x01, 0x00, 0x00,
+  0xbb, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x0c, 0x00, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00,
+  0x56, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x00, 0x00, 0xbd, 0x01, 0x00, 0x00,
+  0xbb, 0x01, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0xbd, 0x01, 0x00, 0x00,
+  0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00,
+  0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0xc0, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00,
+  0xc0, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xc2, 0x01, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x81, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00,
-  0x2d, 0x01, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x62, 0x00, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x37, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x33, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00,
-  0x33, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00,
+  0xbf, 0x01, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x37, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xc5, 0x01, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00, 0xc5, 0x01, 0x00, 0x00,
+  0xc5, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x35, 0x01, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00, 0x34, 0x01, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00,
+  0xc7, 0x01, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x36, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x38, 0x01, 0x00, 0x00,
-  0x37, 0x01, 0x00, 0x00, 0x37, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xca, 0x01, 0x00, 0x00,
+  0xc9, 0x01, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x39, 0x01, 0x00, 0x00, 0x31, 0x01, 0x00, 0x00,
-  0x38, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
-  0x3a, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00,
-  0x3a, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x3c, 0x01, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00, 0x3b, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x00,
+  0xca, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0xcc, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xcd, 0x01, 0x00, 0x00,
+  0xcc, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xce, 0x01, 0x00, 0x00, 0xcd, 0x01, 0x00, 0x00, 0xcd, 0x01, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00,
-  0x31, 0x01, 0x00, 0x00, 0x3c, 0x01, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00,
-  0x39, 0x01, 0x00, 0x00, 0x3d, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x1b, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1d, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x1b, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x1b, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00,
-  0x1c, 0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x1d, 0x01, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xfb, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x40, 0x01, 0x00, 0x00, 0x19, 0x01, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
-  0x3f, 0x01, 0x00, 0x00, 0x1b, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xdb, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdb, 0x00, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00,
-  0xf9, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00,
-  0xfb, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xca, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xca, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x42, 0x01, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00,
-  0xcb, 0x00, 0x00, 0x00, 0x41, 0x01, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xab, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xab, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x43, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00,
-  0x42, 0x01, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x9f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x9f, 0x00, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00,
-  0xa9, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x43, 0x01, 0x00, 0x00,
-  0xab, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x84, 0x00, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x84, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x00, 0x00, 0x44, 0x01, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x7c, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x46, 0x01, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00,
-  0x45, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x78, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x78, 0x00, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00,
-  0x33, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x46, 0x01, 0x00, 0x00,
-  0x7c, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x48, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00,
-  0x48, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x4a, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x4a, 0x01, 0x00, 0x00, 0x4c, 0x01, 0x00, 0x00,
-  0x4b, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x4c, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00,
-  0x47, 0x01, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xcf, 0x01, 0x00, 0x00,
+  0xc3, 0x01, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00,
+  0xcb, 0x01, 0x00, 0x00, 0xcf, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xb2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xb4, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0xd1, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0xd1, 0x01, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x00,
+  0xd4, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd3, 0x01, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xd5, 0x01, 0x00, 0x00,
+  0x09, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0xd6, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0xd7, 0x01, 0x00, 0x00, 0xd5, 0x01, 0x00, 0x00,
+  0xd6, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xd8, 0x01, 0x00, 0x00, 0xd7, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xd9, 0x01, 0x00, 0x00, 0xd8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00,
+  0x0a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0xdb, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00,
+  0xdb, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xdd, 0x01, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xde, 0x01, 0x00, 0x00, 0xdd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00,
+  0x0b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x00,
+  0xe0, 0x01, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00,
+  0x0f, 0x00, 0x00, 0x00, 0xe1, 0x01, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00,
+  0xe0, 0x01, 0x00, 0x00, 0x57, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xe2, 0x01, 0x00, 0x00, 0xe1, 0x01, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xe3, 0x01, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00,
+  0xd9, 0x01, 0x00, 0x00, 0xde, 0x01, 0x00, 0x00, 0xe3, 0x01, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xe6, 0x01, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe7, 0x01, 0x00, 0x00,
+  0xe6, 0x01, 0x00, 0x00, 0xe6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00,
+  0xe7, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00,
+  0xe9, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00, 0xea, 0x01, 0x00, 0x00,
+  0xe9, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xeb, 0x01, 0x00, 0x00, 0xea, 0x01, 0x00, 0x00, 0xea, 0x01, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xec, 0x01, 0x00, 0x00,
+  0xe8, 0x01, 0x00, 0x00, 0xeb, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x64, 0x00, 0x00, 0x00, 0xed, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x38, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xee, 0x01, 0x00, 0x00, 0xed, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0xee, 0x01, 0x00, 0x00,
+  0xee, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xf0, 0x01, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00,
+  0xf2, 0x01, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x94, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00,
+  0xf3, 0x01, 0x00, 0x00, 0x50, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xf5, 0x01, 0x00, 0x00, 0xec, 0x01, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00,
+  0xf4, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xd2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd4, 0x01, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xd2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xd2, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xf6, 0x01, 0x00, 0x00, 0xf5, 0x01, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x00,
+  0x72, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xb2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x01, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00,
+  0xd0, 0x01, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00, 0xf6, 0x01, 0x00, 0x00,
+  0xd2, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x92, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
+  0x93, 0x01, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00, 0xb2, 0x01, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x31, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x31, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xf9, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00, 0x32, 0x01, 0x00, 0x00,
+  0xf8, 0x01, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xdd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xdd, 0x00, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00,
+  0x2f, 0x01, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00,
+  0x31, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xcc, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xfb, 0x01, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
+  0xcd, 0x00, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xad, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xad, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xfc, 0x01, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00,
+  0xfb, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xa1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xa1, 0x00, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00,
+  0xab, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
+  0xad, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00,
+  0x87, 0x00, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x7e, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xff, 0x01, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
+  0xfe, 0x01, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x7a, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7a, 0x00, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+  0x35, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00,
+  0x7e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x01, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+  0x01, 0x02, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x03, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x03, 0x02, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00,
+  0x04, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x05, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00,
+  0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x4f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x4e, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00,
-  0x4f, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x50, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x52, 0x01, 0x00, 0x00,
-  0x4f, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
-  0x52, 0x01, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x54, 0x01, 0x00, 0x00, 0x51, 0x01, 0x00, 0x00, 0x53, 0x01, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0x01, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x55, 0x01, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00,
+  0x08, 0x02, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x0a, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x50, 0x00, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0b, 0x02, 0x00, 0x00,
+  0x08, 0x02, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00,
+  0x0b, 0x02, 0x00, 0x00, 0x88, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x0d, 0x02, 0x00, 0x00, 0x0a, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0d, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00,
   0x44, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
   0x44, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x57, 0x01, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00,
+  0x10, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
   0x07, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, 0x58, 0x01, 0x00, 0x00,
-  0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00,
-  0x59, 0x01, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00,
-  0x88, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00,
-  0x57, 0x01, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x47, 0x01, 0x00, 0x00,
-  0x5b, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00,
+  0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x13, 0x02, 0x00, 0x00,
+  0x12, 0x02, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00, 0x12, 0x02, 0x00, 0x00,
+  0x88, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00,
+  0x10, 0x02, 0x00, 0x00, 0x13, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x15, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
+  0x14, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x4b, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x4b, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00,
-  0x47, 0x01, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00,
-  0x4c, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x5e, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00,
-  0x5e, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x60, 0x01, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x61, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x60, 0x01, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
-  0x61, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x62, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
-  0x5d, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x04, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00,
+  0x00, 0x02, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x15, 0x02, 0x00, 0x00,
+  0x05, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x17, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00,
+  0x17, 0x02, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x19, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x1a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x19, 0x02, 0x00, 0x00, 0x1b, 0x02, 0x00, 0x00,
+  0x1a, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x1b, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00,
+  0x16, 0x02, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x65, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x64, 0x01, 0x00, 0x00,
-  0x66, 0x01, 0x00, 0x00, 0x67, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x66, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x68, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00,
-  0x68, 0x01, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x6a, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00, 0x69, 0x01, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x65, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x67, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x6b, 0x01, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x6b, 0x01, 0x00, 0x00, 0x6d, 0x01, 0x00, 0x00,
-  0x6c, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6d, 0x01, 0x00, 0x00,
-  0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6e, 0x01, 0x00, 0x00,
-  0x49, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x6f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x6e, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00, 0x6f, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x70, 0x01, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
-  0x66, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x6f, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x6f, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
-  0x6d, 0x01, 0x00, 0x00, 0x71, 0x01, 0x00, 0x00, 0x70, 0x01, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x73, 0x01, 0x00, 0x00,
-  0x72, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x1d, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x1e, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x1d, 0x02, 0x00, 0x00,
+  0x1f, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x1f, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x21, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x22, 0x02, 0x00, 0x00,
+  0x21, 0x02, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x23, 0x02, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x22, 0x02, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x20, 0x02, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x24, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x24, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00,
+  0x25, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x26, 0x02, 0x00, 0x00,
+  0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x27, 0x02, 0x00, 0x00,
+  0x02, 0x02, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x28, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x27, 0x02, 0x00, 0x00, 0x29, 0x02, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x29, 0x02, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00,
+  0x68, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x28, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x28, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00,
+  0x26, 0x02, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x29, 0x02, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00,
+  0x2b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x75, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x74, 0x01, 0x00, 0x00,
-  0x75, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x77, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
-  0x73, 0x01, 0x00, 0x00, 0x76, 0x01, 0x00, 0x00, 0xba, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x79, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x78, 0x01, 0x00, 0x00,
-  0x7a, 0x01, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x7a, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00,
-  0x7b, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
-  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00,
-  0x7b, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x7d, 0x01, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x00, 0x77, 0x01, 0x00, 0x00,
-  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x00,
-  0x12, 0x00, 0x00, 0x00, 0x7d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x2e, 0x02, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2f, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x00, 0x00,
+  0x2e, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x30, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
+  0x2c, 0x02, 0x00, 0x00, 0x2f, 0x02, 0x00, 0x00, 0xba, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x31, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x32, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x31, 0x02, 0x00, 0x00,
+  0x33, 0x02, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x33, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00,
+  0x34, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
+  0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00, 0x35, 0x02, 0x00, 0x00,
+  0x34, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x36, 0x02, 0x00, 0x00, 0x35, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x37, 0x02, 0x00, 0x00,
+  0x12, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x62, 0x00, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
   0x48, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x48, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x80, 0x01, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00,
-  0x77, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x82, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00,
-  0x88, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00,
-  0x7e, 0x01, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00,
-  0x83, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x79, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x79, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x85, 0x01, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00,
-  0x6f, 0x01, 0x00, 0x00, 0x84, 0x01, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x86, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x6e, 0x01, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00,
-  0x86, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x87, 0x01, 0x00, 0x00,
-  0x90, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
-  0x85, 0x01, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x86, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x86, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00,
-  0x85, 0x01, 0x00, 0x00, 0x79, 0x01, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00,
-  0x87, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x6c, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x6c, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, 0x63, 0x01, 0x00, 0x00,
-  0x67, 0x01, 0x00, 0x00, 0x89, 0x01, 0x00, 0x00, 0x86, 0x01, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x65, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x65, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0x8b, 0x01, 0x00, 0x00, 0x6a, 0x01, 0x00, 0x00, 0x66, 0x01, 0x00, 0x00,
-  0x8a, 0x01, 0x00, 0x00, 0x6c, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x00, 0x00,
-  0x8b, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x39, 0x02, 0x00, 0x00, 0x38, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x3a, 0x02, 0x00, 0x00, 0x39, 0x02, 0x00, 0x00,
+  0x30, 0x02, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x3b, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x3a, 0x02, 0x00, 0x00,
+  0x88, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x00, 0x00,
+  0x37, 0x02, 0x00, 0x00, 0x3b, 0x02, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x3d, 0x02, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00,
+  0x3c, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x32, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x32, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x3e, 0x02, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00,
+  0x28, 0x02, 0x00, 0x00, 0x3d, 0x02, 0x00, 0x00, 0x33, 0x02, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x3f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x27, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00,
+  0x3f, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x40, 0x02, 0x00, 0x00,
+  0x90, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00,
+  0x3e, 0x02, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x3f, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x3f, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x42, 0x02, 0x00, 0x00,
+  0x3e, 0x02, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00, 0x41, 0x02, 0x00, 0x00,
+  0x40, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x25, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x25, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x43, 0x02, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00,
+  0x20, 0x02, 0x00, 0x00, 0x42, 0x02, 0x00, 0x00, 0x3f, 0x02, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x1e, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x1e, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x44, 0x02, 0x00, 0x00, 0x23, 0x02, 0x00, 0x00, 0x1f, 0x02, 0x00, 0x00,
+  0x43, 0x02, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00,
+  0x44, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x61, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x61, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00,
-  0x5d, 0x01, 0x00, 0x00, 0x4b, 0x01, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00,
-  0x65, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x8e, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x8f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x90, 0x01, 0x00, 0x00,
-  0x91, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x90, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x1a, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x1a, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00,
+  0x16, 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x45, 0x02, 0x00, 0x00,
+  0x1e, 0x02, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x47, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x48, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x47, 0x02, 0x00, 0x00, 0x49, 0x02, 0x00, 0x00,
+  0x4a, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x49, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x4b, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x94, 0x01, 0x00, 0x00, 0x93, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x95, 0x01, 0x00, 0x00, 0x94, 0x01, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x96, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x95, 0x01, 0x00, 0x00,
-  0x97, 0x01, 0x00, 0x00, 0x96, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x97, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x98, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0x99, 0x01, 0x00, 0x00,
-  0x98, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x9a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x99, 0x01, 0x00, 0x00, 0x9b, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x9b, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x9d, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
-  0x6e, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9a, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,
-  0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x9f, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x9e, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xa0, 0x01, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa1, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xa0, 0x01, 0x00, 0x00,
-  0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x9a, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x9a, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0x9d, 0x01, 0x00, 0x00,
-  0x9b, 0x01, 0x00, 0x00, 0xa1, 0x01, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0xa4, 0x01, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00,
-  0x50, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xa5, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xa4, 0x01, 0x00, 0x00,
-  0xa6, 0x01, 0x00, 0x00, 0xa7, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xa6, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xa8, 0x01, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xa5, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xa7, 0x01, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xa9, 0x01, 0x00, 0x00, 0xa3, 0x01, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0xaa, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xa9, 0x01, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00,
-  0xaa, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0xab, 0x01, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xa5, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xa5, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xad, 0x01, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x00, 0xa6, 0x01, 0x00, 0x00,
-  0xac, 0x01, 0x00, 0x00, 0xa7, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xae, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00,
-  0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0xaf, 0x01, 0x00, 0x00, 0xae, 0x01, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0xaf, 0x01, 0x00, 0x00, 0xb1, 0x01, 0x00, 0x00,
-  0xb2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x01, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb3, 0x01, 0x00, 0x00,
-  0xae, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xb0, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb2, 0x01, 0x00, 0x00,
-  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00,
-  0xae, 0x01, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xb5, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0xb4, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xb6, 0x01, 0x00, 0x00, 0xb5, 0x01, 0x00, 0x00,
-  0x6d, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xb7, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0xb6, 0x01, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xb0, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb0, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xb8, 0x01, 0x00, 0x00,
-  0xb3, 0x01, 0x00, 0x00, 0xb1, 0x01, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00,
-  0xb2, 0x01, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0xb9, 0x01, 0x00, 0x00, 0xa2, 0x01, 0x00, 0x00, 0xad, 0x01, 0x00, 0x00,
-  0xb8, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x96, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x96, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x92, 0x01, 0x00, 0x00,
-  0x90, 0x01, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0xbb, 0x01, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0xbb, 0x01, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xbd, 0x01, 0x00, 0x00,
-  0xba, 0x01, 0x00, 0x00, 0xbc, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
-  0xbd, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+  0x62, 0x00, 0x00, 0x00, 0x4c, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x4d, 0x02, 0x00, 0x00, 0x4c, 0x02, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x4f, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x4e, 0x02, 0x00, 0x00,
+  0x50, 0x02, 0x00, 0x00, 0x4f, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x50, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x51, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x52, 0x02, 0x00, 0x00,
+  0x51, 0x02, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x53, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x52, 0x02, 0x00, 0x00, 0x54, 0x02, 0x00, 0x00, 0x55, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x54, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x56, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00,
+  0x70, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x53, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x55, 0x02, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x57, 0x02, 0x00, 0x00, 0x51, 0x02, 0x00, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x58, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x57, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x59, 0x02, 0x00, 0x00, 0x58, 0x02, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5a, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x59, 0x02, 0x00, 0x00,
+  0x56, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x53, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x53, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x5b, 0x02, 0x00, 0x00, 0x56, 0x02, 0x00, 0x00,
+  0x54, 0x02, 0x00, 0x00, 0x5a, 0x02, 0x00, 0x00, 0x55, 0x02, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x5c, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x5d, 0x02, 0x00, 0x00, 0x5c, 0x02, 0x00, 0x00,
+  0x52, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x5e, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x5d, 0x02, 0x00, 0x00,
+  0x5f, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x5f, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x61, 0x02, 0x00, 0x00, 0x5c, 0x02, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x5e, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x60, 0x02, 0x00, 0x00, 0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x62, 0x02, 0x00, 0x00, 0x5c, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
+  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x63, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x62, 0x02, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00,
+  0x63, 0x02, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x65, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x64, 0x02, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0x5e, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x5e, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x66, 0x02, 0x00, 0x00, 0x61, 0x02, 0x00, 0x00, 0x5f, 0x02, 0x00, 0x00,
+  0x65, 0x02, 0x00, 0x00, 0x60, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00,
+  0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x68, 0x02, 0x00, 0x00, 0x67, 0x02, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x69, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x68, 0x02, 0x00, 0x00, 0x6a, 0x02, 0x00, 0x00,
+  0x6b, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6a, 0x02, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6c, 0x02, 0x00, 0x00,
+  0x67, 0x02, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x69, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x6b, 0x02, 0x00, 0x00,
+  0x81, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x00, 0x00,
+  0x67, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x6e, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x6d, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x6f, 0x02, 0x00, 0x00, 0x6e, 0x02, 0x00, 0x00,
+  0x6f, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x70, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0x6f, 0x02, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x69, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x69, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x71, 0x02, 0x00, 0x00,
+  0x6c, 0x02, 0x00, 0x00, 0x6a, 0x02, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00,
+  0x6b, 0x02, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x72, 0x02, 0x00, 0x00, 0x5b, 0x02, 0x00, 0x00, 0x66, 0x02, 0x00, 0x00,
+  0x71, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x4f, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x4f, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0x73, 0x02, 0x00, 0x00, 0x4b, 0x02, 0x00, 0x00,
+  0x49, 0x02, 0x00, 0x00, 0x72, 0x02, 0x00, 0x00, 0x69, 0x02, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x74, 0x02, 0x00, 0x00,
+  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x76, 0x02, 0x00, 0x00,
+  0x73, 0x02, 0x00, 0x00, 0x75, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
+  0x76, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
   0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0xc0, 0x01, 0x00, 0x00, 0xbf, 0x01, 0x00, 0x00, 0xbe, 0x01, 0x00, 0x00,
-  0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x91, 0x01, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00,
-  0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xc2, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xc1, 0x01, 0x00, 0x00,
-  0xc3, 0x01, 0x00, 0x00, 0xc4, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xc3, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0xc5, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0x79, 0x02, 0x00, 0x00, 0x78, 0x02, 0x00, 0x00, 0x77, 0x02, 0x00, 0x00,
+  0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x48, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x4a, 0x02, 0x00, 0x00, 0xb4, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x7a, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00,
+  0x13, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x7b, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x7a, 0x02, 0x00, 0x00,
+  0x7c, 0x02, 0x00, 0x00, 0x7d, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0x7c, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0x7e, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0xc6, 0x01, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
-  0xc5, 0x01, 0x00, 0x00, 0xc7, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xca, 0x01, 0x00, 0x00, 0xc9, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0xca, 0x01, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x04, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0xcc, 0x01, 0x00, 0x00, 0xcb, 0x01, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0xcd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0xcc, 0x01, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, 0xcd, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xce, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xcf, 0x01, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0xd0, 0x01, 0x00, 0x00, 0xcf, 0x01, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0xd0, 0x01, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00,
-  0xd3, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd2, 0x01, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd4, 0x01, 0x00, 0x00,
-  0xcf, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xd1, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd3, 0x01, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd5, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xcf, 0x01, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd6, 0x01, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xd5, 0x01, 0x00, 0x00,
-  0x56, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xd7, 0x01, 0x00, 0x00, 0xd6, 0x01, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd8, 0x01, 0x00, 0x00,
-  0xd7, 0x01, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xd1, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xd1, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd9, 0x01, 0x00, 0x00,
-  0xd4, 0x01, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00, 0xd8, 0x01, 0x00, 0x00,
-  0xd3, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xda, 0x01, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0xdb, 0x01, 0x00, 0x00,
-  0xda, 0x01, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0xdb, 0x01, 0x00, 0x00, 0xdd, 0x01, 0x00, 0x00, 0xde, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xdd, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00,
-  0x51, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xdc, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xde, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xe1, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00,
-  0xe1, 0x01, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xe3, 0x01, 0x00, 0x00, 0xe2, 0x01, 0x00, 0x00,
-  0x52, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xdc, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xdc, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xe4, 0x01, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00,
-  0xdd, 0x01, 0x00, 0x00, 0xe3, 0x01, 0x00, 0x00, 0xde, 0x01, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00,
-  0xc8, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0xe6, 0x01, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00,
-  0x55, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xe7, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xe6, 0x01, 0x00, 0x00,
-  0xe8, 0x01, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xe8, 0x01, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xea, 0x01, 0x00, 0x00, 0xe5, 0x01, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xe7, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xe9, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xeb, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0xe5, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xec, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0xeb, 0x01, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xed, 0x01, 0x00, 0x00, 0xec, 0x01, 0x00, 0x00,
-  0x53, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xee, 0x01, 0x00, 0x00, 0xed, 0x01, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xe7, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xe7, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0xef, 0x01, 0x00, 0x00, 0xea, 0x01, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x00,
-  0xee, 0x01, 0x00, 0x00, 0xe9, 0x01, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0xd9, 0x01, 0x00, 0x00,
-  0xe4, 0x01, 0x00, 0x00, 0xef, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x49, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xcd, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0xcd, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0xc8, 0x01, 0x00, 0x00,
-  0xc3, 0x01, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00, 0xe7, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x09, 0x00, 0x32, 0x00, 0x00, 0x00, 0xf3, 0x01, 0x00, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0xf2, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00,
+  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x81, 0x02, 0x00, 0x00,
+  0x7e, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x62, 0x00, 0x00, 0x00, 0x82, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x83, 0x02, 0x00, 0x00, 0x82, 0x02, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0x83, 0x02, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x85, 0x02, 0x00, 0x00, 0x84, 0x02, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x86, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x85, 0x02, 0x00, 0x00, 0x87, 0x02, 0x00, 0x00, 0x86, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x87, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, 0x81, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0x89, 0x02, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0x8a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x89, 0x02, 0x00, 0x00, 0x8b, 0x02, 0x00, 0x00,
+  0x8c, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8b, 0x02, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8d, 0x02, 0x00, 0x00,
+  0x88, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x8a, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8c, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x88, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x8f, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x8e, 0x02, 0x00, 0x00,
+  0x58, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x90, 0x02, 0x00, 0x00, 0x8f, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00,
+  0x90, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x8a, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x8a, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x92, 0x02, 0x00, 0x00,
+  0x8d, 0x02, 0x00, 0x00, 0x8b, 0x02, 0x00, 0x00, 0x91, 0x02, 0x00, 0x00,
+  0x8c, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0x93, 0x02, 0x00, 0x00, 0x81, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0x94, 0x02, 0x00, 0x00,
+  0x93, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0x95, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0x94, 0x02, 0x00, 0x00, 0x96, 0x02, 0x00, 0x00, 0x97, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x96, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00, 0x93, 0x02, 0x00, 0x00,
+  0x53, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x95, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x97, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0x93, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x9a, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0x99, 0x02, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00,
+  0x9a, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x9b, 0x02, 0x00, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x95, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x95, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0x9d, 0x02, 0x00, 0x00, 0x98, 0x02, 0x00, 0x00,
+  0x96, 0x02, 0x00, 0x00, 0x9c, 0x02, 0x00, 0x00, 0x97, 0x02, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x9e, 0x02, 0x00, 0x00,
+  0x81, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0x9f, 0x02, 0x00, 0x00, 0x9e, 0x02, 0x00, 0x00,
+  0x57, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xa0, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x9f, 0x02, 0x00, 0x00,
+  0xa1, 0x02, 0x00, 0x00, 0xa2, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xa1, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa3, 0x02, 0x00, 0x00, 0x9e, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xa0, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xa2, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa4, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x9e, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0xa4, 0x02, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xa6, 0x02, 0x00, 0x00, 0xa5, 0x02, 0x00, 0x00,
+  0x55, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa7, 0x02, 0x00, 0x00, 0xa6, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xa0, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xa0, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xa8, 0x02, 0x00, 0x00, 0xa3, 0x02, 0x00, 0x00, 0xa1, 0x02, 0x00, 0x00,
+  0xa7, 0x02, 0x00, 0x00, 0xa2, 0x02, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xa9, 0x02, 0x00, 0x00, 0x92, 0x02, 0x00, 0x00,
+  0x9d, 0x02, 0x00, 0x00, 0xa8, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xaa, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x00, 0x00, 0xa9, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+  0x49, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x86, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x86, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xab, 0x02, 0x00, 0x00, 0x81, 0x02, 0x00, 0x00,
+  0x7c, 0x02, 0x00, 0x00, 0xaa, 0x02, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x09, 0x00, 0x34, 0x00, 0x00, 0x00, 0xac, 0x02, 0x00, 0x00,
+  0x71, 0x00, 0x00, 0x00, 0xab, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0xf5, 0x01, 0x00, 0x00, 0xf4, 0x01, 0x00, 0x00,
-  0xf3, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xc2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc4, 0x01, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0xf6, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x4a, 0x01, 0x00, 0x00, 0xf7, 0x01, 0x00, 0x00,
-  0xf8, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf7, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xad, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xae, 0x02, 0x00, 0x00, 0xad, 0x02, 0x00, 0x00,
+  0xac, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x7b, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7d, 0x02, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0xaf, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0x03, 0x02, 0x00, 0x00, 0xb0, 0x02, 0x00, 0x00,
+  0xb1, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb0, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xb2, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x90, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00, 0xf9, 0x01, 0x00, 0x00,
-  0x6a, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
-  0xfb, 0x01, 0x00, 0x00, 0xfa, 0x01, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xb3, 0x02, 0x00, 0x00, 0xb2, 0x02, 0x00, 0x00,
+  0x6c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00,
+  0xb4, 0x02, 0x00, 0x00, 0xb3, 0x02, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
   0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
-  0x41, 0x00, 0x05, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
-  0x07, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00,
-  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00,
-  0xfb, 0x01, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x2d, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x00, 0x02, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
-  0x11, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x04, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x02, 0x02, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x04, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00,
-  0x06, 0x02, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
-  0xf7, 0x00, 0x03, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-  0xfa, 0x00, 0x04, 0x00, 0x06, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00,
-  0x09, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x08, 0x02, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x02, 0x00, 0x00,
-  0x05, 0x02, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x07, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x09, 0x02, 0x00, 0x00,
-  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0b, 0x02, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x02, 0x00, 0x00,
-  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00,
-  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0b, 0x02, 0x00, 0x00,
-  0x56, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x0d, 0x02, 0x00, 0x00, 0x0c, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
-  0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00,
-  0x0d, 0x02, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0x07, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x07, 0x02, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00,
-  0x0a, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x0e, 0x02, 0x00, 0x00,
-  0x09, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x10, 0x02, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0xbc, 0x00, 0x05, 0x00, 0x61, 0x00, 0x00, 0x00, 0x11, 0x02, 0x00, 0x00,
-  0x10, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
-  0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
-  0x11, 0x02, 0x00, 0x00, 0x13, 0x02, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x13, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x15, 0x02, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00,
-  0x51, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x12, 0x02, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x14, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x04, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x17, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x1a, 0x00, 0x00, 0x00, 0x16, 0x02, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00,
-  0x17, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x19, 0x02, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00,
-  0x52, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x12, 0x02, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x12, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x1a, 0x02, 0x00, 0x00, 0x15, 0x02, 0x00, 0x00,
-  0x13, 0x02, 0x00, 0x00, 0x19, 0x02, 0x00, 0x00, 0x14, 0x02, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1b, 0x02, 0x00, 0x00,
-  0xfe, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
-  0x61, 0x00, 0x00, 0x00, 0x1c, 0x02, 0x00, 0x00, 0x1b, 0x02, 0x00, 0x00,
-  0x55, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0x1d, 0x02, 0x00, 0x00,
-  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0x1c, 0x02, 0x00, 0x00,
-  0x1e, 0x02, 0x00, 0x00, 0x1f, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1e, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x20, 0x02, 0x00, 0x00, 0x1b, 0x02, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x1d, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1f, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x21, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
-  0x1b, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x22, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
-  0x21, 0x02, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
-  0x10, 0x00, 0x00, 0x00, 0x23, 0x02, 0x00, 0x00, 0x22, 0x02, 0x00, 0x00,
-  0x53, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x24, 0x02, 0x00, 0x00, 0x23, 0x02, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0x1d, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0x1d, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x25, 0x02, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x1e, 0x02, 0x00, 0x00,
-  0x24, 0x02, 0x00, 0x00, 0x1f, 0x02, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00, 0x0f, 0x02, 0x00, 0x00,
-  0x1a, 0x02, 0x00, 0x00, 0x25, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x27, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
-  0x2b, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
-  0x49, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x03, 0x02, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x03, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00,
-  0xf7, 0x01, 0x00, 0x00, 0x27, 0x02, 0x00, 0x00, 0x1d, 0x02, 0x00, 0x00,
-  0x4f, 0x00, 0x09, 0x00, 0x32, 0x00, 0x00, 0x00, 0x29, 0x02, 0x00, 0x00,
-  0x6f, 0x00, 0x00, 0x00, 0x28, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0x41, 0x00, 0x05, 0x00, 0x62, 0x00, 0x00, 0x00, 0xb5, 0x02, 0x00, 0x00,
+  0x07, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xb6, 0x02, 0x00, 0x00, 0xb5, 0x02, 0x00, 0x00,
+  0x8e, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00,
+  0xb4, 0x02, 0x00, 0x00, 0xb6, 0x02, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
+  0x62, 0x00, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x2f, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xb9, 0x02, 0x00, 0x00, 0xb8, 0x02, 0x00, 0x00, 0xb6, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0xba, 0x02, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00,
+  0x11, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x04, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0xbb, 0x02, 0x00, 0x00, 0xba, 0x02, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0xbc, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0xbb, 0x02, 0x00, 0x00, 0xbd, 0x02, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xbd, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00,
+  0xbf, 0x02, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00,
+  0xf7, 0x00, 0x03, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0xfa, 0x00, 0x04, 0x00, 0xbf, 0x02, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x00,
+  0xc2, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc1, 0x02, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc3, 0x02, 0x00, 0x00,
+  0xbe, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xc0, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc2, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc4, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xbe, 0x02, 0x00, 0x00,
+  0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc5, 0x02, 0x00, 0x00,
+  0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0xc4, 0x02, 0x00, 0x00,
+  0x58, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xc6, 0x02, 0x00, 0x00, 0xc5, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00,
+  0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc7, 0x02, 0x00, 0x00,
+  0xc6, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xc0, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc0, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00, 0xc8, 0x02, 0x00, 0x00,
+  0xc3, 0x02, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x00, 0xc7, 0x02, 0x00, 0x00,
+  0xc2, 0x02, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xc9, 0x02, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0xbc, 0x00, 0x05, 0x00, 0x63, 0x00, 0x00, 0x00, 0xca, 0x02, 0x00, 0x00,
+  0xc9, 0x02, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00,
+  0xcb, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00,
+  0xca, 0x02, 0x00, 0x00, 0xcc, 0x02, 0x00, 0x00, 0xcd, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xcc, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xce, 0x02, 0x00, 0x00, 0xc9, 0x02, 0x00, 0x00,
+  0x53, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xcb, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xcd, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xcf, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x04, 0x00, 0x00, 0x00, 0xc9, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x1a, 0x00, 0x00, 0x00, 0xcf, 0x02, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd1, 0x02, 0x00, 0x00,
+  0xd0, 0x02, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0xd1, 0x02, 0x00, 0x00,
+  0x54, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xcb, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xcb, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, 0xce, 0x02, 0x00, 0x00,
+  0xcc, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0xcd, 0x02, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xd4, 0x02, 0x00, 0x00,
+  0xb7, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x05, 0x00,
+  0x63, 0x00, 0x00, 0x00, 0xd5, 0x02, 0x00, 0x00, 0xd4, 0x02, 0x00, 0x00,
+  0x57, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x03, 0x00, 0xd6, 0x02, 0x00, 0x00,
+  0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x04, 0x00, 0xd5, 0x02, 0x00, 0x00,
+  0xd7, 0x02, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xd7, 0x02, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xd9, 0x02, 0x00, 0x00, 0xd4, 0x02, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xd6, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xd8, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xda, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+  0xd4, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xdb, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00,
+  0xda, 0x02, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x85, 0x00, 0x05, 0x00,
+  0x10, 0x00, 0x00, 0x00, 0xdc, 0x02, 0x00, 0x00, 0xdb, 0x02, 0x00, 0x00,
+  0x55, 0x00, 0x00, 0x00, 0x83, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xdd, 0x02, 0x00, 0x00, 0xdc, 0x02, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xd6, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xd6, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xde, 0x02, 0x00, 0x00, 0xd9, 0x02, 0x00, 0x00, 0xd7, 0x02, 0x00, 0x00,
+  0xdd, 0x02, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00, 0x50, 0x00, 0x06, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xdf, 0x02, 0x00, 0x00, 0xc8, 0x02, 0x00, 0x00,
+  0xd3, 0x02, 0x00, 0x00, 0xde, 0x02, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+  0x2b, 0x00, 0x00, 0x00, 0xdf, 0x02, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
+  0x49, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0xbc, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0xbc, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xe1, 0x02, 0x00, 0x00, 0xb7, 0x02, 0x00, 0x00,
+  0xb0, 0x02, 0x00, 0x00, 0xe0, 0x02, 0x00, 0x00, 0xd6, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x09, 0x00, 0x34, 0x00, 0x00, 0x00, 0xe2, 0x02, 0x00, 0x00,
+  0x71, 0x00, 0x00, 0x00, 0xe1, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
   0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00,
-  0x29, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xf6, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xf8, 0x01, 0x00, 0x00,
-  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00,
-  0x8d, 0x01, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+  0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00, 0xe3, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x52, 0x00, 0x06, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xe4, 0x02, 0x00, 0x00, 0xe3, 0x02, 0x00, 0x00,
+  0xe2, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0xaf, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xb1, 0x02, 0x00, 0x00,
+  0x4f, 0x00, 0x08, 0x00, 0x3f, 0x00, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00,
+  0x46, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
   0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x41, 0x00, 0x05, 0x00,
-  0x60, 0x00, 0x00, 0x00, 0x2d, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
-  0x30, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x2e, 0x02, 0x00, 0x00, 0x2d, 0x02, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
-  0x3f, 0x00, 0x00, 0x00, 0x2f, 0x02, 0x00, 0x00, 0x2c, 0x02, 0x00, 0x00,
-  0x2e, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x30, 0x02, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x2f, 0x02, 0x00, 0x00,
+  0x62, 0x00, 0x00, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+  0x32, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x04, 0x00, 0x10, 0x00, 0x00, 0x00,
+  0xe7, 0x02, 0x00, 0x00, 0xe6, 0x02, 0x00, 0x00, 0x8e, 0x00, 0x05, 0x00,
+  0x3f, 0x00, 0x00, 0x00, 0xe8, 0x02, 0x00, 0x00, 0xe5, 0x02, 0x00, 0x00,
+  0xe7, 0x02, 0x00, 0x00, 0x4f, 0x00, 0x09, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xe9, 0x02, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0xe8, 0x02, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
   0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
   0x03, 0x00, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x10, 0x00, 0x00, 0x00,
-  0x31, 0x02, 0x00, 0x00, 0x8d, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0x52, 0x00, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0x32, 0x02, 0x00, 0x00,
-  0x31, 0x02, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
-  0xf9, 0x00, 0x02, 0x00, 0xf6, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
-  0xf6, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00,
-  0x33, 0x02, 0x00, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00,
-  0x32, 0x02, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
-  0xc2, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0xc2, 0x01, 0x00, 0x00,
-  0xf5, 0x00, 0x07, 0x00, 0x32, 0x00, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00,
-  0xf5, 0x01, 0x00, 0x00, 0xcd, 0x01, 0x00, 0x00, 0x33, 0x02, 0x00, 0x00,
-  0xf6, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x8f, 0x01, 0x00, 0x00,
-  0xf8, 0x00, 0x02, 0x00, 0x8f, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
-  0x32, 0x00, 0x00, 0x00, 0x35, 0x02, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00,
-  0x96, 0x01, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00, 0xc2, 0x01, 0x00, 0x00,
-  0x85, 0x00, 0x05, 0x00, 0x32, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00,
-  0x35, 0x02, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
-  0x05, 0x00, 0x00, 0x00, 0x36, 0x02, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00,
+  0xea, 0x02, 0x00, 0x00, 0x46, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0x52, 0x00, 0x06, 0x00, 0x34, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x00, 0x00,
+  0xea, 0x02, 0x00, 0x00, 0xe9, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
+  0xf9, 0x00, 0x02, 0x00, 0xaf, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00,
+  0xaf, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00,
+  0xec, 0x02, 0x00, 0x00, 0xe4, 0x02, 0x00, 0x00, 0xbc, 0x02, 0x00, 0x00,
+  0xeb, 0x02, 0x00, 0x00, 0xb1, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00,
+  0x7b, 0x02, 0x00, 0x00, 0xf8, 0x00, 0x02, 0x00, 0x7b, 0x02, 0x00, 0x00,
+  0xf5, 0x00, 0x07, 0x00, 0x34, 0x00, 0x00, 0x00, 0xed, 0x02, 0x00, 0x00,
+  0xae, 0x02, 0x00, 0x00, 0x86, 0x02, 0x00, 0x00, 0xec, 0x02, 0x00, 0x00,
+  0xaf, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x48, 0x02, 0x00, 0x00,
+  0xf8, 0x00, 0x02, 0x00, 0x48, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x07, 0x00,
+  0x34, 0x00, 0x00, 0x00, 0xee, 0x02, 0x00, 0x00, 0x79, 0x02, 0x00, 0x00,
+  0x4f, 0x02, 0x00, 0x00, 0xed, 0x02, 0x00, 0x00, 0x7b, 0x02, 0x00, 0x00,
+  0x85, 0x00, 0x05, 0x00, 0x34, 0x00, 0x00, 0x00, 0xef, 0x02, 0x00, 0x00,
+  0xee, 0x02, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x03, 0x00,
+  0x05, 0x00, 0x00, 0x00, 0xef, 0x02, 0x00, 0x00, 0xfd, 0x00, 0x01, 0x00,
   0x38, 0x00, 0x01, 0x00
   0x38, 0x00, 0x01, 0x00
 };
 };
-static const unsigned int texture_advanced_frag_spv_len = 13348;
+static const unsigned int texture_advanced_frag_spv_len = 17260;

+ 40 - 14
src/render/metal/SDL_render_metal.m

@@ -1333,10 +1333,12 @@ static const float TONEMAP_CHROME = 2;
 //static const float TEXTURETYPE_NONE = 0;
 //static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
-static const float TEXTURETYPE_NV12 = 4;
-static const float TEXTURETYPE_NV21 = 5;
-static const float TEXTURETYPE_YUV = 6;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
+static const float TEXTURETYPE_NV12 = 6;
+static const float TEXTURETYPE_NV21 = 7;
+static const float TEXTURETYPE_YUV = 8;
 
 
 //static const float INPUTTYPE_UNSPECIFIED = 0;
 //static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -1393,7 +1395,20 @@ static void SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand
     if (texture) {
     if (texture) {
         switch (texture->format) {
         switch (texture->format) {
         case SDL_PIXELFORMAT_INDEX8:
         case SDL_PIXELFORMAT_INDEX8:
-            constants->texture_type = TEXTURETYPE_PALETTE;
+            switch (cmd->data.draw.texture_scale_mode) {
+            case SDL_SCALEMODE_NEAREST:
+                constants->texture_type = TEXTURETYPE_PALETTE_NEAREST;
+                break;
+            case SDL_SCALEMODE_LINEAR:
+                constants->texture_type = TEXTURETYPE_PALETTE_LINEAR;
+                break;
+            case SDL_SCALEMODE_PIXELART:
+                constants->texture_type = TEXTURETYPE_PALETTE_PIXELART;
+                break;
+            default:
+                SDL_assert(!"Unknown scale mode");
+                break;
+            }
             break;
             break;
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_YV12:
         case SDL_PIXELFORMAT_IYUV:
         case SDL_PIXELFORMAT_IYUV:
@@ -1411,10 +1426,6 @@ static void SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand
         default:
         default:
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
-                constants->texture_width = texture->w;
-                constants->texture_height = texture->h;
-                constants->texel_width = 1.0f / constants->texture_width;
-                constants->texel_height = 1.0f / constants->texture_height;
             } else {
             } else {
                 constants->texture_type = TEXTURETYPE_RGB;
                 constants->texture_type = TEXTURETYPE_RGB;
             }
             }
@@ -1432,6 +1443,15 @@ static void SetupShaderConstants(SDL_Renderer *renderer, const SDL_RenderCommand
             break;
             break;
         }
         }
 
 
+        if (constants->texture_type == TEXTURETYPE_PALETTE_LINEAR ||
+            constants->texture_type == TEXTURETYPE_PALETTE_PIXELART ||
+            constants->texture_type == TEXTURETYPE_RGB_PIXELART) {
+            constants->texture_width = texture->w;
+            constants->texture_height = texture->h;
+            constants->texel_width = 1.0f / constants->texture_width;
+            constants->texel_height = 1.0f / constants->texture_height;
+        }
+
         constants->sdr_white_point = texture->SDR_white_point;
         constants->sdr_white_point = texture->SDR_white_point;
 
 
         if (renderer->target) {
         if (renderer->target) {
@@ -1539,7 +1559,7 @@ static bool SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
     return true;
     return true;
 }
 }
 
 
-static id<MTLSamplerState> GetSampler(SDL3METAL_RenderData *data, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
+static id<MTLSamplerState> GetSampler(SDL3METAL_RenderData *data, SDL_PixelFormat format, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
 {
 {
     NSNumber *key = [NSNumber numberWithInteger:RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v)];
     NSNumber *key = [NSNumber numberWithInteger:RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v)];
     id<MTLSamplerState> mtlsampler = data.mtlsamplers[key];
     id<MTLSamplerState> mtlsampler = data.mtlsamplers[key];
@@ -1553,8 +1573,14 @@ static id<MTLSamplerState> GetSampler(SDL3METAL_RenderData *data, SDL_ScaleMode
             break;
             break;
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_LINEAR:
         case SDL_SCALEMODE_LINEAR:
-            samplerdesc.minFilter = MTLSamplerMinMagFilterLinear;
-            samplerdesc.magFilter = MTLSamplerMinMagFilterLinear;
+            if (format == SDL_PIXELFORMAT_INDEX8) {
+                // We'll do linear sampling in the shader
+                samplerdesc.minFilter = MTLSamplerMinMagFilterNearest;
+                samplerdesc.magFilter = MTLSamplerMinMagFilterNearest;
+            } else {
+                samplerdesc.minFilter = MTLSamplerMinMagFilterLinear;
+                samplerdesc.magFilter = MTLSamplerMinMagFilterLinear;
+            }
             break;
             break;
         default:
         default:
             SDL_SetError("Unknown scale mode: %d", scale_mode);
             SDL_SetError("Unknown scale mode: %d", scale_mode);
@@ -1624,7 +1650,7 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
     if (cmd->data.draw.texture_scale_mode != statecache->texture_scale_mode ||
     if (cmd->data.draw.texture_scale_mode != statecache->texture_scale_mode ||
         cmd->data.draw.texture_address_mode_u != statecache->texture_address_mode_u ||
         cmd->data.draw.texture_address_mode_u != statecache->texture_address_mode_u ||
         cmd->data.draw.texture_address_mode_v != statecache->texture_address_mode_v) {
         cmd->data.draw.texture_address_mode_v != statecache->texture_address_mode_v) {
-        id<MTLSamplerState> mtlsampler = GetSampler(data, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
+        id<MTLSamplerState> mtlsampler = GetSampler(data, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
         if (mtlsampler == nil) {
         if (mtlsampler == nil) {
             return false;
             return false;
         }
         }
@@ -1636,7 +1662,7 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, c
     }
     }
     if (texture->palette) {
     if (texture->palette) {
         if (!statecache->texture_palette) {
         if (!statecache->texture_palette) {
-            id<MTLSamplerState> mtlsampler = GetSampler(data, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
+            id<MTLSamplerState> mtlsampler = GetSampler(data, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
             if (mtlsampler == nil) {
             if (mtlsampler == nil) {
                 return false;
                 return false;
             }
             }

+ 48 - 13
src/render/metal/SDL_shaders_metal.metal

@@ -10,13 +10,15 @@ using namespace metal;
 #define TONEMAP_LINEAR          1
 #define TONEMAP_LINEAR          1
 #define TONEMAP_CHROME          2
 #define TONEMAP_CHROME          2
 
 
-#define TEXTURETYPE_NONE        0
-#define TEXTURETYPE_RGB         1
-#define TEXTURETYPE_RGB_PIXELART 2
-#define TEXTURETYPE_PALETTE     3
-#define TEXTURETYPE_NV12        4
-#define TEXTURETYPE_NV21        5
-#define TEXTURETYPE_YUV         6
+#define TEXTURETYPE_NONE                0
+#define TEXTURETYPE_RGB                 1
+#define TEXTURETYPE_RGB_PIXELART        2
+#define TEXTURETYPE_PALETTE_NEAREST     3
+#define TEXTURETYPE_PALETTE_LINEAR      4
+#define TEXTURETYPE_PALETTE_PIXELART    5
+#define TEXTURETYPE_NV12                6
+#define TEXTURETYPE_NV21                7
+#define TEXTURETYPE_YUV                 8
 
 
 #define INPUTTYPE_UNSPECIFIED   0
 #define INPUTTYPE_UNSPECIFIED   0
 #define INPUTTYPE_SRGB          1
 #define INPUTTYPE_SRGB          1
@@ -111,13 +113,42 @@ float3 ApplyTonemap(float3 v, float input_type, float tonemap_method, float tone
     return v;
     return v;
 }
 }
 
 
-float2 GetPixelArtUV(float2 texcoord, float4 texel_size)
+float4 SamplePaletteNearest(texture2d<float> tex0, texture2d<float> tex1, sampler s0, sampler s1, float2 uv)
+{
+    float index = tex0.sample(s0, uv).r * 255;
+    return tex1.sample(s1, float2((index + 0.5) / 256, 0.5));
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(texture2d<float> tex0, texture2d<float> tex1, sampler s0, sampler s1, float2 uv, float4 texel_size)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = fract(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(tex0, tex1, s0, s1, uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(tex0, tex1, s0, s1, uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(tex0, tex1, s0, s1, uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(tex0, tex1, s0, s1, uv_min_max.zw);
+
+    // bilinear interpolation
+    return mix(mix(texelA, texelB, uv_frac.y), mix(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+
+float2 GetPixelArtUV(float2 uv, float4 texel_size)
 {
 {
     // box filter size in texel units
     // box filter size in texel units
-    float2 boxSize = clamp(fwidth(texcoord) * texel_size.zw, 1e-5, 1);
+    float2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1);
 
 
     // scale uv by texture size to get texel coordinate
     // scale uv by texture size to get texel coordinate
-    float2 tx = texcoord * texel_size.zw - 0.5 * boxSize;
+    float2 tx = uv * texel_size.zw - 0.5 * boxSize;
 
 
     // compute offset for pixel-sized box filter
     // compute offset for pixel-sized box filter
     float2 txOffset = smoothstep(1 - boxSize, 1, fract(tx));
     float2 txOffset = smoothstep(1 - boxSize, 1, fract(tx));
@@ -269,9 +300,13 @@ fragment float4 SDL_Palette_fragment(CopyVertexOutput vert [[stage_in]],
 {
 {
     float4 rgba;
     float4 rgba;
 
 
-    if (c.texture_type == TEXTURETYPE_PALETTE) {
-        float index = tex0.sample(s0, vert.texcoord).r * 255;
-        rgba = tex1.sample(s1, float2((index + 0.5) / 256, 0.5));
+    if (c.texture_type == TEXTURETYPE_PALETTE_NEAREST) {
+        rgba = SamplePaletteNearest(tex0, tex1, s0, s1, vert.texcoord);
+    } else if (c.texture_type == TEXTURETYPE_PALETTE_LINEAR) {
+        rgba = SamplePaletteLinear(tex0, tex1, s0, s1, vert.texcoord, c.texel_size);
+    } else if (c.texture_type == TEXTURETYPE_PALETTE_PIXELART) {
+        float2 uv = GetPixelArtUV(vert.texcoord, c.texel_size);
+        rgba = SamplePaletteLinear(tex0, tex1, s0, s1, uv, c.texel_size);
     } else {
     } else {
         // Unexpected texture type, use magenta error color
         // Unexpected texture type, use magenta error color
         rgba = float4(1.0, 0.0, 1.0, 1.0);
         rgba = float4(1.0, 0.0, 1.0, 1.0);

File diff suppressed because it is too large
+ 680 - 496
src/render/metal/SDL_shaders_metal_ios.h


File diff suppressed because it is too large
+ 741 - 577
src/render/metal/SDL_shaders_metal_iphonesimulator.h


File diff suppressed because it is too large
+ 1710 - 1030
src/render/metal/SDL_shaders_metal_macos.h


File diff suppressed because it is too large
+ 680 - 496
src/render/metal/SDL_shaders_metal_tvos.h


File diff suppressed because it is too large
+ 701 - 481
src/render/metal/SDL_shaders_metal_tvsimulator.h


+ 42 - 25
src/render/opengl/SDL_render_gl.c

@@ -448,7 +448,7 @@ static bool convert_format(Uint32 pixel_format, GLint *internalFormat, GLenum *f
     return true;
     return true;
 }
 }
 
 
-static bool SetTextureScaleMode(GL_RenderData *data, GLenum textype, SDL_ScaleMode scaleMode)
+static bool SetTextureScaleMode(GL_RenderData *data, GLenum textype, SDL_PixelFormat format, SDL_ScaleMode scaleMode)
 {
 {
     switch (scaleMode) {
     switch (scaleMode) {
     case SDL_SCALEMODE_NEAREST:
     case SDL_SCALEMODE_NEAREST:
@@ -457,8 +457,14 @@ static bool SetTextureScaleMode(GL_RenderData *data, GLenum textype, SDL_ScaleMo
         break;
         break;
     case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
     case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
     case SDL_SCALEMODE_LINEAR:
     case SDL_SCALEMODE_LINEAR:
-        data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        if (format == SDL_PIXELFORMAT_INDEX8) {
+            // We'll do linear sampling in the shader
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+        } else {
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        }
         break;
         break;
     default:
     default:
         return SDL_SetError("Unknown texture scale mode: %d", scaleMode);
         return SDL_SetError("Unknown texture scale mode: %d", scaleMode);
@@ -503,7 +509,7 @@ static bool GL_CreatePalette(SDL_Renderer *renderer, SDL_TexturePalette *palette
     if (!GL_CheckError("glTexImage2D()", renderer)) {
     if (!GL_CheckError("glTexImage2D()", renderer)) {
         return false;
         return false;
     }
     }
-    SetTextureScaleMode(data, textype, SDL_SCALEMODE_NEAREST);
+    SetTextureScaleMode(data, textype, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST);
     SetTextureAddressMode(data, textype, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
     SetTextureAddressMode(data, textype, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
     return true;
     return true;
 }
 }
@@ -638,7 +644,7 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
     data->texture_address_mode_v = SDL_TEXTURE_ADDRESS_CLAMP;
     data->texture_address_mode_v = SDL_TEXTURE_ADDRESS_CLAMP;
     renderdata->glEnable(textype);
     renderdata->glEnable(textype);
     renderdata->glBindTexture(textype, data->texture);
     renderdata->glBindTexture(textype, data->texture);
-    SetTextureScaleMode(renderdata, textype, data->texture_scale_mode);
+    SetTextureScaleMode(renderdata, format, textype, data->texture_scale_mode);
     SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
     SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
 #ifdef SDL_PLATFORM_MACOS
 #ifdef SDL_PLATFORM_MACOS
 #ifndef GL_TEXTURE_STORAGE_HINT_APPLE
 #ifndef GL_TEXTURE_STORAGE_HINT_APPLE
@@ -674,7 +680,7 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
     if (!GL_CheckError("glTexImage2D()", renderer)) {
     if (!GL_CheckError("glTexImage2D()", renderer)) {
         return false;
         return false;
     }
     }
-    SetTextureScaleMode(renderdata, textype, data->texture_scale_mode);
+    SetTextureScaleMode(renderdata, textype, texture->format, data->texture_scale_mode);
     SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
     SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
 
 
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
@@ -698,14 +704,14 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
         renderdata->glBindTexture(textype, data->utexture);
         renderdata->glBindTexture(textype, data->utexture);
         renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2,
         renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2,
                                  (texture_h + 1) / 2, 0, format, type, NULL);
                                  (texture_h + 1) / 2, 0, format, type, NULL);
-        SetTextureScaleMode(renderdata, textype, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, textype, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER, data->utexture);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER, data->utexture);
 
 
         renderdata->glBindTexture(textype, data->vtexture);
         renderdata->glBindTexture(textype, data->vtexture);
         renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2,
         renderdata->glTexImage2D(textype, 0, internalFormat, (texture_w + 1) / 2,
                                  (texture_h + 1) / 2, 0, format, type, NULL);
                                  (texture_h + 1) / 2, 0, format, type, NULL);
-        SetTextureScaleMode(renderdata, textype, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, textype, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER, data->vtexture);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER, data->vtexture);
     }
     }
@@ -723,24 +729,24 @@ static bool GL_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SDL_P
         renderdata->glBindTexture(textype, data->utexture);
         renderdata->glBindTexture(textype, data->utexture);
         renderdata->glTexImage2D(textype, 0, GL_LUMINANCE_ALPHA, (texture_w + 1) / 2,
         renderdata->glTexImage2D(textype, 0, GL_LUMINANCE_ALPHA, (texture_w + 1) / 2,
                                  (texture_h + 1) / 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL);
                                  (texture_h + 1) / 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL);
-        SetTextureScaleMode(renderdata, textype, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, textype, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, textype, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER, data->utexture);
         SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER, data->utexture);
     }
     }
 #endif
 #endif
 
 
     if (texture->format == SDL_PIXELFORMAT_INDEX8) {
     if (texture->format == SDL_PIXELFORMAT_INDEX8) {
-        data->shader = SHADER_PALETTE;
+        data->shader = SHADER_PALETTE_NEAREST;
     } else if (texture->format == SDL_PIXELFORMAT_ABGR8888 || texture->format == SDL_PIXELFORMAT_ARGB8888) {
     } else if (texture->format == SDL_PIXELFORMAT_ABGR8888 || texture->format == SDL_PIXELFORMAT_ARGB8888) {
         data->shader = SHADER_RGBA;
         data->shader = SHADER_RGBA;
     } else {
     } else {
         data->shader = SHADER_RGB;
         data->shader = SHADER_RGB;
     }
     }
 
 
+    data->texel_size[0] = 1.0f / texture->w;
+    data->texel_size[1] = 1.0f / texture->h;
     data->texel_size[2] = texture->w;
     data->texel_size[2] = texture->w;
     data->texel_size[3] = texture->h;
     data->texel_size[3] = texture->h;
-    data->texel_size[0] = 1.0f / data->texel_size[2];
-    data->texel_size[1] = 1.0f / data->texel_size[3];
 
 
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     if (data->yuv || data->nv12) {
     if (data->yuv || data->nv12) {
@@ -1199,19 +1205,30 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
     GL_Shader shader = texturedata->shader;
     GL_Shader shader = texturedata->shader;
     const float *shader_params = texturedata->shader_params;
     const float *shader_params = texturedata->shader_params;
 
 
-    if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
-        switch (shader) {
-        case SHADER_RGB:
+    switch (shader) {
+    case SHADER_PALETTE_NEAREST:
+        if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_LINEAR) {
+            shader = SHADER_PALETTE_LINEAR;
+            shader_params = texturedata->texel_size;
+        } else if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
+            shader = SHADER_PALETTE_PIXELART;
+            shader_params = texturedata->texel_size;
+        }
+        break;
+    case SHADER_RGB:
+        if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             shader = SHADER_RGB_PIXELART;
             shader = SHADER_RGB_PIXELART;
             shader_params = texturedata->texel_size;
             shader_params = texturedata->texel_size;
-            break;
-        case SHADER_RGBA:
+        }
+        break;
+    case SHADER_RGBA:
+        if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             shader = SHADER_RGBA_PIXELART;
             shader = SHADER_RGBA_PIXELART;
             shader_params = texturedata->texel_size;
             shader_params = texturedata->texel_size;
-            break;
-        default:
-            break;
         }
         }
+        break;
+    default:
+        break;
     }
     }
     SetDrawState(data, cmd, shader, shader_params);
     SetDrawState(data, cmd, shader, shader_params);
 
 
@@ -1246,19 +1263,19 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
         if (texturedata->yuv) {
         if (texturedata->yuv) {
             data->glActiveTextureARB(GL_TEXTURE2);
             data->glActiveTextureARB(GL_TEXTURE2);
-            if (!SetTextureScaleMode(data, textype, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, textype, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTextureARB(GL_TEXTURE1);
             data->glActiveTextureARB(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, textype, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, textype, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTextureARB(GL_TEXTURE0);
             data->glActiveTextureARB(GL_TEXTURE0);
         } else if (texturedata->nv12) {
         } else if (texturedata->nv12) {
             data->glActiveTextureARB(GL_TEXTURE1);
             data->glActiveTextureARB(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, textype, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, textype, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
@@ -1267,13 +1284,13 @@ static bool SetCopyState(GL_RenderData *data, const SDL_RenderCommand *cmd)
 #endif
 #endif
         if (texture->palette) {
         if (texture->palette) {
             data->glActiveTextureARB(GL_TEXTURE1);
             data->glActiveTextureARB(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, textype, SDL_SCALEMODE_NEAREST)) {
+            if (!SetTextureScaleMode(data, textype, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTextureARB(GL_TEXTURE0);
             data->glActiveTextureARB(GL_TEXTURE0);
         }
         }
-        if (!SetTextureScaleMode(data, textype, cmd->data.draw.texture_scale_mode)) {
+        if (!SetTextureScaleMode(data, textype, texture->format, cmd->data.draw.texture_scale_mode)) {
             return false;
             return false;
         }
         }
 
 

+ 125 - 44
src/render/opengl/SDL_shaders_gl.c

@@ -84,6 +84,73 @@ struct GL_ShaderContext
 "    v_texCoord = vec2(gl_MultiTexCoord0);\n"                   \
 "    v_texCoord = vec2(gl_MultiTexCoord0);\n"                   \
 "}"                                                             \
 "}"                                                             \
 
 
+#define RGB_SHADER_PROLOGUE                                     \
+"varying vec4 v_color;\n"                                       \
+"varying vec2 v_texCoord;\n"                                    \
+"uniform sampler2D tex0;\n"                                     \
+"\n"
+
+#define RGB_PIXELART_SHADER_PROLOGUE                            \
+"varying vec4 v_color;\n"                                       \
+"varying vec2 v_texCoord;\n"                                    \
+"uniform sampler2D tex0;\n"                                     \
+"uniform vec4 texel_size; // texel size (xy: texel size, zw: texture dimensions)\n" \
+"\n"
+
+#define PALETTE_SHADER_PROLOGUE                                 \
+"varying vec4 v_color;\n"                                       \
+"varying vec2 v_texCoord;\n"                                    \
+"uniform sampler2D tex0;\n"                                     \
+"uniform sampler2D tex1;\n"                                     \
+"uniform vec4 texel_size; // texel size (xy: texel size, zw: texture dimensions)\n" \
+"\n"
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+#define PALETTE_SHADER_FUNCTIONS                                    \
+"vec4 SamplePaletteNearest(vec2 uv)\n"                              \
+"{\n"                                                               \
+"    float index = texture2D(tex0, uv).r * 255.0;\n"                \
+"    return texture2D(tex1, vec2((index + 0.5) / 256.0, 0.5));\n"   \
+"}\n"                                                               \
+"\n"                                                                \
+"vec4 SamplePaletteLinear(vec2 uv)\n"                               \
+"{\n"                                                               \
+"    // scale & offset uvs to integer values at texel centers\n"    \
+"    vec2 uv_texels = uv * texel_size.zw + 0.5;\n"                  \
+"\n"                                                                \
+"    // get uvs for the center of the 4 surrounding texels by flooring\n" \
+"    vec4 uv_min_max = vec4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);\n" \
+"\n"                                                                \
+"    // blend factor\n"                                             \
+"    vec2 uv_frac = fract(uv_texels);\n"                            \
+"\n"                                                                \
+"    // sample all 4 texels\n"                                      \
+"    vec4 texelA = SamplePaletteNearest(uv_min_max.xy);\n"          \
+"    vec4 texelB = SamplePaletteNearest(uv_min_max.xw);\n"          \
+"    vec4 texelC = SamplePaletteNearest(uv_min_max.zy);\n"          \
+"    vec4 texelD = SamplePaletteNearest(uv_min_max.zw);\n"          \
+"\n"                                                                \
+"    // bilinear interpolation\n"                                   \
+"    return mix(mix(texelA, texelB, uv_frac.y), mix(texelC, texelD, uv_frac.y), uv_frac.x);\n" \
+"}\n"                                                               \
+"\n"
+
+#define PIXELART_SHADER_FUNCTIONS                                               \
+"vec2 GetPixelArtUV(vec2 uv)\n"                                                 \
+"{\n"                                                                           \
+"    vec2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1.0);\n"            \
+"    vec2 tx = uv * texel_size.zw - 0.5 * boxSize;\n"                           \
+"    vec2 txOffset = smoothstep(vec2(1.0) - boxSize, vec2(1.0), fract(tx));\n"  \
+"    return (floor(tx) + 0.5 + txOffset) * texel_size.xy;\n"                    \
+"}\n"                                                                           \
+"\n"                                                                            \
+"vec4 GetPixelArtSample(vec2 uv)\n"                                             \
+"{\n"                                                                           \
+"    return textureGrad(tex0, GetPixelArtUV(uv), dFdx(v_texCoord), dFdy(v_texCoord));\n"  \
+"}\n"                                                                           \
+"\n"                                                                            \
+
 #define YUV_SHADER_PROLOGUE                                     \
 #define YUV_SHADER_PROLOGUE                                     \
 "varying vec4 v_color;\n"                                       \
 "varying vec4 v_color;\n"                                       \
 "varying vec2 v_texCoord;\n"                                    \
 "varying vec2 v_texCoord;\n"                                    \
@@ -260,58 +327,67 @@ static struct {
         NULL
         NULL
     },
     },
 
 
-    // SHADER_PALETTE
+    // SHADER_PALETTE_NEAREST
     {
     {
         // vertex shader
         // vertex shader
         TEXTURE_VERTEX_SHADER,
         TEXTURE_VERTEX_SHADER,
         // fragment shader
         // fragment shader
-"varying vec4 v_color;\n"
-"varying vec2 v_texCoord;\n"
-"uniform sampler2D tex0;\n"
-"uniform sampler2D tex1;\n"
+        PALETTE_SHADER_PROLOGUE
+        PALETTE_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    float index = texture2D(tex0, v_texCoord).r * 255.0;\n"
-"    gl_FragColor = texture2D(tex1, vec2((index + 0.5) / 256.0, 0.5));\n"
-"    gl_FragColor *= v_color;\n"
+"    gl_FragColor = SamplePaletteNearest(v_texCoord) * v_color;\n"
 "}",
 "}",
         // fragment version
         // fragment version
-        "#version 130\n"
+        NULL
     },
     },
 
 
-    // SHADER_RGB
+    // SHADER_PALETTE_LINEAR
     {
     {
         // vertex shader
         // vertex shader
         TEXTURE_VERTEX_SHADER,
         TEXTURE_VERTEX_SHADER,
         // fragment shader
         // fragment shader
-"varying vec4 v_color;\n"
-"varying vec2 v_texCoord;\n"
-"uniform sampler2D tex0;\n"
-"uniform vec4 texel_size; // texel size (xy: texel size, zw: texture dimensions)\n"
+        PALETTE_SHADER_PROLOGUE
+        PALETTE_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    gl_FragColor = texture2D(tex0, v_texCoord);\n"
-"    gl_FragColor.a = 1.0;\n"
-"    gl_FragColor *= v_color;\n"
+"    gl_FragColor = SamplePaletteLinear(v_texCoord) * v_color;\n"
 "}",
 "}",
         // fragment version
         // fragment version
         NULL
         NULL
     },
     },
 
 
-    // SHADER_RGBA
+    // SHADER_PALETTE_PIXELART
     {
     {
         // vertex shader
         // vertex shader
         TEXTURE_VERTEX_SHADER,
         TEXTURE_VERTEX_SHADER,
         // fragment shader
         // fragment shader
-"varying vec4 v_color;\n"
-"varying vec2 v_texCoord;\n"
-"uniform sampler2D tex0;\n"
+        PALETTE_SHADER_PROLOGUE
+        PALETTE_SHADER_FUNCTIONS
+        PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n"
+"    gl_FragColor = SamplePaletteLinear(GetPixelArtUV(v_texCoord)) * v_color;\n"
+"}",
+        // fragment version
+        "#version 130\n"
+    },
+
+    // SHADER_RGB
+    {
+        // vertex shader
+        TEXTURE_VERTEX_SHADER,
+        // fragment shader
+        RGB_SHADER_PROLOGUE
+"\n"
+"void main()\n"
+"{\n"
+"    gl_FragColor = texture2D(tex0, v_texCoord);\n"
+"    gl_FragColor.a = 1.0;\n"
+"    gl_FragColor *= v_color;\n"
 "}",
 "}",
         // fragment version
         // fragment version
         NULL
         NULL
@@ -322,18 +398,12 @@ static struct {
         // vertex shader
         // vertex shader
         TEXTURE_VERTEX_SHADER,
         TEXTURE_VERTEX_SHADER,
         // fragment shader
         // fragment shader
-"varying vec4 v_color;\n"
-"varying vec2 v_texCoord;\n"
-"uniform sampler2D tex0;\n"
-"uniform vec4 texel_size;\n"
+        RGB_PIXELART_SHADER_PROLOGUE
+        PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    vec2 boxSize = clamp(fwidth(v_texCoord) * texel_size.zw, 1e-5, 1.0);\n"
-"    vec2 tx = v_texCoord * texel_size.zw - 0.5 * boxSize;\n"
-"    vec2 txOffset = smoothstep(vec2(1.0) - boxSize, vec2(1.0), fract(tx));\n"
-"    vec2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;\n"
-"    gl_FragColor = textureGrad(tex0, uv, dFdx(v_texCoord), dFdy(v_texCoord));\n"
+"    gl_FragColor = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}",
 "}",
@@ -341,23 +411,32 @@ static struct {
         "#version 130\n"
         "#version 130\n"
     },
     },
 
 
+    // SHADER_RGBA
+    {
+        // vertex shader
+        TEXTURE_VERTEX_SHADER,
+        // fragment shader
+        RGB_SHADER_PROLOGUE
+"\n"
+"void main()\n"
+"{\n"
+"    gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n"
+"}",
+        // fragment version
+        NULL
+    },
+
     // SHADER_RGBA_PIXELART
     // SHADER_RGBA_PIXELART
     {
     {
         // vertex shader
         // vertex shader
         TEXTURE_VERTEX_SHADER,
         TEXTURE_VERTEX_SHADER,
         // fragment shader
         // fragment shader
-"varying vec4 v_color;\n"
-"varying vec2 v_texCoord;\n"
-"uniform sampler2D tex0;\n"
-"uniform vec4 texel_size;\n"
+        RGB_PIXELART_SHADER_PROLOGUE
+        PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    vec2 boxSize = clamp(fwidth(v_texCoord) * texel_size.zw, 1e-5, 1.0);\n"
-"    vec2 tx = v_texCoord * texel_size.zw - 0.5 * boxSize;\n"
-"    vec2 txOffset = smoothstep(vec2(1.0) - boxSize, vec2(1.0), fract(tx));\n"
-"    vec2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;\n"
-"    gl_FragColor = textureGrad(tex0, uv, dFdx(v_texCoord), dFdy(v_texCoord));\n"
+"    gl_FragColor = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}",
 "}",
         // fragment version
         // fragment version
@@ -442,9 +521,9 @@ static bool CompileShader(GL_ShaderContext *ctx, GLhandleARB shader, const char
         if (info) {
         if (info) {
             ctx->glGetInfoLogARB(shader, length, NULL, info);
             ctx->glGetInfoLogARB(shader, length, NULL, info);
             SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Failed to compile shader:");
             SDL_LogError(SDL_LOG_CATEGORY_RENDER, "Failed to compile shader:");
-	    SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", defines);
-	    SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", source);
-	    SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", info);
+            SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", defines);
+            SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", source);
+            SDL_LogError(SDL_LOG_CATEGORY_RENDER, "%s", info);
             SDL_small_free(info, isstack);
             SDL_small_free(info, isstack);
         }
         }
         return false;
         return false;
@@ -607,7 +686,9 @@ void GL_SelectShader(GL_ShaderContext *ctx, GL_Shader shader, const float *shade
     ctx->glUseProgramObjectARB(program);
     ctx->glUseProgramObjectARB(program);
 
 
     if (shader_params && shader_params != ctx->shader_params[shader]) {
     if (shader_params && shader_params != ctx->shader_params[shader]) {
-        if (shader == SHADER_RGB_PIXELART ||
+        if (shader == SHADER_PALETTE_LINEAR ||
+            shader == SHADER_PALETTE_PIXELART ||
+            shader == SHADER_RGB_PIXELART ||
             shader == SHADER_RGBA_PIXELART) {
             shader == SHADER_RGBA_PIXELART) {
             location = ctx->glGetUniformLocationARB(program, "texel_size");
             location = ctx->glGetUniformLocationARB(program, "texel_size");
             if (location >= 0) {
             if (location >= 0) {

+ 4 - 2
src/render/opengl/SDL_shaders_gl.h

@@ -31,10 +31,12 @@ typedef enum
     SHADER_INVALID = -1,
     SHADER_INVALID = -1,
     SHADER_NONE,
     SHADER_NONE,
     SHADER_SOLID,
     SHADER_SOLID,
-    SHADER_PALETTE,
+    SHADER_PALETTE_NEAREST,
+    SHADER_PALETTE_LINEAR,
+    SHADER_PALETTE_PIXELART,
     SHADER_RGB,
     SHADER_RGB,
-    SHADER_RGBA,
     SHADER_RGB_PIXELART,
     SHADER_RGB_PIXELART,
+    SHADER_RGBA,
     SHADER_RGBA_PIXELART,
     SHADER_RGBA_PIXELART,
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     SHADER_YUV,
     SHADER_YUV,

+ 53 - 22
src/render/opengles2/SDL_render_gles2.c

@@ -521,7 +521,7 @@ static bool GLES2_CacheShader(GLES2_RenderData *data, GLES2_ShaderType type, GLe
     GLuint id = 0;
     GLuint id = 0;
     GLint compileSuccessful = GL_FALSE;
     GLint compileSuccessful = GL_FALSE;
     int attempt, num_src;
     int attempt, num_src;
-    const GLchar *shader_src_list[3];
+    const GLchar *shader_src_list[4];
     const GLchar *shader_body = GLES2_GetShader(type);
     const GLchar *shader_body = GLES2_GetShader(type);
 
 
     if (!shader_body) {
     if (!shader_body) {
@@ -531,6 +531,9 @@ static bool GLES2_CacheShader(GLES2_RenderData *data, GLES2_ShaderType type, GLe
     for (attempt = 0; attempt < 2 && !compileSuccessful; ++attempt) {
     for (attempt = 0; attempt < 2 && !compileSuccessful; ++attempt) {
         num_src = 0;
         num_src = 0;
 
 
+#ifdef OPENGLES_300
+        shader_src_list[num_src++] = "#version 300 es\n";
+#endif
         shader_src_list[num_src++] = GLES2_GetShaderPrologue(type);
         shader_src_list[num_src++] = GLES2_GetShaderPrologue(type);
 
 
         if (shader_type == GL_FRAGMENT_SHADER) {
         if (shader_type == GL_FRAGMENT_SHADER) {
@@ -634,7 +637,22 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
         ftype = GLES2_SHADER_FRAGMENT_SOLID;
         ftype = GLES2_SHADER_FRAGMENT_SOLID;
         break;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_INDEX8:
     case GLES2_IMAGESOURCE_TEXTURE_INDEX8:
-        ftype = GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE;
+        switch (scale_mode) {
+        case SDL_SCALEMODE_NEAREST:
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_NEAREST;
+            break;
+        case SDL_SCALEMODE_LINEAR:
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_LINEAR;
+            shader_params = tdata->texel_size;
+            break;
+        case SDL_SCALEMODE_PIXELART:
+            ftype = GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_PIXELART;
+            shader_params = tdata->texel_size;
+            break;
+        default:
+            SDL_assert(!"Unknown scale mode");
+            goto fault;
+        }
         break;
         break;
     case GLES2_IMAGESOURCE_TEXTURE_ABGR:
     case GLES2_IMAGESOURCE_TEXTURE_ABGR:
         if (scale_mode == SDL_SCALEMODE_PIXELART) {
         if (scale_mode == SDL_SCALEMODE_PIXELART) {
@@ -706,6 +724,7 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
         ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES;
         ftype = GLES2_SHADER_FRAGMENT_TEXTURE_EXTERNAL_OES;
         break;
         break;
     default:
     default:
+        SDL_assert(!"Unknown image source");
         goto fault;
         goto fault;
     }
     }
 
 
@@ -767,7 +786,7 @@ static bool GLES2_SelectProgram(GLES2_RenderData *data, SDL_Texture *texture, GL
         }
         }
         else
         else
 #endif
 #endif
-        if (ftype >= GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART) {
+        if (shader_params) {
             data->glUniform4f(program->uniform_locations[GLES2_UNIFORM_TEXEL_SIZE], shader_params[0], shader_params[1], shader_params[2], shader_params[3]);
             data->glUniform4f(program->uniform_locations[GLES2_UNIFORM_TEXEL_SIZE], shader_params[0], shader_params[1], shader_params[2], shader_params[3]);
         }
         }
         program->shader_params = shader_params;
         program->shader_params = shader_params;
@@ -1081,7 +1100,7 @@ static bool SetDrawState(GLES2_RenderData *data, const SDL_RenderCommand *cmd, c
     return true;
     return true;
 }
 }
 
 
-static bool SetTextureScaleMode(GLES2_RenderData *data, GLenum textype, SDL_ScaleMode scaleMode)
+static bool SetTextureScaleMode(GLES2_RenderData *data, GLenum textype, SDL_PixelFormat format, SDL_ScaleMode scaleMode)
 {
 {
     switch (scaleMode) {
     switch (scaleMode) {
     case SDL_SCALEMODE_NEAREST:
     case SDL_SCALEMODE_NEAREST:
@@ -1089,14 +1108,26 @@ static bool SetTextureScaleMode(GLES2_RenderData *data, GLenum textype, SDL_Scal
         data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
         data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
         break;
         break;
     case SDL_SCALEMODE_LINEAR:
     case SDL_SCALEMODE_LINEAR:
-        data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        if (format == SDL_PIXELFORMAT_INDEX8) {
+            // We'll do linear sampling in the shader
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+        } else {
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        }
         break;
         break;
     case SDL_SCALEMODE_PIXELART:
     case SDL_SCALEMODE_PIXELART:
-#ifdef OPENGLES_300 // Required for the pixel art shader
-        data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-        data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
-#else
+#ifdef OPENGLES_300
+        if (format == SDL_PIXELFORMAT_INDEX8) {
+            // We'll do linear sampling in the shader
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+        } else {
+            data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+            data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+        }
+#else // We don't have the functions we need, fall back to nearest sampling
         data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
         data->glTexParameteri(textype, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
         data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
         data->glTexParameteri(textype, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 #endif
 #endif
@@ -1291,19 +1322,19 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
         if (tdata->yuv) {
         if (tdata->yuv) {
             data->glActiveTexture(GL_TEXTURE2);
             data->glActiveTexture(GL_TEXTURE2);
-            if (!SetTextureScaleMode(data, tdata->texture_type, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, tdata->texture_type, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTexture(GL_TEXTURE1);
             data->glActiveTexture(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, tdata->texture_type, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, tdata->texture_type, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTexture(GL_TEXTURE0);
             data->glActiveTexture(GL_TEXTURE0);
         } else if (tdata->nv12) {
         } else if (tdata->nv12) {
             data->glActiveTexture(GL_TEXTURE1);
             data->glActiveTexture(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, tdata->texture_type, cmd->data.draw.texture_scale_mode)) {
+            if (!SetTextureScaleMode(data, tdata->texture_type, texture->format, cmd->data.draw.texture_scale_mode)) {
                 return false;
                 return false;
             }
             }
 
 
@@ -1312,13 +1343,13 @@ static bool SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand *cmd, v
 #endif
 #endif
         if (texture->palette) {
         if (texture->palette) {
             data->glActiveTexture(GL_TEXTURE1);
             data->glActiveTexture(GL_TEXTURE1);
-            if (!SetTextureScaleMode(data, tdata->texture_type, SDL_SCALEMODE_NEAREST)) {
+            if (!SetTextureScaleMode(data, tdata->texture_type, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST)) {
                 return false;
                 return false;
             }
             }
 
 
             data->glActiveTexture(GL_TEXTURE0);
             data->glActiveTexture(GL_TEXTURE0);
         }
         }
-        if (!SetTextureScaleMode(data, tdata->texture_type, cmd->data.draw.texture_scale_mode)) {
+        if (!SetTextureScaleMode(data, tdata->texture_type, texture->format, cmd->data.draw.texture_scale_mode)) {
             return false;
             return false;
         }
         }
 
 
@@ -1654,7 +1685,7 @@ static bool GLES2_CreatePalette(SDL_Renderer *renderer, SDL_TexturePalette *pale
     if (!GL_CheckError("glTexImage2D()", renderer)) {
     if (!GL_CheckError("glTexImage2D()", renderer)) {
         return false;
         return false;
     }
     }
-    SetTextureScaleMode(data, GL_TEXTURE_2D, SDL_SCALEMODE_NEAREST);
+    SetTextureScaleMode(data, GL_TEXTURE_2D, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST);
     SetTextureAddressMode(data, GL_TEXTURE_2D, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
     SetTextureAddressMode(data, GL_TEXTURE_2D, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
     return true;
     return true;
 }
 }
@@ -1778,10 +1809,10 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
     // Allocate the texture
     // Allocate the texture
     GL_CheckError("", renderer);
     GL_CheckError("", renderer);
 
 
+    data->texel_size[0] = 1.0f / texture->w;
+    data->texel_size[1] = 1.0f / texture->h;
     data->texel_size[2] = texture->w;
     data->texel_size[2] = texture->w;
     data->texel_size[3] = texture->h;
     data->texel_size[3] = texture->h;
-    data->texel_size[0] = 1.0f / data->texel_size[2];
-    data->texel_size[1] = 1.0f / data->texel_size[3];
 
 
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     if (data->yuv) {
     if (data->yuv) {
@@ -1804,7 +1835,7 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
             SDL_free(data);
             SDL_free(data);
             return false;
             return false;
         }
         }
-        SetTextureScaleMode(renderdata, data->texture_type, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, data->texture_type, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER, data->texture_v);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER, data->texture_v);
 
 
@@ -1827,7 +1858,7 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
             SDL_free(data);
             SDL_free(data);
             return false;
             return false;
         }
         }
-        SetTextureScaleMode(renderdata, data->texture_type, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, data->texture_type, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER, data->texture_u);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER, data->texture_u);
 
 
@@ -1856,7 +1887,7 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
             SDL_free(data);
             SDL_free(data);
             return false;
             return false;
         }
         }
-        SetTextureScaleMode(renderdata, data->texture_type, data->texture_scale_mode);
+        SetTextureScaleMode(renderdata, data->texture_type, texture->format, data->texture_scale_mode);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER, data->texture_u);
         SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER, data->texture_u);
 
 
@@ -1888,7 +1919,7 @@ static bool GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture, SD
             return false;
             return false;
         }
         }
     }
     }
-    SetTextureScaleMode(renderdata, data->texture_type, data->texture_scale_mode);
+    SetTextureScaleMode(renderdata, data->texture_type, texture->format, data->texture_scale_mode);
     SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
     SetTextureAddressMode(renderdata, data->texture_type, data->texture_address_mode_u, data->texture_address_mode_v);
     SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER, data->texture);
     SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER, data->texture);
     SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER, data->texture_type);
     SDL_SetNumberProperty(SDL_GetTextureProperties(texture), SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER, data->texture_type);

+ 128 - 51
src/render/opengles2/SDL_shaders_gles2.c

@@ -88,61 +88,119 @@ static const char GLES2_Fragment_Solid[] =
 "}\n"
 "}\n"
 ;
 ;
 
 
-#define PALETTE_SHADER_PROLOGUE                                 \
+#define RGB_SHADER_PROLOGUE                                     \
 "uniform sampler2D u_texture;\n"                                \
 "uniform sampler2D u_texture;\n"                                \
-"uniform sampler2D u_palette;\n"                                \
 "varying mediump vec4 v_color;\n"                               \
 "varying mediump vec4 v_color;\n"                               \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 
 
-#define RGB_SHADER_PROLOGUE                                     \
+#define RGB_PIXELART_SHADER_PROLOGUE                            \
 "uniform sampler2D u_texture;\n"                                \
 "uniform sampler2D u_texture;\n"                                \
+"uniform mediump vec4 u_texel_size;\n"                          \
 "varying mediump vec4 v_color;\n"                               \
 "varying mediump vec4 v_color;\n"                               \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 
 
-#define RGB_PIXELART_SHADER_PROLOGUE                            \
+#define PALETTE_SHADER_PROLOGUE                                 \
 "uniform sampler2D u_texture;\n"                                \
 "uniform sampler2D u_texture;\n"                                \
+"uniform sampler2D u_palette;\n"                                \
 "uniform mediump vec4 u_texel_size;\n"                          \
 "uniform mediump vec4 u_texel_size;\n"                          \
 "varying mediump vec4 v_color;\n"                               \
 "varying mediump vec4 v_color;\n"                               \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 "varying SDL_TEXCOORD_PRECISION vec2 v_texCoord;\n"             \
 
 
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+#define PALETTE_SHADER_FUNCTIONS                                        \
+"mediump vec4 SamplePaletteNearest(SDL_TEXCOORD_PRECISION vec2 uv)\n"   \
+"{\n"                                                                   \
+"    mediump float index = texture2D(u_texture, uv).r * 255.0;\n"       \
+"    return texture2D(u_palette, vec2((index + 0.5) / 256.0, 0.5));\n"  \
+"}\n"                                                                   \
+"\n"                                                                    \
+"mediump vec4 SamplePaletteLinear(SDL_TEXCOORD_PRECISION vec2 uv)\n"    \
+"{\n"                                                                   \
+"    // scale & offset uvs to integer values at texel centers\n"        \
+"    SDL_TEXCOORD_PRECISION vec2 uv_texels = uv * u_texel_size.zw + 0.5;\n" \
+"\n"                                                                    \
+"    // get uvs for the center of the 4 surrounding texels by flooring\n" \
+"    SDL_TEXCOORD_PRECISION vec4 uv_min_max = vec4((floor(uv_texels) - 0.5) * u_texel_size.xy, (floor(uv_texels) + 0.5) * u_texel_size.xy);\n" \
+"\n"                                                                    \
+"    // blend factor\n"                                                 \
+"    SDL_TEXCOORD_PRECISION vec2 uv_frac = fract(uv_texels);\n"         \
+"\n"                                                                    \
+"    // sample all 4 texels\n"                                          \
+"    mediump vec4 texelA = SamplePaletteNearest(uv_min_max.xy);\n"      \
+"    mediump vec4 texelB = SamplePaletteNearest(uv_min_max.xw);\n"      \
+"    mediump vec4 texelC = SamplePaletteNearest(uv_min_max.zy);\n"      \
+"    mediump vec4 texelD = SamplePaletteNearest(uv_min_max.zw);\n"      \
+"\n"                                                                    \
+"    // bilinear interpolation\n"                                       \
+"    return mix(mix(texelA, texelB, uv_frac.y), mix(texelC, texelD, uv_frac.y), uv_frac.x);\n" \
+"}\n"                                                                   \
+"\n"
+
 #ifdef OPENGLES_300 // This is required for fwidth() and textureGrad()
 #ifdef OPENGLES_300 // This is required for fwidth() and textureGrad()
-#define RGB_PIXELART_GETCOLOR                                                                   \
-"    mediump vec2 boxSize = clamp(fwidth(v_texCoord) * u_texel_size.zw, 1e-5, 1.0);\n"          \
-"    mediump vec2 tx = v_texCoord * u_texel_size.zw - 0.5 * boxSize;\n"                         \
-"    mediump vec2 txOffset = smoothstep(vec2(1.0) - boxSize, vec2(1.0), fract(tx));\n"          \
-"    mediump vec2 uv = (floor(tx) + 0.5 + txOffset) * u_texel_size.xy;\n"                       \
-"    mediump vec4 color = textureGrad(u_texture, uv, dFdx(v_texCoord), dFdy(v_texCoord));\n"
+#define PIXELART_SHADER_FUNCTIONS                                               \
+"SDL_TEXCOORD_PRECISION vec2 GetPixelArtUV(SDL_TEXCOORD_PRECISION vec2 uv)\n"   \
+"{\n"                                                                           \
+"    SDL_TEXCOORD_PRECISION vec2 boxSize = clamp(fwidth(uv) * u_texel_size.zw, 1e-5, 1.0);\n" \
+"    SDL_TEXCOORD_PRECISION vec2 tx = uv * u_texel_size.zw - 0.5 * boxSize;\n"  \
+"    SDL_TEXCOORD_PRECISION vec2 txOffset = smoothstep(vec2(1.0) - boxSize, vec2(1.0), fract(tx));\n" \
+"    return (floor(tx) + 0.5 + txOffset) * u_texel_size.xy;\n"                  \
+"}\n"                                                                           \
+"\n"                                                                            \
+"mediump vec4 GetPixelArtSample(vec2 uv)\n"                                     \
+"{\n"                                                                           \
+"    return textureGrad(u_texture, GetPixelArtUV(uv), dFdx(v_texCoord), dFdy(v_texCoord));\n" \
+"}\n"                                                                           \
+"\n"
 #else
 #else
-#define RGB_PIXELART_GETCOLOR                                                                   \
-"    mediump vec4 color = texture2D(u_texture, v_texCoord);\n"
+#define PIXELART_SHADER_FUNCTIONS                                               \
+"mediump vec4 GetPixelArtSample(vec2 uv)\n"                                     \
+"{\n"                                                                           \
+"    return texture2D(u_texture, uv);\n"                                        \
+"}\n"                                                                           \
+"\n"
 #endif
 #endif
 
 
-static const char GLES2_Fragment_TexturePalette[] =
+static const char GLES2_Fragment_TexturePalette_Nearest[] =
     PALETTE_SHADER_PROLOGUE
     PALETTE_SHADER_PROLOGUE
+    PALETTE_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    mediump float index = texture2D(u_texture, v_texCoord).r * 255.0;\n"
-"    SDL_TEXCOORD_PRECISION vec2 paletteCoords = vec2((index + 0.5) / 256.0, 0.5);\n"
-"    mediump vec4 color = texture2D(u_palette, paletteCoords);\n"
-"    gl_FragColor = color;\n"
+"    gl_FragColor = SamplePaletteNearest(v_texCoord);\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
 
 
-static const char GLES2_Fragment_TextureABGR[] =
-    RGB_SHADER_PROLOGUE
+static const char GLES2_Fragment_TexturePalette_Linear[] =
+    PALETTE_SHADER_PROLOGUE
+    PALETTE_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    mediump vec4 color = texture2D(u_texture, v_texCoord);\n"
-"    gl_FragColor = color;\n"
+"    gl_FragColor = SamplePaletteLinear(v_texCoord);\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
 
 
-// ARGB to ABGR conversion
-static const char GLES2_Fragment_TextureARGB[] =
+static const char GLES2_Fragment_TexturePalette_PixelArt[] =
+    PALETTE_SHADER_PROLOGUE
+    PALETTE_SHADER_FUNCTIONS
+    PIXELART_SHADER_FUNCTIONS
+"\n"
+"void main()\n"
+"{\n"
+#ifdef OPENGLES_300
+"    gl_FragColor = SamplePaletteLinear(GetPixelArtUV(v_texCoord));\n"
+#else
+"    gl_FragColor = SamplePaletteNearest(v_texCoord);\n"
+#endif
+"    gl_FragColor *= v_color;\n"
+"}\n"
+;
+
+// RGB to ABGR conversion
+static const char GLES2_Fragment_TextureRGB[] =
     RGB_SHADER_PROLOGUE
     RGB_SHADER_PROLOGUE
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
@@ -151,17 +209,19 @@ static const char GLES2_Fragment_TextureARGB[] =
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.b = color.r;\n"
 "    gl_FragColor.b = color.r;\n"
+"    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
 
 
 // RGB to ABGR conversion
 // RGB to ABGR conversion
-static const char GLES2_Fragment_TextureRGB[] =
-    RGB_SHADER_PROLOGUE
+static const char GLES2_Fragment_TextureRGB_PixelArt[] =
+    RGB_PIXELART_SHADER_PROLOGUE
+    PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-"    mediump vec4 color = texture2D(u_texture, v_texCoord);\n"
+"    mediump vec4 color = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.b = color.r;\n"
 "    gl_FragColor.b = color.r;\n"
@@ -183,24 +243,27 @@ static const char GLES2_Fragment_TextureBGR[] =
 "}\n"
 "}\n"
 ;
 ;
 
 
-static const char GLES2_Fragment_TextureABGR_PixelArt[] =
+// BGR to ABGR conversion
+static const char GLES2_Fragment_TextureBGR_PixelArt[] =
     RGB_PIXELART_SHADER_PROLOGUE
     RGB_PIXELART_SHADER_PROLOGUE
+    PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-    RGB_PIXELART_GETCOLOR
+"    mediump vec4 color = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
+"    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
 
 
 // ARGB to ABGR conversion
 // ARGB to ABGR conversion
-static const char GLES2_Fragment_TextureARGB_PixelArt[] =
-    RGB_PIXELART_SHADER_PROLOGUE
+static const char GLES2_Fragment_TextureARGB[] =
+    RGB_SHADER_PROLOGUE
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-    RGB_PIXELART_GETCOLOR
+"    mediump vec4 color = texture2D(u_texture, v_texCoord);\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.b = color.r;\n"
 "    gl_FragColor.b = color.r;\n"
@@ -208,30 +271,40 @@ static const char GLES2_Fragment_TextureARGB_PixelArt[] =
 "}\n"
 "}\n"
 ;
 ;
 
 
-// RGB to ABGR conversion
-static const char GLES2_Fragment_TextureRGB_PixelArt[] =
+// ARGB to ABGR conversion
+static const char GLES2_Fragment_TextureARGB_PixelArt[] =
     RGB_PIXELART_SHADER_PROLOGUE
     RGB_PIXELART_SHADER_PROLOGUE
+    PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-    RGB_PIXELART_GETCOLOR
+"    mediump vec4 color = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.r = color.b;\n"
 "    gl_FragColor.b = color.r;\n"
 "    gl_FragColor.b = color.r;\n"
-"    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
 
 
-// BGR to ABGR conversion
-static const char GLES2_Fragment_TextureBGR_PixelArt[] =
+static const char GLES2_Fragment_TextureABGR[] =
+    RGB_SHADER_PROLOGUE
+"\n"
+"void main()\n"
+"{\n"
+"    mediump vec4 color = texture2D(u_texture, v_texCoord);\n"
+"    gl_FragColor = color;\n"
+"    gl_FragColor *= v_color;\n"
+"}\n"
+;
+
+static const char GLES2_Fragment_TextureABGR_PixelArt[] =
     RGB_PIXELART_SHADER_PROLOGUE
     RGB_PIXELART_SHADER_PROLOGUE
+    PIXELART_SHADER_FUNCTIONS
 "\n"
 "\n"
 "void main()\n"
 "void main()\n"
 "{\n"
 "{\n"
-    RGB_PIXELART_GETCOLOR
+"    mediump vec4 color = GetPixelArtSample(v_texCoord);\n"
 "    gl_FragColor = color;\n"
 "    gl_FragColor = color;\n"
-"    gl_FragColor.a = 1.0;\n"
 "    gl_FragColor *= v_color;\n"
 "    gl_FragColor *= v_color;\n"
 "}\n"
 "}\n"
 ;
 ;
@@ -445,24 +518,28 @@ const char *GLES2_GetShader(GLES2_ShaderType type)
         return GLES2_Vertex_Default;
         return GLES2_Vertex_Default;
     case GLES2_SHADER_FRAGMENT_SOLID:
     case GLES2_SHADER_FRAGMENT_SOLID:
         return GLES2_Fragment_Solid;
         return GLES2_Fragment_Solid;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE:
-        return GLES2_Fragment_TexturePalette;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR:
-        return GLES2_Fragment_TextureABGR;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB:
-        return GLES2_Fragment_TextureARGB;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_NEAREST:
+        return GLES2_Fragment_TexturePalette_Nearest;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_LINEAR:
+        return GLES2_Fragment_TexturePalette_Linear;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_PIXELART:
+        return GLES2_Fragment_TexturePalette_PixelArt;
     case GLES2_SHADER_FRAGMENT_TEXTURE_RGB:
     case GLES2_SHADER_FRAGMENT_TEXTURE_RGB:
         return GLES2_Fragment_TextureRGB;
         return GLES2_Fragment_TextureRGB;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_BGR:
-        return GLES2_Fragment_TextureBGR;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART:
-        return GLES2_Fragment_TextureABGR_PixelArt;
-    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_PIXELART:
-        return GLES2_Fragment_TextureARGB_PixelArt;
     case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_PIXELART:
     case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_PIXELART:
         return GLES2_Fragment_TextureRGB_PixelArt;
         return GLES2_Fragment_TextureRGB_PixelArt;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_BGR:
+        return GLES2_Fragment_TextureBGR;
     case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_PIXELART:
     case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_PIXELART:
         return GLES2_Fragment_TextureBGR_PixelArt;
         return GLES2_Fragment_TextureBGR_PixelArt;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB:
+        return GLES2_Fragment_TextureARGB;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_PIXELART:
+        return GLES2_Fragment_TextureARGB_PixelArt;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR:
+        return GLES2_Fragment_TextureABGR;
+    case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART:
+        return GLES2_Fragment_TextureABGR_PixelArt;
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     case GLES2_SHADER_FRAGMENT_TEXTURE_YUV:
     case GLES2_SHADER_FRAGMENT_TEXTURE_YUV:
         return GLES2_Fragment_TextureYUV;
         return GLES2_Fragment_TextureYUV;

+ 9 - 7
src/render/opengles2/SDL_shaders_gles2.h

@@ -39,15 +39,17 @@ typedef enum
 {
 {
     GLES2_SHADER_VERTEX_DEFAULT = 0,
     GLES2_SHADER_VERTEX_DEFAULT = 0,
     GLES2_SHADER_FRAGMENT_SOLID,
     GLES2_SHADER_FRAGMENT_SOLID,
-    GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB,
-    GLES2_SHADER_FRAGMENT_TEXTURE_BGR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_NEAREST,
+    GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_LINEAR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_PALETTE_PIXELART,
     GLES2_SHADER_FRAGMENT_TEXTURE_RGB,
     GLES2_SHADER_FRAGMENT_TEXTURE_RGB,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART,
-    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_PIXELART,
-    GLES2_SHADER_FRAGMENT_TEXTURE_BGR_PIXELART,
     GLES2_SHADER_FRAGMENT_TEXTURE_RGB_PIXELART,
     GLES2_SHADER_FRAGMENT_TEXTURE_RGB_PIXELART,
+    GLES2_SHADER_FRAGMENT_TEXTURE_BGR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_BGR_PIXELART,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_PIXELART,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR,
+    GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_PIXELART,
 #ifdef SDL_HAVE_YUV
 #ifdef SDL_HAVE_YUV
     GLES2_SHADER_FRAGMENT_TEXTURE_YUV,
     GLES2_SHADER_FRAGMENT_TEXTURE_YUV,
     GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA,
     GLES2_SHADER_FRAGMENT_TEXTURE_NV12_RA,

+ 37 - 11
src/render/vulkan/SDL_render_vulkan.c

@@ -184,7 +184,9 @@ static const float TONEMAP_CHROME = 2;
 //static const float TEXTURETYPE_NONE = 0;
 //static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -3423,19 +3425,37 @@ static void VULKAN_SetupShaderConstants(SDL_Renderer *renderer, const SDL_Render
         }
         }
 
 
         if (texture->format == SDL_PIXELFORMAT_INDEX8) {
         if (texture->format == SDL_PIXELFORMAT_INDEX8) {
-            constants->texture_type = TEXTURETYPE_PALETTE;
+            switch (cmd->data.draw.texture_scale_mode) {
+            case SDL_SCALEMODE_NEAREST:
+                constants->texture_type = TEXTURETYPE_PALETTE_NEAREST;
+                break;
+            case SDL_SCALEMODE_LINEAR:
+                constants->texture_type = TEXTURETYPE_PALETTE_LINEAR;
+                break;
+            case SDL_SCALEMODE_PIXELART:
+                constants->texture_type = TEXTURETYPE_PALETTE_PIXELART;
+                break;
+            default:
+                SDL_assert(!"Unknown scale mode");
+                break;
+            }
         } else {
         } else {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
             if (cmd->data.draw.texture_scale_mode == SDL_SCALEMODE_PIXELART) {
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
                 constants->texture_type = TEXTURETYPE_RGB_PIXELART;
-                constants->texture_width = texture->w;
-                constants->texture_height = texture->h;
-                constants->texel_width = 1.0f / constants->texture_width;
-                constants->texel_height = 1.0f / constants->texture_height;
             } else {
             } else {
                 constants->texture_type = TEXTURETYPE_RGB;
                 constants->texture_type = TEXTURETYPE_RGB;
             }
             }
         }
         }
 
 
+        if (constants->texture_type == TEXTURETYPE_PALETTE_LINEAR ||
+            constants->texture_type == TEXTURETYPE_PALETTE_PIXELART ||
+            constants->texture_type == TEXTURETYPE_RGB_PIXELART) {
+            constants->texture_width = texture->w;
+            constants->texture_height = texture->h;
+            constants->texel_width = 1.0f / constants->texture_width;
+            constants->texel_height = 1.0f / constants->texture_height;
+        }
+
         constants->sdr_white_point = texture->SDR_white_point;
         constants->sdr_white_point = texture->SDR_white_point;
 
 
         if (renderer->target) {
         if (renderer->target) {
@@ -3802,7 +3822,7 @@ static bool VULKAN_SetDrawState(SDL_Renderer *renderer, const SDL_RenderCommand
     return true;
     return true;
 }
 }
 
 
-static VkSampler VULKAN_GetSampler(VULKAN_RenderData *data, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
+static VkSampler VULKAN_GetSampler(VULKAN_RenderData *data, SDL_PixelFormat format, SDL_ScaleMode scale_mode, SDL_TextureAddressMode address_u, SDL_TextureAddressMode address_v)
 {
 {
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     Uint32 key = RENDER_SAMPLER_HASHKEY(scale_mode, address_u, address_v);
     SDL_assert(key < SDL_arraysize(data->samplers));
     SDL_assert(key < SDL_arraysize(data->samplers));
@@ -3823,8 +3843,14 @@ static VkSampler VULKAN_GetSampler(VULKAN_RenderData *data, SDL_ScaleMode scale_
             break;
             break;
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_PIXELART:    // Uses linear sampling
         case SDL_SCALEMODE_LINEAR:
         case SDL_SCALEMODE_LINEAR:
-            samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
-            samplerCreateInfo.minFilter = VK_FILTER_LINEAR;
+            if (format == SDL_PIXELFORMAT_INDEX8) {
+                // We'll do linear sampling in the shader
+                samplerCreateInfo.magFilter = VK_FILTER_NEAREST;
+                samplerCreateInfo.minFilter = VK_FILTER_NEAREST;
+            } else {
+                samplerCreateInfo.magFilter = VK_FILTER_LINEAR;
+                samplerCreateInfo.minFilter = VK_FILTER_LINEAR;
+            }
             break;
             break;
         default:
         default:
             SDL_SetError("Unknown scale mode: %d", scale_mode);
             SDL_SetError("Unknown scale mode: %d", scale_mode);
@@ -3899,7 +3925,7 @@ static bool VULKAN_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand
     }
     }
     imageViews[numImageViews++] = textureData->mainImage.imageView;
     imageViews[numImageViews++] = textureData->mainImage.imageView;
 
 
-    samplers[numSamplers] = VULKAN_GetSampler(rendererData, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
+    samplers[numSamplers] = VULKAN_GetSampler(rendererData, texture->format, cmd->data.draw.texture_scale_mode, cmd->data.draw.texture_address_mode_u, cmd->data.draw.texture_address_mode_v);
     if (samplers[numSamplers] == VK_NULL_HANDLE) {
     if (samplers[numSamplers] == VK_NULL_HANDLE) {
         return false;
         return false;
     }
     }
@@ -3930,7 +3956,7 @@ static bool VULKAN_SetCopyState(SDL_Renderer *renderer, const SDL_RenderCommand
         }
         }
         imageViews[numImageViews++] = palette->image.imageView;
         imageViews[numImageViews++] = palette->image.imageView;
 
 
-        samplers[numSamplers] = VULKAN_GetSampler(rendererData, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
+        samplers[numSamplers] = VULKAN_GetSampler(rendererData, SDL_PIXELFORMAT_UNKNOWN, SDL_SCALEMODE_NEAREST, SDL_TEXTURE_ADDRESS_CLAMP, SDL_TEXTURE_ADDRESS_CLAMP);
         if (samplers[numSamplers] == VK_NULL_HANDLE) {
         if (samplers[numSamplers] == VK_NULL_HANDLE) {
             return false;
             return false;
         }
         }

+ 430 - 311
src/render/vulkan/VULKAN_PixelShader_Advanced.h

@@ -1,318 +1,437 @@
 	// 1113.1.1
 	// 1113.1.1
 	 #pragma once
 	 #pragma once
 const uint32_t VULKAN_PixelShader_Advanced[] = {
 const uint32_t VULKAN_PixelShader_Advanced[] = {
-	0x07230203,0x00010000,0x0008000b,0x00000510,0x00000000,0x00020011,0x00000001,0x0006000b,
+	0x07230203,0x00010000,0x0008000b,0x000006bb,0x00000000,0x00020011,0x00000001,0x0006000b,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
-	0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000221,0x00000224,0x00000228,
+	0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000028b,0x0000028e,0x00000292,
 	0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,
 	0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,
-	0x6e69616d,0x00000000,0x00050005,0x00000079,0x736e6f43,0x746e6174,0x00000073,0x00070006,
-	0x00000079,0x00000000,0x47526373,0x756f5f42,0x74757074,0x00000000,0x00070006,0x00000079,
-	0x00000001,0x74786574,0x5f657275,0x65707974,0x00000000,0x00060006,0x00000079,0x00000002,
-	0x75706e69,0x79745f74,0x00006570,0x00060006,0x00000079,0x00000003,0x6f6c6f63,0x63735f72,
-	0x00656c61,0x00060006,0x00000079,0x00000004,0x65786574,0x69735f6c,0x0000657a,0x00070006,
-	0x00000079,0x00000005,0x656e6f74,0x5f70616d,0x6874656d,0x0000646f,0x00070006,0x00000079,
-	0x00000006,0x656e6f74,0x5f70616d,0x74636166,0x0031726f,0x00070006,0x00000079,0x00000007,
-	0x656e6f74,0x5f70616d,0x74636166,0x0032726f,0x00070006,0x00000079,0x00000008,0x5f726473,
-	0x74696877,0x6f705f65,0x00746e69,0x00030005,0x0000007b,0x00000000,0x00050005,0x0000011f,
-	0x74786574,0x30657275,0x00000000,0x00050005,0x00000146,0x74786574,0x31657275,0x00000000,
-	0x00050005,0x00000221,0x75706e69,0x65742e74,0x00000078,0x00050005,0x00000224,0x75706e69,
-	0x6f632e74,0x00726f6c,0x00070005,0x00000228,0x746e6540,0x6f507972,0x4f746e69,0x75707475,
-	0x00000074,0x00050048,0x00000079,0x00000000,0x00000023,0x00000000,0x00050048,0x00000079,
-	0x00000001,0x00000023,0x00000004,0x00050048,0x00000079,0x00000002,0x00000023,0x00000008,
-	0x00050048,0x00000079,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000079,0x00000004,
-	0x00000023,0x00000010,0x00050048,0x00000079,0x00000005,0x00000023,0x00000020,0x00050048,
-	0x00000079,0x00000006,0x00000023,0x00000024,0x00050048,0x00000079,0x00000007,0x00000023,
-	0x00000028,0x00050048,0x00000079,0x00000008,0x00000023,0x0000002c,0x00030047,0x00000079,
-	0x00000002,0x00040047,0x0000007b,0x00000022,0x00000000,0x00040047,0x0000007b,0x00000021,
-	0x00000000,0x00040047,0x0000011f,0x00000022,0x00000000,0x00040047,0x0000011f,0x00000021,
-	0x00000001,0x00040047,0x00000146,0x00000022,0x00000000,0x00040047,0x00000146,0x00000021,
-	0x00000002,0x00040047,0x00000221,0x0000001e,0x00000000,0x00040047,0x00000224,0x0000001e,
-	0x00000001,0x00040047,0x00000228,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021,
+	0x6e69616d,0x00000000,0x00050005,0x00000081,0x736e6f43,0x746e6174,0x00000073,0x00070006,
+	0x00000081,0x00000000,0x47526373,0x756f5f42,0x74757074,0x00000000,0x00070006,0x00000081,
+	0x00000001,0x74786574,0x5f657275,0x65707974,0x00000000,0x00060006,0x00000081,0x00000002,
+	0x75706e69,0x79745f74,0x00006570,0x00060006,0x00000081,0x00000003,0x6f6c6f63,0x63735f72,
+	0x00656c61,0x00060006,0x00000081,0x00000004,0x65786574,0x69735f6c,0x0000657a,0x00070006,
+	0x00000081,0x00000005,0x656e6f74,0x5f70616d,0x6874656d,0x0000646f,0x00070006,0x00000081,
+	0x00000006,0x656e6f74,0x5f70616d,0x74636166,0x0031726f,0x00070006,0x00000081,0x00000007,
+	0x656e6f74,0x5f70616d,0x74636166,0x0032726f,0x00070006,0x00000081,0x00000008,0x5f726473,
+	0x74696877,0x6f705f65,0x00746e69,0x00030005,0x00000083,0x00000000,0x00050005,0x000000f2,
+	0x74786574,0x30657275,0x00000000,0x00050005,0x000000f9,0x74786574,0x31657275,0x00000000,
+	0x00050005,0x0000028b,0x75706e69,0x65742e74,0x00000078,0x00050005,0x0000028e,0x75706e69,
+	0x6f632e74,0x00726f6c,0x00070005,0x00000292,0x746e6540,0x6f507972,0x4f746e69,0x75707475,
+	0x00000074,0x00050048,0x00000081,0x00000000,0x00000023,0x00000000,0x00050048,0x00000081,
+	0x00000001,0x00000023,0x00000004,0x00050048,0x00000081,0x00000002,0x00000023,0x00000008,
+	0x00050048,0x00000081,0x00000003,0x00000023,0x0000000c,0x00050048,0x00000081,0x00000004,
+	0x00000023,0x00000010,0x00050048,0x00000081,0x00000005,0x00000023,0x00000020,0x00050048,
+	0x00000081,0x00000006,0x00000023,0x00000024,0x00050048,0x00000081,0x00000007,0x00000023,
+	0x00000028,0x00050048,0x00000081,0x00000008,0x00000023,0x0000002c,0x00030047,0x00000081,
+	0x00000002,0x00040047,0x00000083,0x00000022,0x00000000,0x00040047,0x00000083,0x00000021,
+	0x00000000,0x00040047,0x000000f2,0x00000022,0x00000000,0x00040047,0x000000f2,0x00000021,
+	0x00000001,0x00040047,0x000000f9,0x00000022,0x00000000,0x00040047,0x000000f9,0x00000021,
+	0x00000002,0x00040047,0x0000028b,0x0000001e,0x00000000,0x00040047,0x0000028e,0x0000001e,
+	0x00000001,0x00040047,0x00000292,0x0000001e,0x00000000,0x00020013,0x00000002,0x00030021,
 	0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x0000000f,0x00000006,
 	0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x0000000f,0x00000006,
-	0x00000003,0x00040017,0x00000018,0x00000006,0x00000004,0x00040017,0x00000019,0x00000006,
-	0x00000002,0x0004002b,0x00000006,0x00000036,0x3d25aee6,0x00020014,0x00000037,0x0004002b,
-	0x00000006,0x0000003c,0x414eb852,0x0004002b,0x00000006,0x00000040,0x3d6147ae,0x0004002b,
-	0x00000006,0x00000043,0x3f870a3d,0x0004002b,0x00000006,0x00000045,0x4019999a,0x0004002b,
-	0x00000006,0x0000004b,0x3b4d2e1c,0x0004002b,0x00000006,0x00000054,0x3ed55555,0x0004002b,
-	0x00000006,0x0000005e,0x3c4fcdac,0x0006002c,0x0000000f,0x0000005f,0x0000005e,0x0000005e,
-	0x0000005e,0x0004002b,0x00000006,0x00000061,0x3f560000,0x0004002b,0x00000006,0x00000064,
-	0x00000000,0x0006002c,0x0000000f,0x00000065,0x00000064,0x00000064,0x00000064,0x0004002b,
-	0x00000006,0x00000068,0x4196d000,0x0004002b,0x00000006,0x00000069,0x41958000,0x0004002b,
-	0x00000006,0x00000070,0x461c4000,0x0004002b,0x00000006,0x00000075,0x40c8e06b,0x0006002c,
-	0x0000000f,0x00000076,0x00000075,0x00000075,0x00000075,0x000b001e,0x00000079,0x00000006,
-	0x00000006,0x00000006,0x00000006,0x00000018,0x00000006,0x00000006,0x00000006,0x00000006,
-	0x00040020,0x0000007a,0x00000002,0x00000079,0x0004003b,0x0000007a,0x0000007b,0x00000002,
-	0x00040015,0x0000007c,0x00000020,0x00000001,0x0004002b,0x0000007c,0x0000007d,0x00000008,
-	0x00040020,0x0000007e,0x00000002,0x00000006,0x0004002b,0x0000007c,0x00000085,0x00000005,
-	0x0004002b,0x00000006,0x00000088,0x3f800000,0x0004002b,0x0000007c,0x0000008c,0x00000006,
-	0x0004002b,0x00000006,0x00000094,0x40000000,0x0004002b,0x0000007c,0x00000098,0x00000002,
-	0x00040018,0x0000009f,0x0000000f,0x00000003,0x0004002b,0x00000006,0x000000a0,0x3f209d8c,
-	0x0004002b,0x00000006,0x000000a1,0x3ea897c8,0x0004002b,0x00000006,0x000000a2,0x3d3168f9,
-	0x0006002c,0x0000000f,0x000000a3,0x000000a0,0x000000a1,0x000000a2,0x0004002b,0x00000006,
-	0x000000a4,0x3d8d82ba,0x0004002b,0x00000006,0x000000a5,0x3f6b670a,0x0004002b,0x00000006,
-	0x000000a6,0x3c3a27af,0x0006002c,0x0000000f,0x000000a7,0x000000a4,0x000000a5,0x000000a6,
-	0x0004002b,0x00000006,0x000000a8,0x3c86466b,0x0004002b,0x00000006,0x000000a9,0x3db44029,
-	0x0004002b,0x00000006,0x000000aa,0x3f6545b7,0x0006002c,0x0000000f,0x000000ab,0x000000a8,
-	0x000000a9,0x000000aa,0x0006002c,0x0000009f,0x000000ac,0x000000a3,0x000000a7,0x000000ab,
-	0x0004002b,0x0000007c,0x000000c5,0x00000007,0x0004002b,0x00000006,0x000000d5,0x3fd48b22,
-	0x0004002b,0x00000006,0x000000d6,0xbf1670a0,0x0004002b,0x00000006,0x000000d7,0xbd952d23,
-	0x0006002c,0x0000000f,0x000000d8,0x000000d5,0x000000d6,0x000000d7,0x0004002b,0x00000006,
-	0x000000d9,0xbdff127f,0x0004002b,0x00000006,0x000000da,0x3f9102b4,0x0004002b,0x00000006,
-	0x000000db,0xbc08c60d,0x0006002c,0x0000000f,0x000000dc,0x000000d9,0x000000da,0x000000db,
-	0x0004002b,0x00000006,0x000000dd,0xbc94b7b3,0x0004002b,0x00000006,0x000000de,0xbdce05cd,
-	0x0004002b,0x00000006,0x000000df,0x3f8f333c,0x0006002c,0x0000000f,0x000000e0,0x000000dd,
-	0x000000de,0x000000df,0x0006002c,0x0000009f,0x000000e1,0x000000d8,0x000000dc,0x000000e0,
-	0x0004002b,0x0000007c,0x000000e8,0x00000001,0x0004002b,0x0000007c,0x000000ec,0x00000004,
-	0x00040020,0x000000ed,0x00000002,0x00000018,0x0004002b,0x00000006,0x000000f2,0x3727c5ac,
-	0x0005002c,0x00000019,0x000000f3,0x000000f2,0x000000f2,0x0005002c,0x00000019,0x000000f4,
-	0x00000088,0x00000088,0x0004002b,0x00000006,0x000000fd,0x3f000000,0x00090019,0x0000011c,
-	0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x0003001b,
-	0x0000011d,0x0000011c,0x00040020,0x0000011e,0x00000000,0x0000011d,0x0004003b,0x0000011e,
-	0x0000011f,0x00000000,0x0004002b,0x00000006,0x0000013a,0x40400000,0x0004002b,0x00000006,
-	0x00000144,0x437f0000,0x0004003b,0x0000011e,0x00000146,0x00000000,0x0004002b,0x0000007c,
-	0x0000015a,0x00000003,0x0004002b,0x0000007c,0x0000016a,0x00000000,0x00040020,0x0000021c,
-	0x00000001,0x00000018,0x00040020,0x00000220,0x00000001,0x00000019,0x0004003b,0x00000220,
-	0x00000221,0x00000001,0x0004003b,0x0000021c,0x00000224,0x00000001,0x00040020,0x00000227,
-	0x00000003,0x00000018,0x0004003b,0x00000227,0x00000228,0x00000003,0x0004002b,0x00000006,
-	0x000004c5,0x3b800000,0x0005002c,0x00000019,0x000004c7,0x000000fd,0x000000fd,0x0006002c,
-	0x0000000f,0x000004c8,0x00000061,0x00000061,0x00000061,0x0006002c,0x0000000f,0x000004c9,
-	0x00000068,0x00000068,0x00000068,0x0006002c,0x0000000f,0x000004ce,0x00000088,0x00000088,
-	0x00000088,0x0004002b,0x00000006,0x000004d4,0x3f72a76f,0x0004002b,0x00000006,0x000004d5,
-	0x3d9e8391,0x0007002c,0x00000018,0x000004d7,0x00000088,0x00000064,0x00000064,0x00000088,
-	0x0004002b,0x00000006,0x000004d8,0xbd6147ae,0x00030001,0x00000018,0x0000050f,0x00050036,
-	0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000019,
-	0x00000222,0x00000221,0x0004003d,0x00000018,0x00000225,0x00000224,0x00050041,0x0000007e,
-	0x000002a5,0x0000007b,0x000000e8,0x0004003d,0x00000006,0x000002a6,0x000002a5,0x000500b4,
-	0x00000037,0x000002a7,0x000002a6,0x00000088,0x000300f7,0x000002d5,0x00000000,0x000400fa,
-	0x000002a7,0x000002a8,0x000002ad,0x000200f8,0x000002a8,0x0004003d,0x0000011d,0x000002a9,
-	0x0000011f,0x00050057,0x00000018,0x000002ac,0x000002a9,0x00000222,0x000200f9,0x000002d5,
-	0x000200f8,0x000002ad,0x00050041,0x0000007e,0x000002ae,0x0000007b,0x000000e8,0x0004003d,
-	0x00000006,0x000002af,0x000002ae,0x000500b4,0x00000037,0x000002b0,0x000002af,0x00000094,
-	0x000300f7,0x000002d4,0x00000000,0x000400fa,0x000002b0,0x000002b1,0x000002bd,0x000200f8,
-	0x000002b1,0x000400d1,0x00000019,0x000002df,0x00000222,0x00050041,0x000000ed,0x000002e0,
-	0x0000007b,0x000000ec,0x0004003d,0x00000018,0x000002e1,0x000002e0,0x0007004f,0x00000019,
-	0x000002e2,0x000002e1,0x000002e1,0x00000002,0x00000003,0x00050085,0x00000019,0x000002e3,
-	0x000002df,0x000002e2,0x0008000c,0x00000019,0x000002e4,0x00000001,0x0000002b,0x000002e3,
-	0x000000f3,0x000000f4,0x00050041,0x000000ed,0x000002e7,0x0000007b,0x000000ec,0x0004003d,
-	0x00000018,0x000002e8,0x000002e7,0x0007004f,0x00000019,0x000002e9,0x000002e8,0x000002e8,
-	0x00000002,0x00000003,0x0005008e,0x00000019,0x000002ec,0x000002e4,0x000000fd,0x0004007f,
-	0x00000019,0x000004c6,0x000002ec,0x0008000c,0x00000019,0x000002ed,0x00000001,0x00000032,
-	0x00000222,0x000002e9,0x000004c6,0x00050083,0x00000019,0x000002f0,0x000000f4,0x000002e4,
-	0x0006000c,0x00000019,0x000002f2,0x00000001,0x0000000a,0x000002ed,0x0008000c,0x00000019,
-	0x000002f3,0x00000001,0x00000031,0x000002f0,0x000000f4,0x000002f2,0x0006000c,0x00000019,
-	0x000002f5,0x00000001,0x00000008,0x000002ed,0x00050081,0x00000019,0x000002f7,0x000002f5,
-	0x000004c7,0x00050081,0x00000019,0x000002f9,0x000002f7,0x000002f3,0x00050041,0x000000ed,
-	0x000002fa,0x0000007b,0x000000ec,0x0004003d,0x00000018,0x000002fb,0x000002fa,0x0007004f,
-	0x00000019,0x000002fc,0x000002fb,0x000002fb,0x00000000,0x00000001,0x00050085,0x00000019,
-	0x000002fd,0x000002f9,0x000002fc,0x0004003d,0x0000011d,0x000002b4,0x0000011f,0x000400cf,
-	0x00000019,0x000002b8,0x00000222,0x000400d0,0x00000019,0x000002bb,0x00000222,0x00080058,
-	0x00000018,0x000002bc,0x000002b4,0x000002fd,0x00000004,0x000002b8,0x000002bb,0x000200f9,
-	0x000002d4,0x000200f8,0x000002bd,0x00050041,0x0000007e,0x000002be,0x0000007b,0x000000e8,
-	0x0004003d,0x00000006,0x000002bf,0x000002be,0x000500b4,0x00000037,0x000002c0,0x000002bf,
-	0x0000013a,0x000300f7,0x000002d3,0x00000000,0x000400fa,0x000002c0,0x000002c1,0x000002ce,
-	0x000200f8,0x000002c1,0x0004003d,0x0000011d,0x000002c2,0x0000011f,0x00050057,0x00000018,
-	0x000002c5,0x000002c2,0x00000222,0x00050051,0x00000006,0x000002c6,0x000002c5,0x00000000,
-	0x0004003d,0x0000011d,0x000002c8,0x00000146,0x0008000c,0x00000006,0x000002ca,0x00000001,
-	0x00000032,0x000002c6,0x00000144,0x000000fd,0x00050085,0x00000006,0x000002cb,0x000002ca,
-	0x000004c5,0x00050050,0x00000019,0x000002cc,0x000002cb,0x000000fd,0x00050057,0x00000018,
-	0x000002cd,0x000002c8,0x000002cc,0x000200f9,0x000002d3,0x000200f8,0x000002ce,0x000200f9,
-	0x000002d3,0x000200f8,0x000002d3,0x000700f5,0x00000018,0x000004db,0x000002cd,0x000002c1,
-	0x000004d7,0x000002ce,0x000200f9,0x000002d4,0x000200f8,0x000002d4,0x000700f5,0x00000018,
-	0x000004da,0x000002bc,0x000002b1,0x000004db,0x000002d3,0x000200f9,0x000002d5,0x000200f8,
-	0x000002d5,0x000700f5,0x00000018,0x000004d9,0x000002ac,0x000002a8,0x000004da,0x000002d4,
-	0x00050041,0x0000007e,0x0000023e,0x0000007b,0x00000098,0x0004003d,0x00000006,0x0000023f,
-	0x0000023e,0x000500b4,0x00000037,0x00000240,0x0000023f,0x0000013a,0x000300f7,0x0000024b,
-	0x00000000,0x000400fa,0x00000240,0x00000241,0x0000024b,0x000200f8,0x00000241,0x0008004f,
-	0x0000000f,0x00000243,0x000004d9,0x000004d9,0x00000000,0x00000001,0x00000002,0x0006000c,
-	0x0000000f,0x00000304,0x00000001,0x00000004,0x00000243,0x0007000c,0x0000000f,0x00000305,
-	0x00000001,0x0000001a,0x00000304,0x0000005f,0x00050083,0x0000000f,0x00000307,0x00000305,
-	0x000004c8,0x0007000c,0x0000000f,0x00000308,0x00000001,0x00000028,0x00000307,0x00000065,
-	0x0006000c,0x0000000f,0x0000030a,0x00000001,0x00000004,0x00000243,0x0007000c,0x0000000f,
-	0x0000030b,0x00000001,0x0000001a,0x0000030a,0x0000005f,0x0005008e,0x0000000f,0x0000030c,
-	0x0000030b,0x00000069,0x00050083,0x0000000f,0x0000030e,0x000004c9,0x0000030c,0x00050088,
-	0x0000000f,0x00000311,0x00000308,0x0000030e,0x0006000c,0x0000000f,0x00000312,0x00000001,
-	0x00000004,0x00000311,0x0007000c,0x0000000f,0x00000313,0x00000001,0x0000001a,0x00000312,
-	0x00000076,0x0005008e,0x0000000f,0x00000314,0x00000313,0x00000070,0x00050041,0x0000007e,
-	0x00000315,0x0000007b,0x0000007d,0x0004003d,0x00000006,0x00000316,0x00000315,0x00060050,
-	0x0000000f,0x00000317,0x00000316,0x00000316,0x00000316,0x00050088,0x0000000f,0x00000318,
-	0x00000314,0x00000317,0x00050051,0x00000006,0x00000246,0x00000318,0x00000000,0x00060052,
-	0x00000018,0x00000471,0x00000246,0x000004d9,0x00000000,0x00050051,0x00000006,0x00000248,
-	0x00000318,0x00000001,0x00060052,0x00000018,0x00000473,0x00000248,0x00000471,0x00000001,
-	0x00050051,0x00000006,0x0000024a,0x00000318,0x00000002,0x00060052,0x00000018,0x00000475,
-	0x0000024a,0x00000473,0x00000002,0x000200f9,0x0000024b,0x000200f8,0x0000024b,0x000700f5,
-	0x00000018,0x000004dc,0x000004d9,0x000002d5,0x00000475,0x00000241,0x00050041,0x0000007e,
-	0x0000024c,0x0000007b,0x00000085,0x0004003d,0x00000006,0x0000024d,0x0000024c,0x000500b7,
-	0x00000037,0x0000024e,0x0000024d,0x00000064,0x000300f7,0x00000259,0x00000000,0x000400fa,
-	0x0000024e,0x0000024f,0x00000259,0x000200f8,0x0000024f,0x0008004f,0x0000000f,0x00000251,
-	0x000004dc,0x000004dc,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007e,0x0000031d,
-	0x0000007b,0x00000085,0x0004003d,0x00000006,0x0000031e,0x0000031d,0x000500b4,0x00000037,
-	0x0000031f,0x0000031e,0x00000088,0x000300f7,0x00000353,0x00000000,0x000400fa,0x0000031f,
-	0x00000320,0x00000325,0x000200f8,0x00000320,0x00050041,0x0000007e,0x00000321,0x0000007b,
-	0x0000008c,0x0004003d,0x00000006,0x00000322,0x00000321,0x0005008e,0x0000000f,0x00000324,
-	0x00000251,0x00000322,0x000200f9,0x00000353,0x000200f8,0x00000325,0x00050041,0x0000007e,
-	0x00000326,0x0000007b,0x00000085,0x0004003d,0x00000006,0x00000327,0x00000326,0x000500b4,
-	0x00000037,0x00000328,0x00000327,0x00000094,0x000300f7,0x00000352,0x00000000,0x000400fa,
-	0x00000328,0x00000329,0x00000352,0x000200f8,0x00000329,0x00050041,0x0000007e,0x0000032a,
-	0x0000007b,0x00000098,0x0004003d,0x00000006,0x0000032b,0x0000032a,0x000500b4,0x00000037,
-	0x0000032c,0x0000032b,0x00000094,0x000300f7,0x00000330,0x00000000,0x000400fa,0x0000032c,
-	0x0000032d,0x00000330,0x000200f8,0x0000032d,0x00050090,0x0000000f,0x0000032f,0x00000251,
-	0x000000ac,0x000200f9,0x00000330,0x000200f8,0x00000330,0x000700f5,0x0000000f,0x000004dd,
-	0x00000251,0x00000329,0x0000032f,0x0000032d,0x00050051,0x00000006,0x00000332,0x000004dd,
-	0x00000000,0x00050051,0x00000006,0x00000334,0x000004dd,0x00000001,0x00050051,0x00000006,
-	0x00000336,0x000004dd,0x00000002,0x0007000c,0x00000006,0x00000337,0x00000001,0x00000028,
-	0x00000334,0x00000336,0x0007000c,0x00000006,0x00000338,0x00000001,0x00000028,0x00000332,
-	0x00000337,0x000500ba,0x00000037,0x0000033a,0x00000338,0x00000064,0x000300f7,0x0000034a,
-	0x00000000,0x000400fa,0x0000033a,0x0000033b,0x0000034a,0x000200f8,0x0000033b,0x00050041,
-	0x0000007e,0x0000033c,0x0000007b,0x0000008c,0x0004003d,0x00000006,0x0000033d,0x0000033c,
-	0x0008000c,0x00000006,0x00000340,0x00000001,0x00000032,0x0000033d,0x00000338,0x00000088,
-	0x00050041,0x0000007e,0x00000341,0x0000007b,0x000000c5,0x0004003d,0x00000006,0x00000342,
-	0x00000341,0x0008000c,0x00000006,0x00000345,0x00000001,0x00000032,0x00000342,0x00000338,
-	0x00000088,0x00050088,0x00000006,0x00000346,0x00000340,0x00000345,0x0005008e,0x0000000f,
-	0x00000349,0x000004dd,0x00000346,0x000200f9,0x0000034a,0x000200f8,0x0000034a,0x000700f5,
-	0x0000000f,0x000004de,0x000004dd,0x00000330,0x00000349,0x0000033b,0x00050041,0x0000007e,
-	0x0000034b,0x0000007b,0x00000098,0x0004003d,0x00000006,0x0000034c,0x0000034b,0x000500b4,
-	0x00000037,0x0000034d,0x0000034c,0x00000094,0x000300f7,0x00000351,0x00000000,0x000400fa,
-	0x0000034d,0x0000034e,0x00000351,0x000200f8,0x0000034e,0x00050090,0x0000000f,0x00000350,
-	0x000004de,0x000000e1,0x000200f9,0x00000351,0x000200f8,0x00000351,0x000700f5,0x0000000f,
-	0x000004e1,0x000004de,0x0000034a,0x00000350,0x0000034e,0x000200f9,0x00000352,0x000200f8,
-	0x00000352,0x000700f5,0x0000000f,0x000004e0,0x00000251,0x00000325,0x000004e1,0x00000351,
-	0x000200f9,0x00000353,0x000200f8,0x00000353,0x000700f5,0x0000000f,0x000004df,0x00000324,
-	0x00000320,0x000004e0,0x00000352,0x00050051,0x00000006,0x00000254,0x000004df,0x00000000,
-	0x00060052,0x00000018,0x0000047a,0x00000254,0x000004dc,0x00000000,0x00050051,0x00000006,
-	0x00000256,0x000004df,0x00000001,0x00060052,0x00000018,0x0000047c,0x00000256,0x0000047a,
-	0x00000001,0x00050051,0x00000006,0x00000258,0x000004df,0x00000002,0x00060052,0x00000018,
-	0x0000047e,0x00000258,0x0000047c,0x00000002,0x000200f9,0x00000259,0x000200f8,0x00000259,
-	0x000700f5,0x00000018,0x000004e7,0x000004dc,0x0000024b,0x0000047e,0x00000353,0x00050041,
-	0x0000007e,0x0000025a,0x0000007b,0x00000098,0x0004003d,0x00000006,0x0000025b,0x0000025a,
-	0x000500b4,0x00000037,0x0000025c,0x0000025b,0x00000088,0x000300f7,0x0000029a,0x00000000,
-	0x000400fa,0x0000025c,0x0000025d,0x0000026a,0x000200f8,0x0000025d,0x0008004f,0x0000000f,
-	0x0000025f,0x000004e7,0x000004e7,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007e,
-	0x0000035b,0x0000007b,0x0000016a,0x0004003d,0x00000006,0x0000035c,0x0000035b,0x000500b7,
-	0x00000037,0x0000035d,0x0000035c,0x00000064,0x000300f7,0x0000036b,0x00000000,0x000400fa,
-	0x0000035d,0x0000035e,0x0000036b,0x000200f8,0x0000035e,0x00050051,0x00000006,0x00000360,
-	0x000004e7,0x00000000,0x000500bc,0x00000037,0x00000374,0x00000360,0x00000036,0x000300f7,
-	0x0000037e,0x00000000,0x000400fa,0x00000374,0x00000375,0x00000378,0x000200f8,0x00000375,
-	0x00050085,0x00000006,0x00000377,0x00000360,0x000004d5,0x000200f9,0x0000037e,0x000200f8,
-	0x00000378,0x00050081,0x00000006,0x0000037a,0x00000360,0x00000040,0x0006000c,0x00000006,
-	0x0000037b,0x00000001,0x00000004,0x0000037a,0x00050085,0x00000006,0x0000037c,0x0000037b,
-	0x000004d4,0x0007000c,0x00000006,0x0000037d,0x00000001,0x0000001a,0x0000037c,0x00000045,
-	0x000200f9,0x0000037e,0x000200f8,0x0000037e,0x000700f5,0x00000006,0x000004fe,0x00000377,
-	0x00000375,0x0000037d,0x00000378,0x00050051,0x00000006,0x00000364,0x000004e7,0x00000001,
-	0x000500bc,0x00000037,0x00000383,0x00000364,0x00000036,0x000300f7,0x0000038d,0x00000000,
-	0x000400fa,0x00000383,0x00000384,0x00000387,0x000200f8,0x00000384,0x00050085,0x00000006,
-	0x00000386,0x00000364,0x000004d5,0x000200f9,0x0000038d,0x000200f8,0x00000387,0x00050081,
-	0x00000006,0x00000389,0x00000364,0x00000040,0x0006000c,0x00000006,0x0000038a,0x00000001,
-	0x00000004,0x00000389,0x00050085,0x00000006,0x0000038b,0x0000038a,0x000004d4,0x0007000c,
-	0x00000006,0x0000038c,0x00000001,0x0000001a,0x0000038b,0x00000045,0x000200f9,0x0000038d,
-	0x000200f8,0x0000038d,0x000700f5,0x00000006,0x00000500,0x00000386,0x00000384,0x0000038c,
-	0x00000387,0x00050051,0x00000006,0x00000368,0x000004e7,0x00000002,0x000500bc,0x00000037,
-	0x00000392,0x00000368,0x00000036,0x000300f7,0x0000039c,0x00000000,0x000400fa,0x00000392,
-	0x00000393,0x00000396,0x000200f8,0x00000393,0x00050085,0x00000006,0x00000395,0x00000368,
-	0x000004d5,0x000200f9,0x0000039c,0x000200f8,0x00000396,0x00050081,0x00000006,0x00000398,
-	0x00000368,0x00000040,0x0006000c,0x00000006,0x00000399,0x00000001,0x00000004,0x00000398,
-	0x00050085,0x00000006,0x0000039a,0x00000399,0x000004d4,0x0007000c,0x00000006,0x0000039b,
-	0x00000001,0x0000001a,0x0000039a,0x00000045,0x000200f9,0x0000039c,0x000200f8,0x0000039c,
-	0x000700f5,0x00000006,0x00000502,0x00000395,0x00000393,0x0000039b,0x00000396,0x00060050,
-	0x0000000f,0x0000050e,0x000004fe,0x00000500,0x00000502,0x000200f9,0x0000036b,0x000200f8,
-	0x0000036b,0x000700f5,0x0000000f,0x00000504,0x0000025f,0x0000025d,0x0000050e,0x0000039c,
-	0x00050041,0x0000007e,0x0000036d,0x0000007b,0x0000015a,0x0004003d,0x00000006,0x0000036e,
-	0x0000036d,0x0005008e,0x0000000f,0x0000036f,0x00000504,0x0000036e,0x00050051,0x00000006,
-	0x00000262,0x0000036f,0x00000000,0x00050051,0x00000006,0x00000264,0x0000036f,0x00000001,
-	0x00050051,0x00000006,0x00000266,0x0000036f,0x00000002,0x00050051,0x00000006,0x00000268,
-	0x000004e7,0x00000003,0x00070050,0x00000018,0x000004d6,0x00000262,0x00000264,0x00000266,
-	0x00000268,0x000200f9,0x0000029a,0x000200f8,0x0000026a,0x00050041,0x0000007e,0x0000026b,
-	0x0000007b,0x00000098,0x0004003d,0x00000006,0x0000026c,0x0000026b,0x000500b4,0x00000037,
-	0x0000026d,0x0000026c,0x00000094,0x000300f7,0x00000299,0x00000000,0x000400fa,0x0000026d,
-	0x0000026e,0x0000027b,0x000200f8,0x0000026e,0x0008004f,0x0000000f,0x00000270,0x000004e7,
-	0x000004e7,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007e,0x000003a5,0x0000007b,
-	0x0000015a,0x0004003d,0x00000006,0x000003a6,0x000003a5,0x0005008e,0x0000000f,0x000003a7,
-	0x00000270,0x000003a6,0x00050041,0x0000007e,0x000003a8,0x0000007b,0x0000016a,0x0004003d,
-	0x00000006,0x000003a9,0x000003a8,0x000500b7,0x00000037,0x000003aa,0x000003a9,0x00000064,
-	0x000400a8,0x00000037,0x000003ab,0x000003aa,0x000300f7,0x000003bd,0x00000000,0x000400fa,
-	0x000003ab,0x000003ac,0x000003bd,0x000200f8,0x000003ac,0x00050051,0x00000006,0x000003ae,
-	0x000003a7,0x00000000,0x000500bc,0x00000037,0x000003c2,0x000003ae,0x0000004b,0x000300f7,
-	0x000003cc,0x00000000,0x000400fa,0x000003c2,0x000003c3,0x000003c6,0x000200f8,0x000003c3,
-	0x00050085,0x00000006,0x000003c5,0x000003ae,0x0000003c,0x000200f9,0x000003cc,0x000200f8,
-	0x000003c6,0x0006000c,0x00000006,0x000003c8,0x00000001,0x00000004,0x000003ae,0x0007000c,
-	0x00000006,0x000003c9,0x00000001,0x0000001a,0x000003c8,0x00000054,0x0008000c,0x00000006,
-	0x000003cb,0x00000001,0x00000032,0x000003c9,0x00000043,0x000004d8,0x000200f9,0x000003cc,
-	0x000200f8,0x000003cc,0x000700f5,0x00000006,0x000004f3,0x000003c5,0x000003c3,0x000003cb,
-	0x000003c6,0x00050051,0x00000006,0x000003b2,0x000003a7,0x00000001,0x000500bc,0x00000037,
-	0x000003d1,0x000003b2,0x0000004b,0x000300f7,0x000003db,0x00000000,0x000400fa,0x000003d1,
-	0x000003d2,0x000003d5,0x000200f8,0x000003d2,0x00050085,0x00000006,0x000003d4,0x000003b2,
-	0x0000003c,0x000200f9,0x000003db,0x000200f8,0x000003d5,0x0006000c,0x00000006,0x000003d7,
-	0x00000001,0x00000004,0x000003b2,0x0007000c,0x00000006,0x000003d8,0x00000001,0x0000001a,
-	0x000003d7,0x00000054,0x0008000c,0x00000006,0x000003da,0x00000001,0x00000032,0x000003d8,
-	0x00000043,0x000004d8,0x000200f9,0x000003db,0x000200f8,0x000003db,0x000700f5,0x00000006,
-	0x000004f5,0x000003d4,0x000003d2,0x000003da,0x000003d5,0x00050051,0x00000006,0x000003b6,
-	0x000003a7,0x00000002,0x000500bc,0x00000037,0x000003e0,0x000003b6,0x0000004b,0x000300f7,
-	0x000003ea,0x00000000,0x000400fa,0x000003e0,0x000003e1,0x000003e4,0x000200f8,0x000003e1,
-	0x00050085,0x00000006,0x000003e3,0x000003b6,0x0000003c,0x000200f9,0x000003ea,0x000200f8,
-	0x000003e4,0x0006000c,0x00000006,0x000003e6,0x00000001,0x00000004,0x000003b6,0x0007000c,
-	0x00000006,0x000003e7,0x00000001,0x0000001a,0x000003e6,0x00000054,0x0008000c,0x00000006,
-	0x000003e9,0x00000001,0x00000032,0x000003e7,0x00000043,0x000004d8,0x000200f9,0x000003ea,
-	0x000200f8,0x000003ea,0x000700f5,0x00000006,0x000004f7,0x000003e3,0x000003e1,0x000003e9,
-	0x000003e4,0x00060050,0x0000000f,0x0000050d,0x000004f3,0x000004f5,0x000004f7,0x0008000c,
-	0x0000000f,0x000003bc,0x00000001,0x0000002b,0x0000050d,0x00000065,0x000004ce,0x000200f9,
-	0x000003bd,0x000200f8,0x000003bd,0x000700f5,0x0000000f,0x000004f9,0x000003a7,0x0000026e,
-	0x000003bc,0x000003ea,0x00050051,0x00000006,0x00000273,0x000004f9,0x00000000,0x00050051,
-	0x00000006,0x00000275,0x000004f9,0x00000001,0x00050051,0x00000006,0x00000277,0x000004f9,
-	0x00000002,0x00050051,0x00000006,0x00000279,0x000004e7,0x00000003,0x00070050,0x00000018,
-	0x000004d3,0x00000273,0x00000275,0x00000277,0x00000279,0x000200f9,0x00000299,0x000200f8,
-	0x0000027b,0x00050041,0x0000007e,0x0000027c,0x0000007b,0x00000098,0x0004003d,0x00000006,
-	0x0000027d,0x0000027c,0x000500b4,0x00000037,0x0000027e,0x0000027d,0x0000013a,0x000300f7,
-	0x00000298,0x00000000,0x000400fa,0x0000027e,0x0000027f,0x00000295,0x000200f8,0x0000027f,
-	0x0008004f,0x0000000f,0x00000281,0x000004e7,0x000004e7,0x00000000,0x00000001,0x00000002,
-	0x00050090,0x0000000f,0x00000282,0x00000281,0x000000e1,0x00050051,0x00000006,0x00000284,
-	0x00000282,0x00000000,0x00060052,0x00000018,0x000004a4,0x00000284,0x0000050f,0x00000000,
-	0x00050051,0x00000006,0x00000286,0x00000282,0x00000001,0x00060052,0x00000018,0x000004a6,
-	0x00000286,0x000004a4,0x00000001,0x00050051,0x00000006,0x00000288,0x00000282,0x00000002,
-	0x00060052,0x00000018,0x000004a8,0x00000288,0x000004a6,0x00000002,0x0008004f,0x0000000f,
-	0x0000028a,0x000004a8,0x000004a8,0x00000000,0x00000001,0x00000002,0x00050041,0x0000007e,
-	0x000003f3,0x0000007b,0x0000015a,0x0004003d,0x00000006,0x000003f4,0x000003f3,0x0005008e,
-	0x0000000f,0x000003f5,0x0000028a,0x000003f4,0x00050041,0x0000007e,0x000003f6,0x0000007b,
-	0x0000016a,0x0004003d,0x00000006,0x000003f7,0x000003f6,0x000500b7,0x00000037,0x000003f8,
-	0x000003f7,0x00000064,0x000400a8,0x00000037,0x000003f9,0x000003f8,0x000300f7,0x0000040b,
-	0x00000000,0x000400fa,0x000003f9,0x000003fa,0x0000040b,0x000200f8,0x000003fa,0x00050051,
-	0x00000006,0x000003fc,0x000003f5,0x00000000,0x000500bc,0x00000037,0x00000410,0x000003fc,
-	0x0000004b,0x000300f7,0x0000041a,0x00000000,0x000400fa,0x00000410,0x00000411,0x00000414,
-	0x000200f8,0x00000411,0x00050085,0x00000006,0x00000413,0x000003fc,0x0000003c,0x000200f9,
-	0x0000041a,0x000200f8,0x00000414,0x0006000c,0x00000006,0x00000416,0x00000001,0x00000004,
-	0x000003fc,0x0007000c,0x00000006,0x00000417,0x00000001,0x0000001a,0x00000416,0x00000054,
-	0x0008000c,0x00000006,0x00000419,0x00000001,0x00000032,0x00000417,0x00000043,0x000004d8,
-	0x000200f9,0x0000041a,0x000200f8,0x0000041a,0x000700f5,0x00000006,0x000004e8,0x00000413,
-	0x00000411,0x00000419,0x00000414,0x00050051,0x00000006,0x00000400,0x000003f5,0x00000001,
-	0x000500bc,0x00000037,0x0000041f,0x00000400,0x0000004b,0x000300f7,0x00000429,0x00000000,
-	0x000400fa,0x0000041f,0x00000420,0x00000423,0x000200f8,0x00000420,0x00050085,0x00000006,
-	0x00000422,0x00000400,0x0000003c,0x000200f9,0x00000429,0x000200f8,0x00000423,0x0006000c,
-	0x00000006,0x00000425,0x00000001,0x00000004,0x00000400,0x0007000c,0x00000006,0x00000426,
-	0x00000001,0x0000001a,0x00000425,0x00000054,0x0008000c,0x00000006,0x00000428,0x00000001,
-	0x00000032,0x00000426,0x00000043,0x000004d8,0x000200f9,0x00000429,0x000200f8,0x00000429,
-	0x000700f5,0x00000006,0x000004ea,0x00000422,0x00000420,0x00000428,0x00000423,0x00050051,
-	0x00000006,0x00000404,0x000003f5,0x00000002,0x000500bc,0x00000037,0x0000042e,0x00000404,
-	0x0000004b,0x000300f7,0x00000438,0x00000000,0x000400fa,0x0000042e,0x0000042f,0x00000432,
-	0x000200f8,0x0000042f,0x00050085,0x00000006,0x00000431,0x00000404,0x0000003c,0x000200f9,
-	0x00000438,0x000200f8,0x00000432,0x0006000c,0x00000006,0x00000434,0x00000001,0x00000004,
-	0x00000404,0x0007000c,0x00000006,0x00000435,0x00000001,0x0000001a,0x00000434,0x00000054,
-	0x0008000c,0x00000006,0x00000437,0x00000001,0x00000032,0x00000435,0x00000043,0x000004d8,
-	0x000200f9,0x00000438,0x000200f8,0x00000438,0x000700f5,0x00000006,0x000004ec,0x00000431,
-	0x0000042f,0x00000437,0x00000432,0x00060050,0x0000000f,0x0000050c,0x000004e8,0x000004ea,
-	0x000004ec,0x0008000c,0x0000000f,0x0000040a,0x00000001,0x0000002b,0x0000050c,0x00000065,
-	0x000004ce,0x000200f9,0x0000040b,0x000200f8,0x0000040b,0x000700f5,0x0000000f,0x000004ee,
-	0x000003f5,0x0000027f,0x0000040a,0x00000438,0x00050051,0x00000006,0x0000028d,0x000004ee,
-	0x00000000,0x00050051,0x00000006,0x0000028f,0x000004ee,0x00000001,0x00050051,0x00000006,
-	0x00000291,0x000004ee,0x00000002,0x00050051,0x00000006,0x00000293,0x000004e7,0x00000003,
-	0x00070050,0x00000018,0x000004cf,0x0000028d,0x0000028f,0x00000291,0x00000293,0x000200f9,
-	0x00000298,0x000200f8,0x00000295,0x0008004f,0x0000000f,0x0000043e,0x000004e7,0x000004e7,
-	0x00000000,0x00000001,0x00000002,0x00050041,0x0000007e,0x0000043f,0x0000007b,0x0000015a,
-	0x0004003d,0x00000006,0x00000440,0x0000043f,0x0005008e,0x0000000f,0x00000441,0x0000043e,
-	0x00000440,0x00050051,0x00000006,0x00000443,0x00000441,0x00000000,0x00050051,0x00000006,
-	0x00000445,0x00000441,0x00000001,0x00050051,0x00000006,0x00000447,0x00000441,0x00000002,
-	0x00050051,0x00000006,0x00000449,0x000004e7,0x00000003,0x00070050,0x00000018,0x000004ca,
-	0x00000443,0x00000445,0x00000447,0x00000449,0x000200f9,0x00000298,0x000200f8,0x00000298,
-	0x000700f5,0x00000018,0x0000050b,0x000004cf,0x0000040b,0x000004ca,0x00000295,0x000200f9,
-	0x00000299,0x000200f8,0x00000299,0x000700f5,0x00000018,0x0000050a,0x000004d3,0x000003bd,
-	0x0000050b,0x00000298,0x000200f9,0x0000029a,0x000200f8,0x0000029a,0x000700f5,0x00000018,
-	0x00000509,0x000004d6,0x0000036b,0x0000050a,0x00000299,0x00050085,0x00000018,0x0000029e,
-	0x00000509,0x00000225,0x0003003e,0x00000228,0x0000029e,0x000100fd,0x00010038
+	0x00000003,0x00040017,0x00000018,0x00000006,0x00000002,0x00040017,0x0000001a,0x00000006,
+	0x00000004,0x0004002b,0x00000006,0x0000003e,0x3d25aee6,0x00020014,0x0000003f,0x0004002b,
+	0x00000006,0x00000044,0x414eb852,0x0004002b,0x00000006,0x00000048,0x3d6147ae,0x0004002b,
+	0x00000006,0x0000004b,0x3f870a3d,0x0004002b,0x00000006,0x0000004d,0x4019999a,0x0004002b,
+	0x00000006,0x00000053,0x3b4d2e1c,0x0004002b,0x00000006,0x0000005c,0x3ed55555,0x0004002b,
+	0x00000006,0x00000066,0x3c4fcdac,0x0006002c,0x0000000f,0x00000067,0x00000066,0x00000066,
+	0x00000066,0x0004002b,0x00000006,0x00000069,0x3f560000,0x0004002b,0x00000006,0x0000006c,
+	0x00000000,0x0006002c,0x0000000f,0x0000006d,0x0000006c,0x0000006c,0x0000006c,0x0004002b,
+	0x00000006,0x00000070,0x4196d000,0x0004002b,0x00000006,0x00000071,0x41958000,0x0004002b,
+	0x00000006,0x00000078,0x461c4000,0x0004002b,0x00000006,0x0000007d,0x40c8e06b,0x0006002c,
+	0x0000000f,0x0000007e,0x0000007d,0x0000007d,0x0000007d,0x000b001e,0x00000081,0x00000006,
+	0x00000006,0x00000006,0x00000006,0x0000001a,0x00000006,0x00000006,0x00000006,0x00000006,
+	0x00040020,0x00000082,0x00000002,0x00000081,0x0004003b,0x00000082,0x00000083,0x00000002,
+	0x00040015,0x00000084,0x00000020,0x00000001,0x0004002b,0x00000084,0x00000085,0x00000008,
+	0x00040020,0x00000086,0x00000002,0x00000006,0x0004002b,0x00000084,0x0000008d,0x00000005,
+	0x0004002b,0x00000006,0x00000090,0x3f800000,0x0004002b,0x00000084,0x00000094,0x00000006,
+	0x0004002b,0x00000006,0x0000009c,0x40000000,0x0004002b,0x00000084,0x000000a0,0x00000002,
+	0x00040018,0x000000a7,0x0000000f,0x00000003,0x0004002b,0x00000006,0x000000a8,0x3f209d8c,
+	0x0004002b,0x00000006,0x000000a9,0x3ea897c8,0x0004002b,0x00000006,0x000000aa,0x3d3168f9,
+	0x0006002c,0x0000000f,0x000000ab,0x000000a8,0x000000a9,0x000000aa,0x0004002b,0x00000006,
+	0x000000ac,0x3d8d82ba,0x0004002b,0x00000006,0x000000ad,0x3f6b670a,0x0004002b,0x00000006,
+	0x000000ae,0x3c3a27af,0x0006002c,0x0000000f,0x000000af,0x000000ac,0x000000ad,0x000000ae,
+	0x0004002b,0x00000006,0x000000b0,0x3c86466b,0x0004002b,0x00000006,0x000000b1,0x3db44029,
+	0x0004002b,0x00000006,0x000000b2,0x3f6545b7,0x0006002c,0x0000000f,0x000000b3,0x000000b0,
+	0x000000b1,0x000000b2,0x0006002c,0x000000a7,0x000000b4,0x000000ab,0x000000af,0x000000b3,
+	0x0004002b,0x00000084,0x000000cd,0x00000007,0x0004002b,0x00000006,0x000000dd,0x3fd48b22,
+	0x0004002b,0x00000006,0x000000de,0xbf1670a0,0x0004002b,0x00000006,0x000000df,0xbd952d23,
+	0x0006002c,0x0000000f,0x000000e0,0x000000dd,0x000000de,0x000000df,0x0004002b,0x00000006,
+	0x000000e1,0xbdff127f,0x0004002b,0x00000006,0x000000e2,0x3f9102b4,0x0004002b,0x00000006,
+	0x000000e3,0xbc08c60d,0x0006002c,0x0000000f,0x000000e4,0x000000e1,0x000000e2,0x000000e3,
+	0x0004002b,0x00000006,0x000000e5,0xbc94b7b3,0x0004002b,0x00000006,0x000000e6,0xbdce05cd,
+	0x0004002b,0x00000006,0x000000e7,0x3f8f333c,0x0006002c,0x0000000f,0x000000e8,0x000000e5,
+	0x000000e6,0x000000e7,0x0006002c,0x000000a7,0x000000e9,0x000000e0,0x000000e4,0x000000e8,
+	0x00090019,0x000000ef,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,
+	0x00000000,0x0003001b,0x000000f0,0x000000ef,0x00040020,0x000000f1,0x00000000,0x000000f0,
+	0x0004003b,0x000000f1,0x000000f2,0x00000000,0x0004002b,0x00000006,0x000000f7,0x437f0000,
+	0x0004003b,0x000000f1,0x000000f9,0x00000000,0x0004002b,0x00000006,0x000000fc,0x3f000000,
+	0x0004002b,0x00000084,0x00000106,0x00000004,0x00040020,0x00000107,0x00000002,0x0000001a,
+	0x0004002b,0x00000006,0x00000154,0x3727c5ac,0x0005002c,0x00000018,0x00000155,0x00000154,
+	0x00000154,0x0005002c,0x00000018,0x00000156,0x00000090,0x00000090,0x0004002b,0x00000084,
+	0x00000174,0x00000001,0x0004002b,0x00000006,0x00000196,0x40400000,0x0004002b,0x00000006,
+	0x000001a1,0x40800000,0x0004002b,0x00000006,0x000001ac,0x40a00000,0x0004002b,0x00000084,
+	0x000001c4,0x00000003,0x0004002b,0x00000084,0x000001d4,0x00000000,0x00040020,0x00000286,
+	0x00000001,0x0000001a,0x00040020,0x0000028a,0x00000001,0x00000018,0x0004003b,0x0000028a,
+	0x0000028b,0x00000001,0x0004003b,0x00000286,0x0000028e,0x00000001,0x00040020,0x00000291,
+	0x00000003,0x0000001a,0x0004003b,0x00000291,0x00000292,0x00000003,0x0005002c,0x00000018,
+	0x0000066e,0x000000fc,0x000000fc,0x0004002b,0x00000006,0x0000066f,0x3b800000,0x0006002c,
+	0x0000000f,0x00000671,0x00000069,0x00000069,0x00000069,0x0006002c,0x0000000f,0x00000672,
+	0x00000070,0x00000070,0x00000070,0x0006002c,0x0000000f,0x00000677,0x00000090,0x00000090,
+	0x00000090,0x0004002b,0x00000006,0x0000067d,0x3f72a76f,0x0004002b,0x00000006,0x0000067e,
+	0x3d9e8391,0x0007002c,0x0000001a,0x00000680,0x00000090,0x0000006c,0x00000090,0x00000090,
+	0x0004002b,0x00000006,0x00000681,0xbd6147ae,0x00030001,0x0000001a,0x000006ba,0x00050036,
+	0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x00000018,
+	0x0000028c,0x0000028b,0x0004003d,0x0000001a,0x0000028f,0x0000028e,0x00050041,0x00000086,
+	0x00000313,0x00000083,0x00000174,0x0004003d,0x00000006,0x00000314,0x00000313,0x000500b4,
+	0x0000003f,0x00000315,0x00000314,0x00000090,0x000300f7,0x0000034f,0x00000000,0x000400fa,
+	0x00000315,0x00000316,0x0000031b,0x000200f8,0x00000316,0x0004003d,0x000000f0,0x00000317,
+	0x000000f2,0x00050057,0x0000001a,0x0000031a,0x00000317,0x0000028c,0x000200f9,0x0000034f,
+	0x000200f8,0x0000031b,0x00050041,0x00000086,0x0000031c,0x00000083,0x00000174,0x0004003d,
+	0x00000006,0x0000031d,0x0000031c,0x000500b4,0x0000003f,0x0000031e,0x0000031d,0x0000009c,
+	0x000300f7,0x0000034e,0x00000000,0x000400fa,0x0000031e,0x0000031f,0x0000032c,0x000200f8,
+	0x0000031f,0x000400d1,0x00000018,0x00000357,0x0000028c,0x00050041,0x00000107,0x00000358,
+	0x00000083,0x00000106,0x0004003d,0x0000001a,0x00000359,0x00000358,0x0007004f,0x00000018,
+	0x0000035a,0x00000359,0x00000359,0x00000002,0x00000003,0x00050085,0x00000018,0x0000035b,
+	0x00000357,0x0000035a,0x0008000c,0x00000018,0x0000035c,0x00000001,0x0000002b,0x0000035b,
+	0x00000155,0x00000156,0x00050041,0x00000107,0x0000035e,0x00000083,0x00000106,0x0004003d,
+	0x0000001a,0x0000035f,0x0000035e,0x0007004f,0x00000018,0x00000360,0x0000035f,0x0000035f,
+	0x00000002,0x00000003,0x0005008e,0x00000018,0x00000363,0x0000035c,0x000000fc,0x0004007f,
+	0x00000018,0x00000670,0x00000363,0x0008000c,0x00000018,0x00000364,0x00000001,0x00000032,
+	0x0000028c,0x00000360,0x00000670,0x00050083,0x00000018,0x00000367,0x00000156,0x0000035c,
+	0x0006000c,0x00000018,0x00000369,0x00000001,0x0000000a,0x00000364,0x0008000c,0x00000018,
+	0x0000036a,0x00000001,0x00000031,0x00000367,0x00000156,0x00000369,0x0006000c,0x00000018,
+	0x0000036c,0x00000001,0x00000008,0x00000364,0x00050081,0x00000018,0x0000036e,0x0000036c,
+	0x0000066e,0x00050081,0x00000018,0x00000370,0x0000036e,0x0000036a,0x00050041,0x00000107,
+	0x00000371,0x00000083,0x00000106,0x0004003d,0x0000001a,0x00000372,0x00000371,0x0007004f,
+	0x00000018,0x00000373,0x00000372,0x00000372,0x00000000,0x00000001,0x00050085,0x00000018,
+	0x00000374,0x00000370,0x00000373,0x0004003d,0x000000f0,0x00000323,0x000000f2,0x000400cf,
+	0x00000018,0x00000327,0x0000028c,0x000400d0,0x00000018,0x0000032a,0x0000028c,0x00080058,
+	0x0000001a,0x0000032b,0x00000323,0x00000374,0x00000004,0x00000327,0x0000032a,0x000200f9,
+	0x0000034e,0x000200f8,0x0000032c,0x00050041,0x00000086,0x0000032d,0x00000083,0x00000174,
+	0x0004003d,0x00000006,0x0000032e,0x0000032d,0x000500b4,0x0000003f,0x0000032f,0x0000032e,
+	0x00000196,0x000300f7,0x0000034d,0x00000000,0x000400fa,0x0000032f,0x00000330,0x00000334,
+	0x000200f8,0x00000330,0x0004003d,0x000000f0,0x00000378,0x000000f2,0x00050057,0x0000001a,
+	0x0000037a,0x00000378,0x0000028c,0x00050051,0x00000006,0x0000037b,0x0000037a,0x00000000,
+	0x0004003d,0x000000f0,0x0000037d,0x000000f9,0x0008000c,0x00000006,0x0000037f,0x00000001,
+	0x00000032,0x0000037b,0x000000f7,0x000000fc,0x00050085,0x00000006,0x00000380,0x0000037f,
+	0x0000066f,0x00050050,0x00000018,0x00000381,0x00000380,0x000000fc,0x00050057,0x0000001a,
+	0x00000382,0x0000037d,0x00000381,0x000200f9,0x0000034d,0x000200f8,0x00000334,0x00050041,
+	0x00000086,0x00000335,0x00000083,0x00000174,0x0004003d,0x00000006,0x00000336,0x00000335,
+	0x000500b4,0x0000003f,0x00000337,0x00000336,0x000001a1,0x000300f7,0x0000034c,0x00000000,
+	0x000400fa,0x00000337,0x00000338,0x0000033c,0x000200f8,0x00000338,0x00050041,0x00000107,
+	0x00000391,0x00000083,0x00000106,0x0004003d,0x0000001a,0x00000392,0x00000391,0x0007004f,
+	0x00000018,0x00000393,0x00000392,0x00000392,0x00000002,0x00000003,0x0008000c,0x00000018,
+	0x00000396,0x00000001,0x00000032,0x0000028c,0x00000393,0x0000066e,0x0006000c,0x00000018,
+	0x00000398,0x00000001,0x00000008,0x00000396,0x00050083,0x00000018,0x0000039a,0x00000398,
+	0x0000066e,0x00050041,0x00000107,0x0000039b,0x00000083,0x00000106,0x0004003d,0x0000001a,
+	0x0000039c,0x0000039b,0x0007004f,0x00000018,0x0000039d,0x0000039c,0x0000039c,0x00000000,
+	0x00000001,0x00050085,0x00000018,0x0000039e,0x0000039a,0x0000039d,0x0006000c,0x00000018,
+	0x000003a0,0x00000001,0x00000008,0x00000396,0x00050081,0x00000018,0x000003a2,0x000003a0,
+	0x0000066e,0x00050041,0x00000107,0x000003a3,0x00000083,0x00000106,0x0004003d,0x0000001a,
+	0x000003a4,0x000003a3,0x0007004f,0x00000018,0x000003a5,0x000003a4,0x000003a4,0x00000000,
+	0x00000001,0x00050085,0x00000018,0x000003a6,0x000003a2,0x000003a5,0x00050051,0x00000006,
+	0x000003a7,0x0000039e,0x00000000,0x00050051,0x00000006,0x000003a8,0x0000039e,0x00000001,
+	0x00050051,0x00000006,0x000003a9,0x000003a6,0x00000000,0x00050051,0x00000006,0x000003aa,
+	0x000003a6,0x00000001,0x00070050,0x0000001a,0x000003ab,0x000003a7,0x000003a8,0x000003a9,
+	0x000003aa,0x0006000c,0x00000018,0x000003ad,0x00000001,0x0000000a,0x00000396,0x0007004f,
+	0x00000018,0x000003af,0x000003ab,0x000003ab,0x00000000,0x00000001,0x0004003d,0x000000f0,
+	0x000003cd,0x000000f2,0x00050057,0x0000001a,0x000003cf,0x000003cd,0x000003af,0x00050051,
+	0x00000006,0x000003d0,0x000003cf,0x00000000,0x0004003d,0x000000f0,0x000003d2,0x000000f9,
+	0x0008000c,0x00000006,0x000003d4,0x00000001,0x00000032,0x000003d0,0x000000f7,0x000000fc,
+	0x00050085,0x00000006,0x000003d5,0x000003d4,0x0000066f,0x00050050,0x00000018,0x000003d6,
+	0x000003d5,0x000000fc,0x00050057,0x0000001a,0x000003d7,0x000003d2,0x000003d6,0x0007004f,
+	0x00000018,0x000003b2,0x000003ab,0x000003ab,0x00000000,0x00000003,0x0004003d,0x000000f0,
+	0x000003db,0x000000f2,0x00050057,0x0000001a,0x000003dd,0x000003db,0x000003b2,0x00050051,
+	0x00000006,0x000003de,0x000003dd,0x00000000,0x0004003d,0x000000f0,0x000003e0,0x000000f9,
+	0x0008000c,0x00000006,0x000003e2,0x00000001,0x00000032,0x000003de,0x000000f7,0x000000fc,
+	0x00050085,0x00000006,0x000003e3,0x000003e2,0x0000066f,0x00050050,0x00000018,0x000003e4,
+	0x000003e3,0x000000fc,0x00050057,0x0000001a,0x000003e5,0x000003e0,0x000003e4,0x0007004f,
+	0x00000018,0x000003b5,0x000003ab,0x000003ab,0x00000002,0x00000001,0x0004003d,0x000000f0,
+	0x000003e9,0x000000f2,0x00050057,0x0000001a,0x000003eb,0x000003e9,0x000003b5,0x00050051,
+	0x00000006,0x000003ec,0x000003eb,0x00000000,0x0004003d,0x000000f0,0x000003ee,0x000000f9,
+	0x0008000c,0x00000006,0x000003f0,0x00000001,0x00000032,0x000003ec,0x000000f7,0x000000fc,
+	0x00050085,0x00000006,0x000003f1,0x000003f0,0x0000066f,0x00050050,0x00000018,0x000003f2,
+	0x000003f1,0x000000fc,0x00050057,0x0000001a,0x000003f3,0x000003ee,0x000003f2,0x0007004f,
+	0x00000018,0x000003b8,0x000003ab,0x000003ab,0x00000002,0x00000003,0x0004003d,0x000000f0,
+	0x000003f7,0x000000f2,0x00050057,0x0000001a,0x000003f9,0x000003f7,0x000003b8,0x00050051,
+	0x00000006,0x000003fa,0x000003f9,0x00000000,0x0004003d,0x000000f0,0x000003fc,0x000000f9,
+	0x0008000c,0x00000006,0x000003fe,0x00000001,0x00000032,0x000003fa,0x000000f7,0x000000fc,
+	0x00050085,0x00000006,0x000003ff,0x000003fe,0x0000066f,0x00050050,0x00000018,0x00000400,
+	0x000003ff,0x000000fc,0x00050057,0x0000001a,0x00000401,0x000003fc,0x00000400,0x00050051,
+	0x00000006,0x000003bd,0x000003ad,0x00000001,0x00070050,0x0000001a,0x000003be,0x000003bd,
+	0x000003bd,0x000003bd,0x000003bd,0x0008000c,0x0000001a,0x000003bf,0x00000001,0x0000002e,
+	0x000003d7,0x000003e5,0x000003be,0x00050051,0x00000006,0x000003c3,0x000003ad,0x00000001,
+	0x00070050,0x0000001a,0x000003c4,0x000003c3,0x000003c3,0x000003c3,0x000003c3,0x0008000c,
+	0x0000001a,0x000003c5,0x00000001,0x0000002e,0x000003f3,0x00000401,0x000003c4,0x00050051,
+	0x00000006,0x000003c7,0x000003ad,0x00000000,0x00070050,0x0000001a,0x000003c8,0x000003c7,
+	0x000003c7,0x000003c7,0x000003c7,0x0008000c,0x0000001a,0x000003c9,0x00000001,0x0000002e,
+	0x000003bf,0x000003c5,0x000003c8,0x000200f9,0x0000034c,0x000200f8,0x0000033c,0x00050041,
+	0x00000086,0x0000033d,0x00000083,0x00000174,0x0004003d,0x00000006,0x0000033e,0x0000033d,
+	0x000500b4,0x0000003f,0x0000033f,0x0000033e,0x000001ac,0x000300f7,0x0000034b,0x00000000,
+	0x000400fa,0x0000033f,0x00000340,0x00000346,0x000200f8,0x00000340,0x000400d1,0x00000018,
+	0x00000408,0x0000028c,0x00050041,0x00000107,0x00000409,0x00000083,0x00000106,0x0004003d,
+	0x0000001a,0x0000040a,0x00000409,0x0007004f,0x00000018,0x0000040b,0x0000040a,0x0000040a,
+	0x00000002,0x00000003,0x00050085,0x00000018,0x0000040c,0x00000408,0x0000040b,0x0008000c,
+	0x00000018,0x0000040d,0x00000001,0x0000002b,0x0000040c,0x00000155,0x00000156,0x00050041,
+	0x00000107,0x0000040f,0x00000083,0x00000106,0x0004003d,0x0000001a,0x00000410,0x0000040f,
+	0x0007004f,0x00000018,0x00000411,0x00000410,0x00000410,0x00000002,0x00000003,0x0005008e,
+	0x00000018,0x00000414,0x0000040d,0x000000fc,0x0004007f,0x00000018,0x0000066d,0x00000414,
+	0x0008000c,0x00000018,0x00000415,0x00000001,0x00000032,0x0000028c,0x00000411,0x0000066d,
+	0x00050083,0x00000018,0x00000418,0x00000156,0x0000040d,0x0006000c,0x00000018,0x0000041a,
+	0x00000001,0x0000000a,0x00000415,0x0008000c,0x00000018,0x0000041b,0x00000001,0x00000031,
+	0x00000418,0x00000156,0x0000041a,0x0006000c,0x00000018,0x0000041d,0x00000001,0x00000008,
+	0x00000415,0x00050081,0x00000018,0x0000041f,0x0000041d,0x0000066e,0x00050081,0x00000018,
+	0x00000421,0x0000041f,0x0000041b,0x00050041,0x00000107,0x00000422,0x00000083,0x00000106,
+	0x0004003d,0x0000001a,0x00000423,0x00000422,0x0007004f,0x00000018,0x00000424,0x00000423,
+	0x00000423,0x00000000,0x00000001,0x00050085,0x00000018,0x00000425,0x00000421,0x00000424,
+	0x00050041,0x00000107,0x00000434,0x00000083,0x00000106,0x0004003d,0x0000001a,0x00000435,
+	0x00000434,0x0007004f,0x00000018,0x00000436,0x00000435,0x00000435,0x00000002,0x00000003,
+	0x0008000c,0x00000018,0x00000439,0x00000001,0x00000032,0x00000425,0x00000436,0x0000066e,
+	0x0006000c,0x00000018,0x0000043b,0x00000001,0x00000008,0x00000439,0x00050083,0x00000018,
+	0x0000043d,0x0000043b,0x0000066e,0x00050041,0x00000107,0x0000043e,0x00000083,0x00000106,
+	0x0004003d,0x0000001a,0x0000043f,0x0000043e,0x0007004f,0x00000018,0x00000440,0x0000043f,
+	0x0000043f,0x00000000,0x00000001,0x00050085,0x00000018,0x00000441,0x0000043d,0x00000440,
+	0x0006000c,0x00000018,0x00000443,0x00000001,0x00000008,0x00000439,0x00050081,0x00000018,
+	0x00000445,0x00000443,0x0000066e,0x00050041,0x00000107,0x00000446,0x00000083,0x00000106,
+	0x0004003d,0x0000001a,0x00000447,0x00000446,0x0007004f,0x00000018,0x00000448,0x00000447,
+	0x00000447,0x00000000,0x00000001,0x00050085,0x00000018,0x00000449,0x00000445,0x00000448,
+	0x00050051,0x00000006,0x0000044a,0x00000441,0x00000000,0x00050051,0x00000006,0x0000044b,
+	0x00000441,0x00000001,0x00050051,0x00000006,0x0000044c,0x00000449,0x00000000,0x00050051,
+	0x00000006,0x0000044d,0x00000449,0x00000001,0x00070050,0x0000001a,0x0000044e,0x0000044a,
+	0x0000044b,0x0000044c,0x0000044d,0x0006000c,0x00000018,0x00000450,0x00000001,0x0000000a,
+	0x00000439,0x0007004f,0x00000018,0x00000452,0x0000044e,0x0000044e,0x00000000,0x00000001,
+	0x0004003d,0x000000f0,0x00000470,0x000000f2,0x00050057,0x0000001a,0x00000472,0x00000470,
+	0x00000452,0x00050051,0x00000006,0x00000473,0x00000472,0x00000000,0x0004003d,0x000000f0,
+	0x00000475,0x000000f9,0x0008000c,0x00000006,0x00000477,0x00000001,0x00000032,0x00000473,
+	0x000000f7,0x000000fc,0x00050085,0x00000006,0x00000478,0x00000477,0x0000066f,0x00050050,
+	0x00000018,0x00000479,0x00000478,0x000000fc,0x00050057,0x0000001a,0x0000047a,0x00000475,
+	0x00000479,0x0007004f,0x00000018,0x00000455,0x0000044e,0x0000044e,0x00000000,0x00000003,
+	0x0004003d,0x000000f0,0x0000047e,0x000000f2,0x00050057,0x0000001a,0x00000480,0x0000047e,
+	0x00000455,0x00050051,0x00000006,0x00000481,0x00000480,0x00000000,0x0004003d,0x000000f0,
+	0x00000483,0x000000f9,0x0008000c,0x00000006,0x00000485,0x00000001,0x00000032,0x00000481,
+	0x000000f7,0x000000fc,0x00050085,0x00000006,0x00000486,0x00000485,0x0000066f,0x00050050,
+	0x00000018,0x00000487,0x00000486,0x000000fc,0x00050057,0x0000001a,0x00000488,0x00000483,
+	0x00000487,0x0007004f,0x00000018,0x00000458,0x0000044e,0x0000044e,0x00000002,0x00000001,
+	0x0004003d,0x000000f0,0x0000048c,0x000000f2,0x00050057,0x0000001a,0x0000048e,0x0000048c,
+	0x00000458,0x00050051,0x00000006,0x0000048f,0x0000048e,0x00000000,0x0004003d,0x000000f0,
+	0x00000491,0x000000f9,0x0008000c,0x00000006,0x00000493,0x00000001,0x00000032,0x0000048f,
+	0x000000f7,0x000000fc,0x00050085,0x00000006,0x00000494,0x00000493,0x0000066f,0x00050050,
+	0x00000018,0x00000495,0x00000494,0x000000fc,0x00050057,0x0000001a,0x00000496,0x00000491,
+	0x00000495,0x0007004f,0x00000018,0x0000045b,0x0000044e,0x0000044e,0x00000002,0x00000003,
+	0x0004003d,0x000000f0,0x0000049a,0x000000f2,0x00050057,0x0000001a,0x0000049c,0x0000049a,
+	0x0000045b,0x00050051,0x00000006,0x0000049d,0x0000049c,0x00000000,0x0004003d,0x000000f0,
+	0x0000049f,0x000000f9,0x0008000c,0x00000006,0x000004a1,0x00000001,0x00000032,0x0000049d,
+	0x000000f7,0x000000fc,0x00050085,0x00000006,0x000004a2,0x000004a1,0x0000066f,0x00050050,
+	0x00000018,0x000004a3,0x000004a2,0x000000fc,0x00050057,0x0000001a,0x000004a4,0x0000049f,
+	0x000004a3,0x00050051,0x00000006,0x00000460,0x00000450,0x00000001,0x00070050,0x0000001a,
+	0x00000461,0x00000460,0x00000460,0x00000460,0x00000460,0x0008000c,0x0000001a,0x00000462,
+	0x00000001,0x0000002e,0x0000047a,0x00000488,0x00000461,0x00050051,0x00000006,0x00000466,
+	0x00000450,0x00000001,0x00070050,0x0000001a,0x00000467,0x00000466,0x00000466,0x00000466,
+	0x00000466,0x0008000c,0x0000001a,0x00000468,0x00000001,0x0000002e,0x00000496,0x000004a4,
+	0x00000467,0x00050051,0x00000006,0x0000046a,0x00000450,0x00000000,0x00070050,0x0000001a,
+	0x0000046b,0x0000046a,0x0000046a,0x0000046a,0x0000046a,0x0008000c,0x0000001a,0x0000046c,
+	0x00000001,0x0000002e,0x00000462,0x00000468,0x0000046b,0x000200f9,0x0000034b,0x000200f8,
+	0x00000346,0x000200f9,0x0000034b,0x000200f8,0x0000034b,0x000700f5,0x0000001a,0x00000686,
+	0x0000046c,0x00000340,0x00000680,0x00000346,0x000200f9,0x0000034c,0x000200f8,0x0000034c,
+	0x000700f5,0x0000001a,0x00000685,0x000003c9,0x00000338,0x00000686,0x0000034b,0x000200f9,
+	0x0000034d,0x000200f8,0x0000034d,0x000700f5,0x0000001a,0x00000684,0x00000382,0x00000330,
+	0x00000685,0x0000034c,0x000200f9,0x0000034e,0x000200f8,0x0000034e,0x000700f5,0x0000001a,
+	0x00000683,0x0000032b,0x0000031f,0x00000684,0x0000034d,0x000200f9,0x0000034f,0x000200f8,
+	0x0000034f,0x000700f5,0x0000001a,0x00000682,0x0000031a,0x00000316,0x00000683,0x0000034e,
+	0x00050041,0x00000086,0x000002a8,0x00000083,0x000000a0,0x0004003d,0x00000006,0x000002a9,
+	0x000002a8,0x000500b4,0x0000003f,0x000002aa,0x000002a9,0x00000196,0x000300f7,0x000002b5,
+	0x00000000,0x000400fa,0x000002aa,0x000002ab,0x000002b5,0x000200f8,0x000002ab,0x0008004f,
+	0x0000000f,0x000002ad,0x00000682,0x00000682,0x00000000,0x00000001,0x00000002,0x0006000c,
+	0x0000000f,0x000004aa,0x00000001,0x00000004,0x000002ad,0x0007000c,0x0000000f,0x000004ab,
+	0x00000001,0x0000001a,0x000004aa,0x00000067,0x00050083,0x0000000f,0x000004ad,0x000004ab,
+	0x00000671,0x0007000c,0x0000000f,0x000004ae,0x00000001,0x00000028,0x000004ad,0x0000006d,
+	0x0006000c,0x0000000f,0x000004b0,0x00000001,0x00000004,0x000002ad,0x0007000c,0x0000000f,
+	0x000004b1,0x00000001,0x0000001a,0x000004b0,0x00000067,0x0005008e,0x0000000f,0x000004b2,
+	0x000004b1,0x00000071,0x00050083,0x0000000f,0x000004b4,0x00000672,0x000004b2,0x00050088,
+	0x0000000f,0x000004b7,0x000004ae,0x000004b4,0x0006000c,0x0000000f,0x000004b8,0x00000001,
+	0x00000004,0x000004b7,0x0007000c,0x0000000f,0x000004b9,0x00000001,0x0000001a,0x000004b8,
+	0x0000007e,0x0005008e,0x0000000f,0x000004ba,0x000004b9,0x00000078,0x00050041,0x00000086,
+	0x000004bb,0x00000083,0x00000085,0x0004003d,0x00000006,0x000004bc,0x000004bb,0x00060050,
+	0x0000000f,0x000004bd,0x000004bc,0x000004bc,0x000004bc,0x00050088,0x0000000f,0x000004be,
+	0x000004ba,0x000004bd,0x00050051,0x00000006,0x000002b0,0x000004be,0x00000000,0x00060052,
+	0x0000001a,0x00000619,0x000002b0,0x00000682,0x00000000,0x00050051,0x00000006,0x000002b2,
+	0x000004be,0x00000001,0x00060052,0x0000001a,0x0000061b,0x000002b2,0x00000619,0x00000001,
+	0x00050051,0x00000006,0x000002b4,0x000004be,0x00000002,0x00060052,0x0000001a,0x0000061d,
+	0x000002b4,0x0000061b,0x00000002,0x000200f9,0x000002b5,0x000200f8,0x000002b5,0x000700f5,
+	0x0000001a,0x00000687,0x00000682,0x0000034f,0x0000061d,0x000002ab,0x00050041,0x00000086,
+	0x000002b6,0x00000083,0x0000008d,0x0004003d,0x00000006,0x000002b7,0x000002b6,0x000500b7,
+	0x0000003f,0x000002b8,0x000002b7,0x0000006c,0x000300f7,0x000002c3,0x00000000,0x000400fa,
+	0x000002b8,0x000002b9,0x000002c3,0x000200f8,0x000002b9,0x0008004f,0x0000000f,0x000002bb,
+	0x00000687,0x00000687,0x00000000,0x00000001,0x00000002,0x00050041,0x00000086,0x000004c3,
+	0x00000083,0x0000008d,0x0004003d,0x00000006,0x000004c4,0x000004c3,0x000500b4,0x0000003f,
+	0x000004c5,0x000004c4,0x00000090,0x000300f7,0x000004f9,0x00000000,0x000400fa,0x000004c5,
+	0x000004c6,0x000004cb,0x000200f8,0x000004c6,0x00050041,0x00000086,0x000004c7,0x00000083,
+	0x00000094,0x0004003d,0x00000006,0x000004c8,0x000004c7,0x0005008e,0x0000000f,0x000004ca,
+	0x000002bb,0x000004c8,0x000200f9,0x000004f9,0x000200f8,0x000004cb,0x00050041,0x00000086,
+	0x000004cc,0x00000083,0x0000008d,0x0004003d,0x00000006,0x000004cd,0x000004cc,0x000500b4,
+	0x0000003f,0x000004ce,0x000004cd,0x0000009c,0x000300f7,0x000004f8,0x00000000,0x000400fa,
+	0x000004ce,0x000004cf,0x000004f8,0x000200f8,0x000004cf,0x00050041,0x00000086,0x000004d0,
+	0x00000083,0x000000a0,0x0004003d,0x00000006,0x000004d1,0x000004d0,0x000500b4,0x0000003f,
+	0x000004d2,0x000004d1,0x0000009c,0x000300f7,0x000004d6,0x00000000,0x000400fa,0x000004d2,
+	0x000004d3,0x000004d6,0x000200f8,0x000004d3,0x00050090,0x0000000f,0x000004d5,0x000002bb,
+	0x000000b4,0x000200f9,0x000004d6,0x000200f8,0x000004d6,0x000700f5,0x0000000f,0x00000688,
+	0x000002bb,0x000004cf,0x000004d5,0x000004d3,0x00050051,0x00000006,0x000004d8,0x00000688,
+	0x00000000,0x00050051,0x00000006,0x000004da,0x00000688,0x00000001,0x00050051,0x00000006,
+	0x000004dc,0x00000688,0x00000002,0x0007000c,0x00000006,0x000004dd,0x00000001,0x00000028,
+	0x000004da,0x000004dc,0x0007000c,0x00000006,0x000004de,0x00000001,0x00000028,0x000004d8,
+	0x000004dd,0x000500ba,0x0000003f,0x000004e0,0x000004de,0x0000006c,0x000300f7,0x000004f0,
+	0x00000000,0x000400fa,0x000004e0,0x000004e1,0x000004f0,0x000200f8,0x000004e1,0x00050041,
+	0x00000086,0x000004e2,0x00000083,0x00000094,0x0004003d,0x00000006,0x000004e3,0x000004e2,
+	0x0008000c,0x00000006,0x000004e6,0x00000001,0x00000032,0x000004e3,0x000004de,0x00000090,
+	0x00050041,0x00000086,0x000004e7,0x00000083,0x000000cd,0x0004003d,0x00000006,0x000004e8,
+	0x000004e7,0x0008000c,0x00000006,0x000004eb,0x00000001,0x00000032,0x000004e8,0x000004de,
+	0x00000090,0x00050088,0x00000006,0x000004ec,0x000004e6,0x000004eb,0x0005008e,0x0000000f,
+	0x000004ef,0x00000688,0x000004ec,0x000200f9,0x000004f0,0x000200f8,0x000004f0,0x000700f5,
+	0x0000000f,0x00000689,0x00000688,0x000004d6,0x000004ef,0x000004e1,0x00050041,0x00000086,
+	0x000004f1,0x00000083,0x000000a0,0x0004003d,0x00000006,0x000004f2,0x000004f1,0x000500b4,
+	0x0000003f,0x000004f3,0x000004f2,0x0000009c,0x000300f7,0x000004f7,0x00000000,0x000400fa,
+	0x000004f3,0x000004f4,0x000004f7,0x000200f8,0x000004f4,0x00050090,0x0000000f,0x000004f6,
+	0x00000689,0x000000e9,0x000200f9,0x000004f7,0x000200f8,0x000004f7,0x000700f5,0x0000000f,
+	0x0000068c,0x00000689,0x000004f0,0x000004f6,0x000004f4,0x000200f9,0x000004f8,0x000200f8,
+	0x000004f8,0x000700f5,0x0000000f,0x0000068b,0x000002bb,0x000004cb,0x0000068c,0x000004f7,
+	0x000200f9,0x000004f9,0x000200f8,0x000004f9,0x000700f5,0x0000000f,0x0000068a,0x000004ca,
+	0x000004c6,0x0000068b,0x000004f8,0x00050051,0x00000006,0x000002be,0x0000068a,0x00000000,
+	0x00060052,0x0000001a,0x00000622,0x000002be,0x00000687,0x00000000,0x00050051,0x00000006,
+	0x000002c0,0x0000068a,0x00000001,0x00060052,0x0000001a,0x00000624,0x000002c0,0x00000622,
+	0x00000001,0x00050051,0x00000006,0x000002c2,0x0000068a,0x00000002,0x00060052,0x0000001a,
+	0x00000626,0x000002c2,0x00000624,0x00000002,0x000200f9,0x000002c3,0x000200f8,0x000002c3,
+	0x000700f5,0x0000001a,0x00000692,0x00000687,0x000002b5,0x00000626,0x000004f9,0x00050041,
+	0x00000086,0x000002c4,0x00000083,0x000000a0,0x0004003d,0x00000006,0x000002c5,0x000002c4,
+	0x000500b4,0x0000003f,0x000002c6,0x000002c5,0x00000090,0x000300f7,0x00000304,0x00000000,
+	0x000400fa,0x000002c6,0x000002c7,0x000002d4,0x000200f8,0x000002c7,0x0008004f,0x0000000f,
+	0x000002c9,0x00000692,0x00000692,0x00000000,0x00000001,0x00000002,0x00050041,0x00000086,
+	0x00000501,0x00000083,0x000001d4,0x0004003d,0x00000006,0x00000502,0x00000501,0x000500b7,
+	0x0000003f,0x00000503,0x00000502,0x0000006c,0x000300f7,0x00000511,0x00000000,0x000400fa,
+	0x00000503,0x00000504,0x00000511,0x000200f8,0x00000504,0x00050051,0x00000006,0x00000506,
+	0x00000692,0x00000000,0x000500bc,0x0000003f,0x0000051a,0x00000506,0x0000003e,0x000300f7,
+	0x00000524,0x00000000,0x000400fa,0x0000051a,0x0000051b,0x0000051e,0x000200f8,0x0000051b,
+	0x00050085,0x00000006,0x0000051d,0x00000506,0x0000067e,0x000200f9,0x00000524,0x000200f8,
+	0x0000051e,0x00050081,0x00000006,0x00000520,0x00000506,0x00000048,0x0006000c,0x00000006,
+	0x00000521,0x00000001,0x00000004,0x00000520,0x00050085,0x00000006,0x00000522,0x00000521,
+	0x0000067d,0x0007000c,0x00000006,0x00000523,0x00000001,0x0000001a,0x00000522,0x0000004d,
+	0x000200f9,0x00000524,0x000200f8,0x00000524,0x000700f5,0x00000006,0x000006a9,0x0000051d,
+	0x0000051b,0x00000523,0x0000051e,0x00050051,0x00000006,0x0000050a,0x00000692,0x00000001,
+	0x000500bc,0x0000003f,0x00000529,0x0000050a,0x0000003e,0x000300f7,0x00000533,0x00000000,
+	0x000400fa,0x00000529,0x0000052a,0x0000052d,0x000200f8,0x0000052a,0x00050085,0x00000006,
+	0x0000052c,0x0000050a,0x0000067e,0x000200f9,0x00000533,0x000200f8,0x0000052d,0x00050081,
+	0x00000006,0x0000052f,0x0000050a,0x00000048,0x0006000c,0x00000006,0x00000530,0x00000001,
+	0x00000004,0x0000052f,0x00050085,0x00000006,0x00000531,0x00000530,0x0000067d,0x0007000c,
+	0x00000006,0x00000532,0x00000001,0x0000001a,0x00000531,0x0000004d,0x000200f9,0x00000533,
+	0x000200f8,0x00000533,0x000700f5,0x00000006,0x000006ab,0x0000052c,0x0000052a,0x00000532,
+	0x0000052d,0x00050051,0x00000006,0x0000050e,0x00000692,0x00000002,0x000500bc,0x0000003f,
+	0x00000538,0x0000050e,0x0000003e,0x000300f7,0x00000542,0x00000000,0x000400fa,0x00000538,
+	0x00000539,0x0000053c,0x000200f8,0x00000539,0x00050085,0x00000006,0x0000053b,0x0000050e,
+	0x0000067e,0x000200f9,0x00000542,0x000200f8,0x0000053c,0x00050081,0x00000006,0x0000053e,
+	0x0000050e,0x00000048,0x0006000c,0x00000006,0x0000053f,0x00000001,0x00000004,0x0000053e,
+	0x00050085,0x00000006,0x00000540,0x0000053f,0x0000067d,0x0007000c,0x00000006,0x00000541,
+	0x00000001,0x0000001a,0x00000540,0x0000004d,0x000200f9,0x00000542,0x000200f8,0x00000542,
+	0x000700f5,0x00000006,0x000006ad,0x0000053b,0x00000539,0x00000541,0x0000053c,0x00060050,
+	0x0000000f,0x000006b9,0x000006a9,0x000006ab,0x000006ad,0x000200f9,0x00000511,0x000200f8,
+	0x00000511,0x000700f5,0x0000000f,0x000006af,0x000002c9,0x000002c7,0x000006b9,0x00000542,
+	0x00050041,0x00000086,0x00000513,0x00000083,0x000001c4,0x0004003d,0x00000006,0x00000514,
+	0x00000513,0x0005008e,0x0000000f,0x00000515,0x000006af,0x00000514,0x00050051,0x00000006,
+	0x000002cc,0x00000515,0x00000000,0x00050051,0x00000006,0x000002ce,0x00000515,0x00000001,
+	0x00050051,0x00000006,0x000002d0,0x00000515,0x00000002,0x00050051,0x00000006,0x000002d2,
+	0x00000692,0x00000003,0x00070050,0x0000001a,0x0000067f,0x000002cc,0x000002ce,0x000002d0,
+	0x000002d2,0x000200f9,0x00000304,0x000200f8,0x000002d4,0x00050041,0x00000086,0x000002d5,
+	0x00000083,0x000000a0,0x0004003d,0x00000006,0x000002d6,0x000002d5,0x000500b4,0x0000003f,
+	0x000002d7,0x000002d6,0x0000009c,0x000300f7,0x00000303,0x00000000,0x000400fa,0x000002d7,
+	0x000002d8,0x000002e5,0x000200f8,0x000002d8,0x0008004f,0x0000000f,0x000002da,0x00000692,
+	0x00000692,0x00000000,0x00000001,0x00000002,0x00050041,0x00000086,0x0000054b,0x00000083,
+	0x000001c4,0x0004003d,0x00000006,0x0000054c,0x0000054b,0x0005008e,0x0000000f,0x0000054d,
+	0x000002da,0x0000054c,0x00050041,0x00000086,0x0000054e,0x00000083,0x000001d4,0x0004003d,
+	0x00000006,0x0000054f,0x0000054e,0x000500b7,0x0000003f,0x00000550,0x0000054f,0x0000006c,
+	0x000400a8,0x0000003f,0x00000551,0x00000550,0x000300f7,0x00000563,0x00000000,0x000400fa,
+	0x00000551,0x00000552,0x00000563,0x000200f8,0x00000552,0x00050051,0x00000006,0x00000554,
+	0x0000054d,0x00000000,0x000500bc,0x0000003f,0x00000568,0x00000554,0x00000053,0x000300f7,
+	0x00000572,0x00000000,0x000400fa,0x00000568,0x00000569,0x0000056c,0x000200f8,0x00000569,
+	0x00050085,0x00000006,0x0000056b,0x00000554,0x00000044,0x000200f9,0x00000572,0x000200f8,
+	0x0000056c,0x0006000c,0x00000006,0x0000056e,0x00000001,0x00000004,0x00000554,0x0007000c,
+	0x00000006,0x0000056f,0x00000001,0x0000001a,0x0000056e,0x0000005c,0x0008000c,0x00000006,
+	0x00000571,0x00000001,0x00000032,0x0000056f,0x0000004b,0x00000681,0x000200f9,0x00000572,
+	0x000200f8,0x00000572,0x000700f5,0x00000006,0x0000069e,0x0000056b,0x00000569,0x00000571,
+	0x0000056c,0x00050051,0x00000006,0x00000558,0x0000054d,0x00000001,0x000500bc,0x0000003f,
+	0x00000577,0x00000558,0x00000053,0x000300f7,0x00000581,0x00000000,0x000400fa,0x00000577,
+	0x00000578,0x0000057b,0x000200f8,0x00000578,0x00050085,0x00000006,0x0000057a,0x00000558,
+	0x00000044,0x000200f9,0x00000581,0x000200f8,0x0000057b,0x0006000c,0x00000006,0x0000057d,
+	0x00000001,0x00000004,0x00000558,0x0007000c,0x00000006,0x0000057e,0x00000001,0x0000001a,
+	0x0000057d,0x0000005c,0x0008000c,0x00000006,0x00000580,0x00000001,0x00000032,0x0000057e,
+	0x0000004b,0x00000681,0x000200f9,0x00000581,0x000200f8,0x00000581,0x000700f5,0x00000006,
+	0x000006a0,0x0000057a,0x00000578,0x00000580,0x0000057b,0x00050051,0x00000006,0x0000055c,
+	0x0000054d,0x00000002,0x000500bc,0x0000003f,0x00000586,0x0000055c,0x00000053,0x000300f7,
+	0x00000590,0x00000000,0x000400fa,0x00000586,0x00000587,0x0000058a,0x000200f8,0x00000587,
+	0x00050085,0x00000006,0x00000589,0x0000055c,0x00000044,0x000200f9,0x00000590,0x000200f8,
+	0x0000058a,0x0006000c,0x00000006,0x0000058c,0x00000001,0x00000004,0x0000055c,0x0007000c,
+	0x00000006,0x0000058d,0x00000001,0x0000001a,0x0000058c,0x0000005c,0x0008000c,0x00000006,
+	0x0000058f,0x00000001,0x00000032,0x0000058d,0x0000004b,0x00000681,0x000200f9,0x00000590,
+	0x000200f8,0x00000590,0x000700f5,0x00000006,0x000006a2,0x00000589,0x00000587,0x0000058f,
+	0x0000058a,0x00060050,0x0000000f,0x000006b8,0x0000069e,0x000006a0,0x000006a2,0x0008000c,
+	0x0000000f,0x00000562,0x00000001,0x0000002b,0x000006b8,0x0000006d,0x00000677,0x000200f9,
+	0x00000563,0x000200f8,0x00000563,0x000700f5,0x0000000f,0x000006a4,0x0000054d,0x000002d8,
+	0x00000562,0x00000590,0x00050051,0x00000006,0x000002dd,0x000006a4,0x00000000,0x00050051,
+	0x00000006,0x000002df,0x000006a4,0x00000001,0x00050051,0x00000006,0x000002e1,0x000006a4,
+	0x00000002,0x00050051,0x00000006,0x000002e3,0x00000692,0x00000003,0x00070050,0x0000001a,
+	0x0000067c,0x000002dd,0x000002df,0x000002e1,0x000002e3,0x000200f9,0x00000303,0x000200f8,
+	0x000002e5,0x00050041,0x00000086,0x000002e6,0x00000083,0x000000a0,0x0004003d,0x00000006,
+	0x000002e7,0x000002e6,0x000500b4,0x0000003f,0x000002e8,0x000002e7,0x00000196,0x000300f7,
+	0x00000302,0x00000000,0x000400fa,0x000002e8,0x000002e9,0x000002ff,0x000200f8,0x000002e9,
+	0x0008004f,0x0000000f,0x000002eb,0x00000692,0x00000692,0x00000000,0x00000001,0x00000002,
+	0x00050090,0x0000000f,0x000002ec,0x000002eb,0x000000e9,0x00050051,0x00000006,0x000002ee,
+	0x000002ec,0x00000000,0x00060052,0x0000001a,0x0000064c,0x000002ee,0x000006ba,0x00000000,
+	0x00050051,0x00000006,0x000002f0,0x000002ec,0x00000001,0x00060052,0x0000001a,0x0000064e,
+	0x000002f0,0x0000064c,0x00000001,0x00050051,0x00000006,0x000002f2,0x000002ec,0x00000002,
+	0x00060052,0x0000001a,0x00000650,0x000002f2,0x0000064e,0x00000002,0x0008004f,0x0000000f,
+	0x000002f4,0x00000650,0x00000650,0x00000000,0x00000001,0x00000002,0x00050041,0x00000086,
+	0x00000599,0x00000083,0x000001c4,0x0004003d,0x00000006,0x0000059a,0x00000599,0x0005008e,
+	0x0000000f,0x0000059b,0x000002f4,0x0000059a,0x00050041,0x00000086,0x0000059c,0x00000083,
+	0x000001d4,0x0004003d,0x00000006,0x0000059d,0x0000059c,0x000500b7,0x0000003f,0x0000059e,
+	0x0000059d,0x0000006c,0x000400a8,0x0000003f,0x0000059f,0x0000059e,0x000300f7,0x000005b1,
+	0x00000000,0x000400fa,0x0000059f,0x000005a0,0x000005b1,0x000200f8,0x000005a0,0x00050051,
+	0x00000006,0x000005a2,0x0000059b,0x00000000,0x000500bc,0x0000003f,0x000005b6,0x000005a2,
+	0x00000053,0x000300f7,0x000005c0,0x00000000,0x000400fa,0x000005b6,0x000005b7,0x000005ba,
+	0x000200f8,0x000005b7,0x00050085,0x00000006,0x000005b9,0x000005a2,0x00000044,0x000200f9,
+	0x000005c0,0x000200f8,0x000005ba,0x0006000c,0x00000006,0x000005bc,0x00000001,0x00000004,
+	0x000005a2,0x0007000c,0x00000006,0x000005bd,0x00000001,0x0000001a,0x000005bc,0x0000005c,
+	0x0008000c,0x00000006,0x000005bf,0x00000001,0x00000032,0x000005bd,0x0000004b,0x00000681,
+	0x000200f9,0x000005c0,0x000200f8,0x000005c0,0x000700f5,0x00000006,0x00000693,0x000005b9,
+	0x000005b7,0x000005bf,0x000005ba,0x00050051,0x00000006,0x000005a6,0x0000059b,0x00000001,
+	0x000500bc,0x0000003f,0x000005c5,0x000005a6,0x00000053,0x000300f7,0x000005cf,0x00000000,
+	0x000400fa,0x000005c5,0x000005c6,0x000005c9,0x000200f8,0x000005c6,0x00050085,0x00000006,
+	0x000005c8,0x000005a6,0x00000044,0x000200f9,0x000005cf,0x000200f8,0x000005c9,0x0006000c,
+	0x00000006,0x000005cb,0x00000001,0x00000004,0x000005a6,0x0007000c,0x00000006,0x000005cc,
+	0x00000001,0x0000001a,0x000005cb,0x0000005c,0x0008000c,0x00000006,0x000005ce,0x00000001,
+	0x00000032,0x000005cc,0x0000004b,0x00000681,0x000200f9,0x000005cf,0x000200f8,0x000005cf,
+	0x000700f5,0x00000006,0x00000695,0x000005c8,0x000005c6,0x000005ce,0x000005c9,0x00050051,
+	0x00000006,0x000005aa,0x0000059b,0x00000002,0x000500bc,0x0000003f,0x000005d4,0x000005aa,
+	0x00000053,0x000300f7,0x000005de,0x00000000,0x000400fa,0x000005d4,0x000005d5,0x000005d8,
+	0x000200f8,0x000005d5,0x00050085,0x00000006,0x000005d7,0x000005aa,0x00000044,0x000200f9,
+	0x000005de,0x000200f8,0x000005d8,0x0006000c,0x00000006,0x000005da,0x00000001,0x00000004,
+	0x000005aa,0x0007000c,0x00000006,0x000005db,0x00000001,0x0000001a,0x000005da,0x0000005c,
+	0x0008000c,0x00000006,0x000005dd,0x00000001,0x00000032,0x000005db,0x0000004b,0x00000681,
+	0x000200f9,0x000005de,0x000200f8,0x000005de,0x000700f5,0x00000006,0x00000697,0x000005d7,
+	0x000005d5,0x000005dd,0x000005d8,0x00060050,0x0000000f,0x000006b7,0x00000693,0x00000695,
+	0x00000697,0x0008000c,0x0000000f,0x000005b0,0x00000001,0x0000002b,0x000006b7,0x0000006d,
+	0x00000677,0x000200f9,0x000005b1,0x000200f8,0x000005b1,0x000700f5,0x0000000f,0x00000699,
+	0x0000059b,0x000002e9,0x000005b0,0x000005de,0x00050051,0x00000006,0x000002f7,0x00000699,
+	0x00000000,0x00050051,0x00000006,0x000002f9,0x00000699,0x00000001,0x00050051,0x00000006,
+	0x000002fb,0x00000699,0x00000002,0x00050051,0x00000006,0x000002fd,0x00000692,0x00000003,
+	0x00070050,0x0000001a,0x00000678,0x000002f7,0x000002f9,0x000002fb,0x000002fd,0x000200f9,
+	0x00000302,0x000200f8,0x000002ff,0x0008004f,0x0000000f,0x000005e4,0x00000692,0x00000692,
+	0x00000000,0x00000001,0x00000002,0x00050041,0x00000086,0x000005e5,0x00000083,0x000001c4,
+	0x0004003d,0x00000006,0x000005e6,0x000005e5,0x0005008e,0x0000000f,0x000005e7,0x000005e4,
+	0x000005e6,0x00050051,0x00000006,0x000005e9,0x000005e7,0x00000000,0x00050051,0x00000006,
+	0x000005eb,0x000005e7,0x00000001,0x00050051,0x00000006,0x000005ed,0x000005e7,0x00000002,
+	0x00050051,0x00000006,0x000005ef,0x00000692,0x00000003,0x00070050,0x0000001a,0x00000673,
+	0x000005e9,0x000005eb,0x000005ed,0x000005ef,0x000200f9,0x00000302,0x000200f8,0x00000302,
+	0x000700f5,0x0000001a,0x000006b6,0x00000678,0x000005b1,0x00000673,0x000002ff,0x000200f9,
+	0x00000303,0x000200f8,0x00000303,0x000700f5,0x0000001a,0x000006b5,0x0000067c,0x00000563,
+	0x000006b6,0x00000302,0x000200f9,0x00000304,0x000200f8,0x00000304,0x000700f5,0x0000001a,
+	0x000006b4,0x0000067f,0x00000511,0x000006b5,0x00000303,0x00050085,0x0000001a,0x00000308,
+	0x000006b4,0x0000028f,0x0003003e,0x00000292,0x00000308,0x000100fd,0x00010038
 };
 };

+ 9 - 9
src/render/vulkan/VULKAN_PixelShader_Colors.h

@@ -1,7 +1,7 @@
 	// 1113.1.1
 	// 1113.1.1
 	 #pragma once
 	 #pragma once
 const uint32_t VULKAN_PixelShader_Colors[] = {
 const uint32_t VULKAN_PixelShader_Colors[] = {
-	0x07230203,0x00010000,0x0008000b,0x000000a3,0x00000000,0x00020011,0x00000001,0x0006000b,
+	0x07230203,0x00010000,0x0008000b,0x000000a5,0x00000000,0x00020011,0x00000001,0x0006000b,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
 	0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000049,0x0000004d,0x00030010,
 	0x0007000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000049,0x0000004d,0x00030010,
 	0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,0x6e69616d,
 	0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,0x6e69616d,
@@ -31,13 +31,13 @@ const uint32_t VULKAN_PixelShader_Colors[] = {
 	0x0004002b,0x0000001b,0x0000001c,0x00000003,0x00040020,0x0000001d,0x00000002,0x00000006,
 	0x0004002b,0x0000001b,0x0000001c,0x00000003,0x00040020,0x0000001d,0x00000002,0x00000006,
 	0x0004002b,0x00000006,0x00000033,0x3f800000,0x00040020,0x0000003f,0x00000001,0x00000007,
 	0x0004002b,0x00000006,0x00000033,0x3f800000,0x00040020,0x0000003f,0x00000001,0x00000007,
 	0x0004003b,0x0000003f,0x00000049,0x00000001,0x00040020,0x0000004c,0x00000003,0x00000007,
 	0x0004003b,0x0000003f,0x00000049,0x00000001,0x00040020,0x0000004c,0x00000003,0x00000007,
-	0x0004003b,0x0000004c,0x0000004d,0x00000003,0x0006002c,0x00000015,0x000000a1,0x00000033,
+	0x0004003b,0x0000004c,0x0000004d,0x00000003,0x0006002c,0x00000015,0x000000a3,0x00000033,
 	0x00000033,0x00000033,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
 	0x00000033,0x00000033,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
-	0x00000005,0x0004003d,0x00000007,0x0000004a,0x00000049,0x00050041,0x0000001d,0x00000080,
-	0x0000001a,0x0000001c,0x0004003d,0x00000006,0x00000081,0x00000080,0x0005008e,0x00000015,
-	0x00000082,0x000000a1,0x00000081,0x00050051,0x00000006,0x00000084,0x00000082,0x00000000,
-	0x00050051,0x00000006,0x00000086,0x00000082,0x00000001,0x00050051,0x00000006,0x00000088,
-	0x00000082,0x00000002,0x00070050,0x00000007,0x000000a2,0x00000084,0x00000086,0x00000088,
-	0x00000033,0x00050085,0x00000007,0x0000007a,0x000000a2,0x0000004a,0x0003003e,0x0000004d,
-	0x0000007a,0x000100fd,0x00010038
+	0x00000005,0x0004003d,0x00000007,0x0000004a,0x00000049,0x00050041,0x0000001d,0x00000082,
+	0x0000001a,0x0000001c,0x0004003d,0x00000006,0x00000083,0x00000082,0x0005008e,0x00000015,
+	0x00000084,0x000000a3,0x00000083,0x00050051,0x00000006,0x00000086,0x00000084,0x00000000,
+	0x00050051,0x00000006,0x00000088,0x00000084,0x00000001,0x00050051,0x00000006,0x0000008a,
+	0x00000084,0x00000002,0x00070050,0x00000007,0x000000a4,0x00000086,0x00000088,0x0000008a,
+	0x00000033,0x00050085,0x00000007,0x0000007c,0x000000a4,0x0000004a,0x0003003e,0x0000004d,
+	0x0000007c,0x000100fd,0x00010038
 };
 };

+ 45 - 12
src/render/vulkan/VULKAN_PixelShader_Common.hlsli

@@ -19,7 +19,9 @@ static const float TONEMAP_CHROME = 2;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_NONE = 0;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB = 1;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
 static const float TEXTURETYPE_RGB_PIXELART = 2;
-static const float TEXTURETYPE_PALETTE = 3;
+static const float TEXTURETYPE_PALETTE_NEAREST = 3;
+static const float TEXTURETYPE_PALETTE_LINEAR = 4;
+static const float TEXTURETYPE_PALETTE_PIXELART = 5;
 
 
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_UNSPECIFIED = 0;
 static const float INPUTTYPE_SRGB = 1;
 static const float INPUTTYPE_SRGB = 1;
@@ -109,21 +111,48 @@ float3 ApplyTonemap(float3 v)
     return v;
     return v;
 }
 }
 
 
-float2 GetPixelArtUV(PixelShaderInput input)
+float4 SamplePaletteNearest(float2 uv)
+{
+    float index = texture0.Sample(sampler0, uv).r * 255;
+    return texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+}
+
+// Implementation with thanks from bgolus:
+// https://discussions.unity.com/t/how-to-make-data-shader-support-bilinear-trilinear/598639/8
+float4 SamplePaletteLinear(float2 uv)
+{
+    // scale & offset uvs to integer values at texel centers
+    float2 uv_texels = uv * texel_size.zw + 0.5;
+
+    // get uvs for the center of the 4 surrounding texels by flooring
+    float4 uv_min_max = float4((floor(uv_texels) - 0.5) * texel_size.xy, (floor(uv_texels) + 0.5) * texel_size.xy);
+
+    // blend factor
+    float2 uv_frac = frac(uv_texels);
+
+    // sample all 4 texels
+    float4 texelA = SamplePaletteNearest(uv_min_max.xy);
+    float4 texelB = SamplePaletteNearest(uv_min_max.xw);
+    float4 texelC = SamplePaletteNearest(uv_min_max.zy);
+    float4 texelD = SamplePaletteNearest(uv_min_max.zw);
+
+    // bilinear interpolation
+    return lerp(lerp(texelA, texelB, uv_frac.y), lerp(texelC, texelD, uv_frac.y), uv_frac.x);
+}
+
+float2 GetPixelArtUV(float2 uv)
 {
 {
     // box filter size in texel units
     // box filter size in texel units
-    float2 boxSize = clamp(fwidth(input.tex) * texel_size.zw, 1e-5, 1);
+    float2 boxSize = clamp(fwidth(uv) * texel_size.zw, 1e-5, 1);
 
 
     // scale uv by texture size to get texel coordinate
     // scale uv by texture size to get texel coordinate
-    float2 tx = input.tex * texel_size.zw - 0.5 * boxSize;
+    float2 tx = uv * texel_size.zw - 0.5 * boxSize;
 
 
     // compute offset for pixel-sized box filter
     // compute offset for pixel-sized box filter
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
     float2 txOffset = smoothstep(1 - boxSize, 1, frac(tx));
 
 
     // compute bilinear sample uv coordinates
     // compute bilinear sample uv coordinates
-    float2 uv = (floor(tx) + 0.5 + txOffset) * texel_size.xy;
-
-    return uv;
+    return (floor(tx) + 0.5 + txOffset) * texel_size.xy;
 }
 }
 
 
 float4 GetInputColor(PixelShaderInput input)
 float4 GetInputColor(PixelShaderInput input)
@@ -133,16 +162,20 @@ float4 GetInputColor(PixelShaderInput input)
     if (texture_type == TEXTURETYPE_RGB) {
     if (texture_type == TEXTURETYPE_RGB) {
         rgba = texture0.Sample(sampler0, input.tex);
         rgba = texture0.Sample(sampler0, input.tex);
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
     } else if (texture_type == TEXTURETYPE_RGB_PIXELART) {
-        float2 uv = GetPixelArtUV(input);
+        float2 uv = GetPixelArtUV(input.tex);
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
         rgba = texture0.SampleGrad(sampler0, uv, ddx(input.tex), ddy(input.tex));
-    } else if (texture_type == TEXTURETYPE_PALETTE) {
-        float index = texture0.Sample(sampler0, input.tex).r * 255;
-        rgba = texture1.Sample(sampler1, float2((index + 0.5) / 256, 0.5));
+    } else if (texture_type == TEXTURETYPE_PALETTE_NEAREST) {
+        rgba = SamplePaletteNearest(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_LINEAR) {
+        rgba = SamplePaletteLinear(input.tex);
+    } else if (texture_type == TEXTURETYPE_PALETTE_PIXELART) {
+        float2 uv = GetPixelArtUV(input.tex);
+        rgba = SamplePaletteLinear(uv);
     } else {
     } else {
         // Error!
         // Error!
         rgba.r = 1.0;
         rgba.r = 1.0;
         rgba.g = 0.0;
         rgba.g = 0.0;
-        rgba.b = 0.0;
+        rgba.b = 1.0;
         rgba.a = 1.0;
         rgba.a = 1.0;
     }
     }
     return rgba;
     return rgba;

+ 9 - 9
src/render/vulkan/VULKAN_PixelShader_Textures.h

@@ -1,7 +1,7 @@
 	// 1113.1.1
 	// 1113.1.1
 	 #pragma once
 	 #pragma once
 const uint32_t VULKAN_PixelShader_Textures[] = {
 const uint32_t VULKAN_PixelShader_Textures[] = {
-	0x07230203,0x00010000,0x0008000b,0x000000aa,0x00000000,0x00020011,0x00000001,0x0006000b,
+	0x07230203,0x00010000,0x0008000b,0x000000ac,0x00000000,0x00020011,0x00000001,0x0006000b,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
 	0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
 	0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000004c,0x0000004f,0x00000053,
 	0x0008000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000004c,0x0000004f,0x00000053,
 	0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,
 	0x00030010,0x00000004,0x00000007,0x00030003,0x00000005,0x000001f4,0x00040005,0x00000004,
@@ -40,13 +40,13 @@ const uint32_t VULKAN_PixelShader_Textures[] = {
 	0x00000052,0x00000003,0x00000007,0x0004003b,0x00000052,0x00000053,0x00000003,0x00050036,
 	0x00000052,0x00000003,0x00000007,0x0004003b,0x00000052,0x00000053,0x00000003,0x00050036,
 	0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x0000000d,
 	0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003d,0x0000000d,
 	0x0000004d,0x0000004c,0x0004003d,0x00000007,0x00000050,0x0000004f,0x0004003d,0x00000034,
 	0x0000004d,0x0000004c,0x0004003d,0x00000007,0x00000050,0x0000004f,0x0004003d,0x00000034,
-	0x0000007a,0x00000036,0x00050057,0x00000007,0x0000007d,0x0000007a,0x0000004d,0x0008004f,
-	0x00000015,0x00000086,0x0000007d,0x0000007d,0x00000000,0x00000001,0x00000002,0x00050041,
-	0x0000001d,0x00000087,0x0000001a,0x0000001c,0x0004003d,0x00000006,0x00000088,0x00000087,
-	0x0005008e,0x00000015,0x00000089,0x00000086,0x00000088,0x00050051,0x00000006,0x0000008b,
-	0x00000089,0x00000000,0x00050051,0x00000006,0x0000008d,0x00000089,0x00000001,0x00050051,
-	0x00000006,0x0000008f,0x00000089,0x00000002,0x00050051,0x00000006,0x00000091,0x0000007d,
-	0x00000003,0x00070050,0x00000007,0x000000a9,0x0000008b,0x0000008d,0x0000008f,0x00000091,
-	0x00050085,0x00000007,0x00000081,0x000000a9,0x00000050,0x0003003e,0x00000053,0x00000081,
+	0x0000007c,0x00000036,0x00050057,0x00000007,0x0000007f,0x0000007c,0x0000004d,0x0008004f,
+	0x00000015,0x00000088,0x0000007f,0x0000007f,0x00000000,0x00000001,0x00000002,0x00050041,
+	0x0000001d,0x00000089,0x0000001a,0x0000001c,0x0004003d,0x00000006,0x0000008a,0x00000089,
+	0x0005008e,0x00000015,0x0000008b,0x00000088,0x0000008a,0x00050051,0x00000006,0x0000008d,
+	0x0000008b,0x00000000,0x00050051,0x00000006,0x0000008f,0x0000008b,0x00000001,0x00050051,
+	0x00000006,0x00000091,0x0000008b,0x00000002,0x00050051,0x00000006,0x00000093,0x0000007f,
+	0x00000003,0x00070050,0x00000007,0x000000ab,0x0000008d,0x0000008f,0x00000091,0x00000093,
+	0x00050085,0x00000007,0x00000083,0x000000ab,0x00000050,0x0003003e,0x00000053,0x00000083,
 	0x000100fd,0x00010038
 	0x000100fd,0x00010038
 };
 };

+ 31 - 3
test/testscale.c

@@ -104,6 +104,7 @@ int main(int argc, char *argv[])
     int i;
     int i;
     int frames;
     int frames;
     Uint64 then, now;
     Uint64 then, now;
+    SDL_ScaleMode scale_mode = SDL_SCALEMODE_PIXELART;
 
 
     /* Initialize test framework */
     /* Initialize test framework */
     state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
     state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
@@ -112,8 +113,34 @@ int main(int argc, char *argv[])
     }
     }
 
 
     /* Parse commandline */
     /* Parse commandline */
-    if (!SDLTest_CommonDefaultArgs(state, argc, argv)) {
-        return 1;
+    for (i = 1; i < argc;) {
+        int consumed;
+
+        consumed = SDLTest_CommonArg(state, i);
+        if (consumed == 0) {
+            consumed = -1;
+            if (SDL_strcasecmp(argv[i], "--nearest") == 0) {
+                scale_mode = SDL_SCALEMODE_NEAREST;
+                consumed = 1;
+            } else if (SDL_strcasecmp(argv[i], "--linear") == 0) {
+                scale_mode = SDL_SCALEMODE_LINEAR;
+                consumed = 1;
+            } else if (SDL_strcasecmp(argv[i], "--pixelart") == 0) {
+                scale_mode = SDL_SCALEMODE_PIXELART;
+                consumed = 1;
+            }
+        }
+        if (consumed < 0) {
+            static const char *options[] = {
+                "[--nearest]",
+                "[--linear]",
+                "[--pixelart]",
+                NULL
+            };
+            SDLTest_CommonLogUsage(state, argv[0], options);
+            return 1;
+        }
+        i += consumed;
     }
     }
 
 
     if (!SDLTest_CommonInit(state)) {
     if (!SDLTest_CommonInit(state)) {
@@ -132,7 +159,8 @@ int main(int argc, char *argv[])
             quit(2);
             quit(2);
         }
         }
         SDL_GetTextureSize(drawstate->sprite, &drawstate->sprite_rect.w, &drawstate->sprite_rect.h);
         SDL_GetTextureSize(drawstate->sprite, &drawstate->sprite_rect.w, &drawstate->sprite_rect.h);
-        SDL_SetTextureScaleMode(drawstate->sprite, SDL_SCALEMODE_PIXELART);
+        SDL_SetTextureScaleMode(drawstate->background, scale_mode);
+        SDL_SetTextureScaleMode(drawstate->sprite, scale_mode);
         drawstate->scale_direction = 1;
         drawstate->scale_direction = 1;
     }
     }
 
 

Some files were not shown because too many files changed in this diff