summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-mochitest
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-mochitest')
-rw-r--r--dom/canvas/test/webgl-mochitest/driver-info.js169
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/ensure-ext.js44
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_ANGLE_instanced_arrays.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_blend_minmax.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_color_buffer_half_float.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_disjoint_timer_query.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_frag_depth.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_sRGB.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_shader_texture_lod.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_texture_filter_anisotropic.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_OES_standard_derivatives.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_color_buffer_float.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_atc.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_es3.html19
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_etc1.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_pvrtc.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_s3tc.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_depth_texture.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_draw_buffers.html17
-rw-r--r--dom/canvas/test/webgl-mochitest/ensure-exts/test_common.html110
-rw-r--r--dom/canvas/test/webgl-mochitest/es3-data.js4719
-rw-r--r--dom/canvas/test/webgl-mochitest/mochi-to-testcase.py101
-rw-r--r--dom/canvas/test/webgl-mochitest/mochitest.ini96
-rw-r--r--dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html140
-rw-r--r--dom/canvas/test/webgl-mochitest/test_backbuffer_channels.html111
-rw-r--r--dom/canvas/test/webgl-mochitest/test_backends.html169
-rw-r--r--dom/canvas/test/webgl-mochitest/test_canvas_size.html54
-rw-r--r--dom/canvas/test/webgl-mochitest/test_capture.html207
-rw-r--r--dom/canvas/test/webgl-mochitest/test_cubemap_must_be_square.html35
-rw-r--r--dom/canvas/test/webgl-mochitest/test_depth_readpixels.html60
-rw-r--r--dom/canvas/test/webgl-mochitest/test_depth_tex_lazy_clear.html73
-rw-r--r--dom/canvas/test/webgl-mochitest/test_draw.html131
-rw-r--r--dom/canvas/test/webgl-mochitest/test_fb_param.html54
-rw-r--r--dom/canvas/test/webgl-mochitest/test_fb_param_crash.html48
-rw-r--r--dom/canvas/test/webgl-mochitest/test_fuzzing_bugs.html159
-rw-r--r--dom/canvas/test/webgl-mochitest/test_hidden_alpha.html156
-rw-r--r--dom/canvas/test/webgl-mochitest/test_hidden_depth_stencil.html159
-rw-r--r--dom/canvas/test/webgl-mochitest/test_highp_fs.html61
-rw-r--r--dom/canvas/test/webgl-mochitest/test_implicit_color_buffer_float.html199
-rw-r--r--dom/canvas/test/webgl-mochitest/test_no_arr_points.html169
-rw-r--r--dom/canvas/test/webgl-mochitest/test_noprog_draw.html80
-rw-r--r--dom/canvas/test/webgl-mochitest/test_pixel_pack_buffer.html288
-rw-r--r--dom/canvas/test/webgl-mochitest/test_privileged_exts.html32
-rw-r--r--dom/canvas/test/webgl-mochitest/test_renderer_strings.html102
-rw-r--r--dom/canvas/test/webgl-mochitest/test_sab_with_webgl.html192
-rw-r--r--dom/canvas/test/webgl-mochitest/test_texsubimage_float.html62
-rw-r--r--dom/canvas/test/webgl-mochitest/test_uninit_data.html84
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl2_alpha_luminance.html114
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl2_invalidate_framebuffer.html27
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html37
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_available.html19
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_color_buffer_float.html486
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_compressed_texture_es3.html753
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_conformance.html29
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_force_enable.html50
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_request_context.html36
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html90
-rw-r--r--dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html66
-rw-r--r--dom/canvas/test/webgl-mochitest/webgl-util.js170
59 files changed, 10232 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-mochitest/driver-info.js b/dom/canvas/test/webgl-mochitest/driver-info.js
new file mode 100644
index 000000000..e2f6e003a
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/driver-info.js
@@ -0,0 +1,169 @@
+DriverInfo = (function() {
+ // ---------------------------------------------------------------------------
+ // Debug info handling
+
+ function defaultInfoFunc(str) {
+ console.log('Info: ' + str);
+ }
+
+ var gInfoFunc = defaultInfoFunc;
+ function setInfoFunc(func) {
+ gInfoFunc = func;
+ }
+
+ function info(str) {
+ gInfoFunc(str);
+ }
+
+ // ---------------------------------------------------------------------------
+ // OS and driver identification
+ // Stolen from dom/canvas/test/webgl/test_webgl_conformance_test_suite.html
+ function detectDriverInfo() {
+ try {
+ var cc = SpecialPowers.Cc;
+ } catch (e) {
+ throw 'No SpecialPowers!';
+ }
+
+ const Cc = SpecialPowers.Cc;
+ const Ci = SpecialPowers.Ci;
+ var doc = Cc["@mozilla.org/xmlextras/domparser;1"].createInstance(Ci.nsIDOMParser).parseFromString("<html/>", "text/html");
+
+ var canvas = doc.createElement("canvas");
+ canvas.width = 1;
+ canvas.height = 1;
+
+ var type = "";
+ var gl = null;
+ try {
+ gl = canvas.getContext("experimental-webgl");
+ } catch(e) {}
+
+ if (!gl) {
+ info('Failed to create WebGL context for querying driver info.');
+ throw 'WebGL failed';
+ }
+
+ var ext = gl.getExtension("WEBGL_debug_renderer_info");
+ // this extension is unconditionally available to chrome. No need to check.
+
+ var webglRenderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+ var webglVendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
+ return [webglVendor, webglRenderer];
+ }
+
+ function detectOSInfo() {
+ try {
+ var cc = SpecialPowers.Cc;
+ } catch (e) {
+ throw 'No SpecialPowers!';
+ }
+
+ const Cc = SpecialPowers.Cc;
+ const Ci = SpecialPowers.Ci;
+
+ // From reftest.js:
+ var runtime = Cc['@mozilla.org/xre/app-info;1'].getService(Ci.nsIXULRuntime);
+
+ var os = null;
+ var version = null;
+ if (navigator.platform.indexOf('Win') == 0) {
+ os = OS.WINDOWS;
+
+ // code borrowed from browser/modules/test/browser_taskbar_preview.js
+ version = SpecialPowers.Services.sysinfo.getProperty('version');
+ version = parseFloat(version);
+ // Version 6.0 is Vista, 6.1 is 7.
+
+ } else if (navigator.platform.indexOf('Mac') == 0) {
+ os = OS.MAC;
+
+ var versionMatch = /Mac OS X (\d+.\d+)/.exec(navigator.userAgent);
+ version = versionMatch ? parseFloat(versionMatch[1]) : null;
+
+ } else if (runtime.widgetToolkit == 'gonk') {
+ os = OS.B2G;
+
+ } else if (navigator.appVersion.indexOf('Android') != -1) {
+ os = OS.ANDROID;
+ // From layout/tools/reftest/reftest.js:
+ version = SpecialPowers.Services.sysinfo.getProperty('version');
+
+ } else if (navigator.platform.indexOf('Linux') == 0) {
+ // Must be checked after android, as android also has a 'Linux' platform string.
+ os = OS.LINUX;
+ }
+
+ return [os, version];
+ }
+
+ var OS = {
+ WINDOWS: 'windows',
+ MAC: 'mac',
+ LINUX: 'linux',
+ ANDROID: 'android',
+ B2G: 'b2g',
+ };
+
+ var DRIVER = {
+ MESA: 'mesa',
+ NVIDIA: 'nvidia',
+ ANDROID_X86_EMULATOR: 'android x86 emulator',
+ ANGLE: 'angle',
+ };
+
+ var kOS = null;
+ var kOSVersion = null;
+ var kDriver = null;
+
+ try {
+ [kOS, kOSVersion] = detectOSInfo();
+ } catch (e) {
+ // Generally just fails when we don't have SpecialPowers.
+ }
+
+ try {
+ var glVendor, glRenderer;
+ [glVendor, glRenderer] = detectDriverInfo();
+ info('GL vendor: ' + glVendor);
+ info('GL renderer: ' + glRenderer);
+
+ if (glRenderer.includes('llvmpipe')) {
+ kDriver = DRIVER.MESA;
+ } else if (glRenderer.includes('Android Emulator')) {
+ kDriver = DRIVER.ANDROID_X86_EMULATOR;
+ } else if (glRenderer.includes('ANGLE')) {
+ kDriver = DRIVER.ANGLE;
+ } else if (glVendor.includes('NVIDIA')) {
+ kDriver = DRIVER.NVIDIA;
+ }
+ } catch (e) {
+ // detectDriverInfo is fallible where WebGL fails.
+ }
+
+ if (kOS) {
+ info('OS detected as: ' + kOS);
+ info(' Version: ' + kOSVersion);
+ } else {
+ info('OS not detected.');
+ info(' `platform`: ' + navigator.platform);
+ info(' `appVersion`: ' + navigator.appVersion);
+ info(' `userAgent`: ' + navigator.userAgent);
+ }
+ if (kDriver) {
+ info('GL driver detected as: ' + kDriver);
+ } else {
+ info('GL driver not detected.');
+ }
+
+ return {
+ setInfoFunc: setInfoFunc,
+
+ OS: OS,
+ DRIVER: DRIVER,
+ getOS: function() { return kOS; },
+ getDriver: function() { return kDriver; },
+ getOSVersion: function() { return kOSVersion; },
+ };
+})();
+
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/ensure-ext.js b/dom/canvas/test/webgl-mochitest/ensure-exts/ensure-ext.js
new file mode 100644
index 000000000..8d710139f
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/ensure-ext.js
@@ -0,0 +1,44 @@
+'use strict';
+
+function EnsureExt(extName, shouldHave=true) {
+ EnsureExtFor('webgl', extName, shouldHave);
+ EnsureExtFor('webgl2', extName, shouldHave);
+}
+
+function EnsureExtFor(contextType, extName, shouldHave=true) {
+ var c = document.createElement('canvas');
+ var gl = c.getContext(contextType);
+
+ if (!gl) {
+ todo(false, 'Failed to create context: ' + contextType);
+ return;
+ }
+
+ var ext = gl.getExtension(extName);
+ var haveText = ' have ' + contextType + ' extension ' + extName + '.';
+ if (shouldHave) {
+ ok(ext, 'Should' + haveText);
+ } else {
+ ok(!ext, 'Should not' + haveText);
+ }
+}
+
+function Lastly_WithDraftExtsEnabled(func) {
+ SimpleTest.waitForExplicitFinish();
+
+ var fnEnsure = function() {
+ func();
+ SimpleTest.finish();
+ };
+
+ if ('SpecialPowers' in window) {
+ var prefStateList = [
+ ['webgl.enable-draft-extensions', true],
+ ];
+ var prefEnv = {'set': prefStateList};
+ SpecialPowers.pushPrefEnv(prefEnv, fnEnsure);
+ } else {
+ console.log('Couldn\'t use SpecialPowers to enable draft extensions.');
+ fnEnsure();
+ }
+}
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_ANGLE_instanced_arrays.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_ANGLE_instanced_arrays.html
new file mode 100644
index 000000000..5905539a4
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_ANGLE_instanced_arrays.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'ANGLE_instanced_arrays');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_blend_minmax.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_blend_minmax.html
new file mode 100644
index 000000000..46b135b79
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_blend_minmax.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'EXT_blend_minmax');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_color_buffer_half_float.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_color_buffer_half_float.html
new file mode 100644
index 000000000..443c7ab70
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_color_buffer_half_float.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'EXT_color_buffer_half_float');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_disjoint_timer_query.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_disjoint_timer_query.html
new file mode 100644
index 000000000..af94cbc65
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_disjoint_timer_query.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('EXT_disjoint_timer_query');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_frag_depth.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_frag_depth.html
new file mode 100644
index 000000000..9dbac9881
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_frag_depth.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'EXT_frag_depth');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_sRGB.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_sRGB.html
new file mode 100644
index 000000000..cbdde000a
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_sRGB.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'EXT_sRGB');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_shader_texture_lod.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_shader_texture_lod.html
new file mode 100644
index 000000000..c3a51c0c9
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_shader_texture_lod.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'EXT_shader_texture_lod');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_texture_filter_anisotropic.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_texture_filter_anisotropic.html
new file mode 100644
index 000000000..877c4440b
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_EXT_texture_filter_anisotropic.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('EXT_texture_filter_anisotropic');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_OES_standard_derivatives.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_OES_standard_derivatives.html
new file mode 100644
index 000000000..359726256
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_OES_standard_derivatives.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'OES_standard_derivatives');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_color_buffer_float.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_color_buffer_float.html
new file mode 100644
index 000000000..9a88b2771
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_color_buffer_float.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'WEBGL_color_buffer_float');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_atc.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_atc.html
new file mode 100644
index 000000000..6d68f0b4e
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_atc.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('WEBGL_compressed_texture_atc');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_es3.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_es3.html
new file mode 100644
index 000000000..9e6ade9f4
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_es3.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+Lastly_WithDraftExtsEnabled(function() {
+ EnsureExt('WEBGL_compressed_texture_es3');
+});
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_etc1.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_etc1.html
new file mode 100644
index 000000000..327625c01
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_etc1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('WEBGL_compressed_texture_etc1');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_pvrtc.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_pvrtc.html
new file mode 100644
index 000000000..c95481398
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_pvrtc.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('WEBGL_compressed_texture_pvrtc');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_s3tc.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_s3tc.html
new file mode 100644
index 000000000..6ad800110
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_compressed_texture_s3tc.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExt('WEBGL_compressed_texture_s3tc');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_depth_texture.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_depth_texture.html
new file mode 100644
index 000000000..6d8a864c0
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_depth_texture.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'WEBGL_depth_texture');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_draw_buffers.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_draw_buffers.html
new file mode 100644
index 000000000..068351635
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_WEBGL_draw_buffers.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+EnsureExtFor('webgl', 'WEBGL_draw_buffers');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/ensure-exts/test_common.html b/dom/canvas/test/webgl-mochitest/ensure-exts/test_common.html
new file mode 100644
index 000000000..153161d93
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/ensure-exts/test_common.html
@@ -0,0 +1,110 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='ensure-ext.js'></script>
+ </head>
+ <body>
+ <script>
+
+'use strict';
+
+var ENSURE = 'ENSURE'; // Works on all test machines.
+var FORBID = 'FORBID'; // Should not work on any test machine.
+var MACHINE_SPECIFIC = 'MACHINE_SPECIFIC';
+
+var defaultExts = [
+ // Ratified
+ ['ANGLE_instanced_arrays' , [MACHINE_SPECIFIC, FORBID ]],
+ ['EXT_blend_minmax' , [MACHINE_SPECIFIC, FORBID ]],
+ ['EXT_disjoint_timer_query' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+ ['EXT_frag_depth' , [MACHINE_SPECIFIC, FORBID ]],
+ ['EXT_shader_texture_lod' , [MACHINE_SPECIFIC, FORBID ]],
+ ['EXT_texture_filter_anisotropic', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+ ['OES_element_index_uint' , [ENSURE , FORBID ]],
+ ['OES_standard_derivatives' , [MACHINE_SPECIFIC, FORBID ]],
+ ['OES_texture_float' , [ENSURE , FORBID ]],
+ ['OES_texture_float_linear' , [ENSURE , ENSURE ]],
+ ['OES_texture_half_float' , [ENSURE , FORBID ]],
+ ['OES_texture_half_float_linear' , [ENSURE , FORBID ]],
+ ['OES_vertex_array_object' , [ENSURE , FORBID ]],
+ ['WEBGL_compressed_texture_s3tc' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+// ['WEBGL_debug_renderer_info' , [FORBID , FORBID ]], // Complicated!
+ ['WEBGL_debug_shaders' , [FORBID , FORBID ]],
+ ['WEBGL_depth_texture' , [MACHINE_SPECIFIC, FORBID ]],
+ ['WEBGL_draw_buffers' , [MACHINE_SPECIFIC, FORBID ]],
+ ['WEBGL_lose_context' , [ENSURE , ENSURE ]],
+
+ // Community Approved
+ ['EXT_color_buffer_float' , [FORBID , ENSURE ]],
+ ['EXT_color_buffer_half_float' , [MACHINE_SPECIFIC, FORBID ]],
+ ['EXT_sRGB' , [MACHINE_SPECIFIC, FORBID ]],
+ ['WEBGL_color_buffer_float' , [MACHINE_SPECIFIC, FORBID ]],
+ ['WEBGL_compressed_texture_atc' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+ ['WEBGL_compressed_texture_etc1' , [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+ ['WEBGL_compressed_texture_pvrtc', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+];
+
+var draftExts = [
+ ['WEBGL_compressed_texture_es3', [MACHINE_SPECIFIC, MACHINE_SPECIFIC]],
+];
+
+var nonImplementedExts = [
+ 'OES_fbo_render_mipmap',
+ 'WEBGL_compressed_texture_astc',
+ 'WEBGL_security_sensitive_resources',
+ 'WEBGL_shared_resources',
+];
+
+////////////////////
+
+function TestExtFor(contextType, extName, status) {
+ switch (status) {
+ case ENSURE:
+ EnsureExtFor(contextType, extName);
+ break;
+
+ case FORBID:
+ EnsureExtFor(contextType, extName, false);
+ break;
+
+ case MACHINE_SPECIFIC:
+ break;
+ }
+}
+
+function TestExt(extName, statusArr) {
+ TestExtFor('webgl', extName, statusArr[0]);
+ TestExtFor('webgl2', extName, statusArr[1]);
+}
+
+////////////////////
+
+defaultExts.forEach(function(x) {
+ var extName = x[0];
+ var statusArr = x[1];
+ TestExt(extName, statusArr);
+});
+
+nonImplementedExts.forEach(function(extName) {
+ EnsureExt(extName, false);
+});
+
+draftExts.forEach(function(x) {
+ var extName = x[0];
+ EnsureExt(extName, false);
+});
+
+Lastly_WithDraftExtsEnabled(function() {
+ draftExts.forEach(function(x) {
+ var extName = x[0];
+ var statusArr = x[1];
+ TestExt(extName, statusArr);
+ });
+});
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/es3-data.js b/dom/canvas/test/webgl-mochitest/es3-data.js
new file mode 100644
index 000000000..ec00cf82e
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/es3-data.js
@@ -0,0 +1,4719 @@
+// The compressed data are created by Mali GPU Texture Compression Tool
+// (http://malideveloper.arm.com/resources/tools/mali-gpu-texture-compression-tool/).
+// Simply convert image to ktx format then strip the ktx header to
+// get compressed data.
+//
+// The decompressed data are create by Khronos KTX library and tools
+// (https://github.com/KhronosGroup/KTX)
+// Calling _ktxUnpackETC with previous generated compressed data to
+// get decompressed data.
+
+var img_4x4_r11_eac = {
+ compressed: new Uint8Array([
+ 0x0f, 0xf9, 0xbe, 0xff, 0xef, 0xb6, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_4x4_signed_r11_eac = {
+ compressed: new Uint8Array([
+ 0x90, 0xf9, 0xbe, 0xff, 0xef, 0xb6, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_4x4_rg11_eac = {
+ compressed: new Uint8Array([
+ 0x2e, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x2e, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ ])
+}
+
+var img_4x4_signed_rg11_eac = {
+ compressed: new Uint8Array([
+ 0xae, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0xae, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ ])
+}
+
+var img_4x4_rgb_etc2 = {
+ compressed: new Uint8Array([
+ 0x04, 0xf0, 0xf0, 0x02, 0x07, 0x45, 0x00, 0x00
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ ])
+}
+
+var img_4x4_rgb_punchthrough_etc2 = {
+ compressed: new Uint8Array([
+ 0x04, 0xf0, 0xf0, 0x00, 0xbf, 0x5f, 0x02, 0x05,
+ ]),
+ decompressed: new Uint8Array([
+ 0xfc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0xfc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ ])
+}
+
+var img_4x4_rgba_etc2 = {
+ compressed: new Uint8Array([
+ 0x44, 0x89, 0x69, 0x24, 0x41, 0x43, 0x04, 0x41,
+ 0x04, 0xf0, 0xf0, 0x02, 0x07, 0x45, 0x00, 0x00,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x04,
+ 0xff, 0x00, 0x00, 0x04, 0x00, 0xff, 0x00, 0x04,
+ 0x00, 0xff, 0x00, 0x04, 0x00, 0xff, 0x00, 0x1c,
+ 0xff, 0x00, 0x00, 0x34, 0x00, 0xff, 0x00, 0x1c,
+ 0xff, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x34,
+ 0xff, 0x00, 0x00, 0x7c, 0x00, 0xff, 0x00, 0x34,
+ 0x00, 0xff, 0x00, 0x04, 0x00, 0xff, 0x00, 0x1c,
+ 0x00, 0xff, 0x00, 0x34, 0x00, 0xff, 0x00, 0x1c,
+ ])
+}
+
+var img_8x8_r11_eac = {
+ compressed: new Uint8Array([
+ 0x0f, 0xf9, 0xbe, 0xff, 0xef, 0xb6, 0xff, 0xff,
+ 0x5e, 0xb3, 0xeb, 0xa4, 0xba, 0xff, 0xa4, 0x92,
+ 0x00, 0xf6, 0xfb, 0xed, 0xbe, 0xff, 0xed, 0xb6,
+ 0x2c, 0xfd, 0x1c, 0x7f, 0xc7, 0x00, 0x7f, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0xe2, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0xb3, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0xb3, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ 0xb3, 0x00, 0x00, 0xff, 0xb3, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_8x8_signed_r11_eac = {
+ compressed: new Uint8Array([
+ 0x90, 0xf9, 0xbe, 0xff, 0xef, 0xb6, 0xff, 0xff,
+ 0xdf, 0xb3, 0xeb, 0xa4, 0xba, 0xff, 0xa4, 0x92,
+ 0xfb, 0x20, 0xeb, 0xa4, 0xba, 0xff, 0xa4, 0x92,
+ 0xac, 0xfd, 0x1c, 0x7f, 0xc7, 0x00, 0x7f, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0xe2, 0x00, 0x00, 0xff,
+ 0xe2, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0xb2, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x96, 0x00, 0x00, 0xff,
+ 0x96, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0xb2, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ 0xb2, 0x00, 0x00, 0xff, 0xb2, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_8x8_rg11_eac = {
+ compressed: new Uint8Array([
+ 0x2e, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x2e, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ 0x2e, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x2e, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x2e, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ 0x2e, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x00, 0x00, 0x24, 0x92, 0x49, 0x24, 0x92, 0x49,
+ 0x2e, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ ])
+}
+
+var img_8x8_signed_rg11_eac = {
+ compressed: new Uint8Array([
+ 0xae, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0xae, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ 0xae, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0xae, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0xae, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ 0xae, 0xf0, 0xe7, 0x92, 0x79, 0xff, 0x92, 0x49,
+ 0x80, 0x00, 0x49, 0x24, 0x92, 0x49, 0x24, 0x92,
+ 0xae, 0xf0, 0x3c, 0xff, 0xcf, 0x24, 0xff, 0xff,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ ])
+}
+
+var img_8x8_rgb_etc2 = {
+ compressed: new Uint8Array([
+ 0x04, 0xf0, 0xf0, 0x02, 0x07, 0x45, 0x00, 0x00,
+ 0x04, 0x0f, 0xff, 0x02, 0x07, 0x45, 0x00, 0x00,
+ 0x04, 0xf0, 0xf0, 0xf2, 0xf8, 0xba, 0x00, 0x00,
+ 0x04, 0x0f, 0x0f, 0xf2, 0xf8, 0xba, 0x00, 0x00
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff,
+ 0xff, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff,
+ ])
+}
+
+var img_8x8_rgb_punchthrough_etc2 = {
+ compressed: new Uint8Array([
+ 0x04, 0xf0, 0xf0, 0x00, 0x5f, 0xef, 0x01, 0x44,
+ 0xfb, 0xf0, 0x00, 0xf0, 0xfd, 0xfa, 0x10, 0x80,
+ 0xfb, 0x0f, 0x0f, 0x00, 0x7f, 0x6f, 0x02, 0x40,
+ 0x04, 0xff, 0x00, 0xf0, 0xf7, 0x6d, 0x05, 0x04,
+ ]),
+ decompressed: new Uint8Array([
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0xfc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ ])
+}
+
+var img_8x8_rgba_etc2 = {
+ compressed: new Uint8Array([
+ 0x35, 0x83, 0x6d, 0x26, 0x88, 0x46, 0x64, 0x37,
+ 0x04, 0xf0, 0xf0, 0x02, 0x07, 0x45, 0x00, 0x00,
+ 0x69, 0xa8, 0x66, 0x76, 0x45, 0x68, 0x86, 0xd1,
+ 0x04, 0x0f, 0xff, 0x02, 0x07, 0x45, 0x00, 0x00,
+ 0x69, 0xa8, 0x6d, 0xb2, 0x53, 0x80, 0xaf, 0x41,
+ 0x04, 0xf0, 0xf0, 0xf2, 0xf8, 0xba, 0x00, 0x00,
+ 0x8c, 0xca, 0xf4, 0x2b, 0x0a, 0x05, 0x34, 0x9b,
+ 0x04, 0x0f, 0x0f, 0xf2, 0xf8, 0xba, 0x00, 0x00,
+ ]),
+ decompressed: new Uint8Array([
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
+ 0xff, 0x00, 0x00, 0x05, 0x00, 0xff, 0x00, 0x05,
+ 0xff, 0xff, 0x00, 0x05, 0x00, 0x00, 0xff, 0x05,
+ 0xff, 0xff, 0x00, 0x05, 0x00, 0x00, 0xff, 0x05,
+ 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x05,
+ 0xff, 0x00, 0x00, 0x15, 0x00, 0xff, 0x00, 0x25,
+ 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff, 0x2d,
+ 0xff, 0xff, 0x00, 0x19, 0x00, 0x00, 0xff, 0x05,
+ 0xff, 0x00, 0x00, 0x05, 0xff, 0x00, 0x00, 0x15,
+ 0xff, 0x00, 0x00, 0x3d, 0x00, 0xff, 0x00, 0x5d,
+ 0xff, 0xff, 0x00, 0x73, 0xff, 0xff, 0x00, 0x55,
+ 0xff, 0xff, 0x00, 0x2d, 0x00, 0x00, 0xff, 0x19,
+ 0x00, 0xff, 0x00, 0x05, 0x00, 0xff, 0x00, 0x25,
+ 0x00, 0xff, 0x00, 0x5d, 0x00, 0xff, 0x00, 0x95,
+ 0x00, 0x00, 0xff, 0xc3, 0x00, 0x00, 0xff, 0x9b,
+ 0x00, 0x00, 0xff, 0x55, 0x00, 0x00, 0xff, 0x2d,
+ 0x00, 0xff, 0x00, 0x05, 0xff, 0x00, 0xff, 0x2d,
+ 0x00, 0xff, 0x00, 0x73, 0xff, 0x00, 0xff, 0xc3,
+ 0x00, 0x00, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xb0,
+ 0x00, 0x00, 0xff, 0x74, 0x00, 0xff, 0xff, 0x2c,
+ 0xff, 0x00, 0xff, 0x05, 0xff, 0x00, 0xff, 0x2d,
+ 0x00, 0xff, 0x00, 0x55, 0xff, 0x00, 0xff, 0x9b,
+ 0x00, 0xff, 0xff, 0xb0, 0x00, 0xff, 0xff, 0x98,
+ 0x00, 0x00, 0xff, 0x5c, 0x00, 0xff, 0xff, 0x2c,
+ 0x00, 0xff, 0x00, 0x05, 0x00, 0xff, 0x00, 0x19,
+ 0x00, 0xff, 0x00, 0x2d, 0xff, 0x00, 0xff, 0x55,
+ 0x00, 0x00, 0xff, 0x74, 0x00, 0x00, 0xff, 0x5c,
+ 0x00, 0x00, 0xff, 0x2c, 0x00, 0xff, 0xff, 0x14,
+ 0xff, 0x00, 0xff, 0x05, 0xff, 0x00, 0xff, 0x05,
+ 0xff, 0x00, 0xff, 0x19, 0xff, 0x00, 0xff, 0x2d,
+ 0x00, 0xff, 0xff, 0x2c, 0x00, 0xff, 0xff, 0x2c,
+ 0x00, 0xff, 0xff, 0x14, 0x00, 0xff, 0xff, 0x14,
+ ])
+}
+
+/* This image exercises every ETC2 block type */
+var img_32x32_r11_eac = {
+ compressed: new Uint8Array([
+ 0x6e, 0x61, 0x92, 0x08, 0x02, 0x01, 0x12, 0x53,
+ 0x21, 0x32, 0xf2, 0x8d, 0x01, 0xf0, 0x9f, 0x02,
+ 0x2b, 0x4b, 0xd0, 0x9d, 0x41, 0xf0, 0x29, 0x12,
+ 0x1f, 0x30, 0xc0, 0x2e, 0x0a, 0xf0, 0xad, 0x02,
+ 0x20, 0x34, 0xf0, 0x1b, 0x42, 0xb6, 0x1a, 0x02,
+ 0x1e, 0x34, 0xb0, 0x8d, 0x0a, 0xb0, 0x3f, 0x0a,
+ 0x2a, 0x21, 0xf1, 0xbf, 0x1a, 0xf1, 0x3e, 0x0b,
+ 0x47, 0x32, 0x29, 0xb0, 0x52, 0xb0, 0x1f, 0xac,
+ 0x31, 0x4f, 0x9f, 0xc0, 0x49, 0x49, 0xb0, 0xdb,
+ 0x0a, 0x23, 0xda, 0x1c, 0x08, 0x18, 0x90, 0x21,
+ 0x08, 0x2d, 0x08, 0x0c, 0x92, 0x91, 0x22, 0x4a,
+ 0x04, 0x00, 0x40, 0x70, 0x87, 0x40, 0x30, 0x9f,
+ 0x0c, 0x1c, 0x61, 0x30, 0xd2, 0x61, 0x3a, 0x83,
+ 0x12, 0x14, 0x81, 0x9c, 0x8b, 0x50, 0xb4, 0x39,
+ 0x1a, 0x28, 0x66, 0x00, 0x64, 0xa0, 0x51, 0x45,
+ 0x2e, 0x33, 0x42, 0x02, 0x64, 0xb6, 0xdf, 0xff,
+ 0x34, 0x31, 0x82, 0x62, 0x08, 0x48, 0xb6, 0x9b,
+ 0x07, 0x2d, 0xa3, 0x45, 0x60, 0x2b, 0x10, 0x44,
+ 0x08, 0x18, 0x67, 0x12, 0x86, 0x24, 0x92, 0x5b,
+ 0x02, 0x00, 0xe0, 0x3e, 0x10, 0xe9, 0x74, 0xd5,
+ 0x08, 0x1c, 0x09, 0x44, 0x88, 0x84, 0xe9, 0xa4,
+ 0x16, 0x19, 0x4a, 0xdf, 0x6d, 0xbe, 0xd7, 0x6d,
+ 0x20, 0x11, 0x4f, 0xe6, 0xb6, 0xef, 0x6f, 0xf6,
+ 0x2f, 0x44, 0xb2, 0xc9, 0x24, 0xbb, 0x6f, 0xff,
+ 0x2c, 0x41, 0xdb, 0xf9, 0x65, 0x12, 0x44, 0x8c,
+ 0x07, 0x13, 0x09, 0x54, 0xdb, 0x29, 0xb4, 0x9a,
+ 0x01, 0x02, 0x6c, 0xf2, 0xd9, 0xb5, 0xbb, 0x6d,
+ 0x0e, 0x15, 0x64, 0x96, 0x40, 0x28, 0x41, 0x24,
+ 0x14, 0x13, 0x6a, 0x48, 0xe7, 0x5e, 0x7f, 0xbe,
+ 0x1e, 0x19, 0x92, 0x69, 0xa6, 0x87, 0x4f, 0xff,
+ 0x36, 0x14, 0x6d, 0x14, 0x40, 0x12, 0x5b, 0xb7,
+ 0x54, 0x2b, 0x6d, 0xa4, 0x91, 0x00, 0x0b, 0x6d,
+ 0x19, 0x43, 0xfe, 0xdf, 0xa4, 0xd8, 0x0d, 0x09,
+ 0x10, 0x21, 0xf0, 0x10, 0x00, 0x44, 0x04, 0x91,
+ 0x01, 0x23, 0x92, 0x49, 0x34, 0x9b, 0x69, 0x37,
+ 0x11, 0x18, 0x6c, 0x00, 0x07, 0xe2, 0xdf, 0xed,
+ 0x21, 0x23, 0x40, 0x28, 0x84, 0xd0, 0x49, 0xb0,
+ 0x13, 0x36, 0x9b, 0x6d, 0x36, 0xdf, 0xff, 0xff,
+ 0x38, 0x17, 0x26, 0x49, 0xb6, 0xda, 0xdf, 0xfe,
+ 0x60, 0x44, 0x49, 0x22, 0x49, 0x00, 0x09, 0x24,
+ 0x2c, 0x53, 0x9b, 0x62, 0x44, 0x29, 0x14, 0x89,
+ 0x0b, 0x1c, 0x93, 0xf0, 0x3f, 0x82, 0xd9, 0xfd,
+ 0x0f, 0x13, 0x3f, 0xf5, 0xbf, 0x3b, 0x6f, 0xf6,
+ 0x1e, 0x10, 0xb7, 0x27, 0x74, 0xa4, 0x43, 0x62,
+ 0x21, 0x1a, 0x00, 0x50, 0x07, 0x17, 0xfb, 0x6f,
+ 0x36, 0x11, 0x6c, 0x0c, 0x00, 0x96, 0xcd, 0x6c,
+ 0x3f, 0x1d, 0x80, 0xab, 0x01, 0xd6, 0x0d, 0xac,
+ 0x4c, 0x23, 0x49, 0x20, 0x00, 0xb6, 0xdf, 0xff,
+ 0x35, 0x20, 0xdb, 0xfd, 0xed, 0x36, 0xd6, 0x49,
+ 0x1e, 0x19, 0x22, 0xf4, 0x2f, 0x66, 0x66, 0x66,
+ 0x19, 0x13, 0x3b, 0x69, 0xb7, 0x9f, 0xfd, 0xbf,
+ 0x2b, 0x16, 0x4e, 0x76, 0x25, 0x02, 0x72, 0xaf,
+ 0x35, 0x10, 0x68, 0x54, 0x85, 0x03, 0x61, 0x26,
+ 0x39, 0x1d, 0x44, 0x42, 0x25, 0x12, 0xeb, 0x76,
+ 0x3d, 0x1d, 0x29, 0x20, 0x09, 0xb2, 0x4d, 0xb6,
+ 0x65, 0x37, 0x6d, 0xb4, 0x91, 0x20, 0x49, 0x77,
+ 0x68, 0x42, 0x17, 0xf4, 0x2f, 0x68, 0x56, 0xd5,
+ 0x49, 0x54, 0x02, 0x60, 0x26, 0x22, 0x62, 0x26,
+ 0x5a, 0x4c, 0x68, 0x56, 0x84, 0x68, 0x46, 0x84,
+ 0x4a, 0x27, 0x66, 0x74, 0x67, 0x46, 0x74, 0x2f,
+ 0x53, 0x2b, 0x68, 0x66, 0x85, 0x68, 0x56, 0x85,
+ 0x51, 0x2b, 0x68, 0x66, 0x86, 0x68, 0x66, 0x86,
+ 0x52, 0x25, 0x68, 0x46, 0x45, 0x66, 0x64, 0x27,
+ 0x77, 0x32, 0x6d, 0x16, 0x8c, 0x46, 0x61, 0x37,
+ ]),
+ decompressed: new Uint8Array([
+ 0x7a, 0x00, 0x00, 0xff, 0x7a, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x36, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x49, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x6b, 0x00, 0x00, 0xff,
+ 0x7a, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x4a, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x7a, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x12, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x12, 0x00, 0x00, 0xff,
+ 0x12, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x4a, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x22, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x22, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x13, 0x00, 0x00, 0xff,
+ 0x2c, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x13, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x13, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x2c, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x30, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x4a, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x49, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x54, 0x00, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x49, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x54, 0x00, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x11, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x54, 0x00, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x11, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x54, 0x00, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x22, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x36, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x56, 0x00, 0x00, 0xff, 0x6b, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x51, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x2c, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x71, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x22, 0x00, 0x00, 0xff, 0x22, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x7a, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x27, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x56, 0x00, 0x00, 0xff,
+ 0x6b, 0x00, 0x00, 0xff, 0x83, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x50, 0x00, 0x00, 0xff,
+ 0x5f, 0x00, 0x00, 0xff, 0x71, 0x00, 0x00, 0xff,
+ 0x78, 0x00, 0x00, 0xff, 0x60, 0x00, 0x00, 0xff,
+ 0x48, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0xff,
+ 0x68, 0x00, 0x00, 0xff, 0x7a, 0x00, 0x00, 0xff,
+ 0x98, 0x00, 0x00, 0xff, 0x78, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x4f, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x4f, 0x00, 0x00, 0xff,
+ 0x4d, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x4d, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x4c, 0x00, 0x00, 0xff,
+ 0x56, 0x00, 0x00, 0xff, 0x56, 0x00, 0x00, 0xff,
+ 0x5f, 0x00, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x7a, 0x00, 0x00, 0xff, 0x8c, 0x00, 0x00, 0xff,
+ 0x98, 0x00, 0x00, 0xff, 0x98, 0x00, 0x00, 0xff,
+ 0x78, 0x00, 0x00, 0xff, 0x78, 0x00, 0x00, 0xff,
+ 0x6c, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x6c, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x66, 0x00, 0x00, 0xff, 0x62, 0x00, 0x00, 0xff,
+ 0x62, 0x00, 0x00, 0xff, 0x62, 0x00, 0x00, 0xff,
+ 0x5e, 0x00, 0x00, 0xff, 0x5e, 0x00, 0x00, 0xff,
+ 0x5e, 0x00, 0x00, 0xff, 0x5e, 0x00, 0x00, 0xff,
+ 0x5f, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x5b, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x56, 0x00, 0x00, 0xff, 0x5e, 0x00, 0x00, 0xff,
+ 0x62, 0x00, 0x00, 0xff, 0x66, 0x00, 0x00, 0xff,
+ 0x68, 0x00, 0x00, 0xff, 0x7a, 0x00, 0x00, 0xff,
+ 0x8c, 0x00, 0x00, 0xff, 0x9b, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_32x32_signed_r11_eac = {
+ compressed: new Uint8Array([
+ 0xef, 0x61, 0x92, 0x08, 0x02, 0x01, 0x12, 0x53,
+ 0xa2, 0x32, 0xf2, 0x8d, 0x01, 0xf0, 0x9f, 0x02,
+ 0xab, 0x4b, 0xd0, 0x9d, 0x41, 0xf0, 0x29, 0x12,
+ 0xa0, 0x30, 0xc0, 0x2e, 0x0a, 0xf0, 0xad, 0x02,
+ 0xa1, 0x34, 0xf0, 0x1b, 0x42, 0xb6, 0x1a, 0x02,
+ 0x9f, 0x34, 0xb0, 0x8d, 0x0a, 0xb0, 0x3f, 0x0a,
+ 0xaa, 0x21, 0xf1, 0xbf, 0x1a, 0xf1, 0x3e, 0x0b,
+ 0xc8, 0x32, 0x29, 0xb0, 0x52, 0xb0, 0x1f, 0xac,
+ 0xb2, 0x4f, 0x9f, 0xc0, 0x49, 0x49, 0xb0, 0xdb,
+ 0x8a, 0x16, 0xfe, 0x1e, 0x08, 0x1d, 0x20, 0x22,
+ 0x88, 0x2d, 0x08, 0x0c, 0x92, 0x91, 0x10, 0x02,
+ 0x85, 0x1d, 0x20, 0x60, 0x46, 0x20, 0x20, 0x56,
+ 0x8c, 0x1c, 0x61, 0x30, 0xd2, 0x61, 0x3a, 0x83,
+ 0x93, 0x11, 0x81, 0x9c, 0x8b, 0x50, 0xb4, 0x39,
+ 0x94, 0x2f, 0x42, 0xc8, 0x2d, 0xf2, 0x79, 0xe7,
+ 0xaf, 0x33, 0x42, 0x02, 0x64, 0xb6, 0xdf, 0xff,
+ 0xb5, 0x31, 0x82, 0x62, 0x08, 0x48, 0xb6, 0x9b,
+ 0x84, 0x1a, 0xd7, 0x51, 0xac, 0x83, 0x0b, 0x25,
+ 0x8a, 0x16, 0x66, 0xa4, 0x85, 0x49, 0x22, 0x5b,
+ 0x83, 0x1d, 0xa0, 0x2a, 0x08, 0xc4, 0xe2, 0x8c,
+ 0x8d, 0x15, 0x2d, 0x86, 0xd1, 0x09, 0x41, 0x00,
+ 0x96, 0x19, 0x4a, 0xdf, 0x6d, 0xbe, 0xd7, 0x6d,
+ 0xa1, 0x11, 0x4f, 0xe6, 0xb6, 0xef, 0x6f, 0xf6,
+ 0xb0, 0x44, 0xb2, 0xc9, 0x24, 0xbb, 0x6f, 0xff,
+ 0xad, 0x41, 0xdb, 0xf9, 0x65, 0x12, 0x44, 0x8c,
+ 0x82, 0x1d, 0xd2, 0x78, 0x49, 0xa0, 0x90, 0x08,
+ 0x82, 0x00, 0x6c, 0xe2, 0xd9, 0x91, 0xb9, 0x24,
+ 0x8e, 0x15, 0x64, 0x96, 0x40, 0x28, 0x41, 0x24,
+ 0x95, 0x13, 0x6a, 0x48, 0xe7, 0x5c, 0x7f, 0xbe,
+ 0xa1, 0x18, 0x00, 0x51, 0x45, 0x0a, 0x8d, 0xb6,
+ 0xb7, 0x14, 0x6d, 0x14, 0x40, 0x12, 0x5b, 0xb7,
+ 0xcf, 0x10, 0x6d, 0xa4, 0x89, 0x92, 0x4f, 0xff,
+ 0x99, 0x43, 0xfe, 0xdf, 0xa4, 0xd8, 0x0d, 0x09,
+ 0x90, 0x21, 0xf0, 0x10, 0x00, 0x44, 0x02, 0x89,
+ 0x89, 0x2d, 0x49, 0x24, 0xaa, 0x56, 0xd4, 0xaf,
+ 0x91, 0x18, 0x6c, 0x00, 0x07, 0xe2, 0xdf, 0xed,
+ 0xa1, 0x23, 0x40, 0x28, 0x84, 0xd0, 0x49, 0xb0,
+ 0x93, 0x36, 0x9b, 0x6d, 0x36, 0xdf, 0xff, 0xff,
+ 0xbc, 0x12, 0x48, 0x01, 0x6d, 0xb6, 0x4d, 0xb5,
+ 0xe1, 0x44, 0x49, 0x22, 0x49, 0x00, 0x09, 0x24,
+ 0xad, 0x53, 0x9b, 0x62, 0x44, 0x29, 0x14, 0x89,
+ 0x8b, 0x1c, 0x93, 0xf0, 0x3f, 0x82, 0xd9, 0xfd,
+ 0x91, 0x16, 0x1f, 0xf3, 0x3f, 0x12, 0x4f, 0xe4,
+ 0x9e, 0x10, 0xb7, 0x27, 0x74, 0xa4, 0x43, 0x62,
+ 0xa1, 0x1a, 0x00, 0x50, 0x07, 0x17, 0xfb, 0x6f,
+ 0xb6, 0x11, 0x6c, 0x0c, 0x00, 0x96, 0xcd, 0x6c,
+ 0xc0, 0x1d, 0x05, 0x28, 0x0a, 0xb0, 0x1d, 0x60,
+ 0xcd, 0x23, 0x49, 0x20, 0x00, 0xb6, 0xdf, 0xff,
+ 0xb6, 0x20, 0xdb, 0xfd, 0xed, 0x36, 0xd6, 0x49,
+ 0x9f, 0x19, 0x22, 0xf4, 0x67, 0x66, 0x66, 0x66,
+ 0x99, 0x13, 0x3b, 0x6b, 0xb7, 0xbf, 0xfd, 0xbf,
+ 0xab, 0x17, 0x4e, 0xf6, 0x2e, 0x02, 0xf2, 0xb7,
+ 0xb1, 0x11, 0x42, 0x60, 0x26, 0x93, 0xf9, 0x6f,
+ 0xba, 0x1d, 0x48, 0x84, 0x44, 0x22, 0x59, 0x2e,
+ 0xbd, 0x1d, 0x29, 0x20, 0x09, 0xb2, 0x4d, 0xb6,
+ 0xe6, 0x37, 0x6d, 0xb4, 0x91, 0x20, 0x49, 0x77,
+ 0xe8, 0x42, 0x17, 0xf4, 0x2f, 0x68, 0x56, 0xd5,
+ 0xc9, 0x54, 0x02, 0x60, 0x26, 0x22, 0x62, 0x26,
+ 0xcc, 0x21, 0x66, 0x76, 0x67, 0x66, 0x76, 0x67,
+ 0xcb, 0x27, 0x66, 0x74, 0x67, 0x46, 0x74, 0x2f,
+ 0xd4, 0x2b, 0x68, 0x66, 0x85, 0x68, 0x56, 0x85,
+ 0xd2, 0x2b, 0x68, 0x66, 0x86, 0x68, 0x66, 0x86,
+ 0xd3, 0x25, 0x68, 0x46, 0x45, 0x66, 0x64, 0x27,
+ 0xf8, 0x32, 0x6d, 0x16, 0x8c, 0x46, 0x61, 0x37,
+ ]),
+ decompressed: new Uint8Array([
+ 0x7b, 0x00, 0x00, 0xff, 0x7b, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x43, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x4a, 0x00, 0x00, 0xff,
+ 0x4a, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x30, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x54, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x7b, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x30, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x30, 0x00, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff,
+ 0x4b, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x7b, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x13, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x42, 0x00, 0x00, 0xff, 0x54, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x21, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x13, 0x00, 0x00, 0xff,
+ 0x13, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xff, 0x30, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x4b, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x09, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x0c, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x06, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x0c, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x2c, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x17, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x04, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x2c, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x4c, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x04, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x21, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x05, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x11, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x13, 0x00, 0x00, 0xff, 0x21, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x10, 0x00, 0x00, 0xff, 0x10, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x21, 0x00, 0x00, 0xff,
+ 0x21, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x5d, 0x00, 0x00, 0xff,
+ 0x49, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x55, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x49, 0x00, 0x00, 0xff, 0x2d, 0x00, 0x00, 0xff,
+ 0x2d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x07, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x55, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x11, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x0b, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x43, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x55, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x11, 0x00, 0x00, 0xff, 0x09, 0x00, 0x00, 0xff,
+ 0x02, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0a, 0x00, 0x00, 0xff, 0x02, 0x00, 0x00, 0xff,
+ 0x03, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff,
+ 0x0b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x16, 0x00, 0x00, 0xff, 0x16, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x1d, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x31, 0x00, 0x00, 0xff, 0x31, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x55, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0d, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x0a, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x42, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x65, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0xff,
+ 0x0d, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x08, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x18, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x29, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x65, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x0f, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1f, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x24, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3c, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3f, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x65, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x19, 0x00, 0x00, 0xff, 0x19, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x0e, 0x00, 0x00, 0xff, 0x0e, 0x00, 0x00, 0xff,
+ 0x1b, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0xff,
+ 0x14, 0x00, 0x00, 0xff, 0x14, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x24, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x49, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x65, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x2a, 0x00, 0x00, 0xff, 0x18, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x17, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0xff,
+ 0x15, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x00, 0xff,
+ 0x1c, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x27, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x57, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x52, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x1d, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1a, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x23, 0x00, 0x00, 0xff,
+ 0x2e, 0x00, 0x00, 0xff, 0x2e, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x37, 0x00, 0x00, 0xff, 0x38, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x72, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x23, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x20, 0x00, 0x00, 0xff, 0x20, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x1e, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x2f, 0x00, 0x00, 0xff,
+ 0x2f, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff,
+ 0x38, 0x00, 0x00, 0xff, 0x39, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x5d, 0x00, 0x00, 0xff, 0x7b, 0x00, 0x00, 0xff,
+ 0x52, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x2a, 0x00, 0x00, 0xff,
+ 0x28, 0x00, 0x00, 0xff, 0x28, 0x00, 0x00, 0xff,
+ 0x26, 0x00, 0x00, 0xff, 0x26, 0x00, 0x00, 0xff,
+ 0x1e, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x25, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x35, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x39, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x3c, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3f, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x57, 0x00, 0x00, 0xff,
+ 0x6c, 0x00, 0x00, 0xff, 0x83, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x34, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x2b, 0x00, 0x00, 0xff, 0x2b, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x32, 0x00, 0x00, 0xff, 0x32, 0x00, 0x00, 0xff,
+ 0x35, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x3b, 0x00, 0x00, 0xff, 0x3b, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x40, 0x00, 0x00, 0xff, 0x40, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x3d, 0x00, 0x00, 0xff,
+ 0x3d, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x51, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x72, 0x00, 0x00, 0xff,
+ 0x78, 0x00, 0x00, 0xff, 0x60, 0x00, 0x00, 0xff,
+ 0x48, 0x00, 0x00, 0xff, 0x34, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3a, 0x00, 0x00, 0xff, 0x3a, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x3e, 0x00, 0x00, 0xff, 0x3e, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x41, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x46, 0x00, 0x00, 0xff, 0x46, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x44, 0x00, 0x00, 0xff, 0x44, 0x00, 0x00, 0xff,
+ 0x41, 0x00, 0x00, 0xff, 0x45, 0x00, 0x00, 0xff,
+ 0x45, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x51, 0x00, 0x00, 0xff, 0x60, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x7b, 0x00, 0x00, 0xff,
+ 0x97, 0x00, 0x00, 0xff, 0x78, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x48, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x53, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x50, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x50, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x4f, 0x00, 0x00, 0xff,
+ 0x4f, 0x00, 0x00, 0xff, 0x53, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x50, 0x00, 0x00, 0xff,
+ 0x50, 0x00, 0x00, 0xff, 0x50, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x4e, 0x00, 0x00, 0xff, 0x4e, 0x00, 0x00, 0xff,
+ 0x4d, 0x00, 0x00, 0xff, 0x4d, 0x00, 0x00, 0xff,
+ 0x57, 0x00, 0x00, 0xff, 0x57, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x69, 0x00, 0x00, 0xff,
+ 0x7b, 0x00, 0x00, 0xff, 0x8c, 0x00, 0x00, 0xff,
+ 0x97, 0x00, 0x00, 0xff, 0x97, 0x00, 0x00, 0xff,
+ 0x78, 0x00, 0x00, 0xff, 0x78, 0x00, 0x00, 0xff,
+ 0x6c, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x6c, 0x00, 0x00, 0xff, 0x6c, 0x00, 0x00, 0xff,
+ 0x64, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x64, 0x00, 0x00, 0xff, 0x64, 0x00, 0x00, 0xff,
+ 0x5f, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0xff,
+ 0x5f, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0xff,
+ 0x60, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x5c, 0x00, 0x00, 0xff, 0x5c, 0x00, 0x00, 0xff,
+ 0x5e, 0x00, 0x00, 0xff, 0x5e, 0x00, 0x00, 0xff,
+ 0x5e, 0x00, 0x00, 0xff, 0x5e, 0x00, 0x00, 0xff,
+ 0x57, 0x00, 0x00, 0xff, 0x5f, 0x00, 0x00, 0xff,
+ 0x63, 0x00, 0x00, 0xff, 0x67, 0x00, 0x00, 0xff,
+ 0x69, 0x00, 0x00, 0xff, 0x7b, 0x00, 0x00, 0xff,
+ 0x8c, 0x00, 0x00, 0xff, 0x9b, 0x00, 0x00, 0xff,
+ ])
+}
+
+var img_32x32_rg11_eac = {
+ compressed: new Uint8Array([
+ 0xa3, 0x8b, 0x92, 0x08, 0x02, 0x01, 0x12, 0x53,
+ 0x88, 0x72, 0xdb, 0x5d, 0x68, 0xb4, 0x49, 0x01,
+ 0x54, 0x30, 0xf2, 0x8d, 0x02, 0xf1, 0x2f, 0x03,
+ 0x64, 0x30, 0xf2, 0x8d, 0x02, 0xf1, 0x2f, 0x03,
+ 0x5f, 0x47, 0xd1, 0x1d, 0x42, 0xf0, 0x39, 0x1b,
+ 0x70, 0x47, 0xd1, 0x1d, 0x42, 0xf0, 0x39, 0x1b,
+ 0x57, 0x62, 0xa0, 0x2c, 0x0a, 0xd0, 0xab, 0x02,
+ 0x69, 0x67, 0xa0, 0xbc, 0x13, 0xd1, 0x3b, 0x0b,
+ 0x54, 0x30, 0xf0, 0x2d, 0x83, 0xda, 0xac, 0x43,
+ 0x64, 0x30, 0xf0, 0x2d, 0x83, 0xda, 0xac, 0x43,
+ 0x4a, 0x7b, 0xd4, 0x4d, 0x41, 0xd6, 0x2f, 0x41,
+ 0x4a, 0x7b, 0xd4, 0x4d, 0x41, 0xd6, 0x2f, 0x41,
+ 0x71, 0xbd, 0xd1, 0x2d, 0x11, 0xd0, 0xac, 0x02,
+ 0x5e, 0x44, 0xf5, 0x2f, 0x51, 0xf4, 0xaf, 0x02,
+ 0x9f, 0x49, 0x48, 0x92, 0x04, 0x92, 0xdb, 0xb7,
+ 0x85, 0x6b, 0x05, 0x38, 0x0a, 0xb0, 0x1d, 0x60,
+ 0x69, 0x69, 0xbb, 0x58, 0x00, 0x25, 0x20, 0x9a,
+ 0x69, 0x69, 0xbb, 0x58, 0x00, 0x25, 0x20, 0x9a,
+ 0x1c, 0x32, 0xfe, 0xae, 0x10, 0x9c, 0x99, 0x31,
+ 0x33, 0x44, 0xda, 0x2c, 0x10, 0x19, 0x20, 0x22,
+ 0x17, 0x22, 0x8a, 0x4e, 0x92, 0xb5, 0x90, 0x03,
+ 0x24, 0x20, 0x86, 0x4e, 0x49, 0x91, 0xa0, 0x03,
+ 0x13, 0x3d, 0x18, 0xea, 0x0e, 0x14, 0xbc, 0x1e,
+ 0x0c, 0x20, 0x9b, 0x7b, 0x37, 0x97, 0x0d, 0x07,
+ 0x01, 0x8f, 0x96, 0x4b, 0x24, 0x96, 0x4d, 0x2c,
+ 0x29, 0x3a, 0x54, 0x2a, 0x80, 0x54, 0x2e, 0x2a,
+ 0x5c, 0x47, 0x29, 0x00, 0xc2, 0x64, 0x26, 0xb0,
+ 0x41, 0x34, 0xb1, 0x9c, 0x0b, 0x14, 0xb1, 0x31,
+ 0x6a, 0x44, 0x6a, 0xc0, 0xad, 0x82, 0x61, 0x26,
+ 0x45, 0x20, 0x66, 0x0a, 0x64, 0xf4, 0x6b, 0xc6,
+ 0xb4, 0x4b, 0x64, 0x14, 0x80, 0x92, 0x4f, 0xff,
+ 0x64, 0x47, 0x64, 0x14, 0x80, 0x00, 0x0b, 0x6d,
+ 0x5d, 0x62, 0xb2, 0xe1, 0x04, 0x24, 0x24, 0x52,
+ 0x6d, 0x62, 0xb2, 0xe1, 0x04, 0x24, 0x24, 0x52,
+ 0x17, 0x2a, 0xf7, 0xd5, 0xe8, 0x0b, 0xaa, 0x05,
+ 0x20, 0x2a, 0xf7, 0xd5, 0xe8, 0x0b, 0xaa, 0x05,
+ 0x0e, 0x3d, 0x77, 0xb4, 0xe7, 0x49, 0xbb, 0x5b,
+ 0x1f, 0x30, 0x63, 0x82, 0xaf, 0x24, 0x00, 0x1b,
+ 0x0d, 0x42, 0x80, 0x18, 0x08, 0xd2, 0x68, 0x25,
+ 0x0f, 0x2a, 0xf6, 0xaf, 0x45, 0xe0, 0x70, 0x85,
+ 0x3f, 0x42, 0x09, 0x44, 0x88, 0xa0, 0x6b, 0xad,
+ 0x17, 0x2a, 0xa9, 0x74, 0x85, 0xa9, 0x7b, 0xed,
+ 0x6f, 0x23, 0x6f, 0xfb, 0xff, 0xf7, 0xf3, 0xff,
+ 0x06, 0xb2, 0xb6, 0xdd, 0x6d, 0xba, 0xd9, 0x6d,
+ 0xa3, 0x37, 0x2e, 0xf6, 0x7f, 0xaf, 0xfb, 0x7f,
+ 0x1c, 0x5d, 0x73, 0x88, 0xc0, 0xf0, 0x0f, 0xc0,
+ 0x7a, 0xb5, 0xdb, 0x6d, 0xb6, 0xdf, 0xff, 0xff,
+ 0x5a, 0xbd, 0x8a, 0x24, 0x92, 0x80, 0x0d, 0xb6,
+ 0x63, 0x50, 0xb7, 0x69, 0x24, 0x12, 0x46, 0xd4,
+ 0x71, 0x67, 0xdb, 0xfb, 0xae, 0x12, 0x46, 0xd4,
+ 0x1a, 0x3c, 0x84, 0xf2, 0xdb, 0x2d, 0xb6, 0xdb,
+ 0x1a, 0x3c, 0x84, 0xf2, 0xdb, 0x2d, 0xb6, 0xdb,
+ 0x01, 0x2f, 0x02, 0x78, 0x04, 0xb4, 0x0b, 0x6d,
+ 0x01, 0x20, 0x02, 0x68, 0x04, 0xd8, 0x0d, 0xb6,
+ 0x2e, 0x42, 0x40, 0x04, 0x24, 0x82, 0xeb, 0xb6,
+ 0x28, 0x2a, 0x56, 0xd5, 0x7f, 0x0a, 0xfb, 0xff,
+ 0x64, 0x47, 0x42, 0x48, 0xa6, 0x9e, 0xff, 0xbe,
+ 0x31, 0x20, 0x66, 0xda, 0xef, 0x58, 0x6d, 0x34,
+ 0xab, 0x20, 0x49, 0x04, 0x10, 0x4c, 0x2d, 0xb6,
+ 0x2e, 0x20, 0x92, 0x69, 0xa6, 0x83, 0x46, 0xdb,
+ 0xd9, 0x2b, 0x6d, 0x12, 0x44, 0x12, 0xeb, 0xbf,
+ 0x0a, 0x19, 0x25, 0x28, 0x01, 0xb6, 0x4f, 0xb5,
+ 0xe5, 0x1f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x4c, 0x4c, 0x6d, 0xb0, 0x49, 0xb6, 0xcf, 0xff,
+ 0x55, 0x47, 0xff, 0x6f, 0x24, 0x90, 0x08, 0x52,
+ 0x4d, 0x62, 0xfe, 0xdf, 0xa4, 0xd8, 0x0d, 0x49,
+ 0x2f, 0x5a, 0xf4, 0x20, 0x00, 0x66, 0xd4, 0xd1,
+ 0x32, 0x52, 0xfa, 0x19, 0x24, 0x68, 0x06, 0xda,
+ 0x03, 0x85, 0x92, 0xd9, 0x2d, 0x96, 0xdb, 0x2f,
+ 0x03, 0x85, 0x90, 0x09, 0x28, 0x96, 0xd1, 0x2f,
+ 0x5b, 0x20, 0x6c, 0x00, 0x06, 0xc3, 0xfd, 0xbf,
+ 0x39, 0x20, 0x6c, 0x00, 0x06, 0xc0, 0x0d, 0x80,
+ 0x89, 0x42, 0x46, 0x00, 0xa5, 0x82, 0x51, 0x34,
+ 0x47, 0x42, 0x10, 0xaa, 0x08, 0xd4, 0x8b, 0xa1,
+ 0xc1, 0x36, 0x60, 0x00, 0xc0, 0x16, 0xdb, 0x6d,
+ 0x15, 0x22, 0x9f, 0xff, 0x3f, 0xe9, 0x24, 0x92,
+ 0xe4, 0x11, 0x6c, 0x01, 0xb6, 0xb6, 0x4f, 0xfd,
+ 0x07, 0x1a, 0x49, 0x24, 0x00, 0xb4, 0x0f, 0xfd,
+ 0xee, 0x2d, 0x48, 0x92, 0x04, 0x92, 0xdb, 0xb6,
+ 0x33, 0xb2, 0x00, 0x09, 0x24, 0xb6, 0xdd, 0xb6,
+ 0x75, 0x31, 0x9b, 0x64, 0x84, 0x2d, 0x96, 0xc9,
+ 0x58, 0x72, 0xbb, 0x60, 0x25, 0x04, 0x82, 0x40,
+ 0x4b, 0x3a, 0x02, 0xd4, 0xad, 0x0b, 0xf1, 0x6f,
+ 0x1b, 0x45, 0xb7, 0xf9, 0x3f, 0xb0, 0x0b, 0xf8,
+ 0x46, 0x8f, 0x9b, 0x6b, 0xf6, 0x9f, 0xfd, 0xbf,
+ 0x1f, 0x32, 0x9f, 0xf6, 0x7f, 0x84, 0x9f, 0xc9,
+ 0x85, 0x47, 0x93, 0xc5, 0x3e, 0x82, 0xe1, 0x34,
+ 0x2e, 0x4a, 0xda, 0x21, 0xa0, 0xd4, 0x8b, 0x82,
+ 0xa5, 0x20, 0x00, 0x60, 0x07, 0x1b, 0xfd, 0xb7,
+ 0x1a, 0x10, 0xff, 0xbf, 0xf8, 0xec, 0x06, 0xd8,
+ 0xdb, 0x24, 0x6c, 0x0c, 0x00, 0x96, 0xcd, 0x6c,
+ 0x02, 0xfd, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00,
+ 0xeb, 0x2d, 0x80, 0xab, 0x01, 0xb0, 0x1d, 0x60,
+ 0x09, 0x1a, 0x69, 0x22, 0x48, 0x92, 0x5d, 0xb6,
+ 0xed, 0x03, 0x6d, 0xb4, 0x92, 0xb6, 0xdf, 0xff,
+ 0x4d, 0x5c, 0x6d, 0xb0, 0x49, 0xb6, 0xdf, 0xff,
+ 0x9a, 0x33, 0x92, 0xd9, 0x40, 0x3b, 0x66, 0x49,
+ 0x65, 0x5f, 0xdb, 0xfd, 0xed, 0x12, 0x46, 0x00,
+ 0x94, 0x37, 0x66, 0x66, 0x66, 0x42, 0xf4, 0x2f,
+ 0x30, 0x29, 0xdb, 0xf9, 0x2d, 0x24, 0x06, 0xd2,
+ 0x94, 0x20, 0x5b, 0x61, 0xb7, 0x1f, 0xfd, 0xbf,
+ 0x00, 0x46, 0xdb, 0x6f, 0xb7, 0xff, 0xfd, 0xbf,
+ 0xc3, 0x27, 0x4e, 0xf6, 0x2e, 0x02, 0xf2, 0xb7,
+ 0x06, 0x2b, 0xb2, 0xf9, 0xee, 0xfe, 0xfd, 0x77,
+ 0xd3, 0x2b, 0x66, 0x62, 0x66, 0x93, 0xf9, 0x6f,
+ 0x0b, 0x10, 0x6a, 0x74, 0xa7, 0x6e, 0xd6, 0x4d,
+ 0xe1, 0x2d, 0x44, 0x82, 0x04, 0x12, 0x59, 0x6e,
+ 0x07, 0x19, 0x42, 0x64, 0x2e, 0x32, 0xf3, 0x2f,
+ 0xe6, 0x2d, 0x04, 0xa8, 0x01, 0xb2, 0x0d, 0x6c,
+ 0x11, 0x10, 0x6d, 0x14, 0x44, 0x12, 0xeb, 0xbf,
+ 0xed, 0x2d, 0x05, 0x28, 0x0a, 0xb0, 0x1d, 0x60,
+ 0x64, 0x51, 0x68, 0x92, 0x04, 0x92, 0xdb, 0xbf,
+ 0xdc, 0x37, 0x17, 0xf4, 0x2f, 0x66, 0x66, 0xce,
+ 0x87, 0x62, 0x97, 0x61, 0x2e, 0x44, 0x44, 0x8c,
+ 0xc7, 0x72, 0x92, 0xe9, 0x2e, 0x12, 0xe1, 0x2e,
+ 0x55, 0x47, 0x02, 0xf0, 0x2f, 0x42, 0xf4, 0x2f,
+ 0xd8, 0xdd, 0x12, 0xe1, 0x2e, 0x12, 0xe1, 0x2e,
+ 0x51, 0x4c, 0x62, 0xf6, 0x2f, 0x66, 0x76, 0x67,
+ 0xe5, 0x12, 0x68, 0x56, 0x66, 0x42, 0xf3, 0x37,
+ 0x03, 0xef, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0xe5, 0x1f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x4a, 0x47, 0x62, 0xf6, 0x67, 0x66, 0x76, 0x66,
+ 0xdf, 0x2f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x02, 0xdf, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0xe9, 0x1b, 0x64, 0x46, 0x45, 0x46, 0x54, 0x26,
+ 0x4d, 0x41, 0x66, 0x54, 0x26, 0x42, 0xf3, 0x2f,
+ 0xea, 0x2d, 0x46, 0x54, 0x26, 0x22, 0xe3, 0x2e,
+ 0x8c, 0x40, 0x68, 0x84, 0x44, 0x12, 0xe9, 0x77,
+ ]),
+ decompressed: new Uint8Array([
+ 0xab, 0xb9, 0x00, 0xff, 0xab, 0xb9, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x7b, 0x8f, 0x00, 0xff,
+ 0x7e, 0x8e, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x7e, 0x8e, 0x00, 0xff, 0x7e, 0x8e, 0x00, 0xff,
+ 0x7b, 0x8c, 0x00, 0xff, 0x7b, 0x8c, 0x00, 0xff,
+ 0x87, 0x98, 0x00, 0xff, 0x67, 0x78, 0x00, 0xff,
+ 0x6f, 0x81, 0x00, 0xff, 0x81, 0x93, 0x00, 0xff,
+ 0x81, 0x93, 0x00, 0xff, 0x6f, 0x81, 0x00, 0xff,
+ 0x7e, 0x8e, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x6c, 0x7c, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x74, 0x74, 0x00, 0xff, 0x74, 0x74, 0x00, 0xff,
+ 0x74, 0x74, 0x00, 0xff, 0x89, 0x89, 0x00, 0xff,
+ 0x87, 0x8a, 0x00, 0xff, 0x87, 0x8a, 0x00, 0xff,
+ 0x87, 0x8a, 0x00, 0xff, 0x87, 0x8a, 0x00, 0xff,
+ 0x7f, 0x79, 0x00, 0xff, 0x8b, 0x8b, 0x00, 0xff,
+ 0xa3, 0x9d, 0x00, 0xff, 0xaf, 0xa9, 0x00, 0xff,
+ 0xab, 0xb9, 0x00, 0xff, 0x93, 0xa4, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x7b, 0x8f, 0x00, 0xff,
+ 0x5a, 0x6a, 0x00, 0xff, 0x5a, 0x6a, 0x00, 0xff,
+ 0x5a, 0x6a, 0x00, 0xff, 0x5a, 0x6a, 0x00, 0xff,
+ 0x67, 0x78, 0x00, 0xff, 0x6f, 0x80, 0x00, 0xff,
+ 0x67, 0x78, 0x00, 0xff, 0x67, 0x78, 0x00, 0xff,
+ 0x4b, 0x57, 0x00, 0xff, 0x4b, 0x57, 0x00, 0xff,
+ 0x5d, 0x75, 0x00, 0xff, 0x5d, 0x75, 0x00, 0xff,
+ 0x5a, 0x6a, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x6c, 0x7c, 0x00, 0xff, 0x42, 0x52, 0x00, 0xff,
+ 0x66, 0x66, 0x00, 0xff, 0x66, 0x66, 0x00, 0xff,
+ 0x66, 0x66, 0x00, 0xff, 0x66, 0x66, 0x00, 0xff,
+ 0x71, 0x72, 0x00, 0xff, 0x71, 0x72, 0x00, 0xff,
+ 0x71, 0x72, 0x00, 0xff, 0x66, 0x66, 0x00, 0xff,
+ 0x7f, 0x67, 0x00, 0xff, 0x97, 0x79, 0x00, 0xff,
+ 0xa3, 0x8b, 0x00, 0xff, 0xbb, 0x9d, 0x00, 0xff,
+ 0xab, 0xb9, 0x00, 0xff, 0x93, 0xa4, 0x00, 0xff,
+ 0x6b, 0x7a, 0x00, 0xff, 0x6b, 0x7a, 0x00, 0xff,
+ 0x63, 0x73, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x3f, 0x50, 0x00, 0xff, 0x53, 0x64, 0x00, 0xff,
+ 0x53, 0x64, 0x00, 0xff, 0x33, 0x44, 0x00, 0xff,
+ 0x4b, 0x4b, 0x00, 0xff, 0x39, 0x39, 0x00, 0xff,
+ 0x39, 0x39, 0x00, 0xff, 0x4b, 0x4b, 0x00, 0xff,
+ 0x4b, 0x5b, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x63, 0x73, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x3c, 0x3c, 0x00, 0xff, 0x3c, 0x3c, 0x00, 0xff,
+ 0x51, 0x51, 0x00, 0xff, 0x3c, 0x3c, 0x00, 0xff,
+ 0x50, 0x3e, 0x00, 0xff, 0x50, 0x3e, 0x00, 0xff,
+ 0x5b, 0x46, 0x00, 0xff, 0x66, 0x52, 0x00, 0xff,
+ 0x8b, 0x5b, 0x00, 0xff, 0x97, 0x67, 0x00, 0xff,
+ 0xaf, 0x79, 0x00, 0xff, 0xbb, 0x8b, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x6b, 0x7a, 0x00, 0xff,
+ 0x7b, 0x8f, 0x00, 0xff, 0x53, 0x65, 0x00, 0xff,
+ 0x4b, 0x5b, 0x00, 0xff, 0x39, 0x49, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x27, 0x37, 0x00, 0xff,
+ 0x4b, 0x5c, 0x00, 0xff, 0x3f, 0x50, 0x00, 0xff,
+ 0x33, 0x44, 0x00, 0xff, 0x33, 0x44, 0x00, 0xff,
+ 0x27, 0x27, 0x00, 0xff, 0x27, 0x27, 0x00, 0xff,
+ 0x27, 0x27, 0x00, 0xff, 0x27, 0x27, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x27, 0x37, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x27, 0x37, 0x00, 0xff,
+ 0x51, 0x51, 0x00, 0xff, 0x27, 0x27, 0x00, 0xff,
+ 0x19, 0x19, 0x00, 0xff, 0x27, 0x27, 0x00, 0xff,
+ 0x50, 0x3e, 0x00, 0xff, 0x5b, 0x46, 0x00, 0xff,
+ 0x50, 0x3e, 0x00, 0xff, 0x50, 0x3e, 0x00, 0xff,
+ 0x8b, 0x49, 0x00, 0xff, 0xa3, 0x5b, 0x00, 0xff,
+ 0xaf, 0x67, 0x00, 0xff, 0xc3, 0x79, 0x00, 0xff,
+ 0x81, 0x81, 0x00, 0xff, 0x6f, 0x6f, 0x00, 0xff,
+ 0x4b, 0x4b, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x40, 0x4f, 0x00, 0xff, 0x40, 0x4f, 0x00, 0xff,
+ 0x1f, 0x27, 0x00, 0xff, 0x1f, 0x27, 0x00, 0xff,
+ 0x19, 0x28, 0x00, 0xff, 0x2f, 0x40, 0x00, 0xff,
+ 0x1f, 0x28, 0x00, 0xff, 0x13, 0x1e, 0x00, 0xff,
+ 0x10, 0x10, 0x00, 0xff, 0x16, 0x16, 0x00, 0xff,
+ 0x10, 0x10, 0x00, 0xff, 0x19, 0x1c, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x21, 0x32, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x31, 0x44, 0x00, 0xff,
+ 0x48, 0x50, 0x00, 0xff, 0x50, 0x56, 0x00, 0xff,
+ 0x30, 0x38, 0x00, 0xff, 0x30, 0x38, 0x00, 0xff,
+ 0x3a, 0x27, 0x00, 0xff, 0x5e, 0x4f, 0x00, 0xff,
+ 0x72, 0x61, 0x00, 0xff, 0x5e, 0x4f, 0x00, 0xff,
+ 0x8c, 0x38, 0x00, 0xff, 0x98, 0x44, 0x00, 0xff,
+ 0xb8, 0x58, 0x00, 0xff, 0xd8, 0x74, 0x00, 0xff,
+ 0x93, 0x93, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x4b, 0x4b, 0x00, 0xff, 0x39, 0x39, 0x00, 0xff,
+ 0x40, 0x4f, 0x00, 0xff, 0x16, 0x27, 0x00, 0xff,
+ 0x40, 0x4f, 0x00, 0xff, 0x1f, 0x27, 0x00, 0xff,
+ 0x07, 0x18, 0x00, 0xff, 0x07, 0x18, 0x00, 0xff,
+ 0x1f, 0x28, 0x00, 0xff, 0x13, 0x1e, 0x00, 0xff,
+ 0x19, 0x1c, 0x00, 0xff, 0x10, 0x10, 0x00, 0xff,
+ 0x16, 0x16, 0x00, 0xff, 0x10, 0x10, 0x00, 0xff,
+ 0x21, 0x32, 0x00, 0xff, 0x11, 0x11, 0x00, 0xff,
+ 0x21, 0x32, 0x00, 0xff, 0x11, 0x23, 0x00, 0xff,
+ 0x3c, 0x47, 0x00, 0xff, 0x30, 0x38, 0x00, 0xff,
+ 0x48, 0x50, 0x00, 0xff, 0x3c, 0x47, 0x00, 0xff,
+ 0x4a, 0x39, 0x00, 0xff, 0x4a, 0x39, 0x00, 0xff,
+ 0x5e, 0x4f, 0x00, 0xff, 0x72, 0x61, 0x00, 0xff,
+ 0xa0, 0x50, 0x00, 0xff, 0x98, 0x44, 0x00, 0xff,
+ 0xb8, 0x58, 0x00, 0xff, 0xd8, 0x74, 0x00, 0xff,
+ 0x93, 0x93, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x39, 0x39, 0x00, 0xff, 0x2d, 0x2d, 0x00, 0xff,
+ 0x28, 0x3b, 0x00, 0xff, 0x04, 0x13, 0x00, 0xff,
+ 0x0d, 0x13, 0x00, 0xff, 0x31, 0x3b, 0x00, 0xff,
+ 0x19, 0x28, 0x00, 0xff, 0x07, 0x18, 0x00, 0xff,
+ 0x00, 0x06, 0x00, 0xff, 0x13, 0x1e, 0x00, 0xff,
+ 0x0d, 0x1c, 0x00, 0xff, 0x0d, 0x1c, 0x00, 0xff,
+ 0x0d, 0x1c, 0x00, 0xff, 0x00, 0x06, 0x00, 0xff,
+ 0x11, 0x23, 0x00, 0xff, 0x11, 0x23, 0x00, 0xff,
+ 0x11, 0x23, 0x00, 0xff, 0x21, 0x32, 0x00, 0xff,
+ 0x3c, 0x1d, 0x00, 0xff, 0x50, 0x2f, 0x00, 0xff,
+ 0x50, 0x2f, 0x00, 0xff, 0x78, 0x56, 0x00, 0xff,
+ 0x7e, 0x49, 0x00, 0xff, 0x7e, 0x49, 0x00, 0xff,
+ 0x72, 0x3f, 0x00, 0xff, 0x72, 0x3f, 0x00, 0xff,
+ 0xac, 0x58, 0x00, 0xff, 0xac, 0x58, 0x00, 0xff,
+ 0xb8, 0x58, 0x00, 0xff, 0xd8, 0x74, 0x00, 0xff,
+ 0x81, 0x81, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x39, 0x39, 0x00, 0xff, 0x39, 0x39, 0x00, 0xff,
+ 0x04, 0x13, 0x00, 0xff, 0x16, 0x27, 0x00, 0xff,
+ 0x0d, 0x13, 0x00, 0xff, 0x0d, 0x13, 0x00, 0xff,
+ 0x19, 0x28, 0x00, 0xff, 0x07, 0x18, 0x00, 0xff,
+ 0x0d, 0x12, 0x00, 0xff, 0x00, 0x06, 0x00, 0xff,
+ 0x19, 0x28, 0x00, 0xff, 0x19, 0x28, 0x00, 0xff,
+ 0x00, 0x06, 0x00, 0xff, 0x19, 0x28, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x11, 0x23, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x11, 0x11, 0x00, 0xff,
+ 0x50, 0x2f, 0x00, 0xff, 0x3c, 0x1d, 0x00, 0xff,
+ 0x3c, 0x1d, 0x00, 0xff, 0x50, 0x2f, 0x00, 0xff,
+ 0x72, 0x3f, 0x00, 0xff, 0x7e, 0x49, 0x00, 0xff,
+ 0x86, 0x55, 0x00, 0xff, 0x86, 0x55, 0x00, 0xff,
+ 0xa0, 0x50, 0x00, 0xff, 0xac, 0x58, 0x00, 0xff,
+ 0xb8, 0x58, 0x00, 0xff, 0xd8, 0x74, 0x00, 0xff,
+ 0x75, 0x85, 0x00, 0xff, 0x51, 0x61, 0x00, 0xff,
+ 0x3f, 0x4f, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x07, 0x10, 0x00, 0xff,
+ 0x13, 0x1c, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x05, 0x0d, 0x00, 0xff,
+ 0x05, 0x0d, 0x00, 0xff, 0x11, 0x16, 0x00, 0xff,
+ 0x11, 0x21, 0x00, 0xff, 0x11, 0x21, 0x00, 0xff,
+ 0x29, 0x21, 0x00, 0xff, 0x11, 0x0b, 0x00, 0xff,
+ 0x37, 0x1d, 0x00, 0xff, 0x1f, 0x07, 0x00, 0xff,
+ 0x4f, 0x1d, 0x00, 0xff, 0x4f, 0x1d, 0x00, 0xff,
+ 0x55, 0x32, 0x00, 0xff, 0x75, 0x53, 0x00, 0xff,
+ 0x87, 0x32, 0x00, 0xff, 0x67, 0x11, 0x00, 0xff,
+ 0x94, 0x00, 0x00, 0xff, 0x82, 0x1c, 0x00, 0xff,
+ 0xaf, 0x49, 0x00, 0xff, 0xaf, 0x49, 0x00, 0xff,
+ 0xd2, 0x5a, 0x00, 0xff, 0xd2, 0x39, 0x00, 0xff,
+ 0xd2, 0x5a, 0x00, 0xff, 0xe8, 0x70, 0x00, 0xff,
+ 0x63, 0x73, 0x00, 0xff, 0x63, 0x73, 0x00, 0xff,
+ 0x3f, 0x4f, 0x00, 0xff, 0x3f, 0x4f, 0x00, 0xff,
+ 0x1d, 0x26, 0x00, 0xff, 0x29, 0x32, 0x00, 0xff,
+ 0x07, 0x10, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x11, 0x16, 0x00, 0xff, 0x00, 0x04, 0x00, 0xff,
+ 0x05, 0x0d, 0x00, 0xff, 0x11, 0x16, 0x00, 0xff,
+ 0x05, 0x15, 0x00, 0xff, 0x05, 0x15, 0x00, 0xff,
+ 0x11, 0x0b, 0x00, 0xff, 0x05, 0x00, 0x00, 0xff,
+ 0x1f, 0x07, 0x00, 0xff, 0x1f, 0x07, 0x00, 0xff,
+ 0x37, 0x07, 0x00, 0xff, 0x5b, 0x29, 0x00, 0xff,
+ 0x55, 0x32, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0x75, 0x53, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0x82, 0x1c, 0x00, 0xff, 0x94, 0x00, 0x00, 0xff,
+ 0x82, 0x1c, 0x00, 0xff, 0xaf, 0x49, 0x00, 0xff,
+ 0xd2, 0x39, 0x00, 0xff, 0xd2, 0x39, 0x00, 0xff,
+ 0xe8, 0x4f, 0x00, 0xff, 0xe8, 0x70, 0x00, 0xff,
+ 0x75, 0x85, 0x00, 0xff, 0x51, 0x61, 0x00, 0xff,
+ 0x51, 0x61, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x29, 0x49, 0x00, 0xff, 0x0e, 0x2e, 0x00, 0xff,
+ 0x00, 0x16, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x05, 0x15, 0x00, 0xff, 0x00, 0x0b, 0x00, 0xff,
+ 0x11, 0x0b, 0x00, 0xff, 0x11, 0x0b, 0x00, 0xff,
+ 0x1f, 0x07, 0x00, 0xff, 0x2b, 0x13, 0x00, 0xff,
+ 0x37, 0x07, 0x00, 0xff, 0x4f, 0x1d, 0x00, 0xff,
+ 0x87, 0x32, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0x87, 0x32, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0xaf, 0x49, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd2, 0x5a, 0x00, 0xff, 0xd2, 0x39, 0x00, 0xff,
+ 0xe8, 0x4f, 0x00, 0xff, 0xe8, 0x70, 0x00, 0xff,
+ 0x87, 0x97, 0x00, 0xff, 0x63, 0x73, 0x00, 0xff,
+ 0x2d, 0x3d, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x1d, 0x26, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x07, 0x10, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x00, 0x16, 0x00, 0xff, 0x29, 0x49, 0x00, 0xff,
+ 0x00, 0x16, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x05, 0x15, 0x00, 0xff,
+ 0x29, 0x21, 0x00, 0xff, 0x1d, 0x15, 0x00, 0xff,
+ 0x43, 0x29, 0x00, 0xff, 0x37, 0x1d, 0x00, 0xff,
+ 0x5b, 0x29, 0x00, 0xff, 0x4f, 0x1d, 0x00, 0xff,
+ 0x87, 0x32, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0x87, 0x32, 0x00, 0xff, 0x87, 0x32, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd2, 0x39, 0x00, 0xff, 0xd2, 0x39, 0x00, 0xff,
+ 0xe8, 0x4f, 0x00, 0xff, 0xe8, 0x70, 0x00, 0xff,
+ 0x7c, 0x9b, 0x00, 0xff, 0x6d, 0x89, 0x00, 0xff,
+ 0x54, 0x5f, 0x00, 0xff, 0x18, 0x2f, 0x00, 0xff,
+ 0x20, 0x20, 0x00, 0xff, 0x0e, 0x0e, 0x00, 0xff,
+ 0x0e, 0x0e, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x05, 0x05, 0x00, 0xff,
+ 0x09, 0x11, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x0e, 0x18, 0x00, 0xff, 0x0e, 0x18, 0x00, 0xff,
+ 0x32, 0x24, 0x00, 0xff, 0x3e, 0x2e, 0x00, 0xff,
+ 0x44, 0x13, 0x00, 0xff, 0x6c, 0x3b, 0x00, 0xff,
+ 0x6c, 0x1f, 0x00, 0xff, 0x8c, 0x41, 0x00, 0xff,
+ 0x99, 0x32, 0x00, 0xff, 0x99, 0x32, 0x00, 0xff,
+ 0x99, 0x32, 0x00, 0xff, 0xbb, 0x10, 0x00, 0xff,
+ 0xc5, 0x05, 0x00, 0xff, 0xcf, 0x0b, 0x00, 0xff,
+ 0xd5, 0x0e, 0x00, 0xff, 0xe1, 0x13, 0x00, 0xff,
+ 0xe7, 0x24, 0x00, 0xff, 0xe7, 0x40, 0x00, 0xff,
+ 0xe7, 0x58, 0x00, 0xff, 0xe7, 0x70, 0x00, 0xff,
+ 0x7c, 0x9b, 0x00, 0xff, 0x6d, 0x9b, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x18, 0x2f, 0x00, 0xff,
+ 0x0e, 0x0e, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x09, 0x11, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x26, 0x2e, 0x00, 0xff, 0x26, 0x2e, 0x00, 0xff,
+ 0x26, 0x18, 0x00, 0xff, 0x4a, 0x3a, 0x00, 0xff,
+ 0x58, 0x25, 0x00, 0xff, 0x44, 0x13, 0x00, 0xff,
+ 0x8c, 0x41, 0x00, 0xff, 0x80, 0x35, 0x00, 0xff,
+ 0x99, 0x32, 0x00, 0xff, 0xa5, 0x3e, 0x00, 0xff,
+ 0x8d, 0x28, 0x00, 0xff, 0xbb, 0x10, 0x00, 0xff,
+ 0xc5, 0x05, 0x00, 0xff, 0xcf, 0x08, 0x00, 0xff,
+ 0xdb, 0x0e, 0x00, 0xff, 0xe5, 0x11, 0x00, 0xff,
+ 0xe9, 0x24, 0x00, 0xff, 0xe9, 0x3c, 0x00, 0xff,
+ 0xe9, 0x58, 0x00, 0xff, 0xe9, 0x70, 0x00, 0xff,
+ 0x8b, 0xad, 0x00, 0xff, 0x6d, 0x89, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x36, 0x41, 0x00, 0xff,
+ 0x0e, 0x0e, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x05, 0x05, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x26, 0x2e, 0x00, 0xff, 0x32, 0x3a, 0x00, 0xff,
+ 0x3e, 0x2e, 0x00, 0xff, 0x4a, 0x3a, 0x00, 0xff,
+ 0x6c, 0x3b, 0x00, 0xff, 0x6c, 0x3b, 0x00, 0xff,
+ 0x74, 0x2b, 0x00, 0xff, 0x8c, 0x41, 0x00, 0xff,
+ 0x99, 0x32, 0x00, 0xff, 0x99, 0x32, 0x00, 0xff,
+ 0xa5, 0x3e, 0x00, 0xff, 0xbb, 0x10, 0x00, 0xff,
+ 0xcb, 0x02, 0x00, 0xff, 0xd5, 0x08, 0x00, 0xff,
+ 0xe1, 0x0b, 0x00, 0xff, 0xeb, 0x11, 0x00, 0xff,
+ 0xeb, 0x24, 0x00, 0xff, 0xeb, 0x3c, 0x00, 0xff,
+ 0xeb, 0x58, 0x00, 0xff, 0xeb, 0x70, 0x00, 0xff,
+ 0x8b, 0xad, 0x00, 0xff, 0x6d, 0x9b, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x6d, 0x7d, 0x00, 0xff,
+ 0x35, 0x35, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x05, 0x05, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x26, 0x2e, 0x00, 0xff, 0x32, 0x3a, 0x00, 0xff,
+ 0x4a, 0x3a, 0x00, 0xff, 0x4a, 0x3a, 0x00, 0xff,
+ 0x6c, 0x3b, 0x00, 0xff, 0x80, 0x4d, 0x00, 0xff,
+ 0x8c, 0x41, 0x00, 0xff, 0x80, 0x35, 0x00, 0xff,
+ 0xa5, 0x3e, 0x00, 0xff, 0xa5, 0x3e, 0x00, 0xff,
+ 0x99, 0x32, 0x00, 0xff, 0xbb, 0x10, 0x00, 0xff,
+ 0xcf, 0x02, 0x00, 0xff, 0xdb, 0x05, 0x00, 0xff,
+ 0xe5, 0x0b, 0x00, 0xff, 0xeb, 0x0e, 0x00, 0xff,
+ 0xed, 0x24, 0x00, 0xff, 0xed, 0x3c, 0x00, 0xff,
+ 0xed, 0x54, 0x00, 0xff, 0xed, 0x70, 0x00, 0xff,
+ 0x7d, 0x95, 0x00, 0xff, 0x7d, 0x95, 0x00, 0xff,
+ 0x5d, 0x77, 0x00, 0xff, 0x5d, 0x77, 0x00, 0xff,
+ 0x5c, 0x6e, 0x00, 0xff, 0x25, 0x37, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3d, 0x1b, 0x00, 0xff, 0x55, 0x33, 0x00, 0xff,
+ 0x6b, 0x49, 0x00, 0xff, 0x6b, 0x49, 0x00, 0xff,
+ 0x69, 0x3f, 0x00, 0xff, 0x81, 0x57, 0x00, 0xff,
+ 0x8d, 0x63, 0x00, 0xff, 0x81, 0x57, 0x00, 0xff,
+ 0xa0, 0x17, 0x00, 0xff, 0xb5, 0x2d, 0x00, 0xff,
+ 0xb5, 0x2d, 0x00, 0xff, 0xd3, 0x05, 0x00, 0xff,
+ 0xd7, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x00, 0xff,
+ 0xea, 0x0a, 0x00, 0xff, 0xf0, 0x10, 0x00, 0xff,
+ 0xe8, 0x1d, 0x00, 0xff, 0xea, 0x3e, 0x00, 0xff,
+ 0xee, 0x5f, 0x00, 0xff, 0xf0, 0x80, 0x00, 0xff,
+ 0x7d, 0x95, 0x00, 0xff, 0x5d, 0x77, 0x00, 0xff,
+ 0x5d, 0x77, 0x00, 0xff, 0x41, 0x65, 0x00, 0xff,
+ 0x3e, 0x55, 0x00, 0xff, 0x25, 0x37, 0x00, 0xff,
+ 0x1b, 0x0a, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x3d, 0x1b, 0x00, 0xff, 0x55, 0x33, 0x00, 0xff,
+ 0x55, 0x33, 0x00, 0xff, 0x6b, 0x49, 0x00, 0xff,
+ 0x75, 0x4b, 0x00, 0xff, 0x69, 0x3f, 0x00, 0xff,
+ 0x81, 0x57, 0x00, 0xff, 0x8d, 0x63, 0x00, 0xff,
+ 0xb5, 0x2d, 0x00, 0xff, 0xa0, 0x17, 0x00, 0xff,
+ 0xd3, 0x05, 0x00, 0xff, 0xd3, 0x05, 0x00, 0xff,
+ 0xd7, 0x00, 0x00, 0xff, 0xed, 0x05, 0x00, 0xff,
+ 0xea, 0x0a, 0x00, 0xff, 0xf0, 0x10, 0x00, 0xff,
+ 0xe8, 0x1d, 0x00, 0xff, 0xec, 0x3e, 0x00, 0xff,
+ 0xee, 0x5f, 0x00, 0xff, 0xf2, 0x80, 0x00, 0xff,
+ 0x71, 0x65, 0x00, 0xff, 0x5d, 0x53, 0x00, 0xff,
+ 0x49, 0x41, 0x00, 0xff, 0x35, 0x2f, 0x00, 0xff,
+ 0x25, 0x37, 0x00, 0xff, 0x25, 0x37, 0x00, 0xff,
+ 0x3e, 0x28, 0x00, 0xff, 0x07, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x33, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x33, 0x33, 0x00, 0xff,
+ 0x55, 0x33, 0x00, 0xff, 0x55, 0x33, 0x00, 0xff,
+ 0x77, 0x33, 0x00, 0xff, 0x77, 0x33, 0x00, 0xff,
+ 0x8d, 0x33, 0x00, 0xff, 0x8d, 0x33, 0x00, 0xff,
+ 0x8d, 0x33, 0x00, 0xff, 0xa5, 0x4b, 0x00, 0xff,
+ 0xb5, 0x2d, 0x00, 0xff, 0xb5, 0x2d, 0x00, 0xff,
+ 0xd3, 0x05, 0x00, 0xff, 0xd3, 0x05, 0x00, 0xff,
+ 0xe1, 0x00, 0x00, 0xff, 0xed, 0x05, 0x00, 0xff,
+ 0xe6, 0x05, 0x00, 0xff, 0xf0, 0x10, 0x00, 0xff,
+ 0xea, 0x1d, 0x00, 0xff, 0xec, 0x3e, 0x00, 0xff,
+ 0xf0, 0x5f, 0x00, 0xff, 0xf2, 0x80, 0x00, 0xff,
+ 0x71, 0x65, 0x00, 0xff, 0x5d, 0x53, 0x00, 0xff,
+ 0x49, 0x41, 0x00, 0xff, 0x35, 0x2f, 0x00, 0xff,
+ 0x07, 0x19, 0x00, 0xff, 0x25, 0x37, 0x00, 0xff,
+ 0x3e, 0x28, 0x00, 0xff, 0x1b, 0x0a, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x53, 0x53, 0x00, 0xff,
+ 0x55, 0x33, 0x00, 0xff, 0x6b, 0x49, 0x00, 0xff,
+ 0x77, 0x33, 0x00, 0xff, 0x77, 0x33, 0x00, 0xff,
+ 0x81, 0x27, 0x00, 0xff, 0x99, 0x3f, 0x00, 0xff,
+ 0x99, 0x3f, 0x00, 0xff, 0x8d, 0x33, 0x00, 0xff,
+ 0xb5, 0x2d, 0x00, 0xff, 0xb5, 0x2d, 0x00, 0xff,
+ 0xd3, 0x05, 0x00, 0xff, 0xd3, 0x05, 0x00, 0xff,
+ 0xe1, 0x00, 0x00, 0xff, 0xed, 0x05, 0x00, 0xff,
+ 0xe6, 0x05, 0x00, 0xff, 0xea, 0x0a, 0x00, 0xff,
+ 0xea, 0x1d, 0x00, 0xff, 0xee, 0x3e, 0x00, 0xff,
+ 0xf0, 0x5f, 0x00, 0xff, 0xf2, 0x80, 0x00, 0xff,
+ 0x7b, 0x74, 0x00, 0xff, 0x57, 0x4a, 0x00, 0xff,
+ 0x60, 0x4a, 0x00, 0xff, 0x4e, 0x35, 0x00, 0xff,
+ 0x45, 0x33, 0x00, 0xff, 0x33, 0x23, 0x00, 0xff,
+ 0x45, 0x33, 0x00, 0xff, 0x45, 0x33, 0x00, 0xff,
+ 0x56, 0x22, 0x00, 0xff, 0x66, 0x00, 0x00, 0xff,
+ 0x56, 0x22, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x8d, 0x4a, 0x00, 0xff, 0x65, 0x26, 0x00, 0xff,
+ 0x8d, 0x4a, 0x00, 0xff, 0x79, 0x3a, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xc3, 0x00, 0x00, 0xff, 0xe9, 0x11, 0x00, 0xff,
+ 0xdf, 0x00, 0x00, 0xff, 0xe9, 0x02, 0x00, 0xff,
+ 0xeb, 0x00, 0x00, 0xff, 0xed, 0x05, 0x00, 0xff,
+ 0xed, 0x0a, 0x00, 0xff, 0xef, 0x10, 0x00, 0xff,
+ 0xeb, 0x1b, 0x00, 0xff, 0xec, 0x3e, 0x00, 0xff,
+ 0xed, 0x5c, 0x00, 0xff, 0xef, 0x7a, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x57, 0x4a, 0x00, 0xff,
+ 0x4e, 0x35, 0x00, 0xff, 0x4e, 0x35, 0x00, 0xff,
+ 0x45, 0x33, 0x00, 0xff, 0x33, 0x23, 0x00, 0xff,
+ 0x33, 0x23, 0x00, 0xff, 0x54, 0x43, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x86, 0x10, 0x00, 0xff,
+ 0x86, 0x10, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x8d, 0x4a, 0x00, 0xff, 0x8d, 0x4a, 0x00, 0xff,
+ 0x79, 0x3a, 0x00, 0xff, 0x8d, 0x4a, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0xb5, 0x0b, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xc3, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xe5, 0x00, 0x00, 0xff, 0xe5, 0x00, 0x00, 0xff,
+ 0xe9, 0x01, 0x00, 0xff, 0xeb, 0x05, 0x00, 0xff,
+ 0xeb, 0x0a, 0x00, 0xff, 0xed, 0x10, 0x00, 0xff,
+ 0xeb, 0x1b, 0x00, 0xff, 0xec, 0x39, 0x00, 0xff,
+ 0xed, 0x5c, 0x00, 0xff, 0xef, 0x7a, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x6c, 0x5f, 0x00, 0xff,
+ 0x4e, 0x35, 0x00, 0xff, 0x60, 0x4a, 0x00, 0xff,
+ 0x54, 0x43, 0x00, 0xff, 0x54, 0x43, 0x00, 0xff,
+ 0x66, 0x0f, 0x00, 0xff, 0x54, 0x43, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x86, 0x10, 0x00, 0xff, 0x86, 0x10, 0x00, 0xff,
+ 0xad, 0x32, 0x00, 0xff, 0xad, 0x32, 0x00, 0xff,
+ 0x95, 0x1e, 0x00, 0xff, 0xa1, 0x26, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xe5, 0x00, 0x00, 0xff, 0xe5, 0x00, 0x00, 0xff,
+ 0xe7, 0x01, 0x00, 0xff, 0xe9, 0x05, 0x00, 0xff,
+ 0xe9, 0x0a, 0x00, 0xff, 0xeb, 0x10, 0x00, 0xff,
+ 0xeb, 0x1b, 0x00, 0xff, 0xec, 0x39, 0x00, 0xff,
+ 0xed, 0x5c, 0x00, 0xff, 0xef, 0x7a, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x7b, 0x74, 0x00, 0xff,
+ 0x60, 0x4a, 0x00, 0xff, 0x60, 0x4a, 0x00, 0xff,
+ 0x54, 0x43, 0x00, 0xff, 0x54, 0x43, 0x00, 0xff,
+ 0x66, 0x0f, 0x00, 0xff, 0x66, 0x0f, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x86, 0x10, 0x00, 0xff, 0x86, 0x10, 0x00, 0xff,
+ 0x8d, 0x0e, 0x00, 0xff, 0xa1, 0x26, 0x00, 0xff,
+ 0xa1, 0x26, 0x00, 0xff, 0x8d, 0x0e, 0x00, 0xff,
+ 0xb5, 0x0b, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xdf, 0x00, 0x00, 0xff, 0xdf, 0x00, 0x00, 0xff,
+ 0xe5, 0x01, 0x00, 0xff, 0xe7, 0x07, 0x00, 0xff,
+ 0xe7, 0x0c, 0x00, 0xff, 0xe9, 0x10, 0x00, 0xff,
+ 0xeb, 0x1b, 0x00, 0xff, 0xec, 0x39, 0x00, 0xff,
+ 0xed, 0x5c, 0x00, 0xff, 0xef, 0x7a, 0x00, 0xff,
+ 0x9d, 0x83, 0x00, 0xff, 0x9d, 0x83, 0x00, 0xff,
+ 0x8e, 0x56, 0x00, 0xff, 0x73, 0x38, 0x00, 0xff,
+ 0x73, 0x3e, 0x00, 0xff, 0x73, 0x32, 0x00, 0xff,
+ 0x7c, 0x26, 0x00, 0xff, 0x7c, 0x1c, 0x00, 0xff,
+ 0x82, 0x1c, 0x00, 0xff, 0x8e, 0x28, 0x00, 0xff,
+ 0x8e, 0x28, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb3, 0x0e, 0x00, 0xff, 0xad, 0x08, 0x00, 0xff,
+ 0xbd, 0x18, 0x00, 0xff, 0xb9, 0x12, 0x00, 0xff,
+ 0xbf, 0x00, 0x00, 0xff, 0xc9, 0x02, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xdb, 0x00, 0x00, 0xff, 0xdd, 0x00, 0x00, 0xff,
+ 0xdf, 0x02, 0x00, 0xff, 0xe1, 0x02, 0x00, 0xff,
+ 0xe4, 0x02, 0x00, 0xff, 0xe6, 0x08, 0x00, 0xff,
+ 0xe8, 0x0e, 0x00, 0xff, 0xea, 0x16, 0x00, 0xff,
+ 0xeb, 0x23, 0x00, 0xff, 0xed, 0x41, 0x00, 0xff,
+ 0xef, 0x6e, 0x00, 0xff, 0xf1, 0x82, 0x00, 0xff,
+ 0x9d, 0x83, 0x00, 0xff, 0xa3, 0x8d, 0x00, 0xff,
+ 0xa9, 0x6f, 0x00, 0xff, 0x8e, 0x56, 0x00, 0xff,
+ 0x85, 0x3e, 0x00, 0xff, 0x85, 0x32, 0x00, 0xff,
+ 0x8b, 0x26, 0x00, 0xff, 0x8b, 0x1c, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xad, 0x08, 0x00, 0xff, 0xbd, 0x18, 0x00, 0xff,
+ 0xbd, 0x18, 0x00, 0xff, 0xb3, 0x0e, 0x00, 0xff,
+ 0xc9, 0x02, 0x00, 0xff, 0xc9, 0x02, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xdb, 0x05, 0x00, 0xff,
+ 0xdd, 0x05, 0x00, 0xff, 0xdf, 0x05, 0x00, 0xff,
+ 0xe1, 0x08, 0x00, 0xff, 0xe3, 0x08, 0x00, 0xff,
+ 0xe2, 0x02, 0x00, 0xff, 0xe4, 0x0b, 0x00, 0xff,
+ 0xe6, 0x13, 0x00, 0xff, 0xe8, 0x19, 0x00, 0xff,
+ 0xe9, 0x32, 0x00, 0xff, 0xeb, 0x55, 0x00, 0xff,
+ 0xed, 0x6e, 0x00, 0xff, 0xef, 0x91, 0x00, 0xff,
+ 0xa3, 0x8d, 0x00, 0xff, 0x94, 0x79, 0x00, 0xff,
+ 0xa9, 0x6f, 0x00, 0xff, 0x8e, 0x56, 0x00, 0xff,
+ 0x9a, 0x42, 0x00, 0xff, 0x9a, 0x38, 0x00, 0xff,
+ 0xa0, 0x2c, 0x00, 0xff, 0xa0, 0x20, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xcb, 0x0e, 0x00, 0xff, 0xcb, 0x0e, 0x00, 0xff,
+ 0xcb, 0x0e, 0x00, 0xff, 0xd1, 0x12, 0x00, 0xff,
+ 0xd5, 0x0d, 0x00, 0xff, 0xd5, 0x0d, 0x00, 0xff,
+ 0xe5, 0x10, 0x00, 0xff, 0xdb, 0x05, 0x00, 0xff,
+ 0xdd, 0x08, 0x00, 0xff, 0xdf, 0x0b, 0x00, 0xff,
+ 0xe1, 0x0b, 0x00, 0xff, 0xe3, 0x0b, 0x00, 0xff,
+ 0xe2, 0x08, 0x00, 0xff, 0xe4, 0x0e, 0x00, 0xff,
+ 0xe6, 0x16, 0x00, 0xff, 0xe8, 0x1f, 0x00, 0xff,
+ 0xe7, 0x41, 0x00, 0xff, 0xe9, 0x55, 0x00, 0xff,
+ 0xeb, 0x82, 0x00, 0xff, 0xed, 0xa0, 0x00, 0xff,
+ 0xa3, 0x8d, 0x00, 0xff, 0x94, 0x79, 0x00, 0xff,
+ 0xa9, 0x6f, 0x00, 0xff, 0x8e, 0x56, 0x00, 0xff,
+ 0xa9, 0x42, 0x00, 0xff, 0xa9, 0x38, 0x00, 0xff,
+ 0xb2, 0x2c, 0x00, 0xff, 0xb2, 0x20, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xd7, 0x18, 0x00, 0xff, 0xd1, 0x12, 0x00, 0xff,
+ 0xd7, 0x18, 0x00, 0xff, 0xd7, 0x18, 0x00, 0xff,
+ 0xdf, 0x19, 0x00, 0xff, 0xdf, 0x19, 0x00, 0xff,
+ 0xe5, 0x10, 0x00, 0xff, 0xe5, 0x10, 0x00, 0xff,
+ 0xdf, 0x0e, 0x00, 0xff, 0xe1, 0x0e, 0x00, 0xff,
+ 0xe3, 0x10, 0x00, 0xff, 0xe5, 0x10, 0x00, 0xff,
+ 0xe0, 0x0b, 0x00, 0xff, 0xe2, 0x13, 0x00, 0xff,
+ 0xe4, 0x19, 0x00, 0xff, 0xe6, 0x1f, 0x00, 0xff,
+ 0xe7, 0x41, 0x00, 0xff, 0xe7, 0x6e, 0x00, 0xff,
+ 0xe9, 0x82, 0x00, 0xff, 0xeb, 0xa0, 0x00, 0xff,
+ 0xd3, 0x8d, 0x00, 0xff, 0xc4, 0x7b, 0x00, 0xff,
+ 0xbb, 0x57, 0x00, 0xff, 0xbb, 0x57, 0x00, 0xff,
+ 0xce, 0x49, 0x00, 0xff, 0xce, 0x49, 0x00, 0xff,
+ 0xb9, 0x35, 0x00, 0xff, 0xb9, 0x35, 0x00, 0xff,
+ 0xcb, 0x29, 0x00, 0xff, 0xcb, 0x29, 0x00, 0xff,
+ 0xcb, 0x29, 0x00, 0xff, 0xcb, 0x29, 0x00, 0xff,
+ 0xd8, 0x1f, 0x00, 0xff, 0xd8, 0x1f, 0x00, 0xff,
+ 0xdd, 0x1f, 0x00, 0xff, 0xe0, 0x1f, 0x00, 0xff,
+ 0xe7, 0x1e, 0x00, 0xff, 0xe7, 0x1e, 0x00, 0xff,
+ 0xe7, 0x1e, 0x00, 0xff, 0xe7, 0x1e, 0x00, 0xff,
+ 0xe3, 0x1c, 0x00, 0xff, 0xe3, 0x1c, 0x00, 0xff,
+ 0xe3, 0x1c, 0x00, 0xff, 0xe3, 0x1c, 0x00, 0xff,
+ 0xdf, 0x19, 0x00, 0xff, 0xdf, 0x25, 0x00, 0xff,
+ 0xe2, 0x25, 0x00, 0xff, 0xe2, 0x31, 0x00, 0xff,
+ 0xe4, 0x50, 0x00, 0xff, 0xe4, 0x68, 0x00, 0xff,
+ 0xe6, 0x80, 0x00, 0xff, 0xe6, 0x94, 0x00, 0xff,
+ 0xe8, 0x9f, 0x00, 0xff, 0xd3, 0x8d, 0x00, 0xff,
+ 0xcd, 0x69, 0x00, 0xff, 0xbb, 0x57, 0x00, 0xff,
+ 0xce, 0x49, 0x00, 0xff, 0xce, 0x49, 0x00, 0xff,
+ 0xce, 0x49, 0x00, 0xff, 0xce, 0x49, 0x00, 0xff,
+ 0xd8, 0x45, 0x00, 0xff, 0xd8, 0x45, 0x00, 0xff,
+ 0xd8, 0x41, 0x00, 0xff, 0xd8, 0x41, 0x00, 0xff,
+ 0xdd, 0x3b, 0x00, 0xff, 0xe0, 0x3b, 0x00, 0xff,
+ 0xe3, 0x3b, 0x00, 0xff, 0xe6, 0x3b, 0x00, 0xff,
+ 0xe9, 0x3e, 0x00, 0xff, 0xe9, 0x36, 0x00, 0xff,
+ 0xe9, 0x36, 0x00, 0xff, 0xe9, 0x36, 0x00, 0xff,
+ 0xe7, 0x36, 0x00, 0xff, 0xe7, 0x36, 0x00, 0xff,
+ 0xe7, 0x36, 0x00, 0xff, 0xe7, 0x36, 0x00, 0xff,
+ 0xe4, 0x31, 0x00, 0xff, 0xe4, 0x41, 0x00, 0xff,
+ 0xe4, 0x41, 0x00, 0xff, 0xe7, 0x55, 0x00, 0xff,
+ 0xe6, 0x68, 0x00, 0xff, 0xe8, 0x74, 0x00, 0xff,
+ 0xe8, 0x94, 0x00, 0xff, 0xea, 0xa0, 0x00, 0xff,
+ 0xfa, 0xb1, 0x00, 0xff, 0xe8, 0x9f, 0x00, 0xff,
+ 0xe2, 0x7b, 0x00, 0xff, 0xcd, 0x69, 0x00, 0xff,
+ 0xe3, 0x65, 0x00, 0xff, 0xe3, 0x65, 0x00, 0xff,
+ 0xe3, 0x65, 0x00, 0xff, 0xe3, 0x65, 0x00, 0xff,
+ 0xe5, 0x5d, 0x00, 0xff, 0xe5, 0x5d, 0x00, 0xff,
+ 0xe5, 0x59, 0x00, 0xff, 0xe5, 0x59, 0x00, 0xff,
+ 0xe3, 0x57, 0x00, 0xff, 0xe6, 0x57, 0x00, 0xff,
+ 0xe9, 0x57, 0x00, 0xff, 0xec, 0x57, 0x00, 0xff,
+ 0xeb, 0x5a, 0x00, 0xff, 0xeb, 0x52, 0x00, 0xff,
+ 0xeb, 0x52, 0x00, 0xff, 0xeb, 0x52, 0x00, 0xff,
+ 0xeb, 0x50, 0x00, 0xff, 0xeb, 0x50, 0x00, 0xff,
+ 0xeb, 0x50, 0x00, 0xff, 0xeb, 0x50, 0x00, 0xff,
+ 0xe7, 0x55, 0x00, 0xff, 0xe7, 0x55, 0x00, 0xff,
+ 0xea, 0x65, 0x00, 0xff, 0xea, 0x65, 0x00, 0xff,
+ 0xea, 0x74, 0x00, 0xff, 0xea, 0x80, 0x00, 0xff,
+ 0xec, 0xa0, 0x00, 0xff, 0xec, 0xac, 0x00, 0xff,
+ 0xfa, 0xb1, 0x00, 0xff, 0xfa, 0xb1, 0x00, 0xff,
+ 0xf1, 0x8d, 0x00, 0xff, 0xf1, 0x8d, 0x00, 0xff,
+ 0xf8, 0x7d, 0x00, 0xff, 0xf8, 0x7d, 0x00, 0xff,
+ 0xf8, 0x7d, 0x00, 0xff, 0xf8, 0x7d, 0x00, 0xff,
+ 0xf2, 0x75, 0x00, 0xff, 0xf2, 0x75, 0x00, 0xff,
+ 0xf2, 0x75, 0x00, 0xff, 0xf2, 0x75, 0x00, 0xff,
+ 0xe9, 0x73, 0x00, 0xff, 0xec, 0x73, 0x00, 0xff,
+ 0xf1, 0x73, 0x00, 0xff, 0xf1, 0x73, 0x00, 0xff,
+ 0xed, 0x72, 0x00, 0xff, 0xed, 0x72, 0x00, 0xff,
+ 0xed, 0x72, 0x00, 0xff, 0xed, 0x66, 0x00, 0xff,
+ 0xef, 0x6a, 0x00, 0xff, 0xef, 0x6a, 0x00, 0xff,
+ 0xef, 0x6a, 0x00, 0xff, 0xef, 0x6a, 0x00, 0xff,
+ 0xea, 0x65, 0x00, 0xff, 0xed, 0x71, 0x00, 0xff,
+ 0xed, 0x7d, 0x00, 0xff, 0xef, 0x7d, 0x00, 0xff,
+ 0xec, 0x80, 0x00, 0xff, 0xee, 0x94, 0x00, 0xff,
+ 0xee, 0xac, 0x00, 0xff, 0xee, 0xc4, 0x00, 0xff,
+ ])
+}
+
+var img_32x32_signed_rg11_eac = {
+ compressed: new Uint8Array([
+ 0x24, 0x8b, 0x92, 0x08, 0x02, 0x01, 0x12, 0x53,
+ 0x09, 0x72, 0xdb, 0x5d, 0x68, 0xb4, 0x49, 0x01,
+ 0xd6, 0x62, 0xd2, 0x0b, 0x01, 0xd0, 0x9d, 0x02,
+ 0xe6, 0x62, 0xd2, 0x0b, 0x01, 0xd0, 0x9d, 0x02,
+ 0xe0, 0x47, 0xd1, 0x1d, 0x42, 0xf0, 0x39, 0x1b,
+ 0xf1, 0x47, 0xd1, 0x1d, 0x42, 0xf0, 0x39, 0x1b,
+ 0xd8, 0x62, 0xa0, 0x2c, 0x0a, 0xd0, 0xab, 0x02,
+ 0xd8, 0x69, 0xd0, 0x2f, 0x0a, 0xf4, 0xad, 0x42,
+ 0xd4, 0x30, 0xf0, 0x2d, 0x83, 0xda, 0xac, 0x43,
+ 0xe4, 0x30, 0xf0, 0x2d, 0x83, 0xda, 0xac, 0x43,
+ 0xcb, 0x7b, 0xd4, 0x4d, 0x41, 0xd6, 0x2f, 0x41,
+ 0xcb, 0x7b, 0xd4, 0x4d, 0x41, 0xd6, 0x2f, 0x41,
+ 0xf2, 0xbd, 0xd1, 0x2d, 0x11, 0xd0, 0xac, 0x02,
+ 0xe0, 0x47, 0xf5, 0x2f, 0x51, 0xf4, 0xaf, 0x02,
+ 0x1f, 0x49, 0x48, 0x92, 0x04, 0x92, 0xdb, 0xb7,
+ 0xf5, 0x6b, 0x80, 0xab, 0x01, 0xd6, 0x0f, 0xac,
+ 0xe9, 0x69, 0xbb, 0x58, 0x00, 0x25, 0x20, 0x9a,
+ 0xe9, 0x69, 0xbb, 0x58, 0x00, 0x25, 0x20, 0x9a,
+ 0x9d, 0x32, 0xfe, 0xae, 0x10, 0x9c, 0x99, 0x31,
+ 0xb2, 0x3c, 0xfe, 0xbe, 0x18, 0x1d, 0xb0, 0x2b,
+ 0x90, 0x3c, 0xa2, 0xde, 0x00, 0xd9, 0x09, 0x22,
+ 0xa5, 0x20, 0x86, 0x4e, 0x49, 0x91, 0xa0, 0x03,
+ 0x93, 0x3d, 0x18, 0xea, 0x0e, 0x14, 0xbc, 0x1e,
+ 0x98, 0x2a, 0x32, 0xf0, 0x6f, 0x22, 0xa8, 0x57,
+ 0x82, 0x8f, 0x96, 0x4b, 0x24, 0x96, 0x4d, 0x2c,
+ 0xa9, 0x3a, 0x54, 0x2a, 0x80, 0x54, 0x2e, 0x2a,
+ 0xdd, 0x47, 0x29, 0x00, 0xc2, 0x64, 0x26, 0xb0,
+ 0xb7, 0x4b, 0xd5, 0x0f, 0x02, 0x98, 0x29, 0x78,
+ 0xea, 0x44, 0x6a, 0xc0, 0xad, 0x82, 0x61, 0x26,
+ 0xc5, 0x20, 0x66, 0x0a, 0x64, 0xf4, 0x6b, 0xc6,
+ 0x35, 0x4b, 0x64, 0x14, 0x80, 0x92, 0x4f, 0xff,
+ 0xe5, 0x47, 0x64, 0x14, 0x80, 0x00, 0x0b, 0x6d,
+ 0xdd, 0x62, 0xb2, 0xe1, 0x04, 0x24, 0x24, 0x52,
+ 0xed, 0x62, 0xb2, 0xe1, 0x04, 0x24, 0x24, 0x52,
+ 0x97, 0x2a, 0xf7, 0xd5, 0xe8, 0x0b, 0xaa, 0x05,
+ 0xa0, 0x2a, 0xf7, 0xd5, 0xe8, 0x0b, 0xaa, 0x05,
+ 0x8e, 0x3d, 0x77, 0xb4, 0xe7, 0x49, 0xbb, 0x5b,
+ 0xa0, 0x30, 0x63, 0x82, 0xaf, 0x24, 0x00, 0x1b,
+ 0x8e, 0x42, 0x80, 0x18, 0x08, 0xd2, 0x68, 0x25,
+ 0x8f, 0x2a, 0xf6, 0xaf, 0x45, 0xe0, 0x70, 0x85,
+ 0xc0, 0x42, 0x09, 0x44, 0x88, 0xa0, 0x6b, 0xad,
+ 0x97, 0x2a, 0xa9, 0x74, 0x85, 0xa9, 0x7b, 0xed,
+ 0xf0, 0x23, 0x6f, 0xfb, 0xff, 0xf7, 0xf3, 0xff,
+ 0x87, 0xb2, 0xb6, 0xdd, 0x6d, 0xba, 0xd9, 0x6d,
+ 0x24, 0x37, 0x2e, 0xf6, 0x7f, 0xaf, 0xfb, 0x7f,
+ 0xa7, 0x4c, 0x63, 0x90, 0xc9, 0xe0, 0x9f, 0xc9,
+ 0xfb, 0xb5, 0xdb, 0x6d, 0xb6, 0xdf, 0xff, 0xff,
+ 0xdb, 0xbd, 0x8a, 0x24, 0x92, 0x80, 0x0d, 0xb6,
+ 0xe3, 0x50, 0xb7, 0x69, 0x24, 0x12, 0x46, 0xd4,
+ 0xf1, 0x67, 0xdb, 0xfb, 0xae, 0x12, 0x46, 0xd4,
+ 0x9b, 0x3c, 0x84, 0xf2, 0xdb, 0x2d, 0xb6, 0xdb,
+ 0x9b, 0x3c, 0x84, 0xf2, 0xdb, 0x2d, 0xb6, 0xdb,
+ 0x80, 0x2f, 0x02, 0x78, 0x04, 0xb4, 0x0b, 0x6d,
+ 0x80, 0x20, 0x02, 0x68, 0x04, 0xd8, 0x0d, 0xb6,
+ 0xaf, 0x42, 0x40, 0x04, 0x24, 0x82, 0xeb, 0xb6,
+ 0xa8, 0x2a, 0x56, 0xd5, 0x7f, 0x0a, 0xfb, 0xff,
+ 0xe5, 0x47, 0x42, 0x48, 0xa6, 0x9e, 0xff, 0xbe,
+ 0xb2, 0x20, 0x66, 0xda, 0xef, 0x58, 0x6d, 0x34,
+ 0x20, 0x20, 0x00, 0x41, 0x04, 0x0a, 0x0f, 0xff,
+ 0xaf, 0x20, 0x92, 0x69, 0xa6, 0x83, 0x46, 0xdb,
+ 0x5a, 0x2b, 0x6d, 0x14, 0x44, 0x12, 0xdb, 0xbf,
+ 0x8b, 0x19, 0x25, 0x28, 0x01, 0xb6, 0x4f, 0xb5,
+ 0x66, 0x1f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0xcd, 0x4c, 0x6d, 0xb0, 0x49, 0xb6, 0xcf, 0xff,
+ 0xd5, 0x47, 0xff, 0x6f, 0x24, 0x90, 0x08, 0x12,
+ 0xcd, 0x62, 0xfe, 0xdf, 0xa4, 0xd8, 0x0d, 0x49,
+ 0xb0, 0x5a, 0xf4, 0x20, 0x00, 0x66, 0xd4, 0xd1,
+ 0xb3, 0x52, 0xfa, 0x19, 0x24, 0x68, 0x06, 0xda,
+ 0x83, 0x85, 0x92, 0xd9, 0x2d, 0x96, 0xdb, 0x2f,
+ 0x83, 0x85, 0x90, 0x09, 0x28, 0x96, 0xd1, 0x2f,
+ 0xdc, 0x20, 0x6c, 0x00, 0x06, 0xc3, 0xfd, 0xbf,
+ 0xaf, 0x20, 0x4a, 0x49, 0x27, 0xf2, 0x4f, 0xe4,
+ 0x0a, 0x42, 0x46, 0x00, 0xa5, 0x82, 0x51, 0x34,
+ 0xc8, 0x42, 0x10, 0xaa, 0x08, 0xd4, 0x8b, 0xa1,
+ 0x41, 0x36, 0x60, 0x00, 0xc0, 0x16, 0xdb, 0x6d,
+ 0x92, 0x3c, 0x9f, 0xff, 0x3f, 0xe4, 0x92, 0x49,
+ 0x64, 0x11, 0x6c, 0x01, 0xb6, 0xb6, 0x4f, 0xfd,
+ 0x89, 0x1a, 0x6d, 0xb6, 0x49, 0x90, 0x0d, 0xb4,
+ 0x6f, 0x2d, 0x49, 0x12, 0x40, 0x12, 0x5b, 0x76,
+ 0xb3, 0xb2, 0x00, 0x09, 0x24, 0xb6, 0xdd, 0xb6,
+ 0xf6, 0x31, 0x9b, 0x64, 0x84, 0x2d, 0x96, 0xc9,
+ 0xd9, 0x72, 0xbb, 0x60, 0x25, 0x04, 0x82, 0x40,
+ 0xcb, 0x3a, 0x02, 0xd4, 0xad, 0x0b, 0xf1, 0x6f,
+ 0xa9, 0x3a, 0xb7, 0xf0, 0x3f, 0xa1, 0x2b, 0xfa,
+ 0xf0, 0x23, 0x76, 0xd3, 0xed, 0x7f, 0xfb, 0x7f,
+ 0x9f, 0x32, 0x9f, 0xf6, 0x7f, 0x84, 0x9f, 0xc9,
+ 0x06, 0x47, 0x93, 0xc5, 0x3e, 0x82, 0xe1, 0x34,
+ 0xb6, 0x32, 0xd8, 0x33, 0x81, 0xd1, 0x19, 0x8b,
+ 0x26, 0x20, 0x00, 0x60, 0x07, 0x1b, 0xfd, 0xb7,
+ 0x9a, 0x10, 0xff, 0xbf, 0xf8, 0xec, 0x06, 0xd8,
+ 0x5b, 0x24, 0x6c, 0x0c, 0x00, 0x96, 0xcd, 0x6c,
+ 0x82, 0xfd, 0x00, 0x0a, 0x00, 0x00, 0x08, 0x00,
+ 0x6b, 0x2d, 0x80, 0xab, 0x01, 0xb0, 0x1d, 0x60,
+ 0x89, 0x1a, 0x69, 0x22, 0x00, 0x96, 0xdd, 0xb7,
+ 0x6d, 0x00, 0x49, 0x20, 0x00, 0xdb, 0x6f, 0xff,
+ 0xce, 0x5c, 0x6d, 0xb2, 0x49, 0xb6, 0xcf, 0xff,
+ 0x1b, 0x33, 0x92, 0xd9, 0x40, 0x3b, 0x66, 0x49,
+ 0xe6, 0x5f, 0xdb, 0xfd, 0xed, 0x12, 0x46, 0x00,
+ 0x15, 0x37, 0x66, 0x66, 0x66, 0x42, 0xf4, 0x2f,
+ 0xb1, 0x29, 0xdb, 0xf9, 0x2d, 0x24, 0x06, 0xd2,
+ 0x15, 0x20, 0x5b, 0x61, 0xb7, 0x1f, 0xfd, 0xbf,
+ 0x84, 0x41, 0xb6, 0xdd, 0x6e, 0xdb, 0x6b, 0x76,
+ 0x43, 0x27, 0x4e, 0xf6, 0x2e, 0x02, 0xf2, 0xb7,
+ 0x86, 0x2b, 0xb2, 0xf9, 0xee, 0xfe, 0xfd, 0x77,
+ 0x54, 0x2b, 0x66, 0x62, 0x66, 0x93, 0xf9, 0x6f,
+ 0x8b, 0x2a, 0x46, 0x62, 0x66, 0x4a, 0xd4, 0x05,
+ 0x61, 0x2d, 0x44, 0x82, 0x04, 0x12, 0x59, 0x6e,
+ 0x88, 0x1b, 0x62, 0x64, 0x26, 0x22, 0xf3, 0x2f,
+ 0x66, 0x2d, 0x04, 0xa8, 0x01, 0xb2, 0x0d, 0x6c,
+ 0x91, 0x10, 0x6d, 0x14, 0x44, 0x12, 0xeb, 0xbf,
+ 0x6c, 0x2d, 0x80, 0xab, 0x01, 0xd6, 0x0d, 0xac,
+ 0xe7, 0x6b, 0x6d, 0x12, 0x44, 0x92, 0xed, 0xbf,
+ 0x5d, 0x37, 0x17, 0xf4, 0x2f, 0x66, 0x66, 0xce,
+ 0x07, 0x62, 0x97, 0x61, 0x2e, 0x44, 0x44, 0x8c,
+ 0x47, 0x72, 0x92, 0xe9, 0x2e, 0x12, 0xe1, 0x2e,
+ 0xd5, 0x47, 0x02, 0xf0, 0x2f, 0x42, 0xf4, 0x2f,
+ 0x59, 0xdd, 0x12, 0xe1, 0x2e, 0x12, 0xe1, 0x2e,
+ 0xd2, 0x4c, 0x62, 0xf6, 0x2f, 0x66, 0x76, 0x67,
+ 0x66, 0x12, 0x68, 0x56, 0x66, 0x42, 0xf3, 0x37,
+ 0x83, 0xef, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x66, 0x1f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0xc7, 0x47, 0x42, 0xf6, 0x2f, 0x62, 0xf6, 0x67,
+ 0x60, 0x2f, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x83, 0xdf, 0x97, 0x79, 0x77, 0x97, 0x79, 0x77,
+ 0x66, 0x1b, 0x42, 0x62, 0x2e, 0x32, 0xf1, 0x2f,
+ 0xcd, 0x5b, 0x66, 0x64, 0x26, 0x42, 0xf3, 0x37,
+ 0x6b, 0x2d, 0x44, 0x54, 0x65, 0x42, 0x62, 0x2e,
+ 0x0d, 0x40, 0x68, 0x84, 0x44, 0x12, 0xe9, 0x77,
+ ]),
+ decompressed: new Uint8Array([
+ 0xab, 0xb9, 0x00, 0xff, 0xab, 0xb9, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x7c, 0x8f, 0x00, 0xff,
+ 0x80, 0x8f, 0x00, 0xff, 0x6e, 0x7e, 0x00, 0xff,
+ 0x80, 0x8f, 0x00, 0xff, 0x80, 0x8f, 0x00, 0xff,
+ 0x7c, 0x8c, 0x00, 0xff, 0x7c, 0x8c, 0x00, 0xff,
+ 0x87, 0x98, 0x00, 0xff, 0x68, 0x79, 0x00, 0xff,
+ 0x70, 0x81, 0x00, 0xff, 0x81, 0x8d, 0x00, 0xff,
+ 0x81, 0x8d, 0x00, 0xff, 0x70, 0x81, 0x00, 0xff,
+ 0x7e, 0x8d, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x6c, 0x7c, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x75, 0x75, 0x00, 0xff, 0x75, 0x75, 0x00, 0xff,
+ 0x75, 0x75, 0x00, 0xff, 0x89, 0x89, 0x00, 0xff,
+ 0x87, 0x87, 0x00, 0xff, 0x87, 0x87, 0x00, 0xff,
+ 0x87, 0x87, 0x00, 0xff, 0x87, 0x87, 0x00, 0xff,
+ 0x7f, 0x7b, 0x00, 0xff, 0x8a, 0x8c, 0x00, 0xff,
+ 0xa2, 0x98, 0x00, 0xff, 0xae, 0xaa, 0x00, 0xff,
+ 0xab, 0xb9, 0x00, 0xff, 0x93, 0xa4, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x7c, 0x8f, 0x00, 0xff,
+ 0x5c, 0x6c, 0x00, 0xff, 0x5c, 0x6c, 0x00, 0xff,
+ 0x5c, 0x6c, 0x00, 0xff, 0x5c, 0x6c, 0x00, 0xff,
+ 0x68, 0x79, 0x00, 0xff, 0x70, 0x80, 0x00, 0xff,
+ 0x68, 0x79, 0x00, 0xff, 0x68, 0x79, 0x00, 0xff,
+ 0x4c, 0x5e, 0x00, 0xff, 0x4c, 0x5e, 0x00, 0xff,
+ 0x5e, 0x70, 0x00, 0xff, 0x5e, 0x70, 0x00, 0xff,
+ 0x5a, 0x6a, 0x00, 0xff, 0x6c, 0x7c, 0x00, 0xff,
+ 0x6c, 0x7c, 0x00, 0xff, 0x42, 0x52, 0x00, 0xff,
+ 0x67, 0x67, 0x00, 0xff, 0x67, 0x67, 0x00, 0xff,
+ 0x67, 0x67, 0x00, 0xff, 0x67, 0x67, 0x00, 0xff,
+ 0x72, 0x70, 0x00, 0xff, 0x72, 0x70, 0x00, 0xff,
+ 0x72, 0x70, 0x00, 0xff, 0x67, 0x68, 0x00, 0xff,
+ 0x7f, 0x69, 0x00, 0xff, 0x96, 0x7b, 0x00, 0xff,
+ 0xa2, 0x8c, 0x00, 0xff, 0xba, 0x98, 0x00, 0xff,
+ 0xab, 0xb9, 0x00, 0xff, 0x93, 0xa4, 0x00, 0xff,
+ 0x6c, 0x7b, 0x00, 0xff, 0x6c, 0x7b, 0x00, 0xff,
+ 0x5c, 0x6c, 0x00, 0xff, 0x4a, 0x5a, 0x00, 0xff,
+ 0x38, 0x48, 0x00, 0xff, 0x4a, 0x5a, 0x00, 0xff,
+ 0x40, 0x51, 0x00, 0xff, 0x54, 0x65, 0x00, 0xff,
+ 0x54, 0x65, 0x00, 0xff, 0x34, 0x45, 0x00, 0xff,
+ 0x4c, 0x4c, 0x00, 0xff, 0x3a, 0x3a, 0x00, 0xff,
+ 0x3a, 0x3a, 0x00, 0xff, 0x4c, 0x4c, 0x00, 0xff,
+ 0x4b, 0x5b, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x63, 0x73, 0x00, 0xff, 0x4b, 0x5b, 0x00, 0xff,
+ 0x3d, 0x3d, 0x00, 0xff, 0x3d, 0x3d, 0x00, 0xff,
+ 0x52, 0x52, 0x00, 0xff, 0x3d, 0x3d, 0x00, 0xff,
+ 0x51, 0x40, 0x00, 0xff, 0x51, 0x40, 0x00, 0xff,
+ 0x5c, 0x4c, 0x00, 0xff, 0x67, 0x54, 0x00, 0xff,
+ 0x8a, 0x57, 0x00, 0xff, 0x96, 0x69, 0x00, 0xff,
+ 0xae, 0x7b, 0x00, 0xff, 0xba, 0x8c, 0x00, 0xff,
+ 0x93, 0xa4, 0x00, 0xff, 0x6c, 0x7b, 0x00, 0xff,
+ 0x7c, 0x8f, 0x00, 0xff, 0x54, 0x66, 0x00, 0xff,
+ 0x4a, 0x5a, 0x00, 0xff, 0x38, 0x48, 0x00, 0xff,
+ 0x38, 0x48, 0x00, 0xff, 0x26, 0x36, 0x00, 0xff,
+ 0x4c, 0x5d, 0x00, 0xff, 0x40, 0x51, 0x00, 0xff,
+ 0x34, 0x45, 0x00, 0xff, 0x34, 0x45, 0x00, 0xff,
+ 0x28, 0x28, 0x00, 0xff, 0x28, 0x28, 0x00, 0xff,
+ 0x28, 0x28, 0x00, 0xff, 0x28, 0x28, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x27, 0x37, 0x00, 0xff,
+ 0x39, 0x49, 0x00, 0xff, 0x27, 0x37, 0x00, 0xff,
+ 0x52, 0x52, 0x00, 0xff, 0x28, 0x28, 0x00, 0xff,
+ 0x1a, 0x1a, 0x00, 0xff, 0x28, 0x28, 0x00, 0xff,
+ 0x51, 0x40, 0x00, 0xff, 0x5c, 0x4c, 0x00, 0xff,
+ 0x51, 0x40, 0x00, 0xff, 0x51, 0x40, 0x00, 0xff,
+ 0x8a, 0x4b, 0x00, 0xff, 0xa2, 0x57, 0x00, 0xff,
+ 0xae, 0x69, 0x00, 0xff, 0xc2, 0x7b, 0x00, 0xff,
+ 0x80, 0x80, 0x00, 0xff, 0x6f, 0x6f, 0x00, 0xff,
+ 0x4b, 0x4b, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x41, 0x4d, 0x00, 0xff, 0x41, 0x4d, 0x00, 0xff,
+ 0x20, 0x29, 0x00, 0xff, 0x20, 0x29, 0x00, 0xff,
+ 0x19, 0x29, 0x00, 0xff, 0x2b, 0x41, 0x00, 0xff,
+ 0x22, 0x29, 0x00, 0xff, 0x16, 0x1f, 0x00, 0xff,
+ 0x10, 0x10, 0x00, 0xff, 0x16, 0x14, 0x00, 0xff,
+ 0x10, 0x10, 0x00, 0xff, 0x19, 0x1a, 0x00, 0xff,
+ 0x12, 0x11, 0x00, 0xff, 0x22, 0x32, 0x00, 0xff,
+ 0x12, 0x11, 0x00, 0xff, 0x32, 0x44, 0x00, 0xff,
+ 0x49, 0x4f, 0x00, 0xff, 0x51, 0x5b, 0x00, 0xff,
+ 0x31, 0x3b, 0x00, 0xff, 0x31, 0x3b, 0x00, 0xff,
+ 0x3a, 0x27, 0x00, 0xff, 0x5e, 0x4f, 0x00, 0xff,
+ 0x72, 0x61, 0x00, 0xff, 0x5e, 0x4f, 0x00, 0xff,
+ 0x8c, 0x39, 0x00, 0xff, 0x98, 0x45, 0x00, 0xff,
+ 0xb8, 0x59, 0x00, 0xff, 0xd8, 0x75, 0x00, 0xff,
+ 0x92, 0x92, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x4b, 0x4b, 0x00, 0xff, 0x39, 0x39, 0x00, 0xff,
+ 0x41, 0x4d, 0x00, 0xff, 0x17, 0x29, 0x00, 0xff,
+ 0x41, 0x4d, 0x00, 0xff, 0x20, 0x29, 0x00, 0xff,
+ 0x07, 0x19, 0x00, 0xff, 0x07, 0x19, 0x00, 0xff,
+ 0x22, 0x29, 0x00, 0xff, 0x16, 0x1f, 0x00, 0xff,
+ 0x19, 0x1a, 0x00, 0xff, 0x10, 0x10, 0x00, 0xff,
+ 0x16, 0x14, 0x00, 0xff, 0x10, 0x10, 0x00, 0xff,
+ 0x22, 0x32, 0x00, 0xff, 0x12, 0x11, 0x00, 0xff,
+ 0x22, 0x32, 0x00, 0xff, 0x12, 0x23, 0x00, 0xff,
+ 0x3d, 0x47, 0x00, 0xff, 0x31, 0x3b, 0x00, 0xff,
+ 0x49, 0x4f, 0x00, 0xff, 0x3d, 0x47, 0x00, 0xff,
+ 0x4a, 0x39, 0x00, 0xff, 0x4a, 0x39, 0x00, 0xff,
+ 0x5e, 0x4f, 0x00, 0xff, 0x72, 0x61, 0x00, 0xff,
+ 0xa0, 0x51, 0x00, 0xff, 0x98, 0x45, 0x00, 0xff,
+ 0xb8, 0x59, 0x00, 0xff, 0xd8, 0x75, 0x00, 0xff,
+ 0x92, 0x92, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x39, 0x39, 0x00, 0xff, 0x2d, 0x2d, 0x00, 0xff,
+ 0x29, 0x3b, 0x00, 0xff, 0x05, 0x14, 0x00, 0xff,
+ 0x0e, 0x14, 0x00, 0xff, 0x32, 0x3b, 0x00, 0xff,
+ 0x19, 0x29, 0x00, 0xff, 0x07, 0x19, 0x00, 0xff,
+ 0x00, 0x07, 0x00, 0xff, 0x16, 0x1f, 0x00, 0xff,
+ 0x0d, 0x1e, 0x00, 0xff, 0x0d, 0x1e, 0x00, 0xff,
+ 0x0d, 0x1e, 0x00, 0xff, 0x00, 0x08, 0x00, 0xff,
+ 0x12, 0x23, 0x00, 0xff, 0x12, 0x23, 0x00, 0xff,
+ 0x12, 0x23, 0x00, 0xff, 0x22, 0x32, 0x00, 0xff,
+ 0x3d, 0x1b, 0x00, 0xff, 0x51, 0x2f, 0x00, 0xff,
+ 0x51, 0x2f, 0x00, 0xff, 0x79, 0x5b, 0x00, 0xff,
+ 0x7e, 0x49, 0x00, 0xff, 0x7e, 0x49, 0x00, 0xff,
+ 0x72, 0x3f, 0x00, 0xff, 0x72, 0x3f, 0x00, 0xff,
+ 0xac, 0x59, 0x00, 0xff, 0xac, 0x59, 0x00, 0xff,
+ 0xb8, 0x59, 0x00, 0xff, 0xd8, 0x75, 0x00, 0xff,
+ 0x80, 0x80, 0x00, 0xff, 0x5d, 0x5d, 0x00, 0xff,
+ 0x39, 0x39, 0x00, 0xff, 0x39, 0x39, 0x00, 0xff,
+ 0x05, 0x14, 0x00, 0xff, 0x17, 0x29, 0x00, 0xff,
+ 0x0e, 0x14, 0x00, 0xff, 0x0e, 0x14, 0x00, 0xff,
+ 0x19, 0x29, 0x00, 0xff, 0x07, 0x19, 0x00, 0xff,
+ 0x07, 0x13, 0x00, 0xff, 0x00, 0x07, 0x00, 0xff,
+ 0x19, 0x2a, 0x00, 0xff, 0x19, 0x2a, 0x00, 0xff,
+ 0x00, 0x08, 0x00, 0xff, 0x19, 0x2a, 0x00, 0xff,
+ 0x12, 0x11, 0x00, 0xff, 0x12, 0x23, 0x00, 0xff,
+ 0x12, 0x11, 0x00, 0xff, 0x12, 0x11, 0x00, 0xff,
+ 0x51, 0x2f, 0x00, 0xff, 0x3d, 0x1b, 0x00, 0xff,
+ 0x3d, 0x1b, 0x00, 0xff, 0x51, 0x2f, 0x00, 0xff,
+ 0x72, 0x3f, 0x00, 0xff, 0x7e, 0x49, 0x00, 0xff,
+ 0x85, 0x55, 0x00, 0xff, 0x85, 0x55, 0x00, 0xff,
+ 0xa0, 0x51, 0x00, 0xff, 0xac, 0x59, 0x00, 0xff,
+ 0xb8, 0x59, 0x00, 0xff, 0xd8, 0x75, 0x00, 0xff,
+ 0x75, 0x84, 0x00, 0xff, 0x51, 0x61, 0x00, 0xff,
+ 0x3f, 0x4f, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x07, 0x10, 0x00, 0xff,
+ 0x13, 0x1c, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x05, 0x0e, 0x00, 0xff,
+ 0x05, 0x0e, 0x00, 0xff, 0x11, 0x17, 0x00, 0xff,
+ 0x12, 0x21, 0x00, 0xff, 0x12, 0x21, 0x00, 0xff,
+ 0x2a, 0x21, 0x00, 0xff, 0x12, 0x0b, 0x00, 0xff,
+ 0x38, 0x1d, 0x00, 0xff, 0x20, 0x07, 0x00, 0xff,
+ 0x50, 0x1d, 0x00, 0xff, 0x50, 0x1d, 0x00, 0xff,
+ 0x56, 0x33, 0x00, 0xff, 0x76, 0x54, 0x00, 0xff,
+ 0x87, 0x33, 0x00, 0xff, 0x68, 0x12, 0x00, 0xff,
+ 0x94, 0x00, 0x00, 0xff, 0x82, 0x1b, 0x00, 0xff,
+ 0xaf, 0x4b, 0x00, 0xff, 0xaf, 0x4b, 0x00, 0xff,
+ 0xd2, 0x5b, 0x00, 0xff, 0xd2, 0x3a, 0x00, 0xff,
+ 0xd2, 0x5b, 0x00, 0xff, 0xe8, 0x71, 0x00, 0xff,
+ 0x63, 0x73, 0x00, 0xff, 0x63, 0x73, 0x00, 0xff,
+ 0x3f, 0x4f, 0x00, 0xff, 0x3f, 0x4f, 0x00, 0xff,
+ 0x1d, 0x26, 0x00, 0xff, 0x29, 0x32, 0x00, 0xff,
+ 0x07, 0x10, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x11, 0x17, 0x00, 0xff, 0x00, 0x05, 0x00, 0xff,
+ 0x05, 0x0e, 0x00, 0xff, 0x11, 0x17, 0x00, 0xff,
+ 0x06, 0x15, 0x00, 0xff, 0x06, 0x15, 0x00, 0xff,
+ 0x12, 0x0b, 0x00, 0xff, 0x06, 0x00, 0x00, 0xff,
+ 0x20, 0x07, 0x00, 0xff, 0x20, 0x07, 0x00, 0xff,
+ 0x38, 0x07, 0x00, 0xff, 0x5c, 0x29, 0x00, 0xff,
+ 0x56, 0x33, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0x76, 0x54, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0x82, 0x1b, 0x00, 0xff, 0x94, 0x00, 0x00, 0xff,
+ 0x82, 0x1b, 0x00, 0xff, 0xaf, 0x4b, 0x00, 0xff,
+ 0xd2, 0x3a, 0x00, 0xff, 0xd2, 0x3a, 0x00, 0xff,
+ 0xe8, 0x50, 0x00, 0xff, 0xe8, 0x71, 0x00, 0xff,
+ 0x75, 0x84, 0x00, 0xff, 0x51, 0x61, 0x00, 0xff,
+ 0x51, 0x61, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x29, 0x32, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x29, 0x4a, 0x00, 0xff, 0x0e, 0x2f, 0x00, 0xff,
+ 0x00, 0x17, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x06, 0x15, 0x00, 0xff, 0x00, 0x0b, 0x00, 0xff,
+ 0x12, 0x0b, 0x00, 0xff, 0x12, 0x0b, 0x00, 0xff,
+ 0x20, 0x07, 0x00, 0xff, 0x2c, 0x13, 0x00, 0xff,
+ 0x38, 0x07, 0x00, 0xff, 0x50, 0x1d, 0x00, 0xff,
+ 0x87, 0x33, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0x87, 0x33, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0xaf, 0x4b, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd2, 0x5b, 0x00, 0xff, 0xd2, 0x3a, 0x00, 0xff,
+ 0xe8, 0x50, 0x00, 0xff, 0xe8, 0x71, 0x00, 0xff,
+ 0x86, 0x96, 0x00, 0xff, 0x63, 0x73, 0x00, 0xff,
+ 0x2d, 0x3d, 0x00, 0xff, 0x2d, 0x3d, 0x00, 0xff,
+ 0x1d, 0x26, 0x00, 0xff, 0x13, 0x1c, 0x00, 0xff,
+ 0x07, 0x10, 0x00, 0xff, 0x1d, 0x26, 0x00, 0xff,
+ 0x00, 0x17, 0x00, 0xff, 0x29, 0x4a, 0x00, 0xff,
+ 0x00, 0x17, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x06, 0x15, 0x00, 0xff,
+ 0x2a, 0x21, 0x00, 0xff, 0x1e, 0x15, 0x00, 0xff,
+ 0x44, 0x29, 0x00, 0xff, 0x38, 0x1d, 0x00, 0xff,
+ 0x5c, 0x29, 0x00, 0xff, 0x50, 0x1d, 0x00, 0xff,
+ 0x87, 0x33, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0x87, 0x33, 0x00, 0xff, 0x87, 0x33, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd2, 0x3a, 0x00, 0xff, 0xd2, 0x3a, 0x00, 0xff,
+ 0xe8, 0x50, 0x00, 0xff, 0xe8, 0x71, 0x00, 0xff,
+ 0x7c, 0x9a, 0x00, 0xff, 0x6d, 0x88, 0x00, 0xff,
+ 0x54, 0x5f, 0x00, 0xff, 0x18, 0x2f, 0x00, 0xff,
+ 0x21, 0x21, 0x00, 0xff, 0x0f, 0x0f, 0x00, 0xff,
+ 0x0f, 0x0f, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x05, 0x05, 0x00, 0xff,
+ 0x09, 0x11, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x0f, 0x18, 0x00, 0xff, 0x0f, 0x18, 0x00, 0xff,
+ 0x33, 0x24, 0x00, 0xff, 0x3f, 0x2e, 0x00, 0xff,
+ 0x45, 0x14, 0x00, 0xff, 0x6d, 0x3c, 0x00, 0xff,
+ 0x6d, 0x20, 0x00, 0xff, 0x8c, 0x42, 0x00, 0xff,
+ 0x99, 0x33, 0x00, 0xff, 0x99, 0x33, 0x00, 0xff,
+ 0x99, 0x33, 0x00, 0xff, 0xbb, 0x11, 0x00, 0xff,
+ 0xc5, 0x06, 0x00, 0xff, 0xcb, 0x0c, 0x00, 0xff,
+ 0xd5, 0x0f, 0x00, 0xff, 0xe1, 0x14, 0x00, 0xff,
+ 0xe7, 0x25, 0x00, 0xff, 0xe7, 0x41, 0x00, 0xff,
+ 0xe7, 0x59, 0x00, 0xff, 0xe7, 0x71, 0x00, 0xff,
+ 0x7c, 0x9a, 0x00, 0xff, 0x6d, 0x9a, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x18, 0x2f, 0x00, 0xff,
+ 0x0f, 0x0f, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x09, 0x11, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x27, 0x2e, 0x00, 0xff, 0x27, 0x2e, 0x00, 0xff,
+ 0x27, 0x18, 0x00, 0xff, 0x4b, 0x3a, 0x00, 0xff,
+ 0x59, 0x26, 0x00, 0xff, 0x45, 0x14, 0x00, 0xff,
+ 0x8c, 0x42, 0x00, 0xff, 0x80, 0x36, 0x00, 0xff,
+ 0x99, 0x33, 0x00, 0xff, 0xa3, 0x3f, 0x00, 0xff,
+ 0x8d, 0x29, 0x00, 0xff, 0xbb, 0x11, 0x00, 0xff,
+ 0xc5, 0x06, 0x00, 0xff, 0xcf, 0x09, 0x00, 0xff,
+ 0xdb, 0x0f, 0x00, 0xff, 0xe5, 0x12, 0x00, 0xff,
+ 0xe9, 0x25, 0x00, 0xff, 0xe9, 0x3d, 0x00, 0xff,
+ 0xe9, 0x59, 0x00, 0xff, 0xe9, 0x71, 0x00, 0xff,
+ 0x8a, 0xac, 0x00, 0xff, 0x6d, 0x88, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x36, 0x41, 0x00, 0xff,
+ 0x0f, 0x0f, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x05, 0x05, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x27, 0x2e, 0x00, 0xff, 0x33, 0x3a, 0x00, 0xff,
+ 0x3f, 0x2e, 0x00, 0xff, 0x4b, 0x3a, 0x00, 0xff,
+ 0x6d, 0x3c, 0x00, 0xff, 0x6d, 0x3c, 0x00, 0xff,
+ 0x75, 0x2c, 0x00, 0xff, 0x8c, 0x42, 0x00, 0xff,
+ 0x99, 0x33, 0x00, 0xff, 0x99, 0x33, 0x00, 0xff,
+ 0xa3, 0x3f, 0x00, 0xff, 0xbb, 0x11, 0x00, 0xff,
+ 0xcb, 0x03, 0x00, 0xff, 0xd5, 0x09, 0x00, 0xff,
+ 0xe1, 0x0c, 0x00, 0xff, 0xeb, 0x12, 0x00, 0xff,
+ 0xeb, 0x25, 0x00, 0xff, 0xeb, 0x3d, 0x00, 0xff,
+ 0xeb, 0x59, 0x00, 0xff, 0xeb, 0x71, 0x00, 0xff,
+ 0x8a, 0xac, 0x00, 0xff, 0x6d, 0x9a, 0x00, 0xff,
+ 0x6d, 0x7d, 0x00, 0xff, 0x6d, 0x7d, 0x00, 0xff,
+ 0x36, 0x36, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x11, 0x11, 0x00, 0xff, 0x05, 0x05, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x09, 0x11, 0x00, 0xff,
+ 0x27, 0x2e, 0x00, 0xff, 0x33, 0x3a, 0x00, 0xff,
+ 0x4b, 0x3a, 0x00, 0xff, 0x4b, 0x3a, 0x00, 0xff,
+ 0x6d, 0x3c, 0x00, 0xff, 0x80, 0x4e, 0x00, 0xff,
+ 0x8c, 0x42, 0x00, 0xff, 0x80, 0x36, 0x00, 0xff,
+ 0xa3, 0x3f, 0x00, 0xff, 0xa3, 0x3f, 0x00, 0xff,
+ 0x99, 0x33, 0x00, 0xff, 0xbb, 0x11, 0x00, 0xff,
+ 0xcf, 0x03, 0x00, 0xff, 0xdb, 0x06, 0x00, 0xff,
+ 0xe1, 0x0c, 0x00, 0xff, 0xeb, 0x0f, 0x00, 0xff,
+ 0xed, 0x25, 0x00, 0xff, 0xed, 0x3d, 0x00, 0xff,
+ 0xed, 0x55, 0x00, 0xff, 0xed, 0x71, 0x00, 0xff,
+ 0x7d, 0x94, 0x00, 0xff, 0x7d, 0x94, 0x00, 0xff,
+ 0x5d, 0x77, 0x00, 0xff, 0x5d, 0x77, 0x00, 0xff,
+ 0x5d, 0x6f, 0x00, 0xff, 0x26, 0x38, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x3e, 0x1d, 0x00, 0xff, 0x56, 0x33, 0x00, 0xff,
+ 0x6c, 0x4b, 0x00, 0xff, 0x6c, 0x4b, 0x00, 0xff,
+ 0x6a, 0x40, 0x00, 0xff, 0x81, 0x58, 0x00, 0xff,
+ 0x8d, 0x64, 0x00, 0xff, 0x81, 0x58, 0x00, 0xff,
+ 0x9f, 0x18, 0x00, 0xff, 0xb4, 0x2d, 0x00, 0xff,
+ 0xb4, 0x2d, 0x00, 0xff, 0xd2, 0x06, 0x00, 0xff,
+ 0xd6, 0x00, 0x00, 0xff, 0xe0, 0x00, 0x00, 0xff,
+ 0xe9, 0x0a, 0x00, 0xff, 0xef, 0x10, 0x00, 0xff,
+ 0xe8, 0x1d, 0x00, 0xff, 0xea, 0x3e, 0x00, 0xff,
+ 0xec, 0x5f, 0x00, 0xff, 0xf0, 0x80, 0x00, 0xff,
+ 0x7d, 0x94, 0x00, 0xff, 0x5d, 0x77, 0x00, 0xff,
+ 0x5d, 0x77, 0x00, 0xff, 0x49, 0x65, 0x00, 0xff,
+ 0x3f, 0x56, 0x00, 0xff, 0x26, 0x38, 0x00, 0xff,
+ 0x1c, 0x0b, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
+ 0x13, 0x13, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x13, 0x13, 0x00, 0xff,
+ 0x3e, 0x1d, 0x00, 0xff, 0x56, 0x33, 0x00, 0xff,
+ 0x56, 0x33, 0x00, 0xff, 0x6c, 0x4b, 0x00, 0xff,
+ 0x76, 0x4c, 0x00, 0xff, 0x6a, 0x40, 0x00, 0xff,
+ 0x81, 0x58, 0x00, 0xff, 0x8d, 0x64, 0x00, 0xff,
+ 0xb4, 0x2d, 0x00, 0xff, 0x9f, 0x18, 0x00, 0xff,
+ 0xd2, 0x06, 0x00, 0xff, 0xd2, 0x06, 0x00, 0xff,
+ 0xd6, 0x00, 0x00, 0xff, 0xec, 0x05, 0x00, 0xff,
+ 0xe9, 0x0a, 0x00, 0xff, 0xef, 0x10, 0x00, 0xff,
+ 0xe8, 0x1d, 0x00, 0xff, 0xea, 0x3e, 0x00, 0xff,
+ 0xee, 0x5f, 0x00, 0xff, 0xf0, 0x80, 0x00, 0xff,
+ 0x71, 0x65, 0x00, 0xff, 0x5d, 0x53, 0x00, 0xff,
+ 0x49, 0x41, 0x00, 0xff, 0x35, 0x2f, 0x00, 0xff,
+ 0x26, 0x38, 0x00, 0xff, 0x26, 0x38, 0x00, 0xff,
+ 0x3f, 0x29, 0x00, 0xff, 0x08, 0x00, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x33, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x33, 0x33, 0x00, 0xff,
+ 0x56, 0x33, 0x00, 0xff, 0x56, 0x33, 0x00, 0xff,
+ 0x78, 0x33, 0x00, 0xff, 0x78, 0x33, 0x00, 0xff,
+ 0x8d, 0x34, 0x00, 0xff, 0x8d, 0x34, 0x00, 0xff,
+ 0x8d, 0x34, 0x00, 0xff, 0xa5, 0x4c, 0x00, 0xff,
+ 0xb4, 0x2d, 0x00, 0xff, 0xb4, 0x2d, 0x00, 0xff,
+ 0xd2, 0x06, 0x00, 0xff, 0xd2, 0x06, 0x00, 0xff,
+ 0xe0, 0x00, 0x00, 0xff, 0xec, 0x05, 0x00, 0xff,
+ 0xe5, 0x07, 0x00, 0xff, 0xef, 0x10, 0x00, 0xff,
+ 0xe8, 0x1d, 0x00, 0xff, 0xec, 0x3e, 0x00, 0xff,
+ 0xee, 0x5f, 0x00, 0xff, 0xf2, 0x80, 0x00, 0xff,
+ 0x71, 0x65, 0x00, 0xff, 0x5d, 0x53, 0x00, 0xff,
+ 0x49, 0x41, 0x00, 0xff, 0x35, 0x2f, 0x00, 0xff,
+ 0x08, 0x1a, 0x00, 0xff, 0x26, 0x38, 0x00, 0xff,
+ 0x3f, 0x29, 0x00, 0xff, 0x1c, 0x0b, 0x00, 0xff,
+ 0x33, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0xff,
+ 0x33, 0x33, 0x00, 0xff, 0x53, 0x53, 0x00, 0xff,
+ 0x56, 0x33, 0x00, 0xff, 0x6c, 0x4b, 0x00, 0xff,
+ 0x78, 0x33, 0x00, 0xff, 0x78, 0x33, 0x00, 0xff,
+ 0x81, 0x28, 0x00, 0xff, 0x99, 0x40, 0x00, 0xff,
+ 0x99, 0x40, 0x00, 0xff, 0x8d, 0x34, 0x00, 0xff,
+ 0xb4, 0x2d, 0x00, 0xff, 0xb4, 0x2d, 0x00, 0xff,
+ 0xd2, 0x06, 0x00, 0xff, 0xd2, 0x06, 0x00, 0xff,
+ 0xe0, 0x00, 0x00, 0xff, 0xec, 0x05, 0x00, 0xff,
+ 0xe5, 0x07, 0x00, 0xff, 0xe9, 0x0a, 0x00, 0xff,
+ 0xea, 0x1d, 0x00, 0xff, 0xec, 0x3e, 0x00, 0xff,
+ 0xf0, 0x5f, 0x00, 0xff, 0xf2, 0x80, 0x00, 0xff,
+ 0x7c, 0x75, 0x00, 0xff, 0x58, 0x4b, 0x00, 0xff,
+ 0x61, 0x4b, 0x00, 0xff, 0x4f, 0x36, 0x00, 0xff,
+ 0x45, 0x32, 0x00, 0xff, 0x33, 0x23, 0x00, 0xff,
+ 0x45, 0x32, 0x00, 0xff, 0x45, 0x32, 0x00, 0xff,
+ 0x56, 0x22, 0x00, 0xff, 0x68, 0x00, 0x00, 0xff,
+ 0x56, 0x22, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x8d, 0x4b, 0x00, 0xff, 0x66, 0x27, 0x00, 0xff,
+ 0x8d, 0x4b, 0x00, 0xff, 0x7a, 0x39, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xc2, 0x00, 0x00, 0xff, 0xe8, 0x11, 0x00, 0xff,
+ 0xde, 0x00, 0x00, 0xff, 0xe8, 0x02, 0x00, 0xff,
+ 0xea, 0x00, 0x00, 0xff, 0xec, 0x05, 0x00, 0xff,
+ 0xec, 0x0a, 0x00, 0xff, 0xee, 0x10, 0x00, 0xff,
+ 0xeb, 0x1c, 0x00, 0xff, 0xec, 0x3a, 0x00, 0xff,
+ 0xed, 0x5d, 0x00, 0xff, 0xee, 0x7b, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x58, 0x4b, 0x00, 0xff,
+ 0x4f, 0x36, 0x00, 0xff, 0x4f, 0x36, 0x00, 0xff,
+ 0x45, 0x32, 0x00, 0xff, 0x33, 0x23, 0x00, 0xff,
+ 0x33, 0x23, 0x00, 0xff, 0x54, 0x44, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x87, 0x10, 0x00, 0xff,
+ 0x87, 0x10, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x8d, 0x4b, 0x00, 0xff, 0x8d, 0x4b, 0x00, 0xff,
+ 0x7a, 0x39, 0x00, 0xff, 0x8d, 0x4b, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0xb5, 0x0b, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xc2, 0x00, 0x00, 0xff, 0xd4, 0x00, 0x00, 0xff,
+ 0xe4, 0x00, 0x00, 0xff, 0xe4, 0x00, 0x00, 0xff,
+ 0xe8, 0x01, 0x00, 0xff, 0xea, 0x07, 0x00, 0xff,
+ 0xea, 0x0c, 0x00, 0xff, 0xec, 0x10, 0x00, 0xff,
+ 0xeb, 0x1c, 0x00, 0xff, 0xec, 0x3a, 0x00, 0xff,
+ 0xed, 0x5d, 0x00, 0xff, 0xee, 0x7b, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x6d, 0x60, 0x00, 0xff,
+ 0x4f, 0x36, 0x00, 0xff, 0x61, 0x4b, 0x00, 0xff,
+ 0x54, 0x44, 0x00, 0xff, 0x54, 0x44, 0x00, 0xff,
+ 0x66, 0x11, 0x00, 0xff, 0x54, 0x44, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x87, 0x10, 0x00, 0xff, 0x87, 0x10, 0x00, 0xff,
+ 0xad, 0x30, 0x00, 0xff, 0xad, 0x30, 0x00, 0xff,
+ 0x95, 0x1e, 0x00, 0xff, 0xa1, 0x27, 0x00, 0xff,
+ 0x9f, 0x28, 0x00, 0xff, 0x9f, 0x28, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xb5, 0x0b, 0x00, 0xff,
+ 0xd4, 0x00, 0x00, 0xff, 0xd4, 0x00, 0x00, 0xff,
+ 0xe4, 0x00, 0x00, 0xff, 0xe4, 0x00, 0x00, 0xff,
+ 0xe6, 0x01, 0x00, 0xff, 0xe8, 0x07, 0x00, 0xff,
+ 0xe8, 0x0c, 0x00, 0xff, 0xea, 0x10, 0x00, 0xff,
+ 0xeb, 0x1c, 0x00, 0xff, 0xec, 0x3a, 0x00, 0xff,
+ 0xed, 0x5d, 0x00, 0xff, 0xee, 0x7b, 0x00, 0xff,
+ 0x90, 0x89, 0x00, 0xff, 0x7c, 0x75, 0x00, 0xff,
+ 0x61, 0x4b, 0x00, 0xff, 0x61, 0x4b, 0x00, 0xff,
+ 0x54, 0x44, 0x00, 0xff, 0x54, 0x44, 0x00, 0xff,
+ 0x66, 0x11, 0x00, 0xff, 0x66, 0x11, 0x00, 0xff,
+ 0x76, 0x43, 0x00, 0xff, 0x76, 0x43, 0x00, 0xff,
+ 0x87, 0x10, 0x00, 0xff, 0x87, 0x10, 0x00, 0xff,
+ 0x8d, 0x0f, 0x00, 0xff, 0xa1, 0x27, 0x00, 0xff,
+ 0xa1, 0x27, 0x00, 0xff, 0x8d, 0x0f, 0x00, 0xff,
+ 0xb5, 0x0b, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xc1, 0x17, 0x00, 0xff, 0xc1, 0x17, 0x00, 0xff,
+ 0xd4, 0x00, 0x00, 0xff, 0xd4, 0x00, 0x00, 0xff,
+ 0xde, 0x00, 0x00, 0xff, 0xde, 0x00, 0x00, 0xff,
+ 0xe4, 0x01, 0x00, 0xff, 0xe6, 0x07, 0x00, 0xff,
+ 0xe6, 0x0c, 0x00, 0xff, 0xe8, 0x12, 0x00, 0xff,
+ 0xeb, 0x1c, 0x00, 0xff, 0xec, 0x3a, 0x00, 0xff,
+ 0xed, 0x58, 0x00, 0xff, 0xee, 0x7b, 0x00, 0xff,
+ 0x9d, 0x83, 0x00, 0xff, 0x9d, 0x83, 0x00, 0xff,
+ 0x8e, 0x57, 0x00, 0xff, 0x74, 0x39, 0x00, 0xff,
+ 0x74, 0x3f, 0x00, 0xff, 0x74, 0x33, 0x00, 0xff,
+ 0x7d, 0x27, 0x00, 0xff, 0x7d, 0x1d, 0x00, 0xff,
+ 0x82, 0x1c, 0x00, 0xff, 0x8e, 0x28, 0x00, 0xff,
+ 0x8e, 0x28, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb2, 0x0e, 0x00, 0xff, 0xac, 0x08, 0x00, 0xff,
+ 0xbc, 0x18, 0x00, 0xff, 0xb8, 0x12, 0x00, 0xff,
+ 0xbf, 0x00, 0x00, 0xff, 0xc9, 0x03, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xda, 0x00, 0x00, 0xff, 0xdc, 0x01, 0x00, 0xff,
+ 0xde, 0x03, 0x00, 0xff, 0xe0, 0x03, 0x00, 0xff,
+ 0xe3, 0x02, 0x00, 0xff, 0xe5, 0x08, 0x00, 0xff,
+ 0xe7, 0x0e, 0x00, 0xff, 0xe9, 0x16, 0x00, 0xff,
+ 0xeb, 0x2b, 0x00, 0xff, 0xed, 0x49, 0x00, 0xff,
+ 0xef, 0x6d, 0x00, 0xff, 0xef, 0x8a, 0x00, 0xff,
+ 0x9d, 0x83, 0x00, 0xff, 0xa3, 0x8d, 0x00, 0xff,
+ 0xa9, 0x70, 0x00, 0xff, 0x8e, 0x57, 0x00, 0xff,
+ 0x85, 0x3f, 0x00, 0xff, 0x85, 0x33, 0x00, 0xff,
+ 0x8b, 0x27, 0x00, 0xff, 0x8b, 0x1d, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xac, 0x08, 0x00, 0xff, 0xbc, 0x18, 0x00, 0xff,
+ 0xbc, 0x18, 0x00, 0xff, 0xb2, 0x0e, 0x00, 0xff,
+ 0xc9, 0x03, 0x00, 0xff, 0xc9, 0x03, 0x00, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xdb, 0x07, 0x00, 0xff,
+ 0xdc, 0x06, 0x00, 0xff, 0xde, 0x06, 0x00, 0xff,
+ 0xe0, 0x06, 0x00, 0xff, 0xe2, 0x09, 0x00, 0xff,
+ 0xe1, 0x02, 0x00, 0xff, 0xe3, 0x0b, 0x00, 0xff,
+ 0xe5, 0x13, 0x00, 0xff, 0xe7, 0x19, 0x00, 0xff,
+ 0xe9, 0x2b, 0x00, 0xff, 0xeb, 0x49, 0x00, 0xff,
+ 0xed, 0x6d, 0x00, 0xff, 0xef, 0x8a, 0x00, 0xff,
+ 0xa3, 0x8d, 0x00, 0xff, 0x94, 0x7a, 0x00, 0xff,
+ 0xa9, 0x70, 0x00, 0xff, 0x8e, 0x57, 0x00, 0xff,
+ 0x9a, 0x43, 0x00, 0xff, 0x9a, 0x39, 0x00, 0xff,
+ 0xa0, 0x2d, 0x00, 0xff, 0xa0, 0x21, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xa4, 0x1c, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xca, 0x0e, 0x00, 0xff, 0xca, 0x0e, 0x00, 0xff,
+ 0xca, 0x0e, 0x00, 0xff, 0xd0, 0x12, 0x00, 0xff,
+ 0xd5, 0x0d, 0x00, 0xff, 0xd5, 0x0d, 0x00, 0xff,
+ 0xe5, 0x11, 0x00, 0xff, 0xdb, 0x07, 0x00, 0xff,
+ 0xdc, 0x09, 0x00, 0xff, 0xde, 0x09, 0x00, 0xff,
+ 0xe0, 0x0c, 0x00, 0xff, 0xe2, 0x0c, 0x00, 0xff,
+ 0xe1, 0x08, 0x00, 0xff, 0xe3, 0x0e, 0x00, 0xff,
+ 0xe5, 0x16, 0x00, 0xff, 0xe7, 0x1f, 0x00, 0xff,
+ 0xe7, 0x3d, 0x00, 0xff, 0xe9, 0x5b, 0x00, 0xff,
+ 0xeb, 0x7f, 0x00, 0xff, 0xed, 0x9c, 0x00, 0xff,
+ 0xa3, 0x8d, 0x00, 0xff, 0x94, 0x7a, 0x00, 0xff,
+ 0xa9, 0x70, 0x00, 0xff, 0x8e, 0x57, 0x00, 0xff,
+ 0xa9, 0x43, 0x00, 0xff, 0xa9, 0x39, 0x00, 0xff,
+ 0xb2, 0x2d, 0x00, 0xff, 0xb2, 0x21, 0x00, 0xff,
+ 0xa4, 0x1c, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xb0, 0x28, 0x00, 0xff, 0xb0, 0x28, 0x00, 0xff,
+ 0xd6, 0x18, 0x00, 0xff, 0xd0, 0x12, 0x00, 0xff,
+ 0xd6, 0x18, 0x00, 0xff, 0xd6, 0x18, 0x00, 0xff,
+ 0xdf, 0x19, 0x00, 0xff, 0xdf, 0x19, 0x00, 0xff,
+ 0xe5, 0x11, 0x00, 0xff, 0xe5, 0x11, 0x00, 0xff,
+ 0xde, 0x0e, 0x00, 0xff, 0xe0, 0x0e, 0x00, 0xff,
+ 0xe2, 0x11, 0x00, 0xff, 0xe4, 0x11, 0x00, 0xff,
+ 0xdf, 0x0b, 0x00, 0xff, 0xe1, 0x13, 0x00, 0xff,
+ 0xe3, 0x19, 0x00, 0xff, 0xe5, 0x1f, 0x00, 0xff,
+ 0xe5, 0x49, 0x00, 0xff, 0xe7, 0x6d, 0x00, 0xff,
+ 0xe9, 0x8a, 0x00, 0xff, 0xeb, 0x9c, 0x00, 0xff,
+ 0xd3, 0x8c, 0x00, 0xff, 0xc4, 0x7b, 0x00, 0xff,
+ 0xbb, 0x57, 0x00, 0xff, 0xbb, 0x57, 0x00, 0xff,
+ 0xcd, 0x49, 0x00, 0xff, 0xcd, 0x49, 0x00, 0xff,
+ 0xb8, 0x35, 0x00, 0xff, 0xb8, 0x35, 0x00, 0xff,
+ 0xcb, 0x2a, 0x00, 0xff, 0xcb, 0x2a, 0x00, 0xff,
+ 0xcb, 0x2a, 0x00, 0xff, 0xcb, 0x2a, 0x00, 0xff,
+ 0xd8, 0x1f, 0x00, 0xff, 0xd8, 0x1f, 0x00, 0xff,
+ 0xdd, 0x1f, 0x00, 0xff, 0xe0, 0x1f, 0x00, 0xff,
+ 0xe7, 0x27, 0x00, 0xff, 0xe7, 0x1b, 0x00, 0xff,
+ 0xe7, 0x1b, 0x00, 0xff, 0xe7, 0x1b, 0x00, 0xff,
+ 0xe3, 0x1d, 0x00, 0xff, 0xe3, 0x1d, 0x00, 0xff,
+ 0xe3, 0x1d, 0x00, 0xff, 0xe3, 0x1d, 0x00, 0xff,
+ 0xde, 0x1b, 0x00, 0xff, 0xe0, 0x2a, 0x00, 0xff,
+ 0xe0, 0x2a, 0x00, 0xff, 0xe3, 0x34, 0x00, 0xff,
+ 0xe4, 0x51, 0x00, 0xff, 0xe4, 0x69, 0x00, 0xff,
+ 0xe4, 0x80, 0x00, 0xff, 0xe6, 0x94, 0x00, 0xff,
+ 0xe8, 0x9e, 0x00, 0xff, 0xd3, 0x8c, 0x00, 0xff,
+ 0xcd, 0x69, 0x00, 0xff, 0xbb, 0x57, 0x00, 0xff,
+ 0xcd, 0x49, 0x00, 0xff, 0xcd, 0x49, 0x00, 0xff,
+ 0xcd, 0x49, 0x00, 0xff, 0xcd, 0x49, 0x00, 0xff,
+ 0xd8, 0x46, 0x00, 0xff, 0xd8, 0x46, 0x00, 0xff,
+ 0xd8, 0x42, 0x00, 0xff, 0xd8, 0x42, 0x00, 0xff,
+ 0xdd, 0x3b, 0x00, 0xff, 0xe0, 0x3b, 0x00, 0xff,
+ 0xe3, 0x3b, 0x00, 0xff, 0xe6, 0x3b, 0x00, 0xff,
+ 0xe9, 0x3b, 0x00, 0xff, 0xe9, 0x3b, 0x00, 0xff,
+ 0xe9, 0x3b, 0x00, 0xff, 0xe9, 0x33, 0x00, 0xff,
+ 0xe7, 0x37, 0x00, 0xff, 0xe7, 0x37, 0x00, 0xff,
+ 0xe7, 0x37, 0x00, 0xff, 0xe7, 0x37, 0x00, 0xff,
+ 0xe3, 0x34, 0x00, 0xff, 0xe3, 0x43, 0x00, 0xff,
+ 0xe6, 0x43, 0x00, 0xff, 0xe6, 0x52, 0x00, 0xff,
+ 0xe6, 0x69, 0x00, 0xff, 0xe6, 0x75, 0x00, 0xff,
+ 0xe8, 0x94, 0x00, 0xff, 0xe8, 0xa0, 0x00, 0xff,
+ 0xfa, 0xb0, 0x00, 0xff, 0xe8, 0x9e, 0x00, 0xff,
+ 0xe2, 0x7b, 0x00, 0xff, 0xcd, 0x69, 0x00, 0xff,
+ 0xe2, 0x65, 0x00, 0xff, 0xe2, 0x65, 0x00, 0xff,
+ 0xe2, 0x65, 0x00, 0xff, 0xe2, 0x65, 0x00, 0xff,
+ 0xe5, 0x5e, 0x00, 0xff, 0xe5, 0x5e, 0x00, 0xff,
+ 0xe5, 0x5a, 0x00, 0xff, 0xe5, 0x5a, 0x00, 0xff,
+ 0xe3, 0x57, 0x00, 0xff, 0xe6, 0x57, 0x00, 0xff,
+ 0xe9, 0x57, 0x00, 0xff, 0xec, 0x57, 0x00, 0xff,
+ 0xeb, 0x57, 0x00, 0xff, 0xeb, 0x57, 0x00, 0xff,
+ 0xeb, 0x57, 0x00, 0xff, 0xeb, 0x4f, 0x00, 0xff,
+ 0xeb, 0x51, 0x00, 0xff, 0xeb, 0x51, 0x00, 0xff,
+ 0xeb, 0x51, 0x00, 0xff, 0xeb, 0x51, 0x00, 0xff,
+ 0xe6, 0x52, 0x00, 0xff, 0xe9, 0x52, 0x00, 0xff,
+ 0xe9, 0x61, 0x00, 0xff, 0xe9, 0x6b, 0x00, 0xff,
+ 0xe8, 0x75, 0x00, 0xff, 0xea, 0x80, 0x00, 0xff,
+ 0xea, 0xa0, 0x00, 0xff, 0xec, 0xac, 0x00, 0xff,
+ 0xfa, 0xb0, 0x00, 0xff, 0xfa, 0xb0, 0x00, 0xff,
+ 0xf1, 0x8c, 0x00, 0xff, 0xf1, 0x8c, 0x00, 0xff,
+ 0xf7, 0x7d, 0x00, 0xff, 0xf7, 0x7d, 0x00, 0xff,
+ 0xf7, 0x7d, 0x00, 0xff, 0xf7, 0x7d, 0x00, 0xff,
+ 0xf2, 0x76, 0x00, 0xff, 0xf2, 0x76, 0x00, 0xff,
+ 0xf2, 0x76, 0x00, 0xff, 0xf2, 0x76, 0x00, 0xff,
+ 0xe9, 0x73, 0x00, 0xff, 0xec, 0x73, 0x00, 0xff,
+ 0xf1, 0x73, 0x00, 0xff, 0xf1, 0x73, 0x00, 0xff,
+ 0xed, 0x6f, 0x00, 0xff, 0xed, 0x6f, 0x00, 0xff,
+ 0xed, 0x6f, 0x00, 0xff, 0xed, 0x6f, 0x00, 0xff,
+ 0xef, 0x6b, 0x00, 0xff, 0xef, 0x6b, 0x00, 0xff,
+ 0xef, 0x6b, 0x00, 0xff, 0xef, 0x6b, 0x00, 0xff,
+ 0xeb, 0x6b, 0x00, 0xff, 0xeb, 0x6b, 0x00, 0xff,
+ 0xee, 0x7a, 0x00, 0xff, 0xee, 0x7a, 0x00, 0xff,
+ 0xec, 0x80, 0x00, 0xff, 0xec, 0x94, 0x00, 0xff,
+ 0xee, 0xac, 0x00, 0xff, 0xee, 0xc4, 0x00, 0xff,
+ ])
+}
+
+var img_32x32_rgb_etc2 = {
+ compressed: new Uint8Array([
+ 0x8d, 0x9d, 0xb6, 0x4a, 0xc4, 0x80, 0x83, 0x97,
+ 0x64, 0x74, 0x95, 0x4b, 0xae, 0xa2, 0x91, 0x05,
+ 0x74, 0x85, 0xa7, 0x25, 0xfa, 0xa6, 0xff, 0x42,
+ 0x64, 0x74, 0x85, 0x49, 0xae, 0xea, 0x89, 0xba,
+ 0x64, 0x74, 0x7c, 0x4b, 0xa8, 0x8a, 0xa4, 0x81,
+ 0x73, 0x73, 0x85, 0x29, 0xab, 0xa3, 0x3e, 0x2a,
+ 0x75, 0x74, 0x86, 0x25, 0xaa, 0x6e, 0x71, 0x11,
+ 0xbe, 0x7f, 0x04, 0x62, 0xbb, 0x6c, 0x86, 0xcf,
+
+ 0x74, 0x74, 0x97, 0x48, 0xec, 0xf0, 0x50, 0xe6,
+ 0x21, 0x30, 0x5f, 0x4a, 0xbd, 0xe8, 0x8e, 0x5b,
+ 0x10, 0x27, 0x3a, 0x46, 0x8c, 0xe2, 0x87, 0x10,
+ 0x1e, 0x18, 0x48, 0x07, 0x6b, 0x31, 0xe9, 0xa9,
+ 0x05, 0x13, 0x23, 0x57, 0x66, 0xd6, 0x34, 0xc4,
+ 0x43, 0x4e, 0x5c, 0x2b, 0xbd, 0xee, 0x59, 0xb4,
+ 0x57, 0x44, 0x55, 0x45, 0x44, 0x2b, 0xa9, 0x01,
+ 0x9a, 0x48, 0x41, 0x2e, 0x00, 0x31, 0xf0, 0xc5,
+
+ 0x6c, 0x7c, 0x9e, 0x4a, 0xfb, 0xf2, 0xd8, 0x58,
+ 0x18, 0x20, 0x4a, 0x27, 0x6b, 0x90, 0x0e, 0x35,
+ 0x00, 0x0b, 0x29, 0x2f, 0xcc, 0x29, 0xf0, 0x87,
+ 0x03, 0x10, 0x2f, 0x26, 0x76, 0x48, 0x29, 0x19,
+ 0x33, 0x18, 0x40, 0x26, 0x06, 0x76, 0x2e, 0x3e,
+ 0xb9, 0x06, 0x32, 0x2b, 0x02, 0x13, 0x10, 0x03,
+ 0x49, 0x15, 0xd0, 0x06, 0xcc, 0xe9, 0x02, 0x33,
+ 0x6a, 0x06, 0x6b, 0x33, 0xf1, 0x05, 0x01, 0xff,
+
+ 0x74, 0x95, 0xa6, 0x2c, 0x70, 0xf0, 0xbe, 0x5c,
+ 0x1d, 0x1d, 0x32, 0x4e, 0xfe, 0xf6, 0x4c, 0xe8,
+ 0x00, 0x01, 0x37, 0x2a, 0x0c, 0x63, 0x0c, 0x6b,
+ 0x23, 0x28, 0x43, 0x26, 0x03, 0x11, 0xea, 0xd1,
+ 0x63, 0x30, 0x66, 0x46, 0x05, 0x23, 0x5b, 0xa1,
+ 0xf3, 0x12, 0x93, 0x46, 0x0b, 0x57, 0x06, 0xa8,
+ 0x60, 0x86, 0x04, 0xf6, 0x18, 0x46, 0x80, 0x00,
+ 0x72, 0xa6, 0x0d, 0x73, 0x8b, 0x2f, 0x64, 0x48,
+
+ 0x50, 0x6c, 0x85, 0x6b, 0xec, 0x00, 0xc0, 0x1f,
+ 0x31, 0x40, 0x63, 0x6c, 0x71, 0xfc, 0x2d, 0x09,
+ 0x07, 0x01, 0x33, 0x6b, 0x6f, 0x73, 0xa1, 0x33,
+ 0xeb, 0x35, 0x53, 0x5a, 0x02, 0x7f, 0x31, 0x83,
+ 0x7b, 0x55, 0x67, 0x27, 0x84, 0x6f, 0x61, 0x29,
+ 0x51, 0x05, 0x68, 0x8b, 0xfe, 0x00, 0xfe, 0x21,
+ 0xe0, 0x01, 0x09, 0x22, 0x0c, 0x1f, 0x70, 0x03,
+ 0x72, 0x9e, 0x0c, 0x7a, 0xa1, 0x2f, 0x43, 0x87,
+
+ 0x77, 0x6d, 0x8f, 0x4a, 0xff, 0x70, 0x36, 0x3e,
+ 0x0e, 0x15, 0x43, 0x67, 0x13, 0x33, 0x62, 0xfc,
+ 0xb8, 0x04, 0xb1, 0xb3, 0x31, 0xcf, 0x01, 0x11,
+ 0x83, 0x44, 0x64, 0x47, 0x96, 0x18, 0x80, 0x5c,
+ 0x58, 0x14, 0xc9, 0x1a, 0x01, 0x77, 0x72, 0x08,
+ 0xd9, 0x0f, 0x08, 0x42, 0xef, 0xef, 0x89, 0x03,
+ 0x74, 0x80, 0x04, 0xf7, 0x14, 0x3f, 0x00, 0x42,
+ 0x74, 0x9c, 0x07, 0xf7, 0x9b, 0x2f, 0x43, 0x47,
+
+ 0x98, 0x84, 0xa5, 0x0e, 0xf1, 0xd2, 0x10, 0xec,
+ 0xb8, 0xbc, 0xfa, 0xc2, 0x10, 0x85, 0xc8, 0xd2,
+ 0x51, 0x05, 0x41, 0x2a, 0x01, 0x11, 0x30, 0x6f,
+ 0xb3, 0x10, 0x10, 0x03, 0x24, 0x57, 0x8b, 0x3a,
+ 0xca, 0x08, 0x10, 0x22, 0x73, 0x33, 0x9f, 0x89,
+ 0x6c, 0x80, 0x05, 0x72, 0x04, 0x0e, 0xe2, 0x46,
+ 0x70, 0x80, 0x04, 0x76, 0x1c, 0x56, 0xe2, 0x03,
+ 0x74, 0xa6, 0x0c, 0xfa, 0xa5, 0x37, 0x0a, 0x50,
+
+ 0xdf, 0x94, 0x8d, 0x4a, 0x73, 0x31, 0xb9, 0x9c,
+ 0xd2, 0x53, 0x53, 0x47, 0x77, 0x77, 0x99, 0x88,
+ 0x64, 0xae, 0x0d, 0xe6, 0x26, 0x5f, 0xf1, 0xe4,
+ 0x6a, 0xa0, 0x0c, 0xf2, 0x1e, 0x47, 0x71, 0xe3,
+ 0x72, 0xa2, 0x0c, 0xf3, 0x18, 0x4f, 0x71, 0xa0,
+ 0x70, 0x9c, 0x0c, 0x72, 0x1c, 0x47, 0x90, 0xa2,
+ 0x6e, 0x9a, 0x0c, 0x72, 0x3c, 0x6f, 0x70, 0x61,
+ 0x70, 0x54, 0x15, 0x73, 0xa7, 0x3f, 0x72, 0x22,
+ ]),
+ decompressed: new Uint8Array([
+ 0xa9, 0xb9, 0xd2, 0xff, 0xa9, 0xb9, 0xd2, 0xff,
+ 0x90, 0xa1, 0xc2, 0xff, 0x7c, 0x8d, 0xae, 0xff,
+ 0x80, 0x90, 0xb1, 0xff, 0x6c, 0x7c, 0x9d, 0xff,
+ 0x80, 0x90, 0xb1, 0xff, 0x80, 0x90, 0xb1, 0xff,
+ 0x7c, 0x8d, 0xaf, 0xff, 0x7c, 0x8d, 0xaf, 0xff,
+ 0x88, 0x99, 0xbb, 0xff, 0x66, 0x77, 0x99, 0xff,
+ 0x6f, 0x80, 0x91, 0xff, 0x83, 0x94, 0xa5, 0xff,
+ 0x83, 0x94, 0xa5, 0xff, 0x6f, 0x80, 0x91, 0xff,
+ 0x80, 0x90, 0x98, 0xff, 0x6c, 0x7c, 0x84, 0xff,
+ 0x6c, 0x7c, 0x84, 0xff, 0x6c, 0x7c, 0x84, 0xff,
+ 0x72, 0x72, 0x83, 0xff, 0x7c, 0x7c, 0x8d, 0xff,
+ 0x72, 0x72, 0x83, 0xff, 0x88, 0x88, 0x99, 0xff,
+ 0x88, 0x88, 0x99, 0xff, 0x88, 0x88, 0x99, 0xff,
+ 0x88, 0x88, 0x99, 0xff, 0x88, 0x88, 0x99, 0xff,
+ 0x7d, 0x7e, 0x82, 0xff, 0x8f, 0x8d, 0x8f, 0xff,
+ 0xa0, 0x9d, 0x9c, 0xff, 0xb2, 0xac, 0xa9, 0xff,
+ 0xa9, 0xb9, 0xd2, 0xff, 0x95, 0xa5, 0xbe, 0xff,
+ 0x90, 0xa1, 0xc2, 0xff, 0x7c, 0x8d, 0xae, 0xff,
+ 0x5a, 0x6a, 0x8b, 0xff, 0x5a, 0x6a, 0x8b, 0xff,
+ 0x5a, 0x6a, 0x8b, 0xff, 0x5a, 0x6a, 0x8b, 0xff,
+ 0x66, 0x77, 0x99, 0xff, 0x72, 0x83, 0xa5, 0xff,
+ 0x66, 0x77, 0x99, 0xff, 0x66, 0x77, 0x99, 0xff,
+ 0x49, 0x5a, 0x6b, 0xff, 0x49, 0x5a, 0x6b, 0xff,
+ 0x5d, 0x6e, 0x7f, 0xff, 0x5d, 0x6e, 0x7f, 0xff,
+ 0x5a, 0x6a, 0x72, 0xff, 0x6c, 0x7c, 0x84, 0xff,
+ 0x6c, 0x7c, 0x84, 0xff, 0x46, 0x56, 0x5e, 0xff,
+ 0x66, 0x66, 0x77, 0xff, 0x66, 0x66, 0x77, 0xff,
+ 0x66, 0x66, 0x77, 0xff, 0x66, 0x66, 0x77, 0xff,
+ 0x72, 0x72, 0x83, 0xff, 0x72, 0x72, 0x83, 0xff,
+ 0x72, 0x72, 0x83, 0xff, 0x66, 0x66, 0x77, 0xff,
+ 0x82, 0x6c, 0x71, 0xff, 0x94, 0x7b, 0x7e, 0xff,
+ 0xa5, 0x8b, 0x8b, 0xff, 0xb7, 0x9a, 0x98, 0xff,
+ 0xa9, 0xb9, 0xd2, 0xff, 0x95, 0xa5, 0xbe, 0xff,
+ 0x6a, 0x7b, 0x9c, 0xff, 0x6a, 0x7b, 0x9c, 0xff,
+ 0x5f, 0x6f, 0x98, 0xff, 0x4b, 0x5b, 0x84, 0xff,
+ 0x39, 0x49, 0x72, 0xff, 0x4b, 0x5b, 0x84, 0xff,
+ 0x3f, 0x50, 0x72, 0xff, 0x55, 0x66, 0x88, 0xff,
+ 0x55, 0x66, 0x88, 0xff, 0x33, 0x44, 0x66, 0xff,
+ 0x4d, 0x4d, 0x5e, 0xff, 0x3b, 0x3b, 0x4c, 0xff,
+ 0x3b, 0x3b, 0x4c, 0xff, 0x4d, 0x4d, 0x5e, 0xff,
+ 0x4b, 0x5b, 0x63, 0xff, 0x4b, 0x5b, 0x63, 0xff,
+ 0x5f, 0x6f, 0x77, 0xff, 0x4b, 0x5b, 0x63, 0xff,
+ 0x3c, 0x3c, 0x5e, 0xff, 0x3c, 0x3c, 0x5e, 0xff,
+ 0x50, 0x50, 0x72, 0xff, 0x3c, 0x3c, 0x5e, 0xff,
+ 0x50, 0x3f, 0x61, 0xff, 0x50, 0x3f, 0x61, 0xff,
+ 0x5a, 0x49, 0x6b, 0xff, 0x66, 0x55, 0x77, 0xff,
+ 0x88, 0x5a, 0x5f, 0xff, 0x99, 0x69, 0x6c, 0xff,
+ 0xab, 0x79, 0x79, 0xff, 0xbc, 0x88, 0x86, 0xff,
+ 0x95, 0xa5, 0xbe, 0xff, 0x6f, 0x7f, 0x98, 0xff,
+ 0x7c, 0x8d, 0xae, 0xff, 0x56, 0x67, 0x88, 0xff,
+ 0x4b, 0x5b, 0x84, 0xff, 0x39, 0x49, 0x72, 0xff,
+ 0x39, 0x49, 0x72, 0xff, 0x25, 0x35, 0x5e, 0xff,
+ 0x49, 0x5a, 0x7c, 0xff, 0x3f, 0x50, 0x72, 0xff,
+ 0x33, 0x44, 0x66, 0xff, 0x33, 0x44, 0x66, 0xff,
+ 0x27, 0x27, 0x38, 0xff, 0x27, 0x27, 0x38, 0xff,
+ 0x27, 0x27, 0x38, 0xff, 0x27, 0x27, 0x38, 0xff,
+ 0x39, 0x49, 0x51, 0xff, 0x25, 0x35, 0x3d, 0xff,
+ 0x39, 0x49, 0x51, 0xff, 0x25, 0x35, 0x3d, 0xff,
+ 0x50, 0x50, 0x72, 0xff, 0x2a, 0x2a, 0x4c, 0xff,
+ 0x16, 0x16, 0x38, 0xff, 0x2a, 0x2a, 0x4c, 0xff,
+ 0x50, 0x3f, 0x61, 0xff, 0x5a, 0x49, 0x6b, 0xff,
+ 0x50, 0x3f, 0x61, 0xff, 0x50, 0x3f, 0x61, 0xff,
+ 0x8d, 0x48, 0x4e, 0xff, 0x9e, 0x57, 0x5b, 0xff,
+ 0xb0, 0x67, 0x68, 0xff, 0xc1, 0x76, 0x75, 0xff,
+ 0x80, 0x80, 0xa2, 0xff, 0x6e, 0x6e, 0x90, 0xff,
+ 0x4d, 0x4d, 0x80, 0xff, 0x61, 0x61, 0x94, 0xff,
+ 0x3e, 0x4e, 0x77, 0xff, 0x3e, 0x4e, 0x77, 0xff,
+ 0x20, 0x28, 0x49, 0xff, 0x20, 0x28, 0x49, 0xff,
+ 0x19, 0x2a, 0x42, 0xff, 0x2d, 0x3e, 0x56, 0xff,
+ 0x21, 0x29, 0x5b, 0xff, 0x15, 0x1d, 0x4f, 0xff,
+ 0x10, 0x10, 0x42, 0xff, 0x16, 0x16, 0x48, 0xff,
+ 0x10, 0x10, 0x42, 0xff, 0x1a, 0x1a, 0x4c, 0xff,
+ 0x11, 0x11, 0x33, 0xff, 0x22, 0x33, 0x55, 0xff,
+ 0x11, 0x11, 0x33, 0xff, 0x32, 0x43, 0x65, 0xff,
+ 0x47, 0x4f, 0x5f, 0xff, 0x53, 0x5b, 0x6b, 0xff,
+ 0x31, 0x39, 0x49, 0xff, 0x31, 0x39, 0x49, 0xff,
+ 0x38, 0x27, 0x38, 0xff, 0x5e, 0x4d, 0x5e, 0xff,
+ 0x72, 0x61, 0x72, 0xff, 0x5e, 0x4d, 0x5e, 0xff,
+ 0x8b, 0x39, 0x31, 0xff, 0x97, 0x45, 0x3d, 0xff,
+ 0xba, 0x57, 0x57, 0xff, 0xd7, 0x74, 0x74, 0xff,
+ 0x94, 0x94, 0xb6, 0xff, 0x5a, 0x5a, 0x7c, 0xff,
+ 0x4d, 0x4d, 0x80, 0xff, 0x3b, 0x3b, 0x6e, 0xff,
+ 0x3e, 0x4e, 0x77, 0xff, 0x18, 0x28, 0x51, 0xff,
+ 0x46, 0x4e, 0x6f, 0xff, 0x20, 0x28, 0x49, 0xff,
+ 0x07, 0x18, 0x30, 0xff, 0x07, 0x18, 0x30, 0xff,
+ 0x21, 0x29, 0x5b, 0xff, 0x15, 0x1d, 0x4f, 0xff,
+ 0x1a, 0x1a, 0x4c, 0xff, 0x10, 0x10, 0x42, 0xff,
+ 0x16, 0x16, 0x48, 0xff, 0x10, 0x10, 0x42, 0xff,
+ 0x22, 0x33, 0x55, 0xff, 0x11, 0x11, 0x33, 0xff,
+ 0x22, 0x33, 0x55, 0xff, 0x12, 0x23, 0x45, 0xff,
+ 0x3d, 0x45, 0x55, 0xff, 0x31, 0x39, 0x49, 0xff,
+ 0x47, 0x4f, 0x5f, 0xff, 0x3d, 0x45, 0x55, 0xff,
+ 0x4c, 0x3b, 0x4c, 0xff, 0x4c, 0x3b, 0x4c, 0xff,
+ 0x5e, 0x4d, 0x5e, 0xff, 0x72, 0x61, 0x72, 0xff,
+ 0xa1, 0x4f, 0x47, 0xff, 0x97, 0x45, 0x3d, 0xff,
+ 0xba, 0x57, 0x57, 0xff, 0xd7, 0x74, 0x74, 0xff,
+ 0x94, 0x94, 0xb6, 0xff, 0x5a, 0x5a, 0x7c, 0xff,
+ 0x3b, 0x3b, 0x6e, 0xff, 0x27, 0x27, 0x5a, 0xff,
+ 0x2a, 0x3a, 0x63, 0xff, 0x04, 0x14, 0x3d, 0xff,
+ 0x0c, 0x14, 0x35, 0xff, 0x32, 0x3a, 0x5b, 0xff,
+ 0x19, 0x2a, 0x42, 0xff, 0x07, 0x18, 0x30, 0xff,
+ 0x00, 0x07, 0x39, 0xff, 0x15, 0x1d, 0x4f, 0xff,
+ 0x0d, 0x1d, 0x4f, 0xff, 0x0d, 0x1d, 0x4f, 0xff,
+ 0x0d, 0x1d, 0x4f, 0xff, 0x00, 0x07, 0x39, 0xff,
+ 0x12, 0x23, 0x45, 0xff, 0x12, 0x23, 0x45, 0xff,
+ 0x12, 0x23, 0x45, 0xff, 0x22, 0x33, 0x55, 0xff,
+ 0x3d, 0x1c, 0x1c, 0xff, 0x51, 0x30, 0x30, 0xff,
+ 0x51, 0x30, 0x30, 0xff, 0x77, 0x56, 0x56, 0xff,
+ 0x7c, 0x49, 0x5a, 0xff, 0x7c, 0x49, 0x5a, 0xff,
+ 0x72, 0x3f, 0x50, 0xff, 0x72, 0x3f, 0x50, 0xff,
+ 0xad, 0x5b, 0x53, 0xff, 0xad, 0x5b, 0x53, 0xff,
+ 0xba, 0x57, 0x57, 0xff, 0xd7, 0x74, 0x74, 0xff,
+ 0x80, 0x80, 0xa2, 0xff, 0x5a, 0x5a, 0x7c, 0xff,
+ 0x3b, 0x3b, 0x6e, 0xff, 0x3b, 0x3b, 0x6e, 0xff,
+ 0x04, 0x14, 0x3d, 0xff, 0x18, 0x28, 0x51, 0xff,
+ 0x0c, 0x14, 0x35, 0xff, 0x0c, 0x14, 0x35, 0xff,
+ 0x19, 0x2a, 0x42, 0xff, 0x07, 0x18, 0x30, 0xff,
+ 0x0b, 0x13, 0x45, 0xff, 0x00, 0x07, 0x39, 0xff,
+ 0x19, 0x29, 0x5b, 0xff, 0x19, 0x29, 0x5b, 0xff,
+ 0x00, 0x07, 0x39, 0xff, 0x19, 0x29, 0x5b, 0xff,
+ 0x11, 0x11, 0x33, 0xff, 0x12, 0x23, 0x45, 0xff,
+ 0x11, 0x11, 0x33, 0xff, 0x11, 0x11, 0x33, 0xff,
+ 0x51, 0x30, 0x30, 0xff, 0x3d, 0x1c, 0x1c, 0xff,
+ 0x3d, 0x1c, 0x1c, 0xff, 0x51, 0x30, 0x30, 0xff,
+ 0x72, 0x3f, 0x50, 0xff, 0x7c, 0x49, 0x5a, 0xff,
+ 0x88, 0x55, 0x66, 0xff, 0x88, 0x55, 0x66, 0xff,
+ 0xa1, 0x4f, 0x47, 0xff, 0xad, 0x5b, 0x53, 0xff,
+ 0xba, 0x57, 0x57, 0xff, 0xd7, 0x74, 0x74, 0xff,
+ 0x74, 0x84, 0xa5, 0xff, 0x4e, 0x5e, 0x7f, 0xff,
+ 0x41, 0x51, 0x83, 0xff, 0x2d, 0x3d, 0x6f, 0xff,
+ 0x29, 0x32, 0x5b, 0xff, 0x07, 0x10, 0x39, 0xff,
+ 0x13, 0x1c, 0x45, 0xff, 0x1d, 0x26, 0x4f, 0xff,
+ 0x00, 0x00, 0x18, 0xff, 0x05, 0x0d, 0x2e, 0xff,
+ 0x05, 0x0d, 0x2e, 0xff, 0x11, 0x19, 0x3a, 0xff,
+ 0x11, 0x21, 0x3a, 0xff, 0x11, 0x21, 0x3a, 0xff,
+ 0x29, 0x21, 0x32, 0xff, 0x13, 0x0b, 0x1c, 0xff,
+ 0x36, 0x1d, 0x47, 0xff, 0x20, 0x07, 0x31, 0xff,
+ 0x4f, 0x1d, 0x47, 0xff, 0x4f, 0x1d, 0x47, 0xff,
+ 0x56, 0x34, 0x45, 0xff, 0x76, 0x54, 0x65, 0xff,
+ 0x87, 0x32, 0x54, 0xff, 0x67, 0x12, 0x34, 0xff,
+ 0x93, 0x00, 0x00, 0xff, 0x82, 0x1c, 0x1c, 0xff,
+ 0xb0, 0x4a, 0x4a, 0xff, 0xb0, 0x4a, 0x4a, 0xff,
+ 0xd2, 0x5b, 0x5b, 0xff, 0xd2, 0x39, 0x39, 0xff,
+ 0xd2, 0x5b, 0x5b, 0xff, 0xe8, 0x71, 0x71, 0xff,
+ 0x62, 0x72, 0x93, 0xff, 0x62, 0x72, 0x93, 0xff,
+ 0x41, 0x51, 0x83, 0xff, 0x41, 0x51, 0x83, 0xff,
+ 0x1d, 0x26, 0x4f, 0xff, 0x29, 0x32, 0x5b, 0xff,
+ 0x07, 0x10, 0x39, 0xff, 0x13, 0x1c, 0x45, 0xff,
+ 0x11, 0x19, 0x3a, 0xff, 0x00, 0x03, 0x24, 0xff,
+ 0x05, 0x0d, 0x2e, 0xff, 0x11, 0x19, 0x3a, 0xff,
+ 0x05, 0x15, 0x2e, 0xff, 0x05, 0x15, 0x2e, 0xff,
+ 0x13, 0x0b, 0x1c, 0xff, 0x07, 0x00, 0x10, 0xff,
+ 0x20, 0x07, 0x31, 0xff, 0x20, 0x07, 0x31, 0xff,
+ 0x39, 0x07, 0x31, 0xff, 0x5b, 0x29, 0x53, 0xff,
+ 0x56, 0x34, 0x45, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0x76, 0x54, 0x65, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0x82, 0x1c, 0x1c, 0xff, 0x93, 0x00, 0x00, 0xff,
+ 0x82, 0x1c, 0x1c, 0xff, 0xb0, 0x4a, 0x4a, 0xff,
+ 0xd2, 0x39, 0x39, 0xff, 0xd2, 0x39, 0x39, 0xff,
+ 0xe8, 0x4f, 0x4f, 0xff, 0xe8, 0x71, 0x71, 0xff,
+ 0x74, 0x84, 0xa5, 0xff, 0x4e, 0x5e, 0x7f, 0xff,
+ 0x53, 0x63, 0x95, 0xff, 0x2d, 0x3d, 0x6f, 0xff,
+ 0x29, 0x32, 0x6b, 0xff, 0x1d, 0x26, 0x5f, 0xff,
+ 0x29, 0x32, 0x6b, 0xff, 0x13, 0x1c, 0x55, 0xff,
+ 0x2a, 0x4b, 0x5b, 0xff, 0x0d, 0x2e, 0x3e, 0xff,
+ 0x00, 0x14, 0x24, 0xff, 0x00, 0x00, 0x07, 0xff,
+ 0x05, 0x15, 0x2e, 0xff, 0x00, 0x0b, 0x24, 0xff,
+ 0x13, 0x0b, 0x1c, 0xff, 0x13, 0x0b, 0x1c, 0xff,
+ 0x20, 0x07, 0x31, 0xff, 0x2c, 0x13, 0x3d, 0xff,
+ 0x39, 0x07, 0x31, 0xff, 0x4f, 0x1d, 0x47, 0xff,
+ 0x87, 0x32, 0x54, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0x87, 0x32, 0x54, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0xb0, 0x4a, 0x4a, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xc1, 0x17, 0x17, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xd2, 0x5b, 0x5b, 0xff, 0xd2, 0x39, 0x39, 0xff,
+ 0xe8, 0x4f, 0x4f, 0xff, 0xe8, 0x71, 0x71, 0xff,
+ 0x88, 0x98, 0xb9, 0xff, 0x62, 0x72, 0x93, 0xff,
+ 0x2d, 0x3d, 0x6f, 0xff, 0x2d, 0x3d, 0x6f, 0xff,
+ 0x1d, 0x26, 0x5f, 0xff, 0x13, 0x1c, 0x55, 0xff,
+ 0x07, 0x10, 0x49, 0xff, 0x1d, 0x26, 0x5f, 0xff,
+ 0x00, 0x14, 0x24, 0xff, 0x2a, 0x4b, 0x5b, 0xff,
+ 0x00, 0x14, 0x24, 0xff, 0x00, 0x00, 0x07, 0xff,
+ 0x00, 0x00, 0x18, 0xff, 0x05, 0x15, 0x2e, 0xff,
+ 0x29, 0x21, 0x32, 0xff, 0x1d, 0x15, 0x26, 0xff,
+ 0x42, 0x29, 0x53, 0xff, 0x36, 0x1d, 0x47, 0xff,
+ 0x5b, 0x29, 0x53, 0xff, 0x4f, 0x1d, 0x47, 0xff,
+ 0x87, 0x32, 0x54, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0x87, 0x32, 0x54, 0xff, 0x87, 0x32, 0x54, 0xff,
+ 0xc1, 0x17, 0x17, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xc1, 0x17, 0x17, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xd2, 0x39, 0x39, 0xff, 0xd2, 0x39, 0x39, 0xff,
+ 0xe8, 0x4f, 0x4f, 0xff, 0xe8, 0x71, 0x71, 0xff,
+ 0x7c, 0x9e, 0xaf, 0xff, 0x66, 0x88, 0x99, 0xff,
+ 0x51, 0x62, 0x73, 0xff, 0x1a, 0x2b, 0x3c, 0xff,
+ 0x21, 0x21, 0x3a, 0xff, 0x0f, 0x0f, 0x28, 0xff,
+ 0x0d, 0x0d, 0x4f, 0xff, 0x00, 0x00, 0x35, 0xff,
+ 0x00, 0x00, 0x20, 0xff, 0x05, 0x05, 0x36, 0xff,
+ 0x09, 0x11, 0x32, 0xff, 0x09, 0x11, 0x32, 0xff,
+ 0x10, 0x18, 0x31, 0xff, 0x10, 0x18, 0x31, 0xff,
+ 0x34, 0x24, 0x55, 0xff, 0x3e, 0x2e, 0x5f, 0xff,
+ 0x46, 0x14, 0x46, 0xff, 0x6c, 0x3a, 0x6c, 0xff,
+ 0x6a, 0x20, 0x41, 0xff, 0x8c, 0x42, 0x63, 0xff,
+ 0x99, 0x33, 0x44, 0xff, 0x99, 0x33, 0x44, 0xff,
+ 0x99, 0x33, 0x44, 0xff, 0xbb, 0x11, 0x22, 0xff,
+ 0xc3, 0x06, 0x04, 0xff, 0xcd, 0x0b, 0x0b, 0xff,
+ 0xd7, 0x0f, 0x12, 0xff, 0xe1, 0x14, 0x19, 0xff,
+ 0xe7, 0x26, 0x28, 0xff, 0xe7, 0x3f, 0x44, 0xff,
+ 0xe7, 0x59, 0x5f, 0xff, 0xe7, 0x72, 0x7b, 0xff,
+ 0x7c, 0x9e, 0xaf, 0xff, 0x72, 0x94, 0xa5, 0xff,
+ 0x6e, 0x7f, 0x90, 0xff, 0x1a, 0x2b, 0x3c, 0xff,
+ 0x0f, 0x0f, 0x28, 0xff, 0x00, 0x00, 0x14, 0xff,
+ 0x00, 0x00, 0x35, 0xff, 0x00, 0x00, 0x35, 0xff,
+ 0x00, 0x00, 0x20, 0xff, 0x00, 0x00, 0x20, 0xff,
+ 0x09, 0x11, 0x32, 0xff, 0x09, 0x11, 0x32, 0xff,
+ 0x26, 0x2e, 0x47, 0xff, 0x26, 0x2e, 0x47, 0xff,
+ 0x28, 0x18, 0x49, 0xff, 0x4a, 0x3a, 0x6b, 0xff,
+ 0x5a, 0x28, 0x5a, 0xff, 0x46, 0x14, 0x46, 0xff,
+ 0x8c, 0x42, 0x63, 0xff, 0x80, 0x36, 0x57, 0xff,
+ 0x99, 0x33, 0x44, 0xff, 0xa4, 0x3e, 0x4f, 0xff,
+ 0x8e, 0x28, 0x39, 0xff, 0xbb, 0x11, 0x22, 0xff,
+ 0xc7, 0x05, 0x03, 0xff, 0xd1, 0x09, 0x0a, 0xff,
+ 0xdb, 0x0e, 0x11, 0xff, 0xe5, 0x12, 0x18, 0xff,
+ 0xe9, 0x25, 0x26, 0xff, 0xe9, 0x3e, 0x42, 0xff,
+ 0xe9, 0x58, 0x5d, 0xff, 0xe9, 0x71, 0x79, 0xff,
+ 0x88, 0xaa, 0xbb, 0xff, 0x66, 0x88, 0x99, 0xff,
+ 0x6e, 0x7f, 0x90, 0xff, 0x37, 0x48, 0x59, 0xff,
+ 0x0f, 0x0f, 0x28, 0xff, 0x00, 0x00, 0x14, 0xff,
+ 0x00, 0x00, 0x18, 0xff, 0x00, 0x00, 0x18, 0xff,
+ 0x05, 0x05, 0x36, 0xff, 0x00, 0x00, 0x20, 0xff,
+ 0x00, 0x00, 0x0c, 0xff, 0x09, 0x11, 0x32, 0xff,
+ 0x26, 0x2e, 0x47, 0xff, 0x32, 0x3a, 0x53, 0xff,
+ 0x3e, 0x2e, 0x5f, 0xff, 0x4a, 0x3a, 0x6b, 0xff,
+ 0x6c, 0x3a, 0x6c, 0xff, 0x6c, 0x3a, 0x6c, 0xff,
+ 0x76, 0x2c, 0x4d, 0xff, 0x8c, 0x42, 0x63, 0xff,
+ 0x99, 0x33, 0x44, 0xff, 0x99, 0x33, 0x44, 0xff,
+ 0xa4, 0x3e, 0x4f, 0xff, 0xbb, 0x11, 0x22, 0xff,
+ 0xcb, 0x03, 0x02, 0xff, 0xd5, 0x08, 0x09, 0xff,
+ 0xdf, 0x0c, 0x10, 0xff, 0xe9, 0x11, 0x17, 0xff,
+ 0xeb, 0x24, 0x24, 0xff, 0xeb, 0x3d, 0x40, 0xff,
+ 0xeb, 0x57, 0x5b, 0xff, 0xeb, 0x70, 0x77, 0xff,
+ 0x88, 0xaa, 0xbb, 0xff, 0x72, 0x94, 0xa5, 0xff,
+ 0x6e, 0x7f, 0x90, 0xff, 0x6e, 0x7f, 0x90, 0xff,
+ 0x35, 0x35, 0x4e, 0xff, 0x00, 0x00, 0x14, 0xff,
+ 0x00, 0x00, 0x18, 0xff, 0x00, 0x00, 0x35, 0xff,
+ 0x11, 0x11, 0x42, 0xff, 0x05, 0x05, 0x36, 0xff,
+ 0x00, 0x00, 0x0c, 0xff, 0x09, 0x11, 0x32, 0xff,
+ 0x26, 0x2e, 0x47, 0xff, 0x32, 0x3a, 0x53, 0xff,
+ 0x4a, 0x3a, 0x6b, 0xff, 0x4a, 0x3a, 0x6b, 0xff,
+ 0x6c, 0x3a, 0x6c, 0xff, 0x80, 0x4e, 0x80, 0xff,
+ 0x8c, 0x42, 0x63, 0xff, 0x80, 0x36, 0x57, 0xff,
+ 0xa4, 0x3e, 0x4f, 0xff, 0xa4, 0x3e, 0x4f, 0xff,
+ 0x99, 0x33, 0x44, 0xff, 0xbb, 0x11, 0x22, 0xff,
+ 0xcf, 0x02, 0x01, 0xff, 0xd9, 0x06, 0x08, 0xff,
+ 0xe3, 0x0b, 0x0f, 0xff, 0xed, 0x0f, 0x16, 0xff,
+ 0xed, 0x23, 0x22, 0xff, 0xed, 0x3c, 0x3e, 0xff,
+ 0xed, 0x56, 0x59, 0xff, 0xed, 0x6f, 0x75, 0xff,
+ 0x7c, 0x95, 0xae, 0xff, 0x7c, 0x95, 0xae, 0xff,
+ 0x5f, 0x78, 0x91, 0xff, 0x5f, 0x78, 0x91, 0xff,
+ 0x5d, 0x6e, 0x90, 0xff, 0x26, 0x37, 0x59, 0xff,
+ 0x00, 0x00, 0x09, 0xff, 0x04, 0x00, 0x26, 0xff,
+ 0x13, 0x13, 0x46, 0xff, 0x13, 0x13, 0x46, 0xff,
+ 0x13, 0x13, 0x46, 0xff, 0x33, 0x00, 0x11, 0xff,
+ 0x3e, 0x1c, 0x3e, 0xff, 0x55, 0x33, 0x55, 0xff,
+ 0x6c, 0x4a, 0x6c, 0xff, 0x6c, 0x4a, 0x6c, 0xff,
+ 0x6a, 0x41, 0x52, 0xff, 0x80, 0x57, 0x68, 0xff,
+ 0x8c, 0x63, 0x74, 0xff, 0x80, 0x57, 0x68, 0xff,
+ 0x9f, 0x17, 0x17, 0xff, 0xb5, 0x2d, 0x2d, 0xff,
+ 0xb5, 0x2d, 0x2d, 0xff, 0xd2, 0x06, 0x06, 0xff,
+ 0xd6, 0x00, 0x00, 0xff, 0xe2, 0x00, 0x03, 0xff,
+ 0xe9, 0x0a, 0x12, 0xff, 0xef, 0x10, 0x18, 0xff,
+ 0xe7, 0x1e, 0x20, 0xff, 0xea, 0x3f, 0x3e, 0xff,
+ 0xed, 0x60, 0x5b, 0xff, 0xf0, 0x80, 0x79, 0xff,
+ 0x7c, 0x95, 0xae, 0xff, 0x5f, 0x78, 0x91, 0xff,
+ 0x5f, 0x78, 0x91, 0xff, 0x45, 0x5e, 0x77, 0xff,
+ 0x40, 0x51, 0x73, 0xff, 0x26, 0x37, 0x59, 0xff,
+ 0x1e, 0x0d, 0x40, 0xff, 0x00, 0x00, 0x09, 0xff,
+ 0x13, 0x13, 0x46, 0xff, 0x13, 0x13, 0x46, 0xff,
+ 0x33, 0x33, 0x66, 0xff, 0x13, 0x13, 0x46, 0xff,
+ 0x3e, 0x1c, 0x3e, 0xff, 0x55, 0x33, 0x55, 0xff,
+ 0x55, 0x33, 0x55, 0xff, 0x6c, 0x4a, 0x6c, 0xff,
+ 0x76, 0x4d, 0x5e, 0xff, 0x6a, 0x41, 0x52, 0xff,
+ 0x80, 0x57, 0x68, 0xff, 0x8c, 0x63, 0x74, 0xff,
+ 0xb5, 0x2d, 0x2d, 0xff, 0x9f, 0x17, 0x17, 0xff,
+ 0xd2, 0x06, 0x06, 0xff, 0xd2, 0x06, 0x06, 0xff,
+ 0xd6, 0x00, 0x00, 0xff, 0xec, 0x05, 0x0d, 0xff,
+ 0xe9, 0x0a, 0x12, 0xff, 0xef, 0x10, 0x18, 0xff,
+ 0xe8, 0x1e, 0x1f, 0xff, 0xeb, 0x3e, 0x3d, 0xff,
+ 0xee, 0x5f, 0x5a, 0xff, 0xf1, 0x80, 0x78, 0xff,
+ 0x6f, 0x67, 0x88, 0xff, 0x5b, 0x53, 0x74, 0xff,
+ 0x49, 0x41, 0x62, 0xff, 0x35, 0x2d, 0x4e, 0xff,
+ 0x26, 0x37, 0x59, 0xff, 0x26, 0x37, 0x59, 0xff,
+ 0x3b, 0x2a, 0x5d, 0xff, 0x04, 0x00, 0x26, 0xff,
+ 0x33, 0x00, 0x11, 0xff, 0x33, 0x33, 0x66, 0xff,
+ 0x33, 0x33, 0x66, 0xff, 0x33, 0x33, 0x66, 0xff,
+ 0x55, 0x33, 0x55, 0xff, 0x55, 0x33, 0x55, 0xff,
+ 0x77, 0x33, 0x55, 0xff, 0x77, 0x33, 0x55, 0xff,
+ 0x8f, 0x34, 0x55, 0xff, 0x8f, 0x34, 0x55, 0xff,
+ 0x8f, 0x34, 0x55, 0xff, 0xa5, 0x4a, 0x6b, 0xff,
+ 0xb5, 0x2d, 0x2d, 0xff, 0xb5, 0x2d, 0x2d, 0xff,
+ 0xd2, 0x06, 0x06, 0xff, 0xd2, 0x06, 0x06, 0xff,
+ 0xe2, 0x00, 0x03, 0xff, 0xec, 0x05, 0x0d, 0xff,
+ 0xe5, 0x06, 0x0e, 0xff, 0xef, 0x10, 0x18, 0xff,
+ 0xe9, 0x1d, 0x1e, 0xff, 0xec, 0x3e, 0x3c, 0xff,
+ 0xef, 0x5f, 0x59, 0xff, 0xf2, 0x7f, 0x77, 0xff,
+ 0x6f, 0x67, 0x88, 0xff, 0x5b, 0x53, 0x74, 0xff,
+ 0x49, 0x41, 0x62, 0xff, 0x35, 0x2d, 0x4e, 0xff,
+ 0x09, 0x1a, 0x3c, 0xff, 0x26, 0x37, 0x59, 0xff,
+ 0x3b, 0x2a, 0x5d, 0xff, 0x1e, 0x0d, 0x40, 0xff,
+ 0x33, 0x00, 0x11, 0xff, 0x33, 0x00, 0x11, 0xff,
+ 0x33, 0x33, 0x66, 0xff, 0x53, 0x53, 0x86, 0xff,
+ 0x55, 0x33, 0x55, 0xff, 0x6c, 0x4a, 0x6c, 0xff,
+ 0x77, 0x33, 0x55, 0xff, 0x77, 0x33, 0x55, 0xff,
+ 0x83, 0x28, 0x49, 0xff, 0x99, 0x3e, 0x5f, 0xff,
+ 0x99, 0x3e, 0x5f, 0xff, 0x8f, 0x34, 0x55, 0xff,
+ 0xb5, 0x2d, 0x2d, 0xff, 0xb5, 0x2d, 0x2d, 0xff,
+ 0xd2, 0x06, 0x06, 0xff, 0xd2, 0x06, 0x06, 0xff,
+ 0xe2, 0x00, 0x03, 0xff, 0xec, 0x05, 0x0d, 0xff,
+ 0xe5, 0x06, 0x0e, 0xff, 0xe9, 0x0a, 0x12, 0xff,
+ 0xea, 0x1d, 0x1d, 0xff, 0xed, 0x3d, 0x3b, 0xff,
+ 0xf0, 0x5e, 0x58, 0xff, 0xf3, 0x7f, 0x76, 0xff,
+ 0x7c, 0x74, 0x95, 0xff, 0x56, 0x4e, 0x6f, 0xff,
+ 0x62, 0x49, 0x7b, 0xff, 0x4e, 0x35, 0x67, 0xff,
+ 0x44, 0x33, 0x66, 0xff, 0x34, 0x23, 0x56, 0xff,
+ 0x44, 0x33, 0x66, 0xff, 0x44, 0x33, 0x66, 0xff,
+ 0x56, 0x23, 0x56, 0xff, 0x67, 0x00, 0x01, 0xff,
+ 0x56, 0x23, 0x56, 0xff, 0x76, 0x43, 0x76, 0xff,
+ 0x8d, 0x4b, 0x6c, 0xff, 0x67, 0x25, 0x46, 0xff,
+ 0x8d, 0x4b, 0x6c, 0xff, 0x7b, 0x39, 0x5a, 0xff,
+ 0x9f, 0x28, 0x39, 0xff, 0x9f, 0x28, 0x39, 0xff,
+ 0x9f, 0x28, 0x39, 0xff, 0xb5, 0x0b, 0x0b, 0xff,
+ 0xc1, 0x00, 0x00, 0xff, 0xe7, 0x11, 0x11, 0xff,
+ 0xdf, 0x00, 0x00, 0xff, 0xe9, 0x02, 0x0a, 0xff,
+ 0xeb, 0x00, 0x04, 0xff, 0xec, 0x05, 0x0a, 0xff,
+ 0xed, 0x0a, 0x10, 0xff, 0xee, 0x0f, 0x16, 0xff,
+ 0xeb, 0x1c, 0x1c, 0xff, 0xec, 0x3c, 0x3b, 0xff,
+ 0xed, 0x5c, 0x59, 0xff, 0xee, 0x7b, 0x78, 0xff,
+ 0x90, 0x88, 0xa9, 0xff, 0x56, 0x4e, 0x6f, 0xff,
+ 0x4e, 0x35, 0x67, 0xff, 0x4e, 0x35, 0x67, 0xff,
+ 0x44, 0x33, 0x66, 0xff, 0x34, 0x23, 0x56, 0xff,
+ 0x34, 0x23, 0x56, 0xff, 0x54, 0x43, 0x76, 0xff,
+ 0x76, 0x43, 0x76, 0xff, 0x87, 0x10, 0x21, 0xff,
+ 0x87, 0x10, 0x21, 0xff, 0x76, 0x43, 0x76, 0xff,
+ 0x8d, 0x4b, 0x6c, 0xff, 0x8d, 0x4b, 0x6c, 0xff,
+ 0x7b, 0x39, 0x5a, 0xff, 0x8d, 0x4b, 0x6c, 0xff,
+ 0x9f, 0x28, 0x39, 0xff, 0x9f, 0x28, 0x39, 0xff,
+ 0xb5, 0x0b, 0x0b, 0xff, 0xb5, 0x0b, 0x0b, 0xff,
+ 0xc1, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xe5, 0x00, 0x06, 0xff, 0xe5, 0x00, 0x06, 0xff,
+ 0xe9, 0x01, 0x05, 0xff, 0xea, 0x06, 0x0b, 0xff,
+ 0xeb, 0x0b, 0x11, 0xff, 0xec, 0x10, 0x17, 0xff,
+ 0xeb, 0x1c, 0x1c, 0xff, 0xec, 0x3b, 0x3b, 0xff,
+ 0xed, 0x5b, 0x59, 0xff, 0xee, 0x7b, 0x78, 0xff,
+ 0x90, 0x88, 0xa9, 0xff, 0x6a, 0x62, 0x83, 0xff,
+ 0x4e, 0x35, 0x67, 0xff, 0x62, 0x49, 0x7b, 0xff,
+ 0x54, 0x43, 0x76, 0xff, 0x54, 0x43, 0x76, 0xff,
+ 0x66, 0x11, 0x55, 0xff, 0x54, 0x43, 0x76, 0xff,
+ 0x76, 0x43, 0x76, 0xff, 0x76, 0x43, 0x76, 0xff,
+ 0x87, 0x10, 0x21, 0xff, 0x87, 0x10, 0x21, 0xff,
+ 0xad, 0x32, 0x53, 0xff, 0xad, 0x32, 0x53, 0xff,
+ 0x97, 0x1c, 0x3d, 0xff, 0xa1, 0x26, 0x47, 0xff,
+ 0x9f, 0x28, 0x39, 0xff, 0x9f, 0x28, 0x39, 0xff,
+ 0xc1, 0x17, 0x17, 0xff, 0xb5, 0x0b, 0x0b, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xe5, 0x00, 0x06, 0xff, 0xe5, 0x00, 0x06, 0xff,
+ 0xe7, 0x01, 0x06, 0xff, 0xe8, 0x06, 0x0c, 0xff,
+ 0xe9, 0x0b, 0x12, 0xff, 0xea, 0x10, 0x18, 0xff,
+ 0xeb, 0x1b, 0x1c, 0xff, 0xec, 0x3b, 0x3b, 0xff,
+ 0xed, 0x5b, 0x59, 0xff, 0xee, 0x7a, 0x78, 0xff,
+ 0x90, 0x88, 0xa9, 0xff, 0x7c, 0x74, 0x95, 0xff,
+ 0x62, 0x49, 0x7b, 0xff, 0x62, 0x49, 0x7b, 0xff,
+ 0x54, 0x43, 0x76, 0xff, 0x54, 0x43, 0x76, 0xff,
+ 0x66, 0x11, 0x55, 0xff, 0x66, 0x11, 0x55, 0xff,
+ 0x76, 0x43, 0x76, 0xff, 0x76, 0x43, 0x76, 0xff,
+ 0x87, 0x10, 0x21, 0xff, 0x87, 0x10, 0x21, 0xff,
+ 0x8b, 0x10, 0x31, 0xff, 0xa1, 0x26, 0x47, 0xff,
+ 0xa1, 0x26, 0x47, 0xff, 0x8b, 0x10, 0x31, 0xff,
+ 0xb5, 0x0b, 0x0b, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xc1, 0x17, 0x17, 0xff, 0xc1, 0x17, 0x17, 0xff,
+ 0xd5, 0x00, 0x00, 0xff, 0xd5, 0x00, 0x00, 0xff,
+ 0xdf, 0x00, 0x00, 0xff, 0xdf, 0x00, 0x00, 0xff,
+ 0xe5, 0x02, 0x07, 0xff, 0xe6, 0x07, 0x0d, 0xff,
+ 0xe7, 0x0c, 0x13, 0xff, 0xe8, 0x11, 0x19, 0xff,
+ 0xeb, 0x1b, 0x1c, 0xff, 0xec, 0x3a, 0x3b, 0xff,
+ 0xed, 0x5a, 0x59, 0xff, 0xee, 0x7a, 0x78, 0xff,
+ 0x9e, 0x86, 0xa7, 0xff, 0x9a, 0x82, 0xa3, 0xff,
+ 0x8f, 0x56, 0x7f, 0xff, 0x72, 0x39, 0x62, 0xff,
+ 0x71, 0x3c, 0x75, 0xff, 0x75, 0x31, 0x68, 0xff,
+ 0x7a, 0x26, 0x5b, 0xff, 0x7e, 0x1b, 0x4e, 0xff,
+ 0x82, 0x1c, 0x4f, 0xff, 0x8e, 0x28, 0x5b, 0xff,
+ 0x8e, 0x28, 0x5b, 0xff, 0xa4, 0x1c, 0x1c, 0xff,
+ 0xb3, 0x0e, 0x0e, 0xff, 0xad, 0x08, 0x08, 0xff,
+ 0xbd, 0x18, 0x18, 0xff, 0xb7, 0x12, 0x12, 0xff,
+ 0xbd, 0x00, 0x00, 0xff, 0xc9, 0x03, 0x0b, 0xff,
+ 0xd6, 0x00, 0x08, 0xff, 0xd6, 0x00, 0x08, 0xff,
+ 0xdb, 0x00, 0x08, 0xff, 0xdd, 0x01, 0x07, 0xff,
+ 0xdf, 0x02, 0x06, 0xff, 0xe1, 0x03, 0x05, 0xff,
+ 0xe3, 0x00, 0x00, 0xff, 0xe5, 0x07, 0x0a, 0xff,
+ 0xe7, 0x0e, 0x14, 0xff, 0xe9, 0x15, 0x1e, 0xff,
+ 0xeb, 0x26, 0x24, 0xff, 0xed, 0x46, 0x42, 0xff,
+ 0xef, 0x66, 0x5f, 0xff, 0xf1, 0x85, 0x7d, 0xff,
+ 0x9a, 0x82, 0xa3, 0xff, 0xa4, 0x8c, 0xad, 0xff,
+ 0xa9, 0x70, 0x99, 0xff, 0x8f, 0x56, 0x7f, 0xff,
+ 0x83, 0x3f, 0x6a, 0xff, 0x88, 0x34, 0x5d, 0xff,
+ 0x8c, 0x29, 0x50, 0xff, 0x90, 0x1e, 0x43, 0xff,
+ 0xa4, 0x1c, 0x1c, 0xff, 0xa4, 0x1c, 0x1c, 0xff,
+ 0xb0, 0x28, 0x28, 0xff, 0xa4, 0x1c, 0x1c, 0xff,
+ 0xad, 0x08, 0x08, 0xff, 0xbd, 0x18, 0x18, 0xff,
+ 0xbd, 0x18, 0x18, 0xff, 0xb3, 0x0e, 0x0e, 0xff,
+ 0xc9, 0x03, 0x0b, 0xff, 0xc9, 0x03, 0x0b, 0xff,
+ 0xd6, 0x00, 0x08, 0xff, 0xdc, 0x06, 0x0e, 0xff,
+ 0xdc, 0x05, 0x0c, 0xff, 0xde, 0x06, 0x0b, 0xff,
+ 0xe0, 0x07, 0x0a, 0xff, 0xe2, 0x08, 0x09, 0xff,
+ 0xe2, 0x04, 0x03, 0xff, 0xe4, 0x0b, 0x0d, 0xff,
+ 0xe6, 0x12, 0x17, 0xff, 0xe8, 0x19, 0x21, 0xff,
+ 0xe9, 0x31, 0x2b, 0xff, 0xeb, 0x51, 0x49, 0xff,
+ 0xed, 0x71, 0x66, 0xff, 0xef, 0x90, 0x84, 0xff,
+ 0xa4, 0x8c, 0xad, 0xff, 0x94, 0x7c, 0x9d, 0xff,
+ 0xa9, 0x70, 0x99, 0xff, 0x8f, 0x56, 0x7f, 0xff,
+ 0x96, 0x41, 0x5f, 0xff, 0x9a, 0x36, 0x52, 0xff,
+ 0x9e, 0x2b, 0x45, 0xff, 0xa2, 0x20, 0x38, 0xff,
+ 0xa4, 0x1c, 0x1c, 0xff, 0xa4, 0x1c, 0x1c, 0xff,
+ 0xb0, 0x28, 0x28, 0xff, 0xb0, 0x28, 0x28, 0xff,
+ 0xcc, 0x0e, 0x0e, 0xff, 0xcc, 0x0e, 0x0e, 0xff,
+ 0xcc, 0x0e, 0x0e, 0xff, 0xd0, 0x12, 0x12, 0xff,
+ 0xd3, 0x0d, 0x15, 0xff, 0xd3, 0x0d, 0x15, 0xff,
+ 0xe6, 0x10, 0x18, 0xff, 0xdc, 0x06, 0x0e, 0xff,
+ 0xdd, 0x09, 0x10, 0xff, 0xdf, 0x0a, 0x0f, 0xff,
+ 0xe1, 0x0b, 0x0e, 0xff, 0xe3, 0x0c, 0x0d, 0xff,
+ 0xe1, 0x08, 0x06, 0xff, 0xe3, 0x0f, 0x10, 0xff,
+ 0xe5, 0x16, 0x1a, 0xff, 0xe7, 0x1d, 0x24, 0xff,
+ 0xe7, 0x3c, 0x33, 0xff, 0xe9, 0x5c, 0x50, 0xff,
+ 0xeb, 0x7c, 0x6e, 0xff, 0xed, 0x9b, 0x8b, 0xff,
+ 0xa4, 0x8c, 0xad, 0xff, 0x94, 0x7c, 0x9d, 0xff,
+ 0xa9, 0x70, 0x99, 0xff, 0x8f, 0x56, 0x7f, 0xff,
+ 0xa8, 0x44, 0x54, 0xff, 0xac, 0x39, 0x47, 0xff,
+ 0xb0, 0x2e, 0x3a, 0xff, 0xb5, 0x23, 0x2d, 0xff,
+ 0xa4, 0x1c, 0x1c, 0xff, 0xb0, 0x28, 0x28, 0xff,
+ 0xb0, 0x28, 0x28, 0xff, 0xb0, 0x28, 0x28, 0xff,
+ 0xd6, 0x18, 0x18, 0xff, 0xd0, 0x12, 0x12, 0xff,
+ 0xd6, 0x18, 0x18, 0xff, 0xd6, 0x18, 0x18, 0xff,
+ 0xdf, 0x19, 0x21, 0xff, 0xdf, 0x19, 0x21, 0xff,
+ 0xe6, 0x10, 0x18, 0xff, 0xe6, 0x10, 0x18, 0xff,
+ 0xde, 0x0e, 0x14, 0xff, 0xe0, 0x0f, 0x13, 0xff,
+ 0xe2, 0x10, 0x12, 0xff, 0xe4, 0x11, 0x11, 0xff,
+ 0xe0, 0x0c, 0x09, 0xff, 0xe2, 0x13, 0x13, 0xff,
+ 0xe4, 0x1a, 0x1d, 0xff, 0xe6, 0x21, 0x27, 0xff,
+ 0xe5, 0x47, 0x3a, 0xff, 0xe7, 0x67, 0x57, 0xff,
+ 0xe9, 0x87, 0x75, 0xff, 0xeb, 0xa6, 0x92, 0xff,
+ 0xd5, 0x8b, 0x83, 0xff, 0xc1, 0x77, 0x6f, 0xff,
+ 0xb9, 0x56, 0x56, 0xff, 0xb9, 0x56, 0x56, 0xff,
+ 0xcd, 0x49, 0x49, 0xff, 0xcd, 0x49, 0x49, 0xff,
+ 0xb9, 0x35, 0x35, 0xff, 0xb9, 0x35, 0x35, 0xff,
+ 0xcb, 0x2e, 0x2c, 0xff, 0xcb, 0x2c, 0x2c, 0xff,
+ 0xcb, 0x2a, 0x2c, 0xff, 0xcb, 0x28, 0x2c, 0xff,
+ 0xd7, 0x20, 0x24, 0xff, 0xda, 0x20, 0x23, 0xff,
+ 0xdd, 0x1f, 0x22, 0xff, 0xe0, 0x1f, 0x21, 0xff,
+ 0xe7, 0x22, 0x24, 0xff, 0xe7, 0x20, 0x24, 0xff,
+ 0xe7, 0x1d, 0x24, 0xff, 0xe7, 0x1b, 0x24, 0xff,
+ 0xe3, 0x1c, 0x20, 0xff, 0xe3, 0x1c, 0x20, 0xff,
+ 0xe3, 0x1c, 0x20, 0xff, 0xe3, 0x1c, 0x20, 0xff,
+ 0xdf, 0x1a, 0x20, 0xff, 0xe0, 0x23, 0x25, 0xff,
+ 0xe1, 0x2b, 0x2a, 0xff, 0xe2, 0x34, 0x2f, 0xff,
+ 0xe3, 0x54, 0x49, 0xff, 0xe4, 0x69, 0x5e, 0xff,
+ 0xe5, 0x7e, 0x74, 0xff, 0xe6, 0x92, 0x89, 0xff,
+ 0xe7, 0x9d, 0x95, 0xff, 0xd5, 0x8b, 0x83, 0xff,
+ 0xcd, 0x6a, 0x6a, 0xff, 0xb9, 0x56, 0x56, 0xff,
+ 0xcd, 0x49, 0x49, 0xff, 0xcd, 0x49, 0x49, 0xff,
+ 0xcd, 0x49, 0x49, 0xff, 0xcd, 0x49, 0x49, 0xff,
+ 0xd8, 0x46, 0x46, 0xff, 0xd8, 0x44, 0x46, 0xff,
+ 0xd8, 0x42, 0x46, 0xff, 0xd8, 0x40, 0x46, 0xff,
+ 0xdd, 0x3c, 0x3f, 0xff, 0xe0, 0x3b, 0x3e, 0xff,
+ 0xe3, 0x3b, 0x3d, 0xff, 0xe6, 0x3a, 0x3c, 0xff,
+ 0xe9, 0x3d, 0x3c, 0xff, 0xe9, 0x3a, 0x3c, 0xff,
+ 0xe9, 0x38, 0x3c, 0xff, 0xe9, 0x35, 0x3c, 0xff,
+ 0xe7, 0x36, 0x3b, 0xff, 0xe7, 0x36, 0x3b, 0xff,
+ 0xe7, 0x36, 0x3b, 0xff, 0xe7, 0x36, 0x3b, 0xff,
+ 0xe3, 0x34, 0x3a, 0xff, 0xe4, 0x3d, 0x3f, 0xff,
+ 0xe5, 0x45, 0x44, 0xff, 0xe6, 0x4e, 0x49, 0xff,
+ 0xe6, 0x63, 0x59, 0xff, 0xe7, 0x78, 0x6f, 0xff,
+ 0xe8, 0x8d, 0x84, 0xff, 0xe9, 0xa2, 0x99, 0xff,
+ 0xfb, 0xb1, 0xa9, 0xff, 0xe7, 0x9d, 0x95, 0xff,
+ 0xdf, 0x7c, 0x7c, 0xff, 0xcd, 0x6a, 0x6a, 0xff,
+ 0xe2, 0x66, 0x66, 0xff, 0xe2, 0x66, 0x66, 0xff,
+ 0xe2, 0x66, 0x66, 0xff, 0xe2, 0x66, 0x66, 0xff,
+ 0xe5, 0x5f, 0x5f, 0xff, 0xe5, 0x5d, 0x5f, 0xff,
+ 0xe5, 0x5b, 0x5f, 0xff, 0xe5, 0x59, 0x5f, 0xff,
+ 0xe3, 0x58, 0x59, 0xff, 0xe6, 0x57, 0x58, 0xff,
+ 0xe9, 0x57, 0x57, 0xff, 0xec, 0x56, 0x56, 0xff,
+ 0xeb, 0x58, 0x53, 0xff, 0xeb, 0x55, 0x53, 0xff,
+ 0xeb, 0x53, 0x53, 0xff, 0xeb, 0x50, 0x53, 0xff,
+ 0xeb, 0x51, 0x55, 0xff, 0xeb, 0x51, 0x55, 0xff,
+ 0xeb, 0x51, 0x55, 0xff, 0xeb, 0x51, 0x55, 0xff,
+ 0xe7, 0x4f, 0x53, 0xff, 0xe8, 0x57, 0x58, 0xff,
+ 0xe9, 0x60, 0x5d, 0xff, 0xea, 0x68, 0x62, 0xff,
+ 0xe9, 0x73, 0x6a, 0xff, 0xea, 0x87, 0x7f, 0xff,
+ 0xeb, 0x9c, 0x94, 0xff, 0xec, 0xb1, 0xa9, 0xff,
+ 0xfb, 0xb1, 0xa9, 0xff, 0xfb, 0xb1, 0xa9, 0xff,
+ 0xf3, 0x90, 0x90, 0xff, 0xf3, 0x90, 0x90, 0xff,
+ 0xf8, 0x7c, 0x7c, 0xff, 0xf8, 0x7c, 0x7c, 0xff,
+ 0xf8, 0x7c, 0x7c, 0xff, 0xf8, 0x7c, 0x7c, 0xff,
+ 0xf2, 0x77, 0x79, 0xff, 0xf2, 0x75, 0x79, 0xff,
+ 0xf2, 0x73, 0x79, 0xff, 0xf2, 0x71, 0x79, 0xff,
+ 0xe9, 0x73, 0x74, 0xff, 0xec, 0x73, 0x73, 0xff,
+ 0xef, 0x72, 0x72, 0xff, 0xf2, 0x72, 0x71, 0xff,
+ 0xed, 0x72, 0x6b, 0xff, 0xed, 0x70, 0x6b, 0xff,
+ 0xed, 0x6d, 0x6b, 0xff, 0xed, 0x6b, 0x6b, 0xff,
+ 0xef, 0x6b, 0x70, 0xff, 0xef, 0x6b, 0x70, 0xff,
+ 0xef, 0x6b, 0x70, 0xff, 0xef, 0x6b, 0x70, 0xff,
+ 0xeb, 0x69, 0x6d, 0xff, 0xec, 0x71, 0x72, 0xff,
+ 0xed, 0x7a, 0x77, 0xff, 0xee, 0x82, 0x7c, 0xff,
+ 0xec, 0x82, 0x7a, 0xff, 0xed, 0x97, 0x8f, 0xff,
+ 0xee, 0xab, 0xa4, 0xff, 0xef, 0xc0, 0xba, 0xff,
+ ])
+}
+
+var img_32x32_rgb_punchthrough_etc2 = {
+ compressed: new Uint8Array([
+ 0x84, 0x94, 0xb4, 0x05, 0xf6, 0xff, 0x99, 0x00,
+ 0x74, 0x84, 0xa4, 0x05, 0xff, 0xf6, 0x08, 0x91,
+ 0x5f, 0x6f, 0x8f, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x4b, 0x5b, 0x6b, 0x00, 0xff, 0xfd, 0x20, 0x00,
+ 0x56, 0x66, 0x6e, 0x00, 0xdf, 0xfd, 0x00, 0x02,
+ 0x0e, 0x67, 0x33, 0x54, 0xff, 0xb9, 0x00, 0xc4,
+ 0xeb, 0x78, 0x54, 0x61, 0xff, 0xff, 0x08, 0x00,
+ 0x8b, 0x4b, 0x53, 0x00, 0xff, 0xf7, 0x00, 0x00,
+ 0xeb, 0x79, 0x44, 0x74, 0xff, 0xff, 0x80, 0x00,
+ 0x01, 0x10, 0x3f, 0x00, 0xfb, 0xb7, 0x00, 0x00,
+ 0x10, 0x27, 0x3a, 0x00, 0xff, 0xfb, 0x00, 0xc4,
+ 0x05, 0x24, 0x00, 0x38, 0xff, 0xef, 0x00, 0x10,
+ 0x05, 0x13, 0x23, 0x50, 0xfe, 0xff, 0x00, 0x00,
+ 0x41, 0x4c, 0x5c, 0x25, 0xff, 0xa7, 0x00, 0xb0,
+ 0x61, 0x43, 0x53, 0x00, 0xfe, 0xff, 0x01, 0x00,
+ 0x8b, 0x3b, 0x33, 0x01, 0xff, 0x9e, 0x00, 0x60,
+ 0x0e, 0x79, 0x34, 0x71, 0xff, 0xff, 0x80, 0x00,
+ 0x18, 0x20, 0x58, 0x04, 0xbb, 0xbf, 0x04, 0x40,
+ 0x16, 0x25, 0x3d, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x03, 0x10, 0x2f, 0x00, 0xff, 0xdf, 0x00, 0x60,
+ 0x0c, 0x24, 0x21, 0x31, 0xee, 0xff, 0x00, 0x10,
+ 0x79, 0x3f, 0x50, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x93, 0x34, 0x34, 0x21, 0xfa, 0xf7, 0x07, 0x08,
+ 0xf9, 0x66, 0xc3, 0x31, 0xff, 0x3f, 0x00, 0xc0,
+ 0x74, 0x94, 0xa4, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x0f, 0x0f, 0x21, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x01, 0x01, 0x22, 0x0d, 0x7f, 0x70, 0x08, 0x00,
+ 0x23, 0x28, 0x43, 0x00, 0xff, 0xf7, 0x00, 0x08,
+ 0x6a, 0x3f, 0x6d, 0x04, 0xe7, 0xef, 0x19, 0x00,
+ 0xa6, 0x46, 0x56, 0x00, 0xf7, 0x77, 0x00, 0x00,
+ 0xc3, 0x08, 0x09, 0x00, 0xff, 0xfc, 0x00, 0x00,
+ 0xef, 0x43, 0x4b, 0x00, 0xff, 0xff, 0x00, 0x70,
+ 0x6c, 0x74, 0x94, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x21, 0x35, 0x57, 0x04, 0xf7, 0xcf, 0x88, 0x30,
+ 0x06, 0x13, 0x33, 0x65, 0x77, 0x77, 0x88, 0x00,
+ 0x0e, 0x35, 0x42, 0x4c, 0xea, 0x3f, 0x11, 0x80,
+ 0x88, 0x64, 0x74, 0x01, 0xf2, 0xbb, 0x08, 0x00,
+ 0x1c, 0x00, 0xa2, 0x24, 0xf0, 0xff, 0x01, 0x00,
+ 0xd2, 0x01, 0x01, 0x01, 0xff, 0xfc, 0x00, 0x04,
+ 0xe1, 0x3b, 0x3b, 0x00, 0xff, 0x1f, 0x00, 0x60,
+ 0x58, 0x4f, 0x70, 0x01, 0x7f, 0xff, 0x80, 0x00,
+ 0x3b, 0x2d, 0x5f, 0x01, 0xfa, 0xff, 0x07, 0x10,
+ 0x6a, 0x2e, 0x55, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x88, 0x30, 0x50, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x15, 0x23, 0xb1, 0x11, 0xf2, 0xff, 0x0e, 0x00,
+ 0xdf, 0x00, 0x00, 0x01, 0xfc, 0xbf, 0x02, 0x20,
+ 0xe0, 0x02, 0x0a, 0x00, 0x7f, 0xff, 0x00, 0x00,
+ 0xe0, 0x27, 0x27, 0x21, 0xff, 0xe8, 0x00, 0x10,
+ 0x90, 0x6e, 0x96, 0x01, 0xff, 0xff, 0xc0, 0x00,
+ 0x8e, 0x3c, 0x5e, 0x00, 0xef, 0xff, 0x00, 0x00,
+ 0xf2, 0x22, 0x82, 0x51, 0xff, 0xff, 0x00, 0x01,
+ 0xb2, 0x17, 0x17, 0x01, 0xaa, 0xba, 0x45, 0x54,
+ 0xc2, 0x0f, 0x08, 0x04, 0x7e, 0xef, 0x80, 0x01,
+ 0xd9, 0x09, 0x10, 0x00, 0xff, 0xb3, 0x00, 0x00,
+ 0xe0, 0x12, 0x1a, 0x01, 0x6c, 0xff, 0x10, 0x20,
+ 0xef, 0x4b, 0x43, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0xb3, 0x53, 0x53, 0x01, 0xef, 0xff, 0x00, 0x00,
+ 0xc0, 0x40, 0x40, 0x00, 0xdd, 0xdd, 0x22, 0x22,
+ 0xd0, 0x40, 0x40, 0x00, 0xdd, 0xdd, 0x00, 0x00,
+ 0xd8, 0x38, 0x38, 0x00, 0xfd, 0xdd, 0x00, 0x00,
+ 0xe0, 0x33, 0x3b, 0x01, 0xdb, 0xbf, 0x04, 0x40,
+ 0xe0, 0x47, 0x4e, 0x00, 0xdf, 0xff, 0x00, 0x00,
+ 0xd8, 0x37, 0x3e, 0x00, 0xee, 0xdd, 0x10, 0x20,
+ 0xe0, 0x73, 0x6b, 0x00, 0xff, 0xff, 0x00, 0x00,
+ ]),
+ decompressed: new Uint8Array([
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x9c, 0xbd, 0xff, 0x7c, 0x8c, 0xad, 0xff,
+ 0x7b, 0x8c, 0xad, 0xff, 0x6b, 0x7c, 0x9d, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4a, 0x5a, 0x6b, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x5b, 0x6b, 0x7c, 0xff,
+ 0x5a, 0x6b, 0x73, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x42, 0x52, 0x5a, 0xff,
+ 0x66, 0x66, 0x77, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3e, 0x3e, 0x60, 0xff, 0x3e, 0x3e, 0x60, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x74, 0x84, 0xa5, 0xff, 0x52, 0x62, 0x83, 0xff,
+ 0x52, 0x63, 0x84, 0xff, 0x41, 0x52, 0x73, 0xff,
+ 0x41, 0x52, 0x73, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x4a, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4f, 0x3e, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x4a, 0x52, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x17, 0x17, 0x4a, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x11, 0x11, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x53, 0x5b, 0x6b, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x73, 0x62, 0x73, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x39, 0x31, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x39, 0x49, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x94, 0x41, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x39, 0xff,
+ 0x08, 0x10, 0x31, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x29, 0x41, 0xff, 0x08, 0x19, 0x31, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x4a, 0x29, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xad, 0x5a, 0x52, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x39, 0x39, 0x6c, 0xff,
+ 0x00, 0x10, 0x39, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x19, 0x31, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x4a, 0x29, 0x39, 0xff, 0x39, 0x18, 0x28, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0b, 0x2d, 0xff,
+ 0x44, 0x22, 0x44, 0xff, 0x44, 0x22, 0x44, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xa5, 0x42, 0x42, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0x31, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x20, 0x20, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x29, 0x62, 0xff,
+ 0x29, 0x32, 0x6b, 0xff, 0x18, 0x21, 0x5a, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x21, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb5, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd2, 0x39, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x2d, 0x3e, 0x71, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb5, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd2, 0x39, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x21, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x6b, 0x39, 0x6b, 0xff,
+ 0x6a, 0x20, 0x41, 0xff, 0x8c, 0x42, 0x63, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc6, 0x08, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x3a, 0x42, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x21, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc6, 0x08, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x3a, 0x42, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x31, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x3a, 0x42, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x31, 0xff, 0x08, 0x08, 0x31, 0xff,
+ 0x00, 0x00, 0x07, 0xff, 0x08, 0x08, 0x31, 0xff,
+ 0x29, 0x31, 0x4a, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x42, 0x63, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xa5, 0x42, 0x52, 0xff, 0xa5, 0x42, 0x52, 0xff,
+ 0x94, 0x31, 0x42, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x29, 0x39, 0x5a, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6d, 0x4b, 0x6d, 0xff, 0x6d, 0x4b, 0x6d, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x63, 0x73, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb5, 0x2d, 0x2d, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xd6, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x29, 0x39, 0x5a, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xd6, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xef, 0x41, 0x41, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x33, 0x55, 0xff,
+ 0x66, 0x33, 0x55, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x8c, 0x42, 0x52, 0xff, 0x8c, 0x42, 0x52, 0xff,
+ 0x8c, 0x42, 0x52, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0xdf, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xef, 0x41, 0x41, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3a, 0x29, 0x5b, 0xff, 0x18, 0x07, 0x39, 0xff,
+ 0x22, 0x11, 0x33, 0xff, 0x22, 0x11, 0x33, 0xff,
+ 0x43, 0x43, 0x76, 0xff, 0x43, 0x43, 0x76, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x6d, 0x4b, 0x6d, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x94, 0x4a, 0x5a, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xcc, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x31, 0x21, 0x52, 0xff,
+ 0x41, 0x31, 0x62, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x99, 0x22, 0x33, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe7, 0x21, 0x21, 0xff, 0xf8, 0x32, 0x32, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x31, 0x21, 0x52, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb5, 0x0b, 0x0b, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0xff,
+ 0xe6, 0x08, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe7, 0x21, 0x21, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x5a, 0x18, 0x5a, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc1, 0x17, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xd6, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe7, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x62, 0x4a, 0x7b, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc1, 0x17, 0x17, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x10, 0x18, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7b, 0x18, 0x4a, 0xff,
+ 0x82, 0x1c, 0x4f, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xb5, 0x10, 0x10, 0xff, 0xad, 0x08, 0x08, 0xff,
+ 0xbd, 0x18, 0x18, 0xff, 0xb5, 0x10, 0x10, 0xff,
+ 0xbe, 0x00, 0x00, 0xff, 0xc6, 0x08, 0x08, 0xff,
+ 0xd6, 0x00, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe7, 0x10, 0x18, 0xff, 0xef, 0x18, 0x20, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xdf, 0x08, 0x10, 0xff,
+ 0xe7, 0x10, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x8c, 0x52, 0x7c, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xce, 0x10, 0x10, 0xff, 0xce, 0x10, 0x10, 0xff,
+ 0xce, 0x10, 0x10, 0xff, 0xce, 0x10, 0x10, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0x08, 0x10, 0xff, 0xde, 0x08, 0x10, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x8c, 0x52, 0x7c, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x11, 0x19, 0xff,
+ 0xde, 0x08, 0x10, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x21, 0x29, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xb5, 0x52, 0x52, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xde, 0x29, 0x29, 0xff, 0xe6, 0x31, 0x31, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xce, 0x4a, 0x4a, 0xff, 0xce, 0x4a, 0x4a, 0xff,
+ 0xce, 0x4a, 0x4a, 0xff, 0xce, 0x4a, 0x4a, 0xff,
+ 0xd6, 0x42, 0x42, 0xff, 0xd6, 0x42, 0x42, 0xff,
+ 0xd6, 0x42, 0x42, 0xff, 0xd6, 0x42, 0x42, 0xff,
+ 0xde, 0x39, 0x39, 0xff, 0xde, 0x39, 0x39, 0xff,
+ 0xde, 0x39, 0x39, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x31, 0x39, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xe7, 0x39, 0x39, 0xff,
+ 0xde, 0x31, 0x39, 0xff, 0xe6, 0x39, 0x41, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xef, 0x52, 0x5a, 0xff,
+ 0xef, 0x52, 0x5a, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ ])
+}
+
+var img_32x32_rgba_etc2 = {
+ compressed: new Uint8Array([
+ 0x04, 0x1d, 0x6d, 0x26, 0x91, 0x48, 0x84, 0x45,
+ 0x8d, 0x9d, 0xb6, 0x4a, 0xc4, 0x80, 0x83, 0x97,
+ 0x0b, 0x12, 0x48, 0x94, 0x88, 0x44, 0x42, 0x25,
+ 0x64, 0x74, 0x95, 0x4b, 0xae, 0xa2, 0x91, 0x05,
+ 0x15, 0x11, 0x68, 0x86, 0x84, 0x44, 0x54, 0x26,
+ 0x74, 0x85, 0xa7, 0x25, 0xfa, 0xa6, 0xff, 0x42,
+ 0x1b, 0x12, 0x68, 0x66, 0xa7, 0x66, 0xf6, 0x6f,
+ 0x64, 0x74, 0x85, 0x49, 0xae, 0xea, 0x89, 0xba,
+ 0x1d, 0x12, 0x66, 0x76, 0xa7, 0x6a, 0x76, 0x86,
+ 0x64, 0x74, 0x7c, 0x4b, 0xa8, 0x8a, 0xa4, 0x81,
+ 0x15, 0x11, 0x22, 0xf4, 0x26, 0x44, 0x56, 0x84,
+ 0x73, 0x73, 0x85, 0x29, 0xab, 0xa3, 0x3e, 0x2a,
+ 0x0b, 0x1b, 0x22, 0xf2, 0x25, 0x44, 0x44, 0x88,
+ 0x75, 0x74, 0x86, 0x25, 0xaa, 0x6e, 0x71, 0x11,
+ 0x04, 0x1d, 0x22, 0xe4, 0x45, 0x48, 0x86, 0x91,
+ 0xbe, 0x7f, 0x04, 0x62, 0xbb, 0x6c, 0x86, 0xcf,
+ 0x0b, 0x1b, 0x6d, 0x24, 0x89, 0x44, 0x02, 0x25,
+ 0x74, 0x74, 0x97, 0x48, 0xec, 0xf0, 0x50, 0xe6,
+ 0x1a, 0x10, 0x6d, 0x16, 0x88, 0x42, 0x63, 0x37,
+ 0x21, 0x30, 0x5f, 0x4a, 0xbd, 0xe8, 0x8e, 0x5b,
+ 0x37, 0x21, 0x68, 0x86, 0x44, 0x42, 0x52, 0x2f,
+ 0x10, 0x27, 0x3a, 0x46, 0x8c, 0xe2, 0x87, 0x10,
+ 0x4a, 0x3b, 0x64, 0x54, 0x66, 0x42, 0x74, 0x2f,
+ 0x1e, 0x18, 0x48, 0x07, 0x6b, 0x31, 0xe9, 0xa9,
+ 0x4b, 0x3a, 0x42, 0xf4, 0x2f, 0x46, 0x64, 0x66,
+ 0x05, 0x13, 0x23, 0x57, 0x66, 0xd6, 0x34, 0xc4,
+ 0x38, 0x22, 0x33, 0x74, 0x2f, 0x46, 0x66, 0x84,
+ 0x43, 0x4e, 0x5c, 0x2b, 0xbd, 0xee, 0x59, 0xb4,
+ 0x1f, 0x2b, 0x12, 0xf2, 0x25, 0x44, 0x46, 0x88,
+ 0x57, 0x44, 0x55, 0x45, 0x44, 0x2b, 0xa9, 0x01,
+ 0x0b, 0x1b, 0x12, 0xf2, 0x25, 0x44, 0x04, 0x89,
+ 0x9a, 0x48, 0x41, 0x2e, 0x00, 0x31, 0xf0, 0xc5,
+ 0x10, 0x19, 0x6d, 0x24, 0x48, 0x22, 0x59, 0x77,
+ 0x6c, 0x7c, 0x9e, 0x4a, 0xfb, 0xf2, 0xd8, 0x58,
+ 0x32, 0x22, 0x6d, 0x24, 0x88, 0x22, 0x51, 0x77,
+ 0x18, 0x20, 0x4a, 0x27, 0x6b, 0x90, 0x0e, 0x35,
+ 0x59, 0x42, 0x44, 0x02, 0x25, 0x12, 0xe9, 0x77,
+ 0x00, 0x0b, 0x29, 0x2f, 0xcc, 0x29, 0xf0, 0x87,
+ 0x8c, 0x32, 0x68, 0x54, 0x66, 0x42, 0xf3, 0x37,
+ 0x03, 0x10, 0x2f, 0x26, 0x76, 0x48, 0x29, 0x19,
+ 0x96, 0x4a, 0x42, 0xf4, 0x2e, 0x46, 0x66, 0x45,
+ 0x33, 0x18, 0x40, 0x26, 0x06, 0x76, 0x2e, 0x3e,
+ 0x71, 0x31, 0x12, 0xf2, 0x25, 0x44, 0x46, 0x88,
+ 0xb9, 0x06, 0x32, 0x2b, 0x02, 0x13, 0x10, 0x03,
+ 0x38, 0x22, 0x9b, 0xf1, 0x2e, 0x44, 0x46, 0x91,
+ 0x49, 0x15, 0xd0, 0x06, 0xcc, 0xe9, 0x02, 0x33,
+ 0x15, 0x11, 0x97, 0x70, 0x25, 0x44, 0x06, 0x91,
+ 0x6a, 0x06, 0x6b, 0x33, 0xf1, 0x05, 0x01, 0xff,
+ 0x15, 0x17, 0x6d, 0xb4, 0x49, 0x12, 0x4d, 0xff,
+ 0x74, 0x95, 0xa6, 0x2c, 0x70, 0xf0, 0xbe, 0x5c,
+ 0x40, 0x24, 0x6d, 0xb4, 0x49, 0x12, 0x4d, 0xbf,
+ 0x1d, 0x1d, 0x32, 0x4e, 0xfe, 0xf6, 0x4c, 0xe8,
+ 0x7f, 0x4b, 0x69, 0x22, 0x00, 0x92, 0xdb, 0xbf,
+ 0x00, 0x01, 0x37, 0x2a, 0x0c, 0x63, 0x0c, 0x6b,
+ 0xc7, 0x32, 0x68, 0x94, 0x24, 0x13, 0x69, 0xbf,
+ 0x23, 0x28, 0x43, 0x26, 0x03, 0x11, 0xea, 0xd1,
+ 0xd9, 0x32, 0x33, 0x73, 0x2e, 0x42, 0x46, 0x89,
+ 0x63, 0x30, 0x66, 0x46, 0x05, 0x23, 0x5b, 0xa1,
+ 0x95, 0x4b, 0xbb, 0xf1, 0x2d, 0x24, 0x06, 0x92,
+ 0xf3, 0x12, 0x93, 0x46, 0x0b, 0x57, 0x06, 0xa8,
+ 0x4b, 0x3a, 0xdb, 0xf9, 0x2d, 0x20, 0x04, 0x92,
+ 0x60, 0x86, 0x04, 0xf6, 0x18, 0x46, 0x80, 0x00,
+ 0x1c, 0x12, 0xdf, 0xf9, 0x2d, 0x44, 0x96, 0xdb,
+ 0x72, 0xa6, 0x0d, 0x73, 0x8b, 0x2f, 0x64, 0x48,
+ 0x15, 0x17, 0x6d, 0xb2, 0x52, 0x90, 0x0f, 0xf5,
+ 0x50, 0x6c, 0x85, 0x6b, 0xec, 0x00, 0xc0, 0x1f,
+ 0x3d, 0x21, 0x49, 0xb0, 0x09, 0x92, 0x0f, 0xb5,
+ 0x31, 0x40, 0x63, 0x6c, 0x71, 0xfc, 0x2d, 0x09,
+ 0x7d, 0x34, 0x49, 0xb0, 0x0a, 0xb2, 0x0f, 0xf4,
+ 0x07, 0x01, 0x33, 0x6b, 0x6f, 0x73, 0xa1, 0x33,
+ 0xbb, 0x5a, 0x00, 0xab, 0x01, 0xd6, 0x0f, 0xa8,
+ 0xeb, 0x35, 0x53, 0x5a, 0x02, 0x7f, 0x31, 0x83,
+ 0xc7, 0x32, 0xfa, 0x1f, 0xa1, 0xd4, 0x28, 0x13,
+ 0x7b, 0x55, 0x67, 0x27, 0x84, 0x6f, 0x61, 0x29,
+ 0x91, 0x4b, 0xfa, 0xcb, 0x20, 0x00, 0xa4, 0x9b,
+ 0x51, 0x05, 0x68, 0x8b, 0xfe, 0x00, 0xfe, 0x21,
+ 0x4a, 0x21, 0xff, 0x5b, 0x20, 0x00, 0x94, 0x9b,
+ 0xe0, 0x01, 0x09, 0x22, 0x0c, 0x1f, 0x70, 0x03,
+ 0x1b, 0x12, 0xff, 0xeb, 0x60, 0x25, 0x26, 0xdb,
+ 0x72, 0x9e, 0x0c, 0x7a, 0xa1, 0x2f, 0x43, 0x87,
+ 0x0d, 0x19, 0x29, 0x20, 0x09, 0xb0, 0x0f, 0xac,
+ 0x77, 0x6d, 0x8f, 0x4a, 0xff, 0x70, 0x36, 0x3e,
+ 0x2f, 0x21, 0x29, 0xb0, 0x4a, 0x80, 0x1d, 0x60,
+ 0x0e, 0x15, 0x43, 0x67, 0x13, 0x33, 0x62, 0xfc,
+ 0x59, 0x49, 0x05, 0x38, 0x0a, 0xb0, 0x1d, 0x60,
+ 0xb8, 0x04, 0xb1, 0xb3, 0x31, 0xcf, 0x01, 0x11,
+ 0x7d, 0x34, 0x81, 0x3d, 0x0b, 0xf4, 0x2f, 0x42,
+ 0x83, 0x44, 0x64, 0x47, 0x96, 0x18, 0x80, 0x5c,
+ 0x84, 0x37, 0xf4, 0x3f, 0x0b, 0xd0, 0xba, 0x13,
+ 0x58, 0x14, 0xc9, 0x1a, 0x01, 0x77, 0x72, 0x08,
+ 0x63, 0x4b, 0xf6, 0x0d, 0x01, 0x80, 0xa0, 0x53,
+ 0xd9, 0x0f, 0x08, 0x42, 0xef, 0xef, 0x89, 0x03,
+ 0x37, 0x22, 0xfa, 0x0b, 0x02, 0x05, 0x34, 0x9b,
+ 0x74, 0x80, 0x04, 0xf7, 0x14, 0x3f, 0x00, 0x42,
+ 0x15, 0x11, 0xd6, 0x08, 0x01, 0x05, 0x24, 0x9b,
+ 0x74, 0x9c, 0x07, 0xf7, 0x9b, 0x2f, 0x43, 0x47,
+ 0x0a, 0x12, 0x49, 0x22, 0x52, 0x04, 0xa8, 0x01,
+ 0x98, 0x84, 0xa5, 0x0e, 0xf1, 0xd2, 0x10, 0xec,
+ 0x14, 0x11, 0x05, 0x38, 0x0a, 0xb0, 0x1f, 0x60,
+ 0xb8, 0xbc, 0xfa, 0xc2, 0x10, 0x85, 0xc8, 0xd2,
+ 0x2f, 0x21, 0x05, 0x38, 0x0b, 0xa0, 0xad, 0x01,
+ 0x51, 0x05, 0x41, 0x2a, 0x01, 0x11, 0x30, 0x6f,
+ 0x39, 0x3b, 0xb0, 0xad, 0x02, 0xf4, 0x1f, 0x41,
+ 0xb3, 0x10, 0x10, 0x03, 0x24, 0x57, 0x8b, 0x3a,
+ 0x3d, 0x21, 0xf0, 0x2f, 0x02, 0xd0, 0x2d, 0x0b,
+ 0xca, 0x08, 0x10, 0x22, 0x73, 0x33, 0x9f, 0x89,
+ 0x30, 0x22, 0xf4, 0x1d, 0x02, 0xa0, 0xa8, 0x53,
+ 0x6c, 0x80, 0x05, 0x72, 0x04, 0x0e, 0xe2, 0x46,
+ 0x1f, 0x2b, 0xb0, 0x18, 0x0a, 0x05, 0x32, 0x9b,
+ 0x70, 0x80, 0x04, 0x76, 0x1c, 0x56, 0xe2, 0x03,
+ 0x0b, 0x12, 0xb0, 0x18, 0x09, 0x05, 0x22, 0x92,
+ 0x74, 0xa6, 0x0c, 0xfa, 0xa5, 0x37, 0x0a, 0x50,
+ 0x04, 0x1d, 0x4d, 0xb4, 0x9b, 0x29, 0x30, 0x52,
+ 0xdf, 0x94, 0x8d, 0x4a, 0x73, 0x31, 0xb9, 0x9c,
+ 0x0f, 0x11, 0x4d, 0xb2, 0x9b, 0x29, 0x30, 0x53,
+ 0xd2, 0x53, 0x53, 0x47, 0x77, 0x77, 0x99, 0x88,
+ 0x0d, 0x19, 0x80, 0xaa, 0x0a, 0xd0, 0x2f, 0x41,
+ 0x64, 0xae, 0x0d, 0xe6, 0x26, 0x5f, 0xf1, 0xe4,
+ 0x11, 0x12, 0xd0, 0xaf, 0x42, 0xf4, 0x2f, 0x82,
+ 0x6a, 0xa0, 0x0c, 0xf2, 0x1e, 0x47, 0x71, 0xe3,
+ 0x19, 0x10, 0xa1, 0x3a, 0x13, 0xa1, 0x38, 0x53,
+ 0x72, 0xa2, 0x0c, 0xf3, 0x18, 0x4f, 0x71, 0xa0,
+ 0x10, 0x19, 0xf0, 0x2d, 0x0a, 0xa0, 0xb8, 0x53,
+ 0x70, 0x9c, 0x0c, 0x72, 0x1c, 0x47, 0x90, 0xa2,
+ 0x0b, 0x1b, 0xa0, 0xa8, 0x0a, 0x05, 0x32, 0x93,
+ 0x6e, 0x9a, 0x0c, 0x72, 0x3c, 0x6f, 0x70, 0x61,
+ 0x04, 0x1d, 0xa0, 0xa0, 0x52, 0x29, 0x34, 0x9b,
+ 0x70, 0x54, 0x15, 0x73, 0xa7, 0x3f, 0x72, 0x22,
+ ]),
+ decompressed: new Uint8Array([
+ 0xa9, 0xb9, 0xd2, 0x00, 0xa9, 0xb9, 0xd2, 0x00,
+ 0x90, 0xa1, 0xc2, 0x01, 0x7c, 0x8d, 0xae, 0x01,
+ 0x80, 0x90, 0xb1, 0x03, 0x6c, 0x7c, 0x9d, 0x03,
+ 0x80, 0x90, 0xb1, 0x03, 0x80, 0x90, 0xb1, 0x06,
+ 0x7c, 0x8d, 0xaf, 0x08, 0x7c, 0x8d, 0xaf, 0x08,
+ 0x88, 0x99, 0xbb, 0x0b, 0x66, 0x77, 0x99, 0x0b,
+ 0x6f, 0x80, 0x91, 0x0e, 0x83, 0x94, 0xa5, 0x0e,
+ 0x83, 0x94, 0xa5, 0x0e, 0x6f, 0x80, 0x91, 0x0e,
+ 0x80, 0x90, 0x98, 0x10, 0x6c, 0x7c, 0x84, 0x10,
+ 0x6c, 0x7c, 0x84, 0x10, 0x6c, 0x7c, 0x84, 0x10,
+ 0x72, 0x72, 0x83, 0x0e, 0x7c, 0x7c, 0x8d, 0x0b,
+ 0x72, 0x72, 0x83, 0x0b, 0x88, 0x88, 0x99, 0x08,
+ 0x88, 0x88, 0x99, 0x06, 0x88, 0x88, 0x99, 0x06,
+ 0x88, 0x88, 0x99, 0x04, 0x88, 0x88, 0x99, 0x04,
+ 0x7d, 0x7e, 0x82, 0x02, 0x8f, 0x8d, 0x8f, 0x01,
+ 0xa0, 0x9d, 0x9c, 0x01, 0xb2, 0xac, 0xa9, 0x00,
+ 0xa9, 0xb9, 0xd2, 0x00, 0x95, 0xa5, 0xbe, 0x01,
+ 0x90, 0xa1, 0xc2, 0x01, 0x7c, 0x8d, 0xae, 0x02,
+ 0x5a, 0x6a, 0x8b, 0x03, 0x5a, 0x6a, 0x8b, 0x03,
+ 0x5a, 0x6a, 0x8b, 0x06, 0x5a, 0x6a, 0x8b, 0x09,
+ 0x66, 0x77, 0x99, 0x0b, 0x72, 0x83, 0xa5, 0x0b,
+ 0x66, 0x77, 0x99, 0x0e, 0x66, 0x77, 0x99, 0x12,
+ 0x49, 0x5a, 0x6b, 0x13, 0x49, 0x5a, 0x6b, 0x13,
+ 0x5d, 0x6e, 0x7f, 0x16, 0x5d, 0x6e, 0x7f, 0x16,
+ 0x5a, 0x6a, 0x72, 0x18, 0x6c, 0x7c, 0x84, 0x15,
+ 0x6c, 0x7c, 0x84, 0x15, 0x46, 0x56, 0x5e, 0x15,
+ 0x66, 0x66, 0x77, 0x12, 0x66, 0x66, 0x77, 0x12,
+ 0x66, 0x66, 0x77, 0x0e, 0x66, 0x66, 0x77, 0x0b,
+ 0x72, 0x72, 0x83, 0x09, 0x72, 0x72, 0x83, 0x09,
+ 0x72, 0x72, 0x83, 0x06, 0x66, 0x66, 0x77, 0x04,
+ 0x82, 0x6c, 0x71, 0x03, 0x94, 0x7b, 0x7e, 0x02,
+ 0xa5, 0x8b, 0x8b, 0x01, 0xb7, 0x9a, 0x98, 0x01,
+ 0xa9, 0xb9, 0xd2, 0x01, 0x95, 0xa5, 0xbe, 0x01,
+ 0x6a, 0x7b, 0x9c, 0x02, 0x6a, 0x7b, 0x9c, 0x03,
+ 0x5f, 0x6f, 0x98, 0x06, 0x4b, 0x5b, 0x84, 0x06,
+ 0x39, 0x49, 0x72, 0x09, 0x4b, 0x5b, 0x84, 0x0c,
+ 0x3f, 0x50, 0x72, 0x0e, 0x55, 0x66, 0x88, 0x12,
+ 0x55, 0x66, 0x88, 0x12, 0x33, 0x44, 0x66, 0x17,
+ 0x4d, 0x4d, 0x5e, 0x19, 0x3b, 0x3b, 0x4c, 0x1c,
+ 0x3b, 0x3b, 0x4c, 0x1f, 0x4d, 0x4d, 0x5e, 0x1f,
+ 0x4b, 0x5b, 0x63, 0x1e, 0x4b, 0x5b, 0x63, 0x1e,
+ 0x5f, 0x6f, 0x77, 0x1e, 0x4b, 0x5b, 0x63, 0x1b,
+ 0x3c, 0x3c, 0x5e, 0x1b, 0x3c, 0x3c, 0x5e, 0x17,
+ 0x50, 0x50, 0x72, 0x12, 0x3c, 0x3c, 0x5e, 0x12,
+ 0x50, 0x3f, 0x61, 0x0f, 0x50, 0x3f, 0x61, 0x0c,
+ 0x5a, 0x49, 0x6b, 0x09, 0x66, 0x55, 0x77, 0x06,
+ 0x88, 0x5a, 0x5f, 0x05, 0x99, 0x69, 0x6c, 0x03,
+ 0xab, 0x79, 0x79, 0x02, 0xbc, 0x88, 0x86, 0x01,
+ 0x95, 0xa5, 0xbe, 0x01, 0x6f, 0x7f, 0x98, 0x02,
+ 0x7c, 0x8d, 0xae, 0x03, 0x56, 0x67, 0x88, 0x05,
+ 0x4b, 0x5b, 0x84, 0x06, 0x39, 0x49, 0x72, 0x09,
+ 0x39, 0x49, 0x72, 0x0c, 0x25, 0x35, 0x5e, 0x0f,
+ 0x49, 0x5a, 0x7c, 0x12, 0x3f, 0x50, 0x72, 0x17,
+ 0x33, 0x44, 0x66, 0x1b, 0x33, 0x44, 0x66, 0x1e,
+ 0x27, 0x27, 0x38, 0x22, 0x27, 0x27, 0x38, 0x27,
+ 0x27, 0x27, 0x38, 0x27, 0x27, 0x27, 0x38, 0x27,
+ 0x39, 0x49, 0x51, 0x29, 0x25, 0x35, 0x3d, 0x29,
+ 0x39, 0x49, 0x51, 0x29, 0x25, 0x35, 0x3d, 0x24,
+ 0x50, 0x50, 0x72, 0x21, 0x2a, 0x2a, 0x4c, 0x1e,
+ 0x16, 0x16, 0x38, 0x1b, 0x2a, 0x2a, 0x4c, 0x17,
+ 0x50, 0x3f, 0x61, 0x14, 0x5a, 0x49, 0x6b, 0x0f,
+ 0x50, 0x3f, 0x61, 0x0c, 0x50, 0x3f, 0x61, 0x09,
+ 0x8d, 0x48, 0x4e, 0x06, 0x9e, 0x57, 0x5b, 0x05,
+ 0xb0, 0x67, 0x68, 0x03, 0xc1, 0x76, 0x75, 0x02,
+ 0x80, 0x80, 0xa2, 0x01, 0x6e, 0x6e, 0x90, 0x04,
+ 0x4d, 0x4d, 0x80, 0x04, 0x61, 0x61, 0x94, 0x06,
+ 0x3e, 0x4e, 0x77, 0x0b, 0x3e, 0x4e, 0x77, 0x0b,
+ 0x20, 0x28, 0x49, 0x11, 0x20, 0x28, 0x49, 0x14,
+ 0x19, 0x2a, 0x42, 0x1d, 0x2d, 0x3e, 0x56, 0x1d,
+ 0x21, 0x29, 0x5b, 0x23, 0x15, 0x1d, 0x4f, 0x29,
+ 0x10, 0x10, 0x42, 0x2c, 0x16, 0x16, 0x48, 0x35,
+ 0x10, 0x10, 0x42, 0x35, 0x1a, 0x1a, 0x4c, 0x35,
+ 0x11, 0x11, 0x33, 0x33, 0x22, 0x33, 0x55, 0x33,
+ 0x11, 0x11, 0x33, 0x33, 0x32, 0x43, 0x65, 0x33,
+ 0x47, 0x4f, 0x5f, 0x2e, 0x53, 0x5b, 0x6b, 0x28,
+ 0x31, 0x39, 0x49, 0x28, 0x31, 0x39, 0x49, 0x1e,
+ 0x38, 0x27, 0x38, 0x1b, 0x5e, 0x4d, 0x5e, 0x15,
+ 0x72, 0x61, 0x72, 0x11, 0x5e, 0x4d, 0x5e, 0x0b,
+ 0x8b, 0x39, 0x31, 0x09, 0x97, 0x45, 0x3d, 0x06,
+ 0xba, 0x57, 0x57, 0x04, 0xd7, 0x74, 0x74, 0x04,
+ 0x94, 0x94, 0xb6, 0x01, 0x5a, 0x5a, 0x7c, 0x04,
+ 0x4d, 0x4d, 0x80, 0x06, 0x3b, 0x3b, 0x6e, 0x09,
+ 0x3e, 0x4e, 0x77, 0x0b, 0x18, 0x28, 0x51, 0x11,
+ 0x46, 0x4e, 0x6f, 0x17, 0x20, 0x28, 0x49, 0x1c,
+ 0x07, 0x18, 0x30, 0x23, 0x07, 0x18, 0x30, 0x29,
+ 0x21, 0x29, 0x5b, 0x31, 0x15, 0x1d, 0x4f, 0x31,
+ 0x1a, 0x1a, 0x4c, 0x3b, 0x10, 0x10, 0x42, 0x3b,
+ 0x16, 0x16, 0x48, 0x44, 0x10, 0x10, 0x42, 0x44,
+ 0x22, 0x33, 0x55, 0x45, 0x11, 0x11, 0x33, 0x45,
+ 0x22, 0x33, 0x55, 0x3f, 0x12, 0x23, 0x45, 0x3f,
+ 0x3d, 0x45, 0x55, 0x3a, 0x31, 0x39, 0x49, 0x34,
+ 0x47, 0x4f, 0x5f, 0x2e, 0x3d, 0x45, 0x55, 0x28,
+ 0x4c, 0x3b, 0x4c, 0x21, 0x4c, 0x3b, 0x4c, 0x1b,
+ 0x5e, 0x4d, 0x5e, 0x15, 0x72, 0x61, 0x72, 0x11,
+ 0xa1, 0x4f, 0x47, 0x0c, 0x97, 0x45, 0x3d, 0x09,
+ 0xba, 0x57, 0x57, 0x06, 0xd7, 0x74, 0x74, 0x04,
+ 0x94, 0x94, 0xb6, 0x04, 0x5a, 0x5a, 0x7c, 0x06,
+ 0x3b, 0x3b, 0x6e, 0x09, 0x27, 0x27, 0x5a, 0x0c,
+ 0x2a, 0x3a, 0x63, 0x11, 0x04, 0x14, 0x3d, 0x14,
+ 0x0c, 0x14, 0x35, 0x1c, 0x32, 0x3a, 0x5b, 0x22,
+ 0x19, 0x2a, 0x42, 0x29, 0x07, 0x18, 0x30, 0x31,
+ 0x00, 0x07, 0x39, 0x3b, 0x15, 0x1d, 0x4f, 0x43,
+ 0x0d, 0x1d, 0x4f, 0x44, 0x0d, 0x1d, 0x4f, 0x4d,
+ 0x0d, 0x1d, 0x4f, 0x4d, 0x00, 0x07, 0x39, 0x56,
+ 0x12, 0x23, 0x45, 0x54, 0x12, 0x23, 0x45, 0x54,
+ 0x12, 0x23, 0x45, 0x4e, 0x22, 0x33, 0x55, 0x4e,
+ 0x3d, 0x1c, 0x1c, 0x46, 0x51, 0x30, 0x30, 0x40,
+ 0x51, 0x30, 0x30, 0x3a, 0x77, 0x56, 0x56, 0x34,
+ 0x7c, 0x49, 0x5a, 0x27, 0x7c, 0x49, 0x5a, 0x21,
+ 0x72, 0x3f, 0x50, 0x1b, 0x72, 0x3f, 0x50, 0x15,
+ 0xad, 0x5b, 0x53, 0x0f, 0xad, 0x5b, 0x53, 0x0c,
+ 0xba, 0x57, 0x57, 0x09, 0xd7, 0x74, 0x74, 0x06,
+ 0x80, 0x80, 0xa2, 0x04, 0x5a, 0x5a, 0x7c, 0x06,
+ 0x3b, 0x3b, 0x6e, 0x09, 0x3b, 0x3b, 0x6e, 0x0f,
+ 0x04, 0x14, 0x3d, 0x14, 0x18, 0x28, 0x51, 0x17,
+ 0x0c, 0x14, 0x35, 0x22, 0x0c, 0x14, 0x35, 0x28,
+ 0x19, 0x2a, 0x42, 0x31, 0x07, 0x18, 0x30, 0x3b,
+ 0x0b, 0x13, 0x45, 0x43, 0x00, 0x07, 0x39, 0x4f,
+ 0x19, 0x29, 0x5b, 0x56, 0x19, 0x29, 0x5b, 0x5c,
+ 0x00, 0x07, 0x39, 0x65, 0x19, 0x29, 0x5b, 0x65,
+ 0x11, 0x11, 0x33, 0x66, 0x12, 0x23, 0x45, 0x66,
+ 0x11, 0x11, 0x33, 0x60, 0x11, 0x11, 0x33, 0x60,
+ 0x51, 0x30, 0x30, 0x50, 0x3d, 0x1c, 0x1c, 0x50,
+ 0x3d, 0x1c, 0x1c, 0x46, 0x51, 0x30, 0x30, 0x3a,
+ 0x72, 0x3f, 0x50, 0x31, 0x7c, 0x49, 0x5a, 0x27,
+ 0x88, 0x55, 0x66, 0x21, 0x88, 0x55, 0x66, 0x1b,
+ 0xa1, 0x4f, 0x47, 0x14, 0xad, 0x5b, 0x53, 0x0f,
+ 0xba, 0x57, 0x57, 0x09, 0xd7, 0x74, 0x74, 0x06,
+ 0x74, 0x84, 0xa5, 0x06, 0x4e, 0x5e, 0x7f, 0x08,
+ 0x41, 0x51, 0x83, 0x0b, 0x2d, 0x3d, 0x6f, 0x11,
+ 0x29, 0x32, 0x5b, 0x18, 0x07, 0x10, 0x39, 0x22,
+ 0x13, 0x1c, 0x45, 0x28, 0x1d, 0x26, 0x4f, 0x2e,
+ 0x00, 0x00, 0x18, 0x39, 0x05, 0x0d, 0x2e, 0x45,
+ 0x05, 0x0d, 0x2e, 0x51, 0x11, 0x19, 0x3a, 0x5d,
+ 0x11, 0x21, 0x3a, 0x65, 0x11, 0x21, 0x3a, 0x74,
+ 0x29, 0x21, 0x32, 0x74, 0x13, 0x0b, 0x1c, 0x7d,
+ 0x36, 0x1d, 0x47, 0x76, 0x20, 0x07, 0x31, 0x76,
+ 0x4f, 0x1d, 0x47, 0x76, 0x4f, 0x1d, 0x47, 0x6e,
+ 0x56, 0x34, 0x45, 0x68, 0x76, 0x54, 0x65, 0x5c,
+ 0x87, 0x32, 0x54, 0x53, 0x67, 0x12, 0x34, 0x4a,
+ 0x93, 0x00, 0x00, 0x3a, 0x82, 0x1c, 0x1c, 0x34,
+ 0xb0, 0x4a, 0x4a, 0x28, 0xb0, 0x4a, 0x4a, 0x1e,
+ 0xd2, 0x5b, 0x5b, 0x17, 0xd2, 0x39, 0x39, 0x12,
+ 0xd2, 0x5b, 0x5b, 0x0b, 0xe8, 0x71, 0x71, 0x08,
+ 0x62, 0x72, 0x93, 0x06, 0x62, 0x72, 0x93, 0x0b,
+ 0x41, 0x51, 0x83, 0x0e, 0x41, 0x51, 0x83, 0x14,
+ 0x1d, 0x26, 0x4f, 0x18, 0x29, 0x32, 0x5b, 0x22,
+ 0x07, 0x10, 0x39, 0x2e, 0x13, 0x1c, 0x45, 0x3a,
+ 0x11, 0x19, 0x3a, 0x45, 0x00, 0x03, 0x24, 0x51,
+ 0x05, 0x0d, 0x2e, 0x5d, 0x11, 0x19, 0x3a, 0x69,
+ 0x05, 0x15, 0x2e, 0x74, 0x05, 0x15, 0x2e, 0x7d,
+ 0x13, 0x0b, 0x1c, 0x86, 0x07, 0x00, 0x10, 0x8f,
+ 0x20, 0x07, 0x31, 0x8e, 0x20, 0x07, 0x31, 0x8e,
+ 0x39, 0x07, 0x31, 0x86, 0x5b, 0x29, 0x53, 0x86,
+ 0x56, 0x34, 0x45, 0x77, 0x87, 0x32, 0x54, 0x68,
+ 0x76, 0x54, 0x65, 0x5c, 0x87, 0x32, 0x54, 0x53,
+ 0x82, 0x1c, 0x1c, 0x46, 0x93, 0x00, 0x00, 0x3a,
+ 0x82, 0x1c, 0x1c, 0x2e, 0xb0, 0x4a, 0x4a, 0x28,
+ 0xd2, 0x39, 0x39, 0x1b, 0xd2, 0x39, 0x39, 0x12,
+ 0xe8, 0x4f, 0x4f, 0x0e, 0xe8, 0x71, 0x71, 0x0b,
+ 0x74, 0x84, 0xa5, 0x08, 0x4e, 0x5e, 0x7f, 0x0b,
+ 0x53, 0x63, 0x95, 0x11, 0x2d, 0x3d, 0x6f, 0x17,
+ 0x29, 0x32, 0x6b, 0x22, 0x1d, 0x26, 0x5f, 0x28,
+ 0x29, 0x32, 0x6b, 0x34, 0x13, 0x1c, 0x55, 0x40,
+ 0x2a, 0x4b, 0x5b, 0x51, 0x0d, 0x2e, 0x3e, 0x5d,
+ 0x00, 0x14, 0x24, 0x69, 0x00, 0x00, 0x07, 0x75,
+ 0x05, 0x15, 0x2e, 0x86, 0x00, 0x0b, 0x24, 0x8f,
+ 0x13, 0x0b, 0x1c, 0x98, 0x13, 0x0b, 0x1c, 0xa1,
+ 0x20, 0x07, 0x31, 0xa2, 0x2c, 0x13, 0x3d, 0xa2,
+ 0x39, 0x07, 0x31, 0x9a, 0x4f, 0x1d, 0x47, 0x8e,
+ 0x87, 0x32, 0x54, 0x83, 0x87, 0x32, 0x54, 0x77,
+ 0x87, 0x32, 0x54, 0x68, 0x87, 0x32, 0x54, 0x5c,
+ 0xb0, 0x4a, 0x4a, 0x50, 0xc1, 0x17, 0x17, 0x40,
+ 0xc1, 0x17, 0x17, 0x34, 0xc1, 0x17, 0x17, 0x28,
+ 0xd2, 0x5b, 0x5b, 0x1e, 0xd2, 0x39, 0x39, 0x17,
+ 0xe8, 0x4f, 0x4f, 0x12, 0xe8, 0x71, 0x71, 0x0b,
+ 0x88, 0x98, 0xb9, 0x08, 0x62, 0x72, 0x93, 0x0e,
+ 0x2d, 0x3d, 0x6f, 0x14, 0x2d, 0x3d, 0x6f, 0x19,
+ 0x1d, 0x26, 0x5f, 0x22, 0x13, 0x1c, 0x55, 0x2e,
+ 0x07, 0x10, 0x49, 0x3a, 0x1d, 0x26, 0x5f, 0x4a,
+ 0x00, 0x14, 0x24, 0x51, 0x2a, 0x4b, 0x5b, 0x69,
+ 0x00, 0x14, 0x24, 0x75, 0x00, 0x00, 0x07, 0x89,
+ 0x00, 0x00, 0x18, 0x98, 0x05, 0x15, 0x2e, 0xa1,
+ 0x29, 0x21, 0x32, 0xb0, 0x1d, 0x15, 0x26, 0xb0,
+ 0x42, 0x29, 0x53, 0xba, 0x36, 0x1d, 0x47, 0xb2,
+ 0x5b, 0x29, 0x53, 0xb2, 0x4f, 0x1d, 0x47, 0xa2,
+ 0x87, 0x32, 0x54, 0x95, 0x87, 0x32, 0x54, 0x83,
+ 0x87, 0x32, 0x54, 0x77, 0x87, 0x32, 0x54, 0x68,
+ 0xc1, 0x17, 0x17, 0x50, 0xc1, 0x17, 0x17, 0x46,
+ 0xc1, 0x17, 0x17, 0x3a, 0xc1, 0x17, 0x17, 0x2e,
+ 0xd2, 0x39, 0x39, 0x21, 0xd2, 0x39, 0x39, 0x1b,
+ 0xe8, 0x4f, 0x4f, 0x12, 0xe8, 0x71, 0x71, 0x0e,
+ 0x7c, 0x9e, 0xaf, 0x0a, 0x66, 0x88, 0x99, 0x0d,
+ 0x51, 0x62, 0x73, 0x12, 0x1a, 0x2b, 0x3c, 0x1c,
+ 0x21, 0x21, 0x3a, 0x28, 0x0f, 0x0f, 0x28, 0x30,
+ 0x0d, 0x0d, 0x4f, 0x3a, 0x00, 0x00, 0x35, 0x4e,
+ 0x00, 0x00, 0x20, 0x57, 0x05, 0x05, 0x36, 0x6b,
+ 0x09, 0x11, 0x32, 0x83, 0x09, 0x11, 0x32, 0x8f,
+ 0x10, 0x18, 0x31, 0xa0, 0x10, 0x18, 0x31, 0xaf,
+ 0x34, 0x24, 0x55, 0xc1, 0x3e, 0x2e, 0x5f, 0xca,
+ 0x46, 0x14, 0x46, 0xca, 0x6c, 0x3a, 0x6c, 0xca,
+ 0x6a, 0x20, 0x41, 0xc1, 0x8c, 0x42, 0x63, 0xb2,
+ 0x99, 0x33, 0x44, 0xa5, 0x99, 0x33, 0x44, 0x8d,
+ 0x99, 0x33, 0x44, 0x81, 0xbb, 0x11, 0x22, 0x6d,
+ 0xc3, 0x06, 0x04, 0x60, 0xcd, 0x0b, 0x0b, 0x4e,
+ 0xd7, 0x0f, 0x12, 0x3f, 0xe1, 0x14, 0x19, 0x33,
+ 0xe7, 0x26, 0x28, 0x23, 0xe7, 0x3f, 0x44, 0x1d,
+ 0xe7, 0x59, 0x5f, 0x14, 0xe7, 0x72, 0x7b, 0x0f,
+ 0x7c, 0x9e, 0xaf, 0x0a, 0x72, 0x94, 0xa5, 0x10,
+ 0x6e, 0x7f, 0x90, 0x17, 0x1a, 0x2b, 0x3c, 0x1f,
+ 0x0f, 0x0f, 0x28, 0x28, 0x00, 0x00, 0x14, 0x34,
+ 0x00, 0x00, 0x35, 0x44, 0x00, 0x00, 0x35, 0x4e,
+ 0x00, 0x00, 0x20, 0x63, 0x00, 0x00, 0x20, 0x77,
+ 0x09, 0x11, 0x32, 0x83, 0x09, 0x11, 0x32, 0x97,
+ 0x26, 0x2e, 0x47, 0xaf, 0x26, 0x2e, 0x47, 0xc1,
+ 0x28, 0x18, 0x49, 0xca, 0x4a, 0x3a, 0x6b, 0xdc,
+ 0x5a, 0x28, 0x5a, 0xdc, 0x46, 0x14, 0x46, 0xdc,
+ 0x8c, 0x42, 0x63, 0xd3, 0x80, 0x36, 0x57, 0xc1,
+ 0x99, 0x33, 0x44, 0xad, 0xa4, 0x3e, 0x4f, 0x99,
+ 0x8e, 0x28, 0x39, 0x81, 0xbb, 0x11, 0x22, 0x79,
+ 0xc7, 0x05, 0x03, 0x60, 0xd1, 0x09, 0x0a, 0x4e,
+ 0xdb, 0x0e, 0x11, 0x45, 0xe5, 0x12, 0x18, 0x33,
+ 0xe9, 0x25, 0x26, 0x28, 0xe9, 0x3e, 0x42, 0x1d,
+ 0xe9, 0x58, 0x5d, 0x17, 0xe9, 0x71, 0x79, 0x0f,
+ 0x88, 0xaa, 0xbb, 0x0a, 0x66, 0x88, 0x99, 0x10,
+ 0x6e, 0x7f, 0x90, 0x17, 0x37, 0x48, 0x59, 0x1f,
+ 0x0f, 0x0f, 0x28, 0x28, 0x00, 0x00, 0x14, 0x34,
+ 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x18, 0x56,
+ 0x05, 0x05, 0x36, 0x63, 0x00, 0x00, 0x20, 0x77,
+ 0x00, 0x00, 0x0c, 0x8f, 0x09, 0x11, 0x32, 0xa3,
+ 0x26, 0x2e, 0x47, 0xb8, 0x32, 0x3a, 0x53, 0xca,
+ 0x3e, 0x2e, 0x5f, 0xdc, 0x4a, 0x3a, 0x6b, 0xeb,
+ 0x6c, 0x3a, 0x6c, 0xee, 0x6c, 0x3a, 0x6c, 0xe5,
+ 0x76, 0x2c, 0x4d, 0xdc, 0x8c, 0x42, 0x63, 0xca,
+ 0x99, 0x33, 0x44, 0xb9, 0x99, 0x33, 0x44, 0xa5,
+ 0xa4, 0x3e, 0x4f, 0x8d, 0xbb, 0x11, 0x22, 0x79,
+ 0xcb, 0x03, 0x02, 0x66, 0xd5, 0x08, 0x09, 0x54,
+ 0xdf, 0x0c, 0x10, 0x45, 0xe9, 0x11, 0x17, 0x33,
+ 0xeb, 0x24, 0x24, 0x28, 0xeb, 0x3d, 0x40, 0x20,
+ 0xeb, 0x57, 0x5b, 0x17, 0xeb, 0x70, 0x77, 0x0f,
+ 0x88, 0xaa, 0xbb, 0x0a, 0x72, 0x94, 0xa5, 0x10,
+ 0x6e, 0x7f, 0x90, 0x17, 0x6e, 0x7f, 0x90, 0x1f,
+ 0x35, 0x35, 0x4e, 0x28, 0x00, 0x00, 0x14, 0x34,
+ 0x00, 0x00, 0x18, 0x44, 0x00, 0x00, 0x35, 0x56,
+ 0x11, 0x11, 0x42, 0x63, 0x05, 0x05, 0x36, 0x77,
+ 0x00, 0x00, 0x0c, 0x8f, 0x09, 0x11, 0x32, 0xa3,
+ 0x26, 0x2e, 0x47, 0xb8, 0x32, 0x3a, 0x53, 0xca,
+ 0x4a, 0x3a, 0x6b, 0xdc, 0x4a, 0x3a, 0x6b, 0xeb,
+ 0x6c, 0x3a, 0x6c, 0xfd, 0x80, 0x4e, 0x80, 0xee,
+ 0x8c, 0x42, 0x63, 0xdc, 0x80, 0x36, 0x57, 0xca,
+ 0xa4, 0x3e, 0x4f, 0xb9, 0xa4, 0x3e, 0x4f, 0xa5,
+ 0x99, 0x33, 0x44, 0x8d, 0xbb, 0x11, 0x22, 0x79,
+ 0xcf, 0x02, 0x01, 0x66, 0xd9, 0x06, 0x08, 0x54,
+ 0xe3, 0x0b, 0x0f, 0x45, 0xed, 0x0f, 0x16, 0x33,
+ 0xed, 0x23, 0x22, 0x28, 0xed, 0x3c, 0x3e, 0x20,
+ 0xed, 0x56, 0x59, 0x17, 0xed, 0x6f, 0x75, 0x0f,
+ 0x7c, 0x95, 0xae, 0x0a, 0x7c, 0x95, 0xae, 0x10,
+ 0x5f, 0x78, 0x91, 0x17, 0x5f, 0x78, 0x91, 0x1f,
+ 0x5d, 0x6e, 0x90, 0x29, 0x26, 0x37, 0x59, 0x37,
+ 0x00, 0x00, 0x09, 0x41, 0x04, 0x00, 0x26, 0x55,
+ 0x13, 0x13, 0x46, 0x65, 0x13, 0x13, 0x46, 0x74,
+ 0x13, 0x13, 0x46, 0x8c, 0x33, 0x00, 0x11, 0x9e,
+ 0x3e, 0x1c, 0x3e, 0xb1, 0x55, 0x33, 0x55, 0xca,
+ 0x6c, 0x4a, 0x6c, 0xde, 0x6c, 0x4a, 0x6c, 0xe8,
+ 0x6a, 0x41, 0x52, 0xeb, 0x80, 0x57, 0x68, 0xeb,
+ 0x8c, 0x63, 0x74, 0xdc, 0x80, 0x57, 0x68, 0xca,
+ 0x9f, 0x17, 0x17, 0xb5, 0xb5, 0x2d, 0x2d, 0xa1,
+ 0xb5, 0x2d, 0x2d, 0x89, 0xd2, 0x06, 0x06, 0x75,
+ 0xd6, 0x00, 0x00, 0x62, 0xe2, 0x00, 0x03, 0x56,
+ 0xe9, 0x0a, 0x12, 0x44, 0xef, 0x10, 0x18, 0x36,
+ 0xe7, 0x1e, 0x20, 0x27, 0xea, 0x3f, 0x3e, 0x1f,
+ 0xed, 0x60, 0x5b, 0x16, 0xf0, 0x80, 0x79, 0x0e,
+ 0x7c, 0x95, 0xae, 0x0a, 0x5f, 0x78, 0x91, 0x10,
+ 0x5f, 0x78, 0x91, 0x17, 0x45, 0x5e, 0x77, 0x1f,
+ 0x40, 0x51, 0x73, 0x29, 0x26, 0x37, 0x59, 0x37,
+ 0x1e, 0x0d, 0x40, 0x41, 0x00, 0x00, 0x09, 0x4f,
+ 0x13, 0x13, 0x46, 0x65, 0x13, 0x13, 0x46, 0x74,
+ 0x33, 0x33, 0x66, 0x83, 0x13, 0x13, 0x46, 0x9e,
+ 0x3e, 0x1c, 0x3e, 0xb1, 0x55, 0x33, 0x55, 0xc0,
+ 0x55, 0x33, 0x55, 0xca, 0x6c, 0x4a, 0x6c, 0xde,
+ 0x76, 0x4d, 0x5e, 0xdc, 0x6a, 0x41, 0x52, 0xdc,
+ 0x80, 0x57, 0x68, 0xd3, 0x8c, 0x63, 0x74, 0xc1,
+ 0xb5, 0x2d, 0x2d, 0xa9, 0x9f, 0x17, 0x17, 0x95,
+ 0xd2, 0x06, 0x06, 0x89, 0xd2, 0x06, 0x06, 0x75,
+ 0xd6, 0x00, 0x00, 0x62, 0xec, 0x05, 0x0d, 0x4e,
+ 0xe9, 0x0a, 0x12, 0x44, 0xef, 0x10, 0x18, 0x36,
+ 0xe8, 0x1e, 0x1f, 0x27, 0xeb, 0x3e, 0x3d, 0x1f,
+ 0xee, 0x5f, 0x5a, 0x16, 0xf1, 0x80, 0x78, 0x0e,
+ 0x6f, 0x67, 0x88, 0x0a, 0x5b, 0x53, 0x74, 0x0d,
+ 0x49, 0x41, 0x62, 0x12, 0x35, 0x2d, 0x4e, 0x1c,
+ 0x26, 0x37, 0x59, 0x23, 0x26, 0x37, 0x59, 0x2f,
+ 0x3b, 0x2a, 0x5d, 0x41, 0x04, 0x00, 0x26, 0x4f,
+ 0x33, 0x00, 0x11, 0x59, 0x33, 0x33, 0x66, 0x6b,
+ 0x33, 0x33, 0x66, 0x83, 0x33, 0x33, 0x66, 0x92,
+ 0x55, 0x33, 0x55, 0xa7, 0x55, 0x33, 0x55, 0xb1,
+ 0x77, 0x33, 0x55, 0xc0, 0x77, 0x33, 0x55, 0xca,
+ 0x8f, 0x34, 0x55, 0xca, 0x8f, 0x34, 0x55, 0xca,
+ 0x8f, 0x34, 0x55, 0xc1, 0xa5, 0x4a, 0x6b, 0xaf,
+ 0xb5, 0x2d, 0x2d, 0xa1, 0xb5, 0x2d, 0x2d, 0x95,
+ 0xd2, 0x06, 0x06, 0x7d, 0xd2, 0x06, 0x06, 0x69,
+ 0xe2, 0x00, 0x03, 0x5c, 0xec, 0x05, 0x0d, 0x4e,
+ 0xe5, 0x06, 0x0e, 0x3c, 0xef, 0x10, 0x18, 0x30,
+ 0xe9, 0x1d, 0x1e, 0x27, 0xec, 0x3e, 0x3c, 0x1c,
+ 0xef, 0x5f, 0x59, 0x13, 0xf2, 0x7f, 0x77, 0x0e,
+ 0x6f, 0x67, 0x88, 0x0a, 0x5b, 0x53, 0x74, 0x0d,
+ 0x49, 0x41, 0x62, 0x12, 0x35, 0x2d, 0x4e, 0x19,
+ 0x09, 0x1a, 0x3c, 0x23, 0x26, 0x37, 0x59, 0x2f,
+ 0x3b, 0x2a, 0x5d, 0x37, 0x1e, 0x0d, 0x40, 0x49,
+ 0x33, 0x00, 0x11, 0x59, 0x33, 0x00, 0x11, 0x65,
+ 0x33, 0x33, 0x66, 0x74, 0x53, 0x53, 0x86, 0x83,
+ 0x55, 0x33, 0x55, 0x93, 0x6c, 0x4a, 0x6c, 0xa7,
+ 0x77, 0x33, 0x55, 0xb1, 0x77, 0x33, 0x55, 0xb1,
+ 0x83, 0x28, 0x49, 0xb8, 0x99, 0x3e, 0x5f, 0xb8,
+ 0x99, 0x3e, 0x5f, 0xaf, 0x8f, 0x34, 0x55, 0xa0,
+ 0xb5, 0x2d, 0x2d, 0x95, 0xb5, 0x2d, 0x2d, 0x89,
+ 0xd2, 0x06, 0x06, 0x75, 0xd2, 0x06, 0x06, 0x69,
+ 0xe2, 0x00, 0x03, 0x56, 0xec, 0x05, 0x0d, 0x44,
+ 0xe5, 0x06, 0x0e, 0x3c, 0xe9, 0x0a, 0x12, 0x30,
+ 0xea, 0x1d, 0x1d, 0x22, 0xed, 0x3d, 0x3b, 0x19,
+ 0xf0, 0x5e, 0x58, 0x13, 0xf3, 0x7f, 0x76, 0x0e,
+ 0x7c, 0x74, 0x95, 0x08, 0x56, 0x4e, 0x6f, 0x0b,
+ 0x62, 0x49, 0x7b, 0x11, 0x4e, 0x35, 0x67, 0x16,
+ 0x44, 0x33, 0x66, 0x21, 0x34, 0x23, 0x56, 0x29,
+ 0x44, 0x33, 0x66, 0x33, 0x44, 0x33, 0x66, 0x41,
+ 0x56, 0x23, 0x56, 0x51, 0x67, 0x00, 0x01, 0x5d,
+ 0x56, 0x23, 0x56, 0x69, 0x76, 0x43, 0x76, 0x75,
+ 0x8d, 0x4b, 0x6c, 0x83, 0x67, 0x25, 0x46, 0x92,
+ 0x8d, 0x4b, 0x6c, 0x9e, 0x7b, 0x39, 0x5a, 0x9e,
+ 0x9f, 0x28, 0x39, 0xa2, 0x9f, 0x28, 0x39, 0xa2,
+ 0x9f, 0x28, 0x39, 0x99, 0xb5, 0x0b, 0x0b, 0x90,
+ 0xc1, 0x00, 0x00, 0x87, 0xe7, 0x11, 0x11, 0x7b,
+ 0xdf, 0x00, 0x00, 0x67, 0xe9, 0x02, 0x0a, 0x5b,
+ 0xeb, 0x00, 0x04, 0x4f, 0xec, 0x05, 0x0a, 0x3f,
+ 0xed, 0x0a, 0x10, 0x33, 0xee, 0x0f, 0x16, 0x27,
+ 0xeb, 0x1c, 0x1c, 0x1e, 0xec, 0x3c, 0x3b, 0x17,
+ 0xed, 0x5c, 0x59, 0x12, 0xee, 0x7b, 0x78, 0x0b,
+ 0x90, 0x88, 0xa9, 0x05, 0x56, 0x4e, 0x6f, 0x0b,
+ 0x4e, 0x35, 0x67, 0x0e, 0x4e, 0x35, 0x67, 0x14,
+ 0x44, 0x33, 0x66, 0x1b, 0x34, 0x23, 0x56, 0x21,
+ 0x34, 0x23, 0x56, 0x29, 0x54, 0x43, 0x76, 0x3b,
+ 0x76, 0x43, 0x76, 0x45, 0x87, 0x10, 0x21, 0x51,
+ 0x87, 0x10, 0x21, 0x5d, 0x76, 0x43, 0x76, 0x69,
+ 0x8d, 0x4b, 0x6c, 0x74, 0x8d, 0x4b, 0x6c, 0x83,
+ 0x7b, 0x39, 0x5a, 0x8c, 0x8d, 0x4b, 0x6c, 0x8c,
+ 0x9f, 0x28, 0x39, 0x90, 0x9f, 0x28, 0x39, 0x8a,
+ 0xb5, 0x0b, 0x0b, 0x8a, 0xb5, 0x0b, 0x0b, 0x7b,
+ 0xc1, 0x00, 0x00, 0x73, 0xd5, 0x00, 0x00, 0x67,
+ 0xe5, 0x00, 0x06, 0x5b, 0xe5, 0x00, 0x06, 0x4f,
+ 0xe9, 0x01, 0x05, 0x45, 0xea, 0x06, 0x0b, 0x39,
+ 0xeb, 0x0b, 0x11, 0x2d, 0xec, 0x10, 0x17, 0x27,
+ 0xeb, 0x1c, 0x1c, 0x1b, 0xec, 0x3b, 0x3b, 0x12,
+ 0xed, 0x5b, 0x59, 0x0e, 0xee, 0x7b, 0x78, 0x0b,
+ 0x90, 0x88, 0xa9, 0x05, 0x6a, 0x62, 0x83, 0x08,
+ 0x4e, 0x35, 0x67, 0x0b, 0x62, 0x49, 0x7b, 0x11,
+ 0x54, 0x43, 0x76, 0x15, 0x54, 0x43, 0x76, 0x21,
+ 0x66, 0x11, 0x55, 0x29, 0x54, 0x43, 0x76, 0x33,
+ 0x76, 0x43, 0x76, 0x39, 0x76, 0x43, 0x76, 0x45,
+ 0x87, 0x10, 0x21, 0x51, 0x87, 0x10, 0x21, 0x5d,
+ 0xad, 0x32, 0x53, 0x65, 0xad, 0x32, 0x53, 0x6b,
+ 0x97, 0x1c, 0x3d, 0x74, 0xa1, 0x26, 0x47, 0x74,
+ 0x9f, 0x28, 0x39, 0x7b, 0x9f, 0x28, 0x39, 0x75,
+ 0xc1, 0x17, 0x17, 0x75, 0xb5, 0x0b, 0x0b, 0x6c,
+ 0xd5, 0x00, 0x00, 0x67, 0xd5, 0x00, 0x00, 0x5b,
+ 0xe5, 0x00, 0x06, 0x4f, 0xe5, 0x00, 0x06, 0x47,
+ 0xe7, 0x01, 0x06, 0x39, 0xe8, 0x06, 0x0c, 0x33,
+ 0xe9, 0x0b, 0x12, 0x27, 0xea, 0x10, 0x18, 0x1d,
+ 0xeb, 0x1b, 0x1c, 0x17, 0xec, 0x3b, 0x3b, 0x12,
+ 0xed, 0x5b, 0x59, 0x0b, 0xee, 0x7a, 0x78, 0x08,
+ 0x90, 0x88, 0xa9, 0x05, 0x7c, 0x74, 0x95, 0x08,
+ 0x62, 0x49, 0x7b, 0x0b, 0x62, 0x49, 0x7b, 0x0e,
+ 0x54, 0x43, 0x76, 0x15, 0x54, 0x43, 0x76, 0x1b,
+ 0x66, 0x11, 0x55, 0x21, 0x66, 0x11, 0x55, 0x29,
+ 0x76, 0x43, 0x76, 0x31, 0x76, 0x43, 0x76, 0x39,
+ 0x87, 0x10, 0x21, 0x45, 0x87, 0x10, 0x21, 0x51,
+ 0x8b, 0x10, 0x31, 0x59, 0xa1, 0x26, 0x47, 0x59,
+ 0xa1, 0x26, 0x47, 0x65, 0x8b, 0x10, 0x31, 0x65,
+ 0xb5, 0x0b, 0x0b, 0x63, 0xc1, 0x17, 0x17, 0x63,
+ 0xc1, 0x17, 0x17, 0x63, 0xc1, 0x17, 0x17, 0x63,
+ 0xd5, 0x00, 0x00, 0x5b, 0xd5, 0x00, 0x00, 0x4f,
+ 0xdf, 0x00, 0x00, 0x47, 0xdf, 0x00, 0x00, 0x3b,
+ 0xe5, 0x02, 0x07, 0x33, 0xe6, 0x07, 0x0d, 0x27,
+ 0xe7, 0x0c, 0x13, 0x1d, 0xe8, 0x11, 0x19, 0x1d,
+ 0xeb, 0x1b, 0x1c, 0x12, 0xec, 0x3a, 0x3b, 0x0e,
+ 0xed, 0x5a, 0x59, 0x0b, 0xee, 0x7a, 0x78, 0x08,
+ 0x9e, 0x86, 0xa7, 0x02, 0x9a, 0x82, 0xa3, 0x05,
+ 0x8f, 0x56, 0x7f, 0x08, 0x72, 0x39, 0x62, 0x0b,
+ 0x71, 0x3c, 0x75, 0x11, 0x75, 0x31, 0x68, 0x16,
+ 0x7a, 0x26, 0x5b, 0x1a, 0x7e, 0x1b, 0x4e, 0x20,
+ 0x82, 0x1c, 0x4f, 0x29, 0x8e, 0x28, 0x5b, 0x33,
+ 0x8e, 0x28, 0x5b, 0x3b, 0xa4, 0x1c, 0x1c, 0x41,
+ 0xb3, 0x0e, 0x0e, 0x45, 0xad, 0x08, 0x08, 0x4b,
+ 0xbd, 0x18, 0x18, 0x54, 0xb7, 0x12, 0x12, 0x54,
+ 0xbd, 0x00, 0x00, 0x55, 0xc9, 0x03, 0x0b, 0x55,
+ 0xd6, 0x00, 0x08, 0x4f, 0xd6, 0x00, 0x08, 0x4f,
+ 0xdb, 0x00, 0x08, 0x48, 0xdd, 0x01, 0x07, 0x3e,
+ 0xdf, 0x02, 0x06, 0x38, 0xe1, 0x03, 0x05, 0x32,
+ 0xe3, 0x00, 0x00, 0x27, 0xe5, 0x07, 0x0a, 0x21,
+ 0xe7, 0x0e, 0x14, 0x1b, 0xe9, 0x15, 0x1e, 0x15,
+ 0xeb, 0x26, 0x24, 0x0f, 0xed, 0x46, 0x42, 0x0c,
+ 0xef, 0x66, 0x5f, 0x09, 0xf1, 0x85, 0x7d, 0x06,
+ 0x9a, 0x82, 0xa3, 0x02, 0xa4, 0x8c, 0xad, 0x05,
+ 0xa9, 0x70, 0x99, 0x05, 0x8f, 0x56, 0x7f, 0x08,
+ 0x83, 0x3f, 0x6a, 0x0d, 0x88, 0x34, 0x5d, 0x11,
+ 0x8c, 0x29, 0x50, 0x16, 0x90, 0x1e, 0x43, 0x1a,
+ 0xa4, 0x1c, 0x1c, 0x21, 0xa4, 0x1c, 0x1c, 0x29,
+ 0xb0, 0x28, 0x28, 0x29, 0xa4, 0x1c, 0x1c, 0x33,
+ 0xad, 0x08, 0x08, 0x3c, 0xbd, 0x18, 0x18, 0x3c,
+ 0xbd, 0x18, 0x18, 0x45, 0xb3, 0x0e, 0x0e, 0x45,
+ 0xc9, 0x03, 0x0b, 0x41, 0xc9, 0x03, 0x0b, 0x41,
+ 0xd6, 0x00, 0x08, 0x41, 0xdc, 0x06, 0x0e, 0x41,
+ 0xdc, 0x05, 0x0c, 0x38, 0xde, 0x06, 0x0b, 0x32,
+ 0xe0, 0x07, 0x0a, 0x2c, 0xe2, 0x08, 0x09, 0x26,
+ 0xe2, 0x04, 0x03, 0x21, 0xe4, 0x0b, 0x0d, 0x1b,
+ 0xe6, 0x12, 0x17, 0x15, 0xe8, 0x19, 0x21, 0x11,
+ 0xe9, 0x31, 0x2b, 0x0c, 0xeb, 0x51, 0x49, 0x09,
+ 0xed, 0x71, 0x66, 0x06, 0xef, 0x90, 0x84, 0x03,
+ 0xa4, 0x8c, 0xad, 0x02, 0x94, 0x7c, 0x9d, 0x02,
+ 0xa9, 0x70, 0x99, 0x05, 0x8f, 0x56, 0x7f, 0x08,
+ 0x96, 0x41, 0x5f, 0x0a, 0x9a, 0x36, 0x52, 0x0d,
+ 0x9e, 0x2b, 0x45, 0x11, 0xa2, 0x20, 0x38, 0x16,
+ 0xa4, 0x1c, 0x1c, 0x1b, 0xa4, 0x1c, 0x1c, 0x21,
+ 0xb0, 0x28, 0x28, 0x21, 0xb0, 0x28, 0x28, 0x29,
+ 0xcc, 0x0e, 0x0e, 0x2a, 0xcc, 0x0e, 0x0e, 0x33,
+ 0xcc, 0x0e, 0x0e, 0x33, 0xd0, 0x12, 0x12, 0x33,
+ 0xd3, 0x0d, 0x15, 0x37, 0xd3, 0x0d, 0x15, 0x37,
+ 0xe6, 0x10, 0x18, 0x37, 0xdc, 0x06, 0x0e, 0x2f,
+ 0xdd, 0x09, 0x10, 0x2c, 0xdf, 0x0a, 0x0f, 0x2c,
+ 0xe1, 0x0b, 0x0e, 0x26, 0xe3, 0x0c, 0x0d, 0x20,
+ 0xe1, 0x08, 0x06, 0x1b, 0xe3, 0x0f, 0x10, 0x15,
+ 0xe5, 0x16, 0x1a, 0x11, 0xe7, 0x1d, 0x24, 0x0b,
+ 0xe7, 0x3c, 0x33, 0x09, 0xe9, 0x5c, 0x50, 0x06,
+ 0xeb, 0x7c, 0x6e, 0x03, 0xed, 0x9b, 0x8b, 0x03,
+ 0xa4, 0x8c, 0xad, 0x02, 0x94, 0x7c, 0x9d, 0x02,
+ 0xa9, 0x70, 0x99, 0x02, 0x8f, 0x56, 0x7f, 0x05,
+ 0xa8, 0x44, 0x54, 0x07, 0xac, 0x39, 0x47, 0x0a,
+ 0xb0, 0x2e, 0x3a, 0x0d, 0xb5, 0x23, 0x2d, 0x11,
+ 0xa4, 0x1c, 0x1c, 0x15, 0xb0, 0x28, 0x28, 0x15,
+ 0xb0, 0x28, 0x28, 0x1b, 0xb0, 0x28, 0x28, 0x21,
+ 0xd6, 0x18, 0x18, 0x24, 0xd0, 0x12, 0x12, 0x24,
+ 0xd6, 0x18, 0x18, 0x2a, 0xd6, 0x18, 0x18, 0x2a,
+ 0xdf, 0x19, 0x21, 0x29, 0xdf, 0x19, 0x21, 0x29,
+ 0xe6, 0x10, 0x18, 0x29, 0xe6, 0x10, 0x18, 0x23,
+ 0xde, 0x0e, 0x14, 0x26, 0xe0, 0x0f, 0x13, 0x20,
+ 0xe2, 0x10, 0x12, 0x20, 0xe4, 0x11, 0x11, 0x16,
+ 0xe0, 0x0c, 0x09, 0x15, 0xe2, 0x13, 0x13, 0x11,
+ 0xe4, 0x1a, 0x1d, 0x0b, 0xe6, 0x21, 0x27, 0x0b,
+ 0xe5, 0x47, 0x3a, 0x06, 0xe7, 0x67, 0x57, 0x06,
+ 0xe9, 0x87, 0x75, 0x03, 0xeb, 0xa6, 0x92, 0x03,
+ 0xd5, 0x8b, 0x83, 0x01, 0xc1, 0x77, 0x6f, 0x01,
+ 0xb9, 0x56, 0x56, 0x02, 0xb9, 0x56, 0x56, 0x03,
+ 0xcd, 0x49, 0x49, 0x05, 0xcd, 0x49, 0x49, 0x08,
+ 0xb9, 0x35, 0x35, 0x08, 0xb9, 0x35, 0x35, 0x0c,
+ 0xcb, 0x2e, 0x2c, 0x0e, 0xcb, 0x2c, 0x2c, 0x11,
+ 0xcb, 0x2a, 0x2c, 0x14, 0xcb, 0x28, 0x2c, 0x16,
+ 0xd7, 0x20, 0x24, 0x18, 0xda, 0x20, 0x23, 0x1d,
+ 0xdd, 0x1f, 0x22, 0x1d, 0xe0, 0x1f, 0x21, 0x1d,
+ 0xe7, 0x22, 0x24, 0x1e, 0xe7, 0x20, 0x24, 0x1e,
+ 0xe7, 0x1d, 0x24, 0x1e, 0xe7, 0x1b, 0x24, 0x1b,
+ 0xe3, 0x1c, 0x20, 0x19, 0xe3, 0x1c, 0x20, 0x17,
+ 0xe3, 0x1c, 0x20, 0x14, 0xe3, 0x1c, 0x20, 0x11,
+ 0xdf, 0x1a, 0x20, 0x0f, 0xe0, 0x23, 0x25, 0x0c,
+ 0xe1, 0x2b, 0x2a, 0x09, 0xe2, 0x34, 0x2f, 0x06,
+ 0xe3, 0x54, 0x49, 0x05, 0xe4, 0x69, 0x5e, 0x03,
+ 0xe5, 0x7e, 0x74, 0x02, 0xe6, 0x92, 0x89, 0x01,
+ 0xe7, 0x9d, 0x95, 0x00, 0xd5, 0x8b, 0x83, 0x01,
+ 0xcd, 0x6a, 0x6a, 0x01, 0xb9, 0x56, 0x56, 0x02,
+ 0xcd, 0x49, 0x49, 0x02, 0xcd, 0x49, 0x49, 0x05,
+ 0xcd, 0x49, 0x49, 0x05, 0xcd, 0x49, 0x49, 0x08,
+ 0xd8, 0x46, 0x46, 0x0b, 0xd8, 0x44, 0x46, 0x0b,
+ 0xd8, 0x42, 0x46, 0x0e, 0xd8, 0x40, 0x46, 0x11,
+ 0xdd, 0x3c, 0x3f, 0x12, 0xe0, 0x3b, 0x3e, 0x15,
+ 0xe3, 0x3b, 0x3d, 0x15, 0xe6, 0x3a, 0x3c, 0x18,
+ 0xe9, 0x3d, 0x3c, 0x16, 0xe9, 0x3a, 0x3c, 0x16,
+ 0xe9, 0x38, 0x3c, 0x16, 0xe9, 0x35, 0x3c, 0x13,
+ 0xe7, 0x36, 0x3b, 0x11, 0xe7, 0x36, 0x3b, 0x11,
+ 0xe7, 0x36, 0x3b, 0x0e, 0xe7, 0x36, 0x3b, 0x0b,
+ 0xe3, 0x34, 0x3a, 0x09, 0xe4, 0x3d, 0x3f, 0x09,
+ 0xe5, 0x45, 0x44, 0x06, 0xe6, 0x4e, 0x49, 0x04,
+ 0xe6, 0x63, 0x59, 0x03, 0xe7, 0x78, 0x6f, 0x02,
+ 0xe8, 0x8d, 0x84, 0x01, 0xe9, 0xa2, 0x99, 0x01,
+ 0xfb, 0xb1, 0xa9, 0x00, 0xe7, 0x9d, 0x95, 0x00,
+ 0xdf, 0x7c, 0x7c, 0x01, 0xcd, 0x6a, 0x6a, 0x01,
+ 0xe2, 0x66, 0x66, 0x02, 0xe2, 0x66, 0x66, 0x02,
+ 0xe2, 0x66, 0x66, 0x05, 0xe2, 0x66, 0x66, 0x05,
+ 0xe5, 0x5f, 0x5f, 0x08, 0xe5, 0x5d, 0x5f, 0x08,
+ 0xe5, 0x5b, 0x5f, 0x0b, 0xe5, 0x59, 0x5f, 0x0b,
+ 0xe3, 0x58, 0x59, 0x0c, 0xe6, 0x57, 0x58, 0x0f,
+ 0xe9, 0x57, 0x57, 0x0f, 0xec, 0x56, 0x56, 0x0f,
+ 0xeb, 0x58, 0x53, 0x10, 0xeb, 0x55, 0x53, 0x10,
+ 0xeb, 0x53, 0x53, 0x10, 0xeb, 0x50, 0x53, 0x10,
+ 0xeb, 0x51, 0x55, 0x0e, 0xeb, 0x51, 0x55, 0x0b,
+ 0xeb, 0x51, 0x55, 0x0b, 0xeb, 0x51, 0x55, 0x08,
+ 0xe7, 0x4f, 0x53, 0x06, 0xe8, 0x57, 0x58, 0x06,
+ 0xe9, 0x60, 0x5d, 0x04, 0xea, 0x68, 0x62, 0x04,
+ 0xe9, 0x73, 0x6a, 0x02, 0xea, 0x87, 0x7f, 0x01,
+ 0xeb, 0x9c, 0x94, 0x01, 0xec, 0xb1, 0xa9, 0x00,
+ 0xfb, 0xb1, 0xa9, 0x00, 0xfb, 0xb1, 0xa9, 0x00,
+ 0xf3, 0x90, 0x90, 0x00, 0xf3, 0x90, 0x90, 0x01,
+ 0xf8, 0x7c, 0x7c, 0x02, 0xf8, 0x7c, 0x7c, 0x02,
+ 0xf8, 0x7c, 0x7c, 0x02, 0xf8, 0x7c, 0x7c, 0x02,
+ 0xf2, 0x77, 0x79, 0x05, 0xf2, 0x75, 0x79, 0x05,
+ 0xf2, 0x73, 0x79, 0x05, 0xf2, 0x71, 0x79, 0x08,
+ 0xe9, 0x73, 0x74, 0x09, 0xec, 0x73, 0x73, 0x09,
+ 0xef, 0x72, 0x72, 0x09, 0xf2, 0x72, 0x71, 0x09,
+ 0xed, 0x72, 0x6b, 0x0a, 0xed, 0x70, 0x6b, 0x0a,
+ 0xed, 0x6d, 0x6b, 0x0a, 0xed, 0x6b, 0x6b, 0x0a,
+ 0xef, 0x6b, 0x70, 0x08, 0xef, 0x6b, 0x70, 0x08,
+ 0xef, 0x6b, 0x70, 0x06, 0xef, 0x6b, 0x70, 0x06,
+ 0xeb, 0x69, 0x6d, 0x04, 0xec, 0x71, 0x72, 0x04,
+ 0xed, 0x7a, 0x77, 0x01, 0xee, 0x82, 0x7c, 0x01,
+ 0xec, 0x82, 0x7a, 0x01, 0xed, 0x97, 0x8f, 0x01,
+ 0xee, 0xab, 0xa4, 0x00, 0xef, 0xc0, 0xba, 0x00,
+ ])
+}
+
diff --git a/dom/canvas/test/webgl-mochitest/mochi-to-testcase.py b/dom/canvas/test/webgl-mochitest/mochi-to-testcase.py
new file mode 100644
index 000000000..919ba2328
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/mochi-to-testcase.py
@@ -0,0 +1,101 @@
+import sys
+import os.path
+import re
+
+assert len(sys.argv) == 2
+mochiPath = sys.argv[1]
+
+extDotPos = mochiPath.find('.html')
+assert extDotPos != -1, 'mochitest target must be an html doc.'
+
+testPath = mochiPath[:extDotPos] + '.solo.html'
+
+def ReadLocalFile(include):
+ incPath = os.path.dirname(mochiPath)
+ filePath = os.path.join(incPath, include)
+
+ data = None
+ try:
+ f = open(filePath, 'r')
+ data = f.read()
+ except:
+ pass
+
+ try:
+ f.close()
+ except:
+ pass
+
+ return data
+
+kSimpleTestReplacement = '''
+
+<script>
+// SimpleTest.js replacement
+
+function debug(text) {
+ var elem = document.getElementById('mochi-to-testcase-output');
+ elem.innerHTML += '\\n<br/>\\n' + text;
+}
+
+function ok(val, text) {
+ var status = val ? 'Test <font color=\\'green\\'>passed</font>: '
+ : 'Test <font color=\\'red\\' >FAILED</font>: ';
+ debug(status + text);
+}
+
+function todo(val, text) {
+ var status = val ? 'Test <font color=\\'orange\\'>UNEXPECTED PASS</font>: '
+ : 'Test <font color=\\'blue\\' >todo</font>: ';
+ debug(status + text);
+}
+
+SimpleTest = {
+ waitForExplicitFinish: function() {},
+ finish: function() {},
+ requestFlakyTimeout: function() {},
+};
+</script>
+<div id='mochi-to-testcase-output'></div>
+
+'''
+
+fin = open(mochiPath, 'rb')
+fout = open(testPath, 'wb')
+includePattern = re.compile('<script\\s*src=[\'"](.*)\\.js[\'"]>\\s*</script>')
+cssPattern = re.compile('<link\\s*rel=[\'"]stylesheet[\'"]\\s*href=[\'"]([^=>]*)[\'"]>')
+for line in fin:
+ skipLine = False
+ for css in cssPattern.findall(line):
+ skipLine = True
+ print('Ignoring stylesheet: ' + css)
+
+ for inc in includePattern.findall(line):
+ skipLine = True
+ if inc == '/MochiKit/MochiKit':
+ continue
+
+ if inc == '/tests/SimpleTest/SimpleTest':
+ print('Injecting SimpleTest replacement')
+ fout.write(kSimpleTestReplacement);
+ continue
+
+ incData = ReadLocalFile(inc + '.js')
+ if not incData:
+ print('Warning: Unknown JS file ignored: ' + inc + '.js')
+ continue
+
+ print('Injecting include: ' + inc + '.js')
+ fout.write('\n<script>\n// Imported from: ' + inc + '.js\n');
+ fout.write(incData);
+ fout.write('\n</script>\n');
+ continue
+
+ if skipLine:
+ continue
+
+ fout.write(line)
+ continue
+
+fin.close()
+fout.close()
diff --git a/dom/canvas/test/webgl-mochitest/mochitest.ini b/dom/canvas/test/webgl-mochitest/mochitest.ini
new file mode 100644
index 000000000..d5bc8701d
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/mochitest.ini
@@ -0,0 +1,96 @@
+[DEFAULT]
+subsuite = webgl
+
+support-files =
+ ensure-exts/ensure-ext.js
+ driver-info.js
+ es3-data.js
+ webgl-util.js
+
+[ensure-exts/test_ANGLE_instanced_arrays.html]
+fail-if = (os == 'android') || (os == 'mac' && os_version == '10.6')
+[ensure-exts/test_EXT_blend_minmax.html]
+fail-if = (os == 'android')
+[ensure-exts/test_EXT_color_buffer_half_float.html]
+fail-if = (os == 'android')
+[ensure-exts/test_EXT_disjoint_timer_query.html]
+fail-if = (os == 'android') || (os == 'mac') || (os == 'win' && os_version == '5.1')
+[ensure-exts/test_EXT_frag_depth.html]
+fail-if = (os == 'android')
+[ensure-exts/test_EXT_sRGB.html]
+fail-if = (os == 'android') || (os == 'mac' && os_version == '10.6') || (os == 'win')
+[ensure-exts/test_EXT_shader_texture_lod.html]
+fail-if = (os == 'android')
+[ensure-exts/test_EXT_texture_filter_anisotropic.html]
+fail-if = (os == 'android') || (os == 'linux')
+[ensure-exts/test_OES_standard_derivatives.html]
+fail-if = (os == 'android')
+[ensure-exts/test_WEBGL_color_buffer_float.html]
+fail-if = (os == 'android')
+[ensure-exts/test_WEBGL_compressed_texture_atc.html]
+fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win')
+[ensure-exts/test_WEBGL_compressed_texture_es3.html]
+fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win')
+[ensure-exts/test_WEBGL_compressed_texture_etc1.html]
+fail-if = (os == 'linux') || (os == 'mac') || (os == 'win' && os_version == '5.1')
+[ensure-exts/test_WEBGL_compressed_texture_pvrtc.html]
+fail-if = (os == 'android') || (os == 'linux') || (os == 'mac') || (os == 'win')
+[ensure-exts/test_WEBGL_compressed_texture_s3tc.html]
+fail-if = (os == 'android') || (os == 'linux')
+[ensure-exts/test_WEBGL_depth_texture.html]
+fail-if = (os == 'mac' && os_version == '10.6')
+[ensure-exts/test_WEBGL_draw_buffers.html]
+fail-if = (os == 'android') || (os == 'win' && os_version == '5.1')
+
+[ensure-exts/test_common.html]
+
+
+[regress/test_bug_1268096.html]
+
+
+[test_backends.html]
+[test_backbuffer_channels.html]
+[test_depth_readpixels.html]
+[test_canvas_size.html]
+[test_capture.html]
+support-files = ../captureStream_common.js
+# Even though we use ../ here, in the test HTML, we need to omit this. Sub-CWD relative
+# paths are fine, but they locate the file and dump it in the current directory.
+[test_cubemap_must_be_square.html]
+[test_depth_tex_lazy_clear.html]
+[test_draw.html]
+[test_fb_param.html]
+[test_fb_param_crash.html]
+[test_hidden_alpha.html]
+[test_hidden_depth_stencil.html]
+fail-if = (os == 'win' && os_version == '5.1')
+[test_implicit_color_buffer_float.html]
+[test_highp_fs.html]
+[test_no_arr_points.html]
+skip-if = android_version == '18' #Android 4.3 aws only; bug 1030942
+[test_noprog_draw.html]
+[test_pixel_pack_buffer.html]
+[test_privileged_exts.html]
+[test_renderer_strings.html]
+[test_sab_with_webgl.html]
+[test_texsubimage_float.html]
+[test_uninit_data.html]
+[test_webgl_available.html]
+#[test_webgl_color_buffer_float.html]
+# We haven't cleaned up the Try results yet, but let's get this on the books first.
+[test_webgl_conformance.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_webgl_compressed_texture_es3.html]
+[test_webgl_force_enable.html]
+[test_webgl_request_context.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_webgl_request_mismatch.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_webgl2_not_exposed.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_webgl2_invalidate_framebuffer.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_webgl2_alpha_luminance.html]
+skip-if = toolkit == 'android' #bug 865443- seperate suite - the non_conf* tests pass except for one on armv6 tests
+[test_fuzzing_bugs.html]
+[test_webglcontextcreationerror.html]
diff --git a/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html b/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
new file mode 100644
index 000000000..be66cc5f0
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/regress/test_bug_1268096.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='UTF-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='../webgl-util.js'></script>
+ <script id='vs' type='x-shader/x-vertex'>
+
+attribute vec2 aPosition;
+
+void main(void) {
+ gl_PointSize = 16.0;
+ gl_Position = vec4(aPosition, 0, 1);
+}
+
+ </script>
+ <script id='fs' type='x-shader/x-fragment'>
+
+precision mediump float;
+
+uniform vec4 uColor;
+
+void main(void) {
+ gl_FragColor = uColor;
+}
+
+ </script>
+ </head>
+ <body>
+ <script>
+
+function GetPixel(gl, x, y) {
+ var pixel = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+ return pixel;
+}
+
+function ColorStr(arr) {
+ return '{' + arr.map(function(x) { return '' + x; }).join(', ') + '}';
+}
+
+function PixelShouldBe(gl, x, y, ref, prefix) {
+ if (prefix) {
+ prefix += ': ';
+ }
+
+ var test = GetPixel(gl, x, y);
+
+ var testStr = ColorStr(test);
+ var refStr = ColorStr(ref.map(x => x * 255));
+ ok(testStr == refStr, prefix + 'Should be ' + refStr + ', was ' + testStr + '.');
+}
+
+function GetProgram(gl) {
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+
+ prog.aPosition = gl.getAttribLocation(prog, 'aPosition');
+ ok(prog.aPosition >= 0, '`aPosition` should be valid.');
+
+ prog.uColor = gl.getUniformLocation(prog, 'uColor');
+ ok(prog.uColor, '`uColor` should be valid.');
+
+ return prog;
+}
+
+// Give ourselves a scope to return early from:
+(function () {
+ var c = document.createElement('canvas');
+ document.body.appendChild(c);
+ var gl = c.getContext('webgl', { depth: false, antialias: false });
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ ////////
+
+ // With default culling, it works fine.
+ // The problem seems to be that the virtual quads generated from points are wound 'backwards'.
+ gl.enable(gl.CULL_FACE);
+ gl.cullFace(gl.BACK); // Cull back faces.
+
+ ////////
+
+ var vertArr = new Float32Array([
+ -1, -1,
+ +1, -1,
+ -1, +1,
+ ]);
+
+ var vbo = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
+ gl.bufferData(gl.ARRAY_BUFFER, vertArr, gl.STATIC_DRAW);
+
+ ////////
+
+ var triProg = GetProgram(gl);
+ var pointProg = GetProgram(gl);
+ if (!triProg || !pointProg) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ ok(triProg.aPosition == pointProg.aPosition, 'aPosition should match.');
+ gl.enableVertexAttribArray(triProg.aPosition);
+ gl.vertexAttribPointer(triProg.aPosition, 2, gl.FLOAT, false, 0, 0);
+
+ ////////
+
+ gl.useProgram(triProg);
+ var triColor = [1, 0, 0, 1];
+ gl.uniform4fv(triProg.uColor, triColor);
+
+ gl.useProgram(pointProg);
+ var pointColor = [0, 1, 0, 1];
+ gl.uniform4fv(pointProg.uColor, pointColor);
+
+ ////////
+
+ gl.clearColor(0, 0, 0, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ gl.useProgram(triProg);
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
+
+ gl.useProgram(pointProg);
+ gl.drawArrays(gl.POINTS, 0, 3);
+
+ ////////
+
+ PixelShouldBe(gl, 32, 32, triColor, 'Tri');
+ PixelShouldBe(gl, 0, 0, pointColor, 'Point');
+
+ ok(true, 'Test complete');
+})();
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_backbuffer_channels.html b/dom/canvas/test/webgl-mochitest/test_backbuffer_channels.html
new file mode 100644
index 000000000..ef880f9c2
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_backbuffer_channels.html
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 958723</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<script>
+
+function TestAttribs(attribs) {
+ ok(true, 'Testing attribs: ' + JSON.stringify(attribs));
+ var canvas = document.createElement('canvas');
+ var gl = canvas.getContext('experimental-webgl', attribs);
+ ok(gl, 'No tested attribs should result in failure to create a context');
+ if (!gl)
+ return;
+
+ var actual = gl.getContextAttributes();
+
+ ok(actual.alpha == attribs.alpha,
+ 'Resulting `alpha` should match request.');
+ ok(actual.premultipliedAlpha == attribs.premultipliedAlpha,
+ 'Resulting `premultipliedAlpha` should match request.');
+ ok(actual.preserveDrawingBuffer == attribs.preserveDrawingBuffer,
+ 'Resulting `preserveDrawingBuffer` should match request.');
+
+ // "The depth, stencil and antialias attributes, when set to true, are
+ // requests, not requirements."
+ if (!attribs.antialias) {
+ ok(!actual.antialias, 'No `antialias` if not requested.');
+ }
+ if (!attribs.depth) {
+ ok(!actual.depth, 'No `depth` if not requested.');
+ }
+ if (!attribs.stencil) {
+ ok(!actual.stencil, 'No `stencil` if not requested.');
+ }
+
+ var hasAlpha = !!gl.getParameter(gl.ALPHA_BITS);
+ var hasDepth = !!gl.getParameter(gl.DEPTH_BITS);
+ var hasStencil = !!gl.getParameter(gl.STENCIL_BITS);
+ var hasAntialias = !!gl.getParameter(gl.SAMPLES);
+
+ ok(hasAlpha == actual.alpha, 'Bits should match `alpha` attrib.');
+ ok(hasAntialias == actual.antialias, 'Bits should match `antialias` attrib.');
+ ok(hasDepth == actual.depth, 'Bits should match `depth` attrib.');
+ ok(hasStencil == actual.stencil, 'Bits should match `stencil` attrib.');
+}
+
+function CloneAttribs(attribs) {
+ return {
+ alpha: attribs.alpha,
+ antialias: attribs.antialias,
+ depth: attribs.depth,
+ premultipliedAlpha: attribs.premultipliedAlpha,
+ preserveDrawingBuffer: attribs.preserveDrawingBuffer,
+ stencil: attribs.stencil,
+ };
+}
+
+function SplitForAttrib(list, attrib) {
+ var ret = [];
+
+ for (var i in list) {
+ var cur = list[i];
+ if (cur[attrib])
+ throw 'Attrib is already true.';
+
+ var clone = CloneAttribs(cur);
+ clone[attrib] = true;
+
+ ret.push(cur);
+ ret.push(clone);
+ }
+
+ return ret;
+}
+
+function GenAttribList() {
+ var base = {
+ alpha: false,
+ antialias: false,
+ depth: false,
+ premultipliedAlpha: false,
+ preserveDrawingBuffer: false,
+ stencil: false,
+ };
+ var list = [base];
+ list = SplitForAttrib(list, 'alpha');
+ list = SplitForAttrib(list, 'antialias');
+ list = SplitForAttrib(list, 'depth');
+ list = SplitForAttrib(list, 'premultipliedAlpha');
+ list = SplitForAttrib(list, 'preserveDrawingBuffer');
+ list = SplitForAttrib(list, 'stencil');
+
+ if (list.length != 1<<6)
+ throw 'Attribs list length wrong: ' + list.length;
+
+ return list;
+}
+
+var list = GenAttribList();
+for (var i in list) {
+ var attribs = list[i];
+ TestAttribs(attribs);
+}
+
+ok(true, 'Test complete.');
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_backends.html b/dom/canvas/test/webgl-mochitest/test_backends.html
new file mode 100644
index 000000000..50ba4cbd4
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_backends.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+</head>
+<body>
+<script>
+
+function RunWithPrefs(prefPairList, func) {
+ var prefEnv = {'set': prefPairList};
+ try {
+ SpecialPowers.pushPrefEnv(prefEnv, func);
+ } catch (e) {
+ console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList));
+ func();
+ }
+}
+
+////////////////////////////////////////
+
+var ANGLE_IS_SINGLETON = true;
+
+var expectD3DType;
+try {
+ // code borrowed from browser/modules/test/browser_taskbar_preview.js
+ var version = SpecialPowers.Services.sysinfo.getProperty('version');
+ version = parseFloat(version);
+
+ // Version 6.0 is Vista, 6.1 is 7.
+ if (version <= 6.0)
+ expectD3DType = 'd3d9';
+ else
+ expectD3DType = 'd3d11';
+} catch (e) {
+ expectD3DType = 'd3d11';
+}
+
+function GetRenderer() {
+ var c = document.createElement('canvas');
+ var gl = c.getContext('experimental-webgl');
+ if (!gl)
+ return undefined;
+
+ var ext = gl.getExtension('WEBGL_debug_renderer_info');
+ if (!ext)
+ throw new Error('Requires WEBGL_debug_renderer_info.');
+
+ var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+ return renderer;
+}
+
+function GetRendererType() {
+ var renderer = GetRenderer();
+ if (renderer === undefined)
+ return 'none';
+
+ if (renderer.includes('ANGLE')) {
+ if (renderer.includes('Microsoft Basic Render Driver')) // Also includes 'Direct3D11'.
+ return 'warp';
+ if (renderer.includes('Direct3D11'))
+ return 'd3d11';
+ if (renderer.includes('Direct3D9'))
+ return 'd3d9';
+
+ } else {
+ return 'gl';
+ }
+
+ throw new Error('Unrecognized renderer type for: ' + renderer);
+}
+
+function TestActualType(testName, expectedType) {
+ var actualType = GetRendererType();
+ ok(actualType == expectedType,
+ '[' + testName + '] Expected ' + expectedType + ', was ' + actualType);
+}
+
+////////////////////////////////////////
+
+function TestDefault() {
+ var expectedType = 'gl';
+ var isWindows = (navigator.platform.indexOf('Win') == 0);
+ if (isWindows) {
+ expectedType = expectD3DType;
+ }
+ TestActualType('TestDefault', expectedType);
+
+ if (isWindows && !ANGLE_IS_SINGLETON) {
+ var prefPairList = [
+ ['webgl.angle.force-warp', true],
+ ];
+ RunWithPrefs(prefPairList, TestWARP);
+ return;
+ }
+
+ var prefPairList = [
+ ['webgl.disabled', true],
+ ];
+ RunWithPrefs(prefPairList, TestDisabled);
+ return;
+}
+
+
+function TestWARP() {
+ var expectedType = (expectD3DType == 'd3d11') ? 'warp' : 'none';
+ TestActualType('TestWARP', expectedType);
+
+ var prefPairList = [
+ ['webgl.angle.force-warp', false],
+ ['webgl.angle.force-d3d11', true],
+ ];
+ RunWithPrefs(prefPairList, TestD3D11);
+}
+
+
+function TestD3D11() {
+ var expectedType = (expectD3DType == 'd3d11') ? 'd3d11' : 'none';
+ TestActualType('TestD3D11', expectedType);
+
+ var prefPairList = [
+ ['webgl.angle.force-d3d11', false],
+ ['webgl.angle.try-d3d11', false],
+ ];
+ RunWithPrefs(prefPairList, TestD3D9);
+}
+
+
+function TestD3D9() {
+ TestActualType('TestD3D9', 'd3d9');
+
+ var prefPairList = [
+ ['webgl.angle.try-d3d11', true],
+ ['webgl.disable-angle', true],
+ ];
+ RunWithPrefs(prefPairList, TestWinGL);
+}
+
+
+function TestWinGL() {
+ TestActualType('TestWinGL', 'gl');
+
+ var prefPairList = [
+ ['webgl.disabled', true],
+ ];
+ RunWithPrefs(prefPairList, TestDisabled);
+}
+
+
+function TestDisabled() {
+ TestActualType('TestDisabled', 'none');
+
+ SimpleTest.finish();
+}
+
+////////////////////////////////////////
+
+SimpleTest.waitForExplicitFinish();
+
+var prefPairList = [
+ ['webgl.force-enabled', true],
+ ['webgl.enable-debug-renderer-info', true],
+];
+RunWithPrefs(prefPairList, TestDefault);
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_canvas_size.html b/dom/canvas/test/webgl-mochitest/test_canvas_size.html
new file mode 100644
index 000000000..a9ea076a8
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_canvas_size.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+</head>
+<title>WebGL test: Framebuffer maximum size test. (Bug 1290333)</title>
+<body>
+<script>
+function TestSize(contextName, testSize) {
+ var attributes = {
+ antialias: false,
+ };
+
+ var canvas = document.createElement('canvas');
+ var gl = canvas.getContext(contextName, attributes);
+
+ if (!gl) {
+ todo(false, contextName + 'is unavailable.');
+ return;
+ }
+ gl.canvas.width = testSize;
+ gl.canvas.height = testSize;
+
+ ok(true, contextName + 'test complete.');
+}
+
+function run() {
+ TestSize('webgl', 16384);
+ TestSize('webgl2', 16384);
+
+ ok(true, 'Test complete.');
+ SimpleTest.finish();
+}
+
+////////////////////////////////////////
+
+SimpleTest.waitForExplicitFinish();
+
+try {
+ var prefPairList = [
+ ['webgl.force-enabled', true],
+ ];
+ var prefEnv = {'set': prefPairList};
+ SpecialPowers.pushPrefEnv(prefEnv, run);
+} catch (e) {
+ warning('No SpecialPowers, but trying WebGL2 anyway...');
+ run();
+}
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_capture.html b/dom/canvas/test/webgl-mochitest/test_capture.html
new file mode 100644
index 000000000..1de9a2c0b
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_capture.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+<title>WebGL test: CaptureStream()</title>
+
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="captureStream_common.js">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<script id="vs" type="x-shader/x-vertex">
+
+attribute vec2 aVertCoord;
+
+void main(void) {
+ gl_Position = vec4(aVertCoord, 0.0, 1.0);
+}
+
+</script>
+<script id="fs" type="x-shader/x-fragment">
+
+precision mediump float;
+uniform vec4 uColor;
+
+void main(void) {
+ gl_FragColor = uColor;
+}
+
+</script>
+<body>
+<script>
+
+// Globals. Initialized during beginTest().
+var c; // Canvas element captured by streams.
+var gl; // WebGLContext of |c|.
+var h; // CaptureStreamTestHelper holding utility test functions.
+var vauto; // Video element with captureStream stream in automatic mode.
+var vmanual; // Video element with captureStream stream in manual (fps 0) mode.
+var vrate; // Video element with captureStream stream with fixed frame rate.
+
+/* Fails the test if there was a GL error */
+function checkGLError(info) {
+ var error = gl.getError();
+ // Comparing strings for sake of log output in hex format.
+ is("0x" + error.toString(16), "0x0", "WebGL error [" + info + "]");
+}
+
+function checkClearColorInitialRed() {
+ info("Checking that clearing to red works for first frame.");
+
+ h.clearColor(c, h.red);
+
+ vauto.srcObject = c.captureStream();
+ vmanual.srcObject = c.captureStream(0);
+ vrate.srcObject = c.captureStream(10);
+
+ ok(h.isPixel(h.getPixel(vauto), h.blackTransparent, 0,
+ "vauto should not be drawn to before stable state"));
+ ok(h.isPixel(h.getPixel(vrate), h.blackTransparent, 0,
+ "vrate should not be drawn to before stable state"));
+ ok(h.isPixel(h.getPixel(vmanual), h.blackTransparent, 0,
+ "vmanual should not be drawn to before stable state"));
+
+ return Promise.resolve()
+ .then(() => h.waitForPixelColor(vauto, h.red, 0,
+ "should become red automatically"))
+ .then(() => h.waitForPixelColor(vrate, h.red, 0,
+ "should become red automatically"))
+ .then(() => h.waitForPixelColor(vmanual, h.red, 0,
+ "should become red when we get to stable " +
+ "state (first frame)"))
+}
+
+function checkDrawColorGreen() {
+ info("Checking that drawing green results in green video frames.");
+ var drawing = h.startDrawing(h.drawColor.bind(h, c, h.green));
+ checkGLError('after DrawColor');
+ return Promise.resolve()
+ .then(() => h.waitForPixelColor(vauto, h.green, 0,
+ "should become green automatically"))
+ .then(() => h.waitForPixelColor(vrate, h.green, 0,
+ "should become green automatically"))
+ .then(() => h.waitForPixelColor(vmanual, h.red, 0,
+ "should still be red"))
+ .then(() => h.requestFrame(vmanual))
+ .then(() => h.waitForPixelColor(vmanual, h.green, 0,
+ "should become green after requstFrame()"))
+ .then(() => drawing.stop());
+}
+
+function checkClearColorRed() {
+ info("Checking that clearing to red works.");
+ var drawing = h.startDrawing(h.clearColor.bind(h, c, h.red));
+ return Promise.resolve()
+ .then(() => h.waitForPixelColor(vauto, h.red, 0,
+ "should become red automatically"))
+ .then(() => h.waitForPixelColor(vrate, h.red, 0,
+ "should become red automatically"))
+ .then(() => h.waitForPixelColor(vmanual, h.green, 0,
+ "should still be green"))
+ .then(() => h.requestFrame(vmanual))
+ .then(() => h.waitForPixelColor(vmanual, h.red, 0,
+ "should become red after requestFrame()"))
+ .then(() => drawing.stop());
+}
+
+function checkRequestFrameOrderGuarantee() {
+ info("Checking that requestFrame() immediately after a draw " +
+ "call results in the expected frame seen in the stream.");
+ return Promise.resolve()
+ .then(() => h.waitForPixelColor(vmanual, h.red, 0, "should still be red"))
+ .then(() => h.drawColor(c, h.green)) // 1. Draw canvas green
+ .then(() => h.requestFrame(vmanual)) // 2. Immediately request a frame
+ .then(() => h.waitForPixelColor(vmanual, h.green, 0,
+ "should become green after call order test"))
+}
+
+function checkEndedOnStop() {
+ let promises = [vauto, vmanual, vrate].map(elem => {
+ elem.srcObject.getTracks()[0].stop();
+ return new Promise(resolve =>
+ elem.addEventListener("ended", function endedListener(event) {
+ ok(true, "Element " + elem.id + " ended.");
+ resolve();
+ elem.removeEventListener("ended", endedListener);
+ }));
+ });
+ return Promise.all(promises);
+}
+
+
+function finish() {
+ ok(true, 'Test complete.');
+ SimpleTest.finish();
+}
+
+function beginTest() {
+ h = new CaptureStreamTestHelperWebGL();
+
+ c = h.createAndAppendElement('canvas', 'c');
+ vauto = h.createAndAppendElement('video', 'vauto');
+ vmanual = h.createAndAppendElement('video', 'vmanual');
+ vrate = h.createAndAppendElement('video', 'vrate');
+
+ gl = WebGLUtil.getWebGL('c', false);
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ finish();
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+ WebGLUtil.setWarningFunc(errorFunc);
+
+ gl.disable(gl.DEPTH_TEST);
+
+ prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ // Setup vertex coordinates for drawing a rectangle across the whole canvas.
+
+ prog.aVertCoord = gl.getAttribLocation(prog, "aVertCoord");
+ ok(prog.aVertCoord >= 0, '`aVertCoord` should be valid.');
+
+ var vertCoordArr = new Float32Array([
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ 1, 1,
+ ]);
+ var vertCoordBuff = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertCoordBuff);
+ gl.bufferData(gl.ARRAY_BUFFER, vertCoordArr, gl.STATIC_DRAW);
+
+ gl.useProgram(prog);
+ gl.enableVertexAttribArray(prog.aVertCoord);
+ gl.vertexAttribPointer(prog.aVertCoord, 2, gl.FLOAT, false, 0, 0);
+
+ // Setup the helper with a pointer to how to change fragment color.
+
+ var uColorLocation = gl.getUniformLocation(prog, "uColor");
+ h.setFragmentColorLocation(uColorLocation);
+
+ checkGLError('after setup');
+
+ // Run tests.
+
+ Promise.resolve()
+ .then(checkClearColorInitialRed)
+ .then(checkDrawColorGreen)
+ .then(checkClearColorRed)
+ .then(checkRequestFrameOrderGuarantee)
+ .then(checkEndedOnStop)
+ .then(finish);
+}
+
+SimpleTest.waitForExplicitFinish();
+
+beginTest();
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_cubemap_must_be_square.html b/dom/canvas/test/webgl-mochitest/test_cubemap_must_be_square.html
new file mode 100644
index 000000000..f2bc2914b
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_cubemap_must_be_square.html
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta http-equiv='content-type' content='text/html; charset=utf-8'/>
+
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='webgl-util.js'></script>
+</head>
+
+<body>
+<script>
+'use strict';
+
+(function() {
+ var c = document.createElement('canvas');
+ var gl = c.getContext('webgl');
+
+ ok(!gl.getError(), 'No error before.');
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_CUBE_MAP, tex);
+ gl.texImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_X, 0, gl.RGBA, 4, 3, 0, gl.RGBA,
+ gl.UNSIGNED_BYTE, null);
+
+ var err = gl.getError();
+ ok(err == gl.INVALID_VALUE,
+ 'Should be INVALID_VALUE (0x501) after, was 0x' + err.toString(16) + '.');
+})();
+
+ok(true, 'Test complete.');
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_depth_readpixels.html b/dom/canvas/test/webgl-mochitest/test_depth_readpixels.html
new file mode 100644
index 000000000..895e7c98f
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_depth_readpixels.html
@@ -0,0 +1,60 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>WebGL test: Check for error on ReadPixels from a depth-only FB.</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="webgl-util.js"></script>
+<script src="driver-info.js"></script>
+</head>
+<body>
+<canvas id="c"></canvas>
+<script>
+"use strict";
+
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(gl, 'Get GL working here first.');
+ return;
+ }
+
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 4, 4);
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,
+ gl.RENDERBUFFER, rb);
+
+ if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) {
+ todo(false, 'Depth-only FB incomplete. This is valid.');
+ return;
+ }
+
+ ok(!gl.getError(), 'Should have no errors after constructing FB.');
+
+ var pixels = new Uint8Array([1, 2, 3, 4]);
+ gl.readPixels(0, 0, // x,y
+ 1, 1, // w,h
+ gl.RGBA, gl.UNSIGNED_BYTE, pixels);
+
+ ok(gl.getError() == gl.INVALID_OPERATION,
+ '1x1 color read from a depth FB should generated INVALID_OP.');
+ console.log('Data after 1x1 color-from-depth readpixels:');
+ console.log(pixels);
+
+ gl.readPixels(0, 0, // x,y
+ 0, 0, // w,h
+ gl.RGBA, gl.UNSIGNED_BYTE, pixels);
+
+ ok(gl.getError() == gl.INVALID_OPERATION,
+ '0x0 color read from a depth FB should generated INVALID_OP.');
+})();
+
+ok(true, 'Test complete.');
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_depth_tex_lazy_clear.html b/dom/canvas/test/webgl-mochitest/test_depth_tex_lazy_clear.html
new file mode 100644
index 000000000..a3f2dc409
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_depth_tex_lazy_clear.html
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset='utf-8'/>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='webgl-util.js'></script>
+</head>
+<body>
+<script id='vs' type='x-shader/x-vertex'>
+
+attribute vec2 aVertCoord;
+
+void main(void) {
+ gl_Position = vec4(aVertCoord, 0.0, 1.0);
+}
+
+</script>
+<script id='fs' type='x-shader/x-fragment'>
+
+precision mediump float;
+uniform sampler2D uTexUnit;
+
+void main(void) {
+ vec4 tex = texture2D(uTexUnit, vec2(0));
+ gl_FragColor = vec4(tex.r, 1.0, 0.0, 1.0);
+}
+
+</script>
+<script>
+'use strict';
+
+var gl = null;
+
+do {
+ var c = document.createElement('canvas');
+ gl = c.getContext('webgl');
+ if (!gl) {
+ todo(false, 'Get GL working here first.');
+ break;
+ }
+
+ var ext = gl.getExtension('WEBGL_depth_texture');
+ if (!ext) {
+ todo(false, 'WEBGL_depth_texture not supported, which is fine.');
+ break;
+ }
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ break;
+ }
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.DEPTH_COMPONENT, 1, 1, 0, gl.DEPTH_COMPONENT,
+ gl.UNSIGNED_INT, null);
+
+ var uTexUnit = gl.getUniformLocation(prog, 'uTexUnit');
+ gl.useProgram(prog);
+ gl.uniform1i(uTexUnit, 0);
+
+ gl.drawArrays(gl.POINTS, 0, 1);
+
+ ok(!gl.getError(), 'Should have no errors.');
+} while (false);
+
+ok(true, 'Test complete.');
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_draw.html b/dom/canvas/test/webgl-mochitest/test_draw.html
new file mode 100644
index 000000000..90d244719
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_draw.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+<title>WebGL test: Basic drawing</title>
+
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+
+
+<script id="vs" type="x-shader/x-vertex">
+
+attribute vec2 aVertCoord;
+
+void main(void) {
+ gl_Position = vec4(aVertCoord, 0.0, 1.0);
+}
+
+</script>
+<script id="fs" type="x-shader/x-fragment">
+
+precision mediump float;
+
+void main(void) {
+ gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+</script>
+<body>
+<canvas id="c" width="64" height="64"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+ WebGLUtil.setWarningFunc(errorFunc);
+
+ gl.disable(gl.DEPTH_TEST);
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ prog.aVertCoord = gl.getAttribLocation(prog, "aVertCoord");
+ ok(prog.aVertCoord >= 0, '`aVertCoord` should be valid.');
+
+ function checkGLError(func, info, refValue) {
+ if (!refValue)
+ refValue = 0;
+
+ var error = gl.getError();
+ func(error == refValue,
+ '[' + info + '] gl.getError should be 0x' + refValue.toString(16) +
+ ', was 0x' + error.toString(16) + '.');
+ }
+
+ var vertCoordArr = new Float32Array([
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ 1, 1,
+ ]);
+ var vertCoordBuff = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertCoordBuff);
+ gl.bufferData(gl.ARRAY_BUFFER, vertCoordArr, gl.STATIC_DRAW);
+
+ var indexArr = new Uint16Array([
+ 0, 1, 2,
+ 3,
+ ]);
+ var indexBuff = gl.createBuffer();
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuff);
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);
+
+
+ function testPixel(x, y, refData, func, infoString) {
+ var pixel = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+
+ var pixelMatches = pixel[0] == refData[0] &&
+ pixel[1] == refData[1] &&
+ pixel[2] == refData[2] &&
+ pixel[3] == refData[3];
+ func(pixelMatches, infoString);
+ }
+
+ function preDraw(info) {
+ gl.clearColor(1.0, 0.0, 0.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ testPixel(0, 0, [255, 0, 0, 255], ok, '[' + info + '] Should be red before drawing.');
+ }
+
+ function postDraw(info) {
+ testPixel(0, 0, [0, 255, 0, 255], ok, '[' + info + '] Should be green before drawing.');
+ }
+
+ gl.useProgram(prog);
+ gl.enableVertexAttribArray(prog.aVertCoord);
+ gl.vertexAttribPointer(prog.aVertCoord, 2, gl.FLOAT, false, 0, 0);
+
+ // Start drawing
+ checkGLError(ok, 'after setup');
+
+ preDraw('DrawArrays');
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+ postDraw('DrawArrays');
+ checkGLError(ok, 'after DrawArrays');
+
+ preDraw('DrawElements');
+ gl.drawElements(gl.TRIANGLE_STRIP, 4, gl.UNSIGNED_SHORT, 0);
+ postDraw('DrawElements');
+ checkGLError(ok, 'after DrawElements');
+
+ ok(true, 'Test complete.');
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_fb_param.html b/dom/canvas/test/webgl-mochitest/test_fb_param.html
new file mode 100644
index 000000000..5907221dd
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_fb_param.html
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 958491</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ // Catch actual WebGLUtil errors, not GL errors.
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+
+ function checkGLError(func, info, reference) {
+ var error = gl.getError();
+ var prefix = info ? ('[' + info + '] ') : '';
+ var text = 'gl.getError should be 0x' + reference.toString(16) +
+ ', was 0x' + error.toString(16) + '.';
+ func(error == reference, prefix + text);
+ }
+
+ // Begin test:
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 4, 4);
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
+ gl.RENDERBUFFER, rb);
+
+ checkGLError(ok, 'before bad param query', 0);
+
+ var GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING = 0x8210;
+ var result = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
+ gl.COLOR_ATTACHMENT0,
+ GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING);
+
+ checkGLError(ok, 'after bad param query', gl.INVALID_ENUM);
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_fb_param_crash.html b/dom/canvas/test/webgl-mochitest/test_fb_param_crash.html
new file mode 100644
index 000000000..56a29be46
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_fb_param_crash.html
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 958723</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ // Catch actual WebGLUtil errors, not GL errors.
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+
+ function checkGLError(func, info, reference) {
+ var error = gl.getError();
+ var prefix = info ? ('[' + info + '] ') : '';
+ var text = 'gl.getError should be 0x' + reference.toString(16) +
+ ', was 0x' + error.toString(16) + '.';
+ func(error == reference, prefix + text);
+ }
+
+ // Begin test:
+ if (!gl.getExtension('WEBGL_draw_buffers')) {
+ todo(false, 'Not having this extension is fine.');
+ return;
+ }
+ checkGLError(ok, 'before bad param query', 0);
+
+ var result = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER,
+ gl.COLOR_ATTACHMENT0,
+ gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
+
+ checkGLError(ok, 'after bad param query', gl.INVALID_OPERATION);
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_fuzzing_bugs.html b/dom/canvas/test/webgl-mochitest/test_fuzzing_bugs.html
new file mode 100644
index 000000000..3b0b1016c
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_fuzzing_bugs.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML>
+<title>WebGL fuzzy bugs</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<script>
+
+// Test the framebufferTexture2D() call with a unbound texture.
+function framebufferTexture2D_bug1257593() {
+ var canvas = document.createElement('canvas');
+
+ var gl = null;
+ gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
+ if (!gl) {
+ todo(false, 'WebGL framebufferTexture2D test, webgl is unavailable.');
+ return;
+ }
+
+ var texture = gl.createTexture(); // only createTexture(), but no bindBuffer()
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, texture, 0);
+
+ ok(true, 'WebGL framebufferTexture2D with unbound texture');
+}
+
+// Test to call ClearBufferXXX() during context lost.
+function webGL2ClearBufferXXX_bug1252414() {
+ var canvas = document.createElement('canvas');
+
+ var gl = canvas.getContext('webgl2');
+ if (!gl) {
+ todo(false, 'WebGL2 is not supported');
+ return;
+ }
+
+ var ext = gl.getExtension('WEBGL_lose_context');
+ if (!ext) {
+ todo(false, 'WebGL ClearBufferXXX test, ext WEBGL_lose_context is unavailable.');
+ return;
+ }
+
+ // Force to lose context.
+ ext.loseContext();
+
+ // Even thought the context is lost, all clearBuffer* function should still
+ // work without crash.
+ gl.clearBufferiv(gl.COLOR, 0, new Int32Array(10));
+ gl.clearBufferuiv(gl.COLOR, 0, new Uint32Array(10));
+ gl.clearBufferfv(gl.DEPTH, 0, new Float32Array(10));
+ gl.clearBufferfi(gl.DEPTH_STENCIL, 0, 0.0, 0);
+
+ ok(true, 'WebGL2 clearBufferXXX call during loseContext');
+}
+
+// Test gl function for multiple gl contexts switch.
+function getFramebufferAttachmentParameter_bug1267100()
+{
+ var canvas1 = document.createElement('canvas');
+ var canvas2 = document.createElement('canvas');
+
+ var gl1 = null;
+ gl1 = canvas1.getContext('webgl') || canvas1.getContext('experimental-webgl');
+ if (!gl1) {
+ todo(false, 'WebGL getFramebufferAttachmentParameter test, webgl is unavailable.');
+ return;
+ }
+ var gl2 = null;
+ gl2 = canvas2.getContext('webgl') || canvas2.getContext('experimental-webgl');
+ if (!gl2) {
+ todo(false, 'WebGL getFramebufferAttachmentParameter test, webgl is unavailable.');
+ return;
+ }
+
+ gl1.bindFramebuffer(gl1.FRAMEBUFFER, gl1.createFramebuffer());
+ gl2.scissor(0, 1, 2, 3);
+ // The gl call should still work even though we use another gl context before.
+ gl1.getFramebufferAttachmentParameter(gl1.FRAMEBUFFER,
+ gl1.COLOR_ATTACHMENT0,
+ gl1.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
+
+ ok(true, 'WebGL test getFramebufferAttachmentParameter');
+}
+
+// Test to call getFragDataLocation() when the fragment shader is detatched.
+function getFragDataLocation_bug1259702() {
+ var canvas = document.createElement('canvas');
+
+ var gl = canvas.getContext('webgl2');
+
+ if (!gl) {
+ todo(false, 'WebGL2 is not supported');
+ return;
+ }
+
+ var program = gl.createProgram();
+
+ var vertexShaderSrc =
+ "void main(void) { \
+ gl_Position = vec4(1.0, 1.0, 1.0, 1.0); \
+ }";
+ var fragmentShaderSrc =
+ "void main(void) { \
+ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); \
+ }";
+
+ var vertexShader = gl.createShader(gl.VERTEX_SHADER);
+ var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
+
+ gl.shaderSource(vertexShader, vertexShaderSrc);
+ gl.compileShader(vertexShader);
+ gl.attachShader(program, vertexShader);
+
+ gl.shaderSource(fragmentShader, fragmentShaderSrc);
+ gl.compileShader(fragmentShader);
+ gl.attachShader(program, fragmentShader);
+
+ gl.linkProgram(program);
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
+ var lastError = gl.getProgramInfoLog(program);
+ ok(false, 'WebGL getFragDataLocation() test, error in linking:' +
+ lastError);
+ return;
+ }
+
+ gl.useProgram(program);
+
+ gl.detachShader(program, fragmentShader);
+ // Test the getFragDataLocation() call after detatch the shader.
+ // This call should not hit crash.
+ gl.getFragDataLocation(program, "foobar");
+
+ ok(true, 'WebGL getFragDataLocation() call after detatch fragment shader');
+}
+
+function run() {
+ webGL2ClearBufferXXX_bug1252414();
+ framebufferTexture2D_bug1257593();
+ getFramebufferAttachmentParameter_bug1267100();
+ getFragDataLocation_bug1259702();
+
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForExplicitFinish();
+
+try {
+ var prefArrArr = [
+ ['webgl.force-enabled', true],
+ ['webgl.enable-webgl2', true],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, run);
+} catch (e) {
+ warning('No SpecialPowers, but trying WebGL2 anyway...');
+ run();
+}
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_hidden_alpha.html b/dom/canvas/test/webgl-mochitest/test_hidden_alpha.html
new file mode 100644
index 000000000..addc1b016
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_hidden_alpha.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML>
+<title>WebGL test: Hidden alpha on no-alpha contexts</title>
+<script src='/tests/SimpleTest/SimpleTest.js'></script>
+<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+<script src='driver-info.js'></script>
+<script src='webgl-util.js'></script>
+<body>
+<script id='vs' type='x-shader/x-vertex'>
+ attribute vec2 aPosCoord;
+
+ void main(void) {
+ gl_Position = vec4(aPosCoord, 0.0, 1.0);
+ }
+</script>
+
+<script id='fs' type='x-shader/x-fragment'>
+ precision mediump float;
+
+ void main(void) {
+ gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
+ }
+</script>
+<canvas id='canvas' style='border: none;' width='100' height='100'></canvas>
+<script>
+
+var posCoords_arr = new Float32Array(2 * 4);
+var posCoords_buff = null;
+function DrawQuad(gl, prog, x0, y0, x1, y1) {
+ gl.useProgram(prog);
+
+ if (!posCoords_buff) {
+ posCoords_buff = gl.createBuffer();
+ }
+ gl.bindBuffer(gl.ARRAY_BUFFER, posCoords_buff);
+ posCoords_arr[0] = x0;
+ posCoords_arr[1] = y0;
+
+ posCoords_arr[2] = x1;
+ posCoords_arr[3] = y0;
+
+ posCoords_arr[4] = x0;
+ posCoords_arr[5] = y1;
+
+ posCoords_arr[6] = x1;
+ posCoords_arr[7] = y1;
+ gl.bufferData(gl.ARRAY_BUFFER, posCoords_arr, gl.STREAM_DRAW);
+
+ gl.enableVertexAttribArray(prog.aPosCoord);
+ gl.vertexAttribPointer(prog.aPosCoord, 2, gl.FLOAT, false, 0, 0);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+}
+
+function DrawSquare(gl, prog, size) {
+ DrawQuad(gl, prog, -size, -size, size, size);
+}
+
+function Reset(gl) {
+ gl.canvas.width += 1;
+ gl.canvas.width -= 1;
+}
+
+function ReadCenterPixel(gl) {
+ var w = gl.drawingbufferWidth;
+ var h = gl.drawingbufferHeight;
+ var ret = new Uint8Array(4);
+ gl.readPixels(w/2, h/2, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, ret);
+ return ret;
+}
+
+function Test(gl, prog) {
+ gl.enable(gl.BLEND);
+ gl.blendFunc(gl.ZERO, gl.DST_ALPHA);
+
+ var iColor = 64;
+ var fColor = iColor / 255.0;
+
+ //////////////////
+
+ ok(true, 'clear(R,G,B,0)');
+
+ Reset(gl);
+
+ gl.clearColor(fColor, fColor, fColor, 0.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ var dataURL_pre = gl.canvas.toDataURL();
+ //console.log('Before blending: ' + dataURL_pre);
+
+ DrawSquare(gl, prog, 0.7);
+
+ var pixel = ReadCenterPixel(gl);
+ ok(pixel[0] == iColor &&
+ pixel[1] == iColor &&
+ pixel[2] == iColor, 'Color should be the same.');
+ ok(pixel[3] == 255, 'No-alpha should always readback as 1.0 alpha.');
+
+ var dataURL_post = gl.canvas.toDataURL();
+ //console.log('After blending: ' + dataURL_post);
+ ok(dataURL_post == dataURL_pre,
+ 'toDataURL should be unchanged after blending.');
+
+ //////////////////
+
+ ok(true, 'mask(R,G,B,0), clear(R,G,B,1)');
+
+ Reset(gl);
+
+ gl.colorMask(true, true, true, false);
+ gl.clearColor(fColor, fColor, fColor, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.colorMask(true, true, true, true);
+
+ dataURL_pre = gl.canvas.toDataURL();
+ //console.log('Before blending: ' + dataURL_pre);
+
+ DrawSquare(gl, prog, 0.7);
+
+ var pixel = ReadCenterPixel(gl);
+ ok(pixel[0] == iColor &&
+ pixel[1] == iColor &&
+ pixel[2] == iColor, 'Color should be the same.');
+ ok(pixel[3] == 255, 'No-alpha should always readback as 1.0 alpha.');
+ ok(gl.getError() == 0, 'Should have no errors.');
+
+ dataURL_post = gl.canvas.toDataURL();
+ //console.log('After blending: ' + dataURL_post);
+ ok(dataURL_post == dataURL_pre,
+ 'toDataURL should be unchanged after blending.');
+
+ ok(true, 'Test complete.');
+ SimpleTest.finish();
+}
+
+(function(){
+ var canvas = document.getElementById('canvas');
+ var attribs = {
+ alpha: false,
+ antialias: false,
+ premultipliedAlpha: false,
+ };
+ var gl = canvas.getContext('experimental-webgl', attribs);
+ ok(gl, 'WebGL should work.');
+ ok(gl.getParameter(gl.ALPHA_BITS) == 0, 'Shouldn\'t have alpha bits.');
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ ok(prog, 'Program should link.');
+ prog.aPosCoord = gl.getAttribLocation(prog, 'aPosCoord');
+
+ SimpleTest.waitForExplicitFinish();
+ SimpleTest.requestFlakyTimeout("untriaged");
+ setTimeout(function(){ Test(gl, prog); }, 500);
+})();
+
+</script>
+</body>
diff --git a/dom/canvas/test/webgl-mochitest/test_hidden_depth_stencil.html b/dom/canvas/test/webgl-mochitest/test_hidden_depth_stencil.html
new file mode 100644
index 000000000..987af9e37
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_hidden_depth_stencil.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML>
+<title>WebGL test: Hidden depth/stencil passes without a depth/stencil buffer respectively</title>
+<script src='/tests/SimpleTest/SimpleTest.js'></script>
+<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+<script src='webgl-util.js'></script>
+<body>
+<script id='vs' type='x-shader/x-vertex'>
+ void main(void) {
+ gl_PointSize = 1.0; // Note that this is undefined if we don't write to it!
+ gl_Position = vec4(vec3(0), 1);
+ }
+</script>
+
+<script id='fs' type='x-shader/x-fragment'>
+ precision mediump float;
+
+ void main(void) {
+ gl_FragColor = vec4(0, 1, 0, 1);
+ }
+</script>
+<script>
+
+function ColorString(arr) {
+ return '[' + arr[0] + ', ' + arr[1] + ', ' + arr[2] + ', ' + arr[3] + ']';
+}
+
+function DrawAndCheck(gl, infoPrefix, refColorStr) {
+ gl.viewport(0, 0, 1, 1);
+
+ gl.clearColor(1, 0, 0, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
+ gl.drawArrays(gl.POINTS, 0, 1);
+
+ var pixel = new Uint8Array(4);
+ gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+ var pixelStr = ColorString(pixel);
+
+ ok(pixelStr == refColorStr, infoPrefix + pixelStr + ' should be ' + refColorStr);
+}
+
+function TestCurrent(gl, attribs, infoPrefix) {
+ infoPrefix = infoPrefix + JSON.stringify(attribs) + ': ';
+
+ var CLEAR_COLOR = ColorString([255, 0, 0, 255]);
+ var DRAW_COLOR = ColorString([0, 255, 0, 255]);
+
+ gl.disable(gl.DEPTH_TEST);
+ gl.disable(gl.STENCIL_TEST);
+
+ DrawAndCheck(gl, infoPrefix + 'initial: ', DRAW_COLOR);
+
+ if (!attribs.depth) {
+ gl.enable(gl.DEPTH_TEST);
+ gl.depthFunc(gl.NEVER);
+
+ gl.disable(gl.STENCIL_TEST);
+
+ // Depth test is enabled, and should pass NEVER.
+ // Since there is no depth buffer, the depth test is not run.
+ // Stencil test is disabled.
+ DrawAndCheck(gl, infoPrefix + 'no-depth: ', DRAW_COLOR);
+ }
+
+ if (!attribs.stencil) {
+ gl.disable(gl.DEPTH_TEST);
+
+ gl.enable(gl.STENCIL_TEST);
+ gl.stencilFunc(gl.NEVER, 0, 0);
+
+ // Depth test is disabled.
+ // Stencil test is enabled, and should pass NEVER.
+ // Since there is no stencil buffer, the stencil test is not run.
+ DrawAndCheck(gl, infoPrefix + 'no-stencil: ', DRAW_COLOR);
+ }
+}
+
+function TestBackbuffer(requestedAttribs) {
+ var canvas = document.createElement('canvas');
+ canvas.width = 1;
+ canvas.height = 1;
+ var gl = canvas.getContext('experimental-webgl', requestedAttribs);
+ if (!gl) {
+ ok(true, 'WebGL doesn\'t work, skipping test.');
+ return;
+ }
+
+ ok(gl.drawingBufferWidth == 1 && gl.drawingBufferHeight == 1,
+ 'backbuffer should be 1x1');
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ gl.useProgram(prog);
+
+ var attribs = {
+ depth: gl.getContextAttributes().depth,
+ stencil: gl.getContextAttributes().stencil,
+ };
+ TestCurrent(gl, attribs, 'Backbuffer: ');
+}
+
+function TestUserFB() {
+ var canvas = document.createElement('canvas');
+ var gl = canvas.getContext('experimental-webgl');
+ if (!gl) {
+ ok(true, 'WebGL doesn\'t work, skipping test.');
+ return;
+ }
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ gl.useProgram(prog);
+
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 1, 1);
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb);
+
+ var depthRB = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, depthRB);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 1, 1);
+
+ var stencilRB = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, stencilRB);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, 1, 1);
+
+ do {
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthRB);
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, null);
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ if (status != gl.FRAMEBUFFER_COMPLETE) {
+ ok(true, 'Depth-only user FB is incomplete. This is allowed.');
+ break;
+ }
+
+ TestCurrent(gl, {depth: true, stencil: false}, 'Depth-only user FB');
+ } while (false);
+
+ do {
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, null);
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, gl.RENDERBUFFER, stencilRB);
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ if (status != gl.FRAMEBUFFER_COMPLETE) {
+ ok(true, 'Stencil-only user FB is incomplete. This is allowed.');
+ break;
+ }
+
+ TestCurrent(gl, {depth: false, stencil: true}, 'Stencil-only user FB');
+ } while (false);
+}
+
+(function(){
+ TestBackbuffer({depth: true, stencil: false});
+ TestBackbuffer({depth: false, stencil: true});
+ TestUserFB();
+})();
+
+</script>
+</body>
diff --git a/dom/canvas/test/webgl-mochitest/test_highp_fs.html b/dom/canvas/test/webgl-mochitest/test_highp_fs.html
new file mode 100644
index 000000000..8d82c33e4
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_highp_fs.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML>
+<title>WebGL test: `highp` support</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<script id="shader-vs" type="x-shader/x-vertex">
+
+void main(void) {
+ gl_Position = vec4(vec3(0.0), 1.0);
+}
+
+</script>
+<script id="shader-fs" type="x-shader/x-fragment">
+
+precision highp float;
+
+void main(void) {
+ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+}
+
+</script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ // Catch actual WebGLUtil errors, not GL errors.
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+
+ function checkGLError(func, info) {
+ var error = gl.getError();
+ var prefix = info ? ('[' + info + '] ') : ''
+ func(!error, prefix + 'gl.getError should be 0x0, was 0x' + error.toString(16) + '.');
+ }
+
+ var format = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);
+ var prog = WebGLUtil.createProgramByIds(gl, 'shader-vs', 'shader-fs');
+ checkGLError(ok);
+
+ if (format) {
+ ok(prog, 'Frag shader with unconditional `precision highp float` should ' +
+ 'link if `getShaderPrecisionFormat` gives a format for it.');
+ } else {
+ ok(!prog, 'Frag shader with unconditional `precision highp float` should ' +
+ 'NOT link if `getShaderPrecisionFormat` gives NO format for it.');
+ }
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_implicit_color_buffer_float.html b/dom/canvas/test/webgl-mochitest/test_implicit_color_buffer_float.html
new file mode 100644
index 000000000..bbabef3e8
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_implicit_color_buffer_float.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<meta charset='utf-8'>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<script>
+
+var RGBA32F_EXT = 0x8814;
+var RGBA16F_EXT = 0x881A; // Yep, it's really 4 and A.
+var HALF_FLOAT_OES = 0x8D61;
+
+function IsFormatValidForRB(gl, format) {
+ ok(!gl.getError(), 'Should have no errors here.');
+
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, format, 4, 4);
+
+ var error = gl.getError();
+ if (error == gl.INVALID_ENUM)
+ return false;
+
+ ok(error == gl.NO_ERROR, 'Error should be INVALID_ENUM or NO_ERROR.');
+ return error == gl.NO_ERROR;
+}
+
+function IsFormatValidForTex(gl, format, type) {
+ ok(!gl.getError(), 'Should have no errors here.');
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, format, 4, 4, 0, format, type, null);
+
+ var error = gl.getError();
+ if (error == gl.INVALID_ENUM || error == gl.INVALID_OPERATION)
+ return false;
+
+ ok(error == gl.NO_ERROR, 'Error should be INVALID_{ENUM,OPERATION} or NO_ERROR.');
+ return error == gl.NO_ERROR;
+}
+
+function IsFormatValidForTexFB(gl, format, type) {
+ ok(!gl.getError(), 'Should have no errors here.');
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, format, 4, 4, 0, format, type, null);
+
+ var error = gl.getError();
+ if (error == gl.INVALID_ENUM || error == gl.INVALID_OPERATION)
+ return false;
+
+ ok(error == gl.NO_ERROR, 'Error should be INVALID_{ENUM,OPERATION} or NO_ERROR.');
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
+ tex, 0);
+ error = gl.getError();
+ ok(error == gl.NO_ERROR, 'Error should be NO_ERROR.');
+
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ return status == gl.FRAMEBUFFER_COMPLETE;
+}
+
+function IsFormatValidForTexFBRead(gl, texFormat, texType, readType) {
+ ok(!gl.getError(), 'Should have no errors here.');
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, texFormat, 4, 4, 0, texFormat, texType,
+ null);
+
+ var error = gl.getError();
+ if (error == gl.INVALID_ENUM || error == gl.INVALID_OPERATION)
+ return false;
+
+ ok(error == gl.NO_ERROR, 'Error should be INVALID_{ENUM,OPERATION} or NO_ERROR.');
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,
+ tex, 0);
+ error = gl.getError();
+ ok(error == gl.NO_ERROR, 'Error should be NO_ERROR.');
+
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ if (status != gl.FRAMEBUFFER_COMPLETE)
+ return false;
+
+ var data;
+ switch (readType) {
+ case gl.UNSIGNED_BYTE:
+ data = new Uint8Array(4);
+ break;
+ case HALF_FLOAT_OES:
+ data = new Uint16Array(4);
+ break;
+ case gl.FLOAT:
+ data = new Float32Array(4);
+ break;
+ default:
+ throw 'Bad `readType`.';
+ }
+ gl.readPixels(0, 0, 1, 1, gl.RGBA, readType, data);
+
+ error = gl.getError();
+ return error == gl.NO_ERROR;
+}
+
+function TestColorBufferExt(gl, rbFormat, texFormat, texType, readType)
+{
+ var isTexFBValid = IsFormatValidForTexFB(gl, texFormat, texType);
+ var isTexFBReadValid = IsFormatValidForTexFBRead(gl, texFormat, texType,
+ readType);
+ var isRBValid = IsFormatValidForRB(gl, rbFormat);
+
+ var validSubsetCount = isTexFBValid + isTexFBReadValid + isRBValid;
+
+ if (validSubsetCount) {
+ ok(isTexFBValid, 'If active, texture-fbs should work.');
+ ok(isTexFBReadValid, 'If active, reading texture-fbs should work.');
+ ok(isRBValid, 'If active, renderbuffers should work.');
+ }
+
+ return validSubsetCount == 3;
+}
+
+function TestImpliedExtension(gl, baseExtName, impliedExtName, rbFormat,
+ texFormat, texType, readType)
+{
+ ok(true, '========');
+ ok(true, 'Testing if ' + baseExtName + ' implies ' + impliedExtName + '.');
+ ok(true, '--------');
+
+ var baseExt = gl.getExtension(baseExtName);
+ if (!baseExt) {
+ ok(!baseExt, 'Ext \'' + baseExtName + '\' can be unsupported.');
+ return;
+ }
+
+ var isTexValid = IsFormatValidForTex(gl, texFormat, texType);
+ ok(isTexValid, baseExtName + ' should allow float textures.');
+ if (!isTexValid)
+ return;
+
+ var isImplicitlyActive = TestColorBufferExt(gl, rbFormat, texFormat,
+ texType, readType);
+
+ if (isImplicitlyActive) {
+ ok(true, 'Activating ' + baseExtName + ' has implicitly activated ' +
+ impliedExtName + '.');
+
+ var impliedExt = gl.getExtension(impliedExtName);
+ ok(impliedExt, 'If ' + impliedExtName + ' is supported implicitly, it' +
+ ' must be supported explicitly as well.');
+ return;
+ }
+
+ ok(true, 'Activating ' + baseExtName + ' has not implicitly activated ' +
+ impliedExtName + '.');
+ ok(true, '--------');
+
+ var impliedExt = gl.getExtension(impliedExtName);
+ if (!impliedExt) {
+ ok(true, impliedExtName + ' can be unsupported.');
+ return;
+ }
+ ok(true, 'Explicit activation of ' + impliedExtName + ' successful.');
+
+ var isFunctional = TestColorBufferExt(gl, rbFormat, texFormat, texType,
+ readType);
+ ok(isFunctional, impliedExtName + ' should be fully functional.');
+}
+
+(function() {
+ var canvas = document.createElement('canvas');
+ var gl = canvas.getContext('experimental-webgl');
+ if (!gl) {
+ ok(!gl, 'WebGL can be unsupported.');
+ return;
+ }
+
+ TestImpliedExtension(gl, 'OES_texture_float', 'WEBGL_color_buffer_float',
+ RGBA32F_EXT, gl.RGBA, gl.FLOAT, gl.FLOAT);
+ TestImpliedExtension(gl, 'OES_texture_half_float',
+ 'EXT_color_buffer_half_float', RGBA16F_EXT, gl.RGBA,
+ HALF_FLOAT_OES, gl.FLOAT);
+ ok(true, '========');
+ ok(true, 'TEST COMPLETE');
+})();
+
+</script>
+
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_no_arr_points.html b/dom/canvas/test/webgl-mochitest/test_no_arr_points.html
new file mode 100644
index 000000000..caeea696e
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_no_arr_points.html
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML>
+<title>WebGL test: Drawing without attrib arrays</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<script id="vs-no-attrib" type="x-shader/x-vertex">
+
+void main(void) {
+ gl_PointSize = 64.0;
+ gl_Position = vec4(vec3(0.0), 1.0);
+}
+
+</script>
+<script id="vs-attrib" type="x-shader/x-vertex">
+
+attribute vec3 aPosition;
+
+void main(void) {
+ gl_PointSize = 64.0;
+ gl_Position = vec4(aPosition, 1.0);
+}
+
+</script>
+<script id="fs" type="x-shader/x-fragment">
+
+precision mediump float;
+
+void main(void) {
+ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
+}
+
+</script>
+<body>
+<canvas id="c" width="64" height="64"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+ WebGLUtil.setWarningFunc(errorFunc);
+
+ var attribProg = WebGLUtil.createProgramByIds(gl, 'vs-attrib', 'fs');
+ var noAttribProg = WebGLUtil.createProgramByIds(gl, 'vs-no-attrib', 'fs');
+ if (!attribProg || !noAttribProg) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ attribProg.aPosition = gl.getAttribLocation(attribProg, "aPosition");
+ ok(attribProg.aPosition >= 0, '`aPosition` should be valid.');
+
+ function isScreenBlack() {
+ var pixels = gl.drawingBufferWidth * gl.drawingBufferHeight;
+ var data = new Uint8Array(4 * pixels);
+ gl.readPixels(0, 0,
+ gl.drawingBufferWidth, gl.drawingBufferHeight,
+ gl.RGBA, gl.UNSIGNED_BYTE,
+ data);
+
+ var accum = 0;
+ for (var i = 0; i < pixels; i++) {
+ accum += data[4*i + 0];
+ accum += data[4*i + 1];
+ accum += data[4*i + 2];
+ }
+
+ return accum == 0;
+ }
+
+ function checkGLError(func, info) {
+ var error = gl.getError();
+ func(!error, '[' + info + '] gl.getError should be 0, was 0x' + error.toString(16) + '.');
+ }
+
+ function testDrawing(info) {
+ var cruelNumber = 1024*1024;
+ // Really, we should test for INT32_MAX-1 here, but we don't gracefully chunk these calls,
+ // and so try to create a VBO of size INT32_MAX-1 to pretend that vert attrib 0 is an array.
+ // (INT32_MAX-1 because we check that `first+count` is a valid GLsizei, which is int32_t)
+ var UINT16_MAX = 0xffff;
+ var INT32_MAX = 0x7fffffff;
+ var UINT32_MAX = 0xffffffff;
+
+ // `first` needs room for `first+count` <= sizeof(GLsizei) == INT32_MAX
+ var hugeFirst = Math.min(cruelNumber, INT32_MAX-1);
+ var hugeIndex = Math.min(cruelNumber, UINT32_MAX);
+
+ var indexType = gl.UNSIGNED_SHORT;
+ var indexStride = 2;
+ var indexArr = new Uint16Array([0, 1, Math.min(hugeIndex, UINT16_MAX)]);
+ if (gl.getExtension('OES_element_index_uint')) {
+ indexType = gl.UNSIGNED_INT;
+ indexStride = 4;
+ indexArr = new Uint32Array([0, 1, hugeIndex]);
+ }
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.POINTS, 0, 1);
+ ok(!isScreenBlack(), '[' + info + '] drawArrays should color pixels.');
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.POINTS, hugeFirst, 1);
+ ok(!isScreenBlack(), '[' + info + '] drawArrays[huge first] should color pixels.');
+
+ checkGLError(ok, info);
+
+ var elemTestFunc = todo; // We fail on most implementations.
+ var checkGLTestFunc = todo;
+ if (DriverInfo.getDriver() == DriverInfo.DRIVER.ANGLE ||
+ DriverInfo.getOS() == DriverInfo.OS.ANDROID)
+ {
+ // ANGLE and Android slaves seem to work fine.
+ elemTestFunc = ok;
+ checkGLTestFunc = ok;
+ }
+ if (DriverInfo.getDriver() == DriverInfo.DRIVER.ANDROID_X86_EMULATOR ||
+ DriverInfo.getOS() == DriverInfo.OS.B2G)
+ {
+ // ...but the Android 4.2 x86 emulator environment is different
+ elemTestFunc = todo;
+ checkGLTestFunc = ok;
+ }
+
+ // Now for drawElements:
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, gl.createBuffer());
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indexArr, gl.STATIC_DRAW);
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawElements(gl.POINTS, 1, indexType, 0);
+ elemTestFunc(!isScreenBlack(), '[' + info + '] drawElements[0] should color pixels.');
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawElements(gl.POINTS, 1, indexType, 1*indexStride);
+ elemTestFunc(!isScreenBlack(), '[' + info + '] drawElements[1] should color pixels.');
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawElements(gl.POINTS, 1, indexType, 2*indexStride);
+ elemTestFunc(!isScreenBlack(), '[' + info + '] drawElements[huge offset] should color pixels.');
+
+ checkGLError(checkGLTestFunc, info);
+ }
+
+ // Begin drawing
+ gl.clearColor(0.0, 0.0, 0.0, 1.0);
+ gl.disable(gl.DEPTH_TEST);
+
+ // No-attrib prog:
+ gl.useProgram(noAttribProg);
+ testDrawing('no-attrib');
+
+ // One-attrib, no-array prog:
+ gl.useProgram(attribProg);
+ gl.disableVertexAttribArray(attribProg.aPosition);
+ gl.vertexAttrib3fv(attribProg.aPosition, [0.0, 0.0, 0.0]);
+ testDrawing('one-attrib, no-array');
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_noprog_draw.html b/dom/canvas/test/webgl-mochitest/test_noprog_draw.html
new file mode 100644
index 000000000..55e755894
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_noprog_draw.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+<title>WebGL test: Drawing with a null program</title>
+
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+
+
+<script id="vs" type="x-shader/x-vertex">
+
+void main(void) {
+ gl_PointSize = 16.0;
+ gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
+}
+
+</script>
+<script id="fs" type="x-shader/x-fragment">
+
+precision mediump float;
+
+void main(void) {
+ gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
+}
+
+</script>
+<body>
+<canvas id="c" width="64" height="64"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+ WebGLUtil.setWarningFunc(errorFunc);
+
+ gl.disable(gl.DEPTH_TEST);
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ return;
+ }
+
+ function checkGLError(func, info, refValue) {
+ if (!refValue)
+ refValue = 0;
+
+ var error = gl.getError();
+ func(error == refValue,
+ '[' + info + '] gl.getError should be 0x' + refValue.toString(16) +
+ ', was 0x' + error.toString(16) + '.');
+ }
+
+ // Start drawing
+ checkGLError(ok, 'after setup');
+
+ gl.useProgram(prog);
+ gl.drawArrays(gl.POINTS, 0, 1);
+ checkGLError(ok, 'after non-null-program DrawArrays');
+
+ gl.useProgram(null);
+ gl.drawArrays(gl.POINTS, 0, 1);
+ checkGLError(ok, 'after null-program DrawArrays', gl.INVALID_OPERATION);
+
+ ok(true, 'Test complete.');
+})();
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_pixel_pack_buffer.html b/dom/canvas/test/webgl-mochitest/test_pixel_pack_buffer.html
new file mode 100644
index 000000000..bfacc5bfa
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_pixel_pack_buffer.html
@@ -0,0 +1,288 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ </head>
+ <body>
+ <script>
+
+var RED = [1, 0, 0, 1];
+var GREEN = [0, 1, 0, 1];
+var BLUE = [0, 0, 1, 1];
+var WHITE = [1, 1, 1, 1];
+var ZERO = [0, 0, 0, 0];
+
+function DrawColors(gl) {
+ var fnClearToColor = function(color) {
+ gl.clearColor(color[0], color[1], color[2], color[3]);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ };
+
+ gl.enable(gl.SCISSOR_TEST);
+
+ // +---+
+ // |G W|
+ // |R B|
+ // +---+
+
+ gl.scissor(0, 0, 1, 1);
+ fnClearToColor(RED);
+
+ gl.scissor(1, 0, 1, 1);
+ fnClearToColor(BLUE);
+
+ gl.scissor(0, 1, 1, 1);
+ fnClearToColor(GREEN);
+
+ gl.scissor(1, 1, 1, 1);
+ fnClearToColor(WHITE);
+}
+
+function ClearBufferPair(gl, byteCount) {
+ // Using `null` here clears to zero according to WebGL.
+ gl.bufferData(gl.PIXEL_PACK_BUFFER, byteCount, gl.STREAM_READ);
+
+ var arr = new Uint8Array(byteCount);
+ return arr;
+}
+
+function ColorToString(color, offset=0) {
+ var arr = [ color[offset+0],
+ color[offset+1],
+ color[offset+2],
+ color[offset+3] ];
+ return '[' + arr.join(', ') + ']';
+}
+
+function TestIsUNormColor(refColor, testData, offset) {
+ if (testData.length < offset + 4) {
+ ok(false, 'testData not long enough.');
+ }
+
+ var refUNormColor = [
+ (refColor[0] * 255) | 0,
+ (refColor[1] * 255) | 0,
+ (refColor[2] * 255) | 0,
+ (refColor[3] * 255) | 0,
+ ];
+
+ var refStr = ColorToString(refUNormColor);
+ var testStr = ColorToString(testData, offset);
+ ok(testStr == refStr, 'Expected ' + refStr + ', was ' + testStr + '.');
+}
+
+function section(text) {
+ ok(true, '');
+ ok(true, 'Section: ' + text);
+}
+
+function EnsureNoError(gl) {
+ var glErr = gl.getError();
+ while (gl.getError()) {}
+
+ if (!glErr)
+ return;
+
+ var extraInfo = '';
+
+ var err = new Error();
+ var stackStr = err.stack;
+ if (stackStr !== undefined) {
+ var stackArr = stackStr.split('\n');
+ stackStr = stackArr[1]; // First one after present scope.
+ extraInfo = ': ' + stackStr;
+ }
+
+ ok(false, 'Unexpected GL error: 0x' + glErr.toString(16) + extraInfo);
+}
+
+function TestError(gl, refErrVal, str='') {
+ if (str == '') {
+ str = 'gl.getError()';
+ } else {
+ str = str + ': gl.getError()';
+ }
+
+ var err = gl.getError();
+ while (gl.getError()) {}
+
+ ShouldBe(err.toString(16), refErrVal.toString(16), str);
+}
+
+function ShouldBe(val, ref, str='') {
+ if (str != '') {
+ str += ': ';
+ }
+
+ ok(val == ref, str + 'Should be `' + ref + '`, was `' + val + '`.');
+}
+
+var gl;
+
+function Test() {
+ var canvas = document.createElement('canvas');
+ canvas.width = 2;
+ canvas.height = 2;
+ canvas.style = 'width: 256px; height: 256px; border: 1px solid black;';
+ document.body.appendChild(canvas);
+
+ var attribs = {
+ antialias: false,
+ alpha: false,
+ };
+ gl = canvas.getContext('webgl2', attribs);
+ if (!gl) {
+ todo(false, 'WebGL 2 not present, skipping.');
+ return;
+ }
+
+ ////////
+
+ TestIsUNormColor(RED, new Uint8Array([255, 0, 0, 255]), 0);
+
+ ////////
+
+ gl.clearColor(RED[0], RED[1], RED[2], RED[3]);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ var data = new Uint8Array(16);
+ gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ console.log(JSON.stringify(data));
+ TestIsUNormColor(RED, data, 0);
+
+ ////////
+
+ DrawColors(gl);
+
+ ////////
+
+ EnsureNoError(gl);
+ gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, 0);
+ TestError(gl, gl.INVALID_OPERATION);
+
+ var data = new Uint8Array(16);
+ gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(RED, data, 0);
+ TestIsUNormColor(BLUE, data, 4);
+ TestIsUNormColor(GREEN, data, 8);
+ TestIsUNormColor(WHITE, data, 12);
+
+ ////////
+
+ var a = gl.createBuffer();
+ gl.bindBuffer(gl.PIXEL_PACK_BUFFER, a);
+ EnsureNoError(gl);
+
+ gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ TestError(gl, gl.INVALID_OPERATION);
+
+ ////////
+
+ // Basic
+ section('Basic readback');
+ data = ClearBufferPair(gl, 16);
+ EnsureNoError(gl);
+ gl.readPixels(0, 0, 2, 2, gl.RGBA, gl.UNSIGNED_BYTE, 0);
+ EnsureNoError(gl);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(RED, data, 0);
+ TestIsUNormColor(BLUE, data, 4);
+ TestIsUNormColor(GREEN, data, 8);
+ TestIsUNormColor(WHITE, data, 12);
+
+ section('Subrect readback');
+ data = ClearBufferPair(gl, 8);
+ gl.readPixels(1, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, 0);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(WHITE, data, 0);
+ TestIsUNormColor(ZERO, data, 4);
+
+ section('ReadPixels offset:4');
+ data = ClearBufferPair(gl, 16);
+ gl.readPixels(1, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, 4);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(ZERO, data, 0);
+ TestIsUNormColor(WHITE, data, 4);
+ TestIsUNormColor(ZERO, data, 8);
+ TestIsUNormColor(ZERO, data, 12);
+
+ section('ReadPixels offset:5');
+ gl.readPixels(1, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, 5);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(ZERO, data, 0);
+ TestIsUNormColor(WHITE, data, 4); // Should remain from previous read.
+ TestIsUNormColor(WHITE, data, 5);
+ TestIsUNormColor(ZERO, data, 9);
+ TestIsUNormColor(ZERO, data, 12);
+
+ section('GetBufferSubData src too small');
+ data = ClearBufferPair(gl, 16);
+ EnsureNoError(gl);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 1, data);
+ TestError(gl, gl.INVALID_VALUE);
+ TestIsUNormColor(ZERO, data, 0);
+ TestIsUNormColor(ZERO, data, 4);
+ TestIsUNormColor(ZERO, data, 8);
+ TestIsUNormColor(ZERO, data, 12);
+
+ section('GetBufferSubData offset:1');
+ data = new Uint8Array(15);
+ gl.readPixels(1, 1, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, 8);
+ gl.getBufferSubData(gl.PIXEL_PACK_BUFFER, 1, data);
+ EnsureNoError(gl);
+ TestIsUNormColor(ZERO, data, 0);
+ TestIsUNormColor(ZERO, data, 3);
+ TestIsUNormColor(WHITE, data, 7);
+ TestIsUNormColor(ZERO, data, 11);
+
+ //////////////////////////////////////
+
+ section('Test packing state');
+ EnsureNoError(gl);
+
+ function TestPackState(enumStr, initialVal, changedVal) {
+ var enumVal = gl[enumStr];
+
+ ShouldBe(gl.getParameter(enumVal), initialVal, 'Initial ' + enumStr);
+ gl.pixelStorei(enumVal, changedVal);
+ ShouldBe(gl.getParameter(enumVal), changedVal, 'Changed ' + enumStr);
+ gl.pixelStorei(enumVal, initialVal);
+ ShouldBe(gl.getParameter(enumVal), initialVal, 'Reverted ' + enumStr);
+ EnsureNoError(gl);
+ }
+
+ TestPackState('PACK_ALIGNMENT', 4, 1);
+ TestPackState('PACK_ROW_LENGTH', 0, 16);
+ TestPackState('PACK_SKIP_PIXELS', 0, 3);
+ TestPackState('PACK_SKIP_ROWS', 0, 3);
+}
+
+function RunTest() {
+ Test();
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForExplicitFinish();
+
+try {
+ var prefArrArr = [
+ ['webgl.force-enabled', true],
+ ['webgl.disable-angle', true],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, RunTest);
+} catch (e) {
+ todo(false, 'No SpecialPowers, but trying anyway...');
+ RunTest();
+}
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_privileged_exts.html b/dom/canvas/test/webgl-mochitest/test_privileged_exts.html
new file mode 100644
index 000000000..c7895bcdf
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_privileged_exts.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>WebGL test: Check for privileged ext access.</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="webgl-util.js"></script>
+<script src="driver-info.js"></script>
+</head>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+function TestExt(gl, name) {
+ var ext = gl.getExtension(name);
+ ok(!ext, 'Should not have access to \'' + name + '\'.');
+}
+
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(gl, 'Get GL working here first.');
+ return;
+ }
+
+ // Privileged extensions:
+ TestExt(gl, 'WEBGL_debug_shaders');
+})();
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_renderer_strings.html b/dom/canvas/test/webgl-mochitest/test_renderer_strings.html
new file mode 100644
index 000000000..4890abf91
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_renderer_strings.html
@@ -0,0 +1,102 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<script>
+
+function AssertError(gl, expected, info) {
+ var actual = gl.getError();
+ while (gl.getError()) {}
+
+ ok(actual == expected,
+ 'For ' + info + ', expected GL error 0x' + expected.toString(16) + ', got 0x'
+ + actual.toString(16));
+}
+
+var gl;
+
+var RENDERER_OVERRIDE = 'overridden renderer';
+var VENDOR_OVERRIDE = 'overridden vendor';
+
+function TestExt() {
+ var ext = gl.getExtension('WEBGL_debug_renderer_info');
+ ok(ext, 'When pref enabled: Should have access to \'WEBGL_debug_renderer_info\'.');
+ AssertError(gl, 0, 'start of test');
+
+ var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+ AssertError(gl, 0, 'UNMASKED_RENDERER_WEBGL');
+ ok(renderer,
+ 'When pref enabled: UNMASKED_RENDERER_WEBGL value should not be empty, was \''
+ + renderer + '\'');
+
+ var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
+ AssertError(gl, 0, 'UNMASKED_VENDOR_WEBGL');
+ ok(vendor,
+ 'When pref enabled: UNMASKED_VENDOR_WEBGL value should not be empty, was \''
+ + vendor + '\'');
+
+ var prefArrArr = [
+ ['webgl.renderer-string-override', RENDERER_OVERRIDE],
+ ['webgl.vendor-string-override', VENDOR_OVERRIDE],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, TestOverrides);
+}
+
+function TestOverrides() {
+ var ext = gl.getExtension('WEBGL_debug_renderer_info');
+ ok(ext, 'When overrides set: Should have access to \'WEBGL_debug_renderer_info\'.');
+ AssertError(gl, 0, 'start of test');
+
+ var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
+ AssertError(gl, 0, 'UNMASKED_RENDERER_WEBGL');
+ ok(renderer == RENDERER_OVERRIDE,
+ 'When overrides set: UNMASKED_RENDERER_WEBGL value should be \'' + RENDERER_OVERRIDE
+ + '\', was \'' + renderer + '\'');
+
+ var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);
+ AssertError(gl, 0, 'UNMASKED_VENDOR_WEBGL');
+ ok(vendor == VENDOR_OVERRIDE,
+ 'When overrides set: UNMASKED_VENDOR_WEBGL value should be \'' + VENDOR_OVERRIDE
+ + '\', was \'' + vendor + '\'');
+
+ var prefArrArr = [
+ ['webgl.enable-debug-renderer-info', false],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, TestDisable);
+}
+
+function TestDisable() {
+ var ext = gl.getExtension('WEBGL_debug_renderer_info');
+ ok(!ext,
+ 'When pref disabled: Should not have access to \'WEBGL_debug_renderer_info\'.');
+
+ ok(true, 'Test complete.');
+ SimpleTest.finish();
+}
+
+(function() {
+ var canvas = document.createElement('canvas');
+ gl = canvas.getContext('experimental-webgl');
+ if (!gl) {
+ todo(gl, 'Get WebGL working here first.');
+ ok(true, 'Test complete.');
+ return;
+ }
+
+ SimpleTest.waitForExplicitFinish();
+
+ var prefArrArr = [
+ ['webgl.enable-debug-renderer-info', true],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, TestExt);
+})();
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_sab_with_webgl.html b/dom/canvas/test/webgl-mochitest/test_sab_with_webgl.html
new file mode 100644
index 000000000..56b89950a
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_sab_with_webgl.html
@@ -0,0 +1,192 @@
+<html>
+ <head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ </head>
+ <body>
+<canvas id='c' width='200' height='200'></canvas>
+<canvas id='c2' width='200' height='200'></canvas>
+
+<script>
+
+var gl;
+
+function RGBAToString(arr) {
+ return '[' + arr[0].toPrecision(4) + ', ' +
+ arr[1].toPrecision(4) + ', ' +
+ arr[2].toPrecision(4) + ', ' +
+ arr[3].toPrecision(4) + ']';
+}
+
+function TestScreenColor(gl, r, g, b, a) {
+ var arr = new SharedArrayBuffer(4);
+ var view = new Uint8Array(arr);
+ gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, view);
+
+ var err = gl.getError();
+ ok(err == 0, 'Should be no errors.');
+ if (err)
+ return;
+
+ var floatArr;
+ floatArr = new Float32Array(4);
+ floatArr[0] = view[0] / 255.0;
+ floatArr[1] = view[1] / 255.0;
+ floatArr[2] = view[2] / 255.0;
+ floatArr[3] = view[3] / 255.0;
+
+ var testText = RGBAToString(floatArr);
+ var refText = RGBAToString([r, g, b, a]);
+
+ var eps = 1.0 / 255.0;
+ var isSame = (Math.abs(floatArr[0] - r) < eps &&
+ Math.abs(floatArr[1] - g) < eps &&
+ Math.abs(floatArr[2] - b) < eps &&
+ Math.abs(floatArr[3] - a) < eps);
+
+ ok(isSame, 'Should be ' + refText + ', was ' + testText + ',');
+}
+
+// Give ourselves a scope to return early from:
+(function() {
+ var canvas = document.getElementById('c');
+ var attribs = {
+ antialias: false,
+ depth: false,
+ };
+ gl = canvas.getContext('experimental-webgl', attribs);
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+ if (typeof SharedArrayBuffer === 'undefined') {
+ todo(false, 'SharedArrayBuffer is unavailable.');
+ return;
+ }
+
+ var vs = gl.createShader(gl.VERTEX_SHADER);
+ gl.shaderSource(vs, "attribute vec2 aVertCoord; void main(void) { gl_Position = vec4(aVertCoord, 0.0, 1.0); }");
+ gl.compileShader(vs);
+ var fs = gl.createShader(gl.FRAGMENT_SHADER);
+ gl.shaderSource(fs, "precision mediump float; uniform vec4 uFragColor; void main(void) { gl_FragColor = uFragColor; }");
+ gl.compileShader(fs);
+ var prog = gl.createProgram();
+ gl.attachShader(prog, vs);
+ gl.attachShader(prog, fs);
+ gl.linkProgram(prog);
+
+ var success = gl.getProgramParameter(prog, gl.LINK_STATUS);
+ if (!success) {
+ console.log('Error linking program for \'' + vsId + '\' and \'' + fsId + '\'.');
+ console.log('\nLink log: ' + gl.getProgramInfoLog(prog));
+ console.log('\nVert shader log: ' + gl.getShaderInfoLog(vs));
+ console.log('\nFrag shader log: ' + gl.getShaderInfoLog(fs));
+ }
+ ok(prog, 'Program should link.');
+ if (!prog) {
+ return;
+ }
+
+ prog.aVertCoord = gl.getAttribLocation(prog, 'aVertCoord');
+ prog.uFragColor = gl.getUniformLocation(prog, 'uFragColor');
+
+ gl.useProgram(prog);
+
+ // Test gl.bufferData(), gl.bufferSubData() and gl.readPixels() APIs with SAB as input.
+ var arr = new SharedArrayBuffer(8*4);
+ var view = new Float32Array(arr);
+ view.set(new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]));
+ var vb = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vb);
+ gl.bufferData(gl.ARRAY_BUFFER, view, gl.STATIC_DRAW);
+ ok(gl.getError() == 0, 'bufferData with SAB as input parameter works ok.');
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, view);
+ ok(gl.getError() == 0, 'bufferSubData with SAB as input parameter works ok.');
+ gl.enableVertexAttribArray(0);
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
+ gl.clearColor(0, 0, 0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.uniform4f(prog.uFragColor, 0.2, 0.4, 0.6, 1.0);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+ var arr = new Uint8Array(4);
+ TestScreenColor(gl, 0.2, 0.4, 0.6, 1.0);
+
+ // Test gl.texImage2D() and gl.texSubImage2D() APIs with SAB as input.
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ var width = 4;
+ var height = 4;
+ var numChannels = 4;
+ var sab = new SharedArrayBuffer(width * height * numChannels);
+ var data = new Uint8Array(sab);
+ for (var i = 0; i < data.length; ++i) {
+ data[i] = i;
+ }
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ ok(gl.getError() == 0, 'texImage2D() with SAB as input parameter works ok.');
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ ok(gl.getError() == 0, 'texSubImage2D() with SAB as input parameter works ok.');
+
+ ok(gl.getError() == 0, 'Should be no errors after test.');
+})();
+
+// Test WebGL 2
+(function() {
+ var canvas = document.getElementById('c2');
+ var attribs = {
+ antialias: false,
+ depth: false,
+ };
+ gl = canvas.getContext('webgl2', attribs);
+ if (!gl) {
+ todo(false, 'WebGL 2 is unavailable.');
+ return;
+ }
+ if (typeof SharedArrayBuffer === 'undefined') {
+ todo(false, 'SharedArrayBuffer is unavailable.');
+ return;
+ }
+
+ var arr = new SharedArrayBuffer(8*4);
+ var view = new Float32Array(arr);
+ view.set(new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]));
+ var vb = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vb);
+ gl.bufferData(gl.ARRAY_BUFFER, view, gl.STATIC_DRAW);
+
+ var arr2 = new SharedArrayBuffer(8*4);
+ var view2 = new Float32Array(arr2);
+ gl.getBufferSubData(gl.ARRAY_BUFFER, 0, view2);
+ var equal = true;
+ for(var i = 0; i < 8; ++i) {
+ if (view[i] != view2[i]) equal = false;
+ }
+ ok(equal, 'getBufferSubData with SAB as input parameter works ok.');
+
+ // Test gl.texImage3D() and gl.texSubImage3D() APIs with SAB as input.
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_3D, tex);
+ var width = 4;
+ var height = 4;
+ var depth = 4;
+ var numChannels = 4;
+ var sab = new SharedArrayBuffer(width * height * depth* numChannels);
+ var data = new Uint8Array(sab);
+ for (var i = 0; i < data.length; ++i) {
+ data[i] = i;
+ }
+ gl.texImage3D(gl.TEXTURE_3D, 0, gl.RGBA, width, height, depth, 0, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ ok(gl.getError() == 0, 'texImage3D() with SAB as input parameter works ok.');
+ gl.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, width, height, depth, gl.RGBA, gl.UNSIGNED_BYTE, data);
+ ok(gl.getError() == 0, 'texSubImage3D() with SAB as input parameter works ok.');
+
+ ok(gl.getError() == 0, 'Should be no errors after test.');
+})();
+
+ok(true, 'TEST COMPLETE');
+
+</script>
+
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_texsubimage_float.html b/dom/canvas/test/webgl-mochitest/test_texsubimage_float.html
new file mode 100644
index 000000000..75735c657
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_texsubimage_float.html
@@ -0,0 +1,62 @@
+<!DOCTYPE HTML>
+<title>WebGL test: bug 1003607</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+// Give ourselves a scope to return early from:
+(function() {
+ var gl = WebGLUtil.getWebGL('c');
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ // Catch actual WebGLUtil errors, not GL errors.
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ WebGLUtil.setErrorFunc(errorFunc);
+
+ function checkGLError(func, info, reference) {
+ var error = gl.getError();
+ var prefix = info ? ('[' + info + '] ') : '';
+ var text = 'gl.getError should be 0x' + reference.toString(16) +
+ ', was 0x' + error.toString(16) + '.';
+ func(error == reference, prefix + text);
+ }
+
+ // Begin test:
+ if (!gl.getExtension('OES_texture_float')) {
+ todo(false, 'Not having this extension is fine.');
+ return;
+ }
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+ checkGLError(ok, 'texture parameter setup should succeed', gl.NO_ERROR);
+
+ // Generate data
+ var width = 2;
+ var height = 2;
+ var numChannels = 4;
+ var data = new Float32Array(width * height * numChannels);
+ for (var ii = 0; ii < data.length; ++ii) {
+ data[ii] = 10000;
+ }
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, data);
+ checkGLError(ok, 'floating-point texture allocation should succeed', gl.NO_ERROR);
+
+ // Try respecifying data
+ gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, gl.RGBA, gl.FLOAT, data);
+ checkGLError(ok, 'floating-point texture sub image should succeed', gl.NO_ERROR);
+})();
+
+</script>
diff --git a/dom/canvas/test/webgl-mochitest/test_uninit_data.html b/dom/canvas/test/webgl-mochitest/test_uninit_data.html
new file mode 100644
index 000000000..541cfdbe5
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_uninit_data.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta http-equiv='content-type' content='text/html; charset=utf-8'/>
+
+ <title>Test contents of uninitialized buffers</title>
+
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ <script src='webgl-util.js'></script>
+</head>
+
+<body>
+<script>
+'use strict';
+
+function TestFB(gl) {
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ ok(status == gl.FRAMEBUFFER_COMPLETE, 'FB should be complete.');
+
+ var pixel = new Uint8Array(4);
+ gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+
+ ok(!pixel[0], 'R channel should be 0, was ' + pixel[0] + '.');
+ ok(!pixel[1], 'G channel should be 0, was ' + pixel[1] + '.');
+ ok(!pixel[2], 'B channel should be 0, was ' + pixel[2] + '.');
+ ok(!pixel[3], 'A channel should be 0, was ' + pixel[3] + '.');
+}
+
+function Test(contextAttribs) {
+ ok(true, '===============================');
+ ok(true, 'Testing ' + JSON.stringify(contextAttribs));
+
+ var c = document.createElement('canvas');
+ var gl = c.getContext('webgl', contextAttribs);
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+
+ var err = gl.getError();
+ ok(!err, 'Error should be 0x0, was 0x' + err.toString(16));
+ if (err)
+ return;
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+
+ ok(true, 'Backed with RB');
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, 1, 1);
+ TestFB(gl);
+
+ ok(true, 'Backed with texture');
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
+ TestFB(gl);
+
+ err = gl.getError();
+ ok(!err, 'Error should be 0x0, was 0x' + err.toString(16));
+}
+
+// Give ourselves a scope to return early from:
+(function() {
+ // We test multiple configurations because we've had bugs regarding faking RGBX on
+ // ANGLE: With alpha:false, uninitialized buffers were being filled with (0,0,0,1)
+ // instead of (0,0,0,0).
+ Test({alpha: false, antialias: false});
+ Test({alpha: true, antialias: false});
+ Test({alpha: false, antialias: true});
+ Test({alpha: true, antialias: true});
+
+ ok(true, 'Test complete.');
+})();
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl2_alpha_luminance.html b/dom/canvas/test/webgl-mochitest/test_webgl2_alpha_luminance.html
new file mode 100644
index 000000000..3ec6c1909
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl2_alpha_luminance.html
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<title>WebGL2 test: Alpha and Luminance Textures</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<script id="vs" type="x-shader/x-vertex"
+>#version 300 es
+
+in vec2 aTexCoord;
+out vec2 vTexCoord;
+
+void main() {
+ vec2 pos = vec2(2.0)*aTexCoord - vec2(1.0);
+ gl_Position = vec4(pos, 0.0, 1.0);
+ vTexCoord = aTexCoord;
+}
+</script>
+<script id="fs" type="x-shader/x-fragment"
+>#version 300 es
+precision mediump float;
+
+in vec2 vTexCoord;
+uniform sampler2D uTex;
+out vec4 oFragColor;
+
+void main() {
+ oFragColor = texture(uTex, vTexCoord);
+}
+</script>
+<body>
+<canvas id="c" width="32" height="32"></canvas>
+<script>
+ WebGLUtil.withWebGL2('c', function(gl) {
+
+ function testPixel(x, y, refData, infoPrefix) {
+ var pixel = new Uint8Array(4);
+ gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
+
+ var pixelMatches = (pixel[0] == refData[0] &&
+ pixel[1] == refData[1] &&
+ pixel[2] == refData[2] &&
+ pixel[3] == refData[3]);
+ var expectedStr = '[' + refData.join(', ') + ']';
+ var actualStr = '[' + pixel.join(', ') + ']';
+
+ if (pixelMatches) {
+ ok(true, infoPrefix + 'Expected ' + expectedStr + '.');
+ } else {
+ ok(false, infoPrefix + 'Expected ' + expectedStr + ', was ' + actualStr + '.');
+ }
+ }
+
+ function testTexture(details, prog) {
+ prog.aTexCoord = gl.getAttribLocation(prog, "aTexCoord");
+ ok(prog.aTexCoord >= 0, '`aTexCoord` should be valid.');
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, details.format, 1, 1, 0,
+ details.format, gl.UNSIGNED_BYTE, details.texData);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+
+ gl.useProgram(prog);
+ gl.vertexAttribPointer(prog.aTexCoord, 2, gl.FLOAT, false, 0, 0);
+ gl.enableVertexAttribArray(prog.aTexCoord);
+
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+
+ testPixel(0, 0, details.result, details.info + ': ');
+ return true;
+ }
+
+ var prog = WebGLUtil.createProgramByIds(gl, 'vs', 'fs');
+ if (!prog) {
+ ok(false, 'Program linking should succeed.');
+ return false;
+ }
+
+ gl.disable(gl.DEPTH_TEST);
+
+ var vertData = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertData);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ 0, 0, 1, 0, 0, 1, 1, 1 ]), gl.STATIC_DRAW);
+
+ gl.clearColor(0, 0, 1, 1);
+ gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);
+
+ var details = [
+ { info: 'Luminance8', format: gl.LUMINANCE, texData: new Uint8Array([ 128 ]),
+ result: [128, 128, 128, 255] },
+ { info: 'Alpha8', format: gl.ALPHA, texData: new Uint8Array([ 128 ]),
+ result: [0, 0, 0, 128] },
+ { info: 'Luminance8Alpha8', format: gl.LUMINANCE_ALPHA, texData: new Uint8Array([ 128, 128 ]),
+ result: [128, 128, 128, 128] },
+ ];
+
+ for (var i = 0; i < details.length; i++) {
+ if (!testTexture(details[i], prog)) {
+ return;
+ }
+ }
+ ok(true, 'Test complete.');
+ }, function() {
+ SimpleTest.finish();
+ });
+
+ SimpleTest.waitForExplicitFinish();
+</script>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl2_invalidate_framebuffer.html b/dom/canvas/test/webgl-mochitest/test_webgl2_invalidate_framebuffer.html
new file mode 100644
index 000000000..6a384e1b9
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl2_invalidate_framebuffer.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+
+<title>WebGL2 test: Framebuffers</title>
+
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<script src="webgl-util.js"></script>
+<body>
+<canvas id="c" width="64" height="64"></canvas>
+<script>
+
+WebGLUtil.withWebGL2('c', function (gl) {
+ gl.invalidateFramebuffer(gl.FRAMEBUFFER, [gl.COLOR]);
+ ok(gl.getError() == 0, 'invalidateFramebuffer');
+ gl.invalidateSubFramebuffer(gl.FRAMEBUFFER, [gl.COLOR], 0, 0, 64, 64);
+ ok(gl.getError() == 0, 'invalidateSubFramebuffer');
+ gl.invalidateFramebuffer(gl.FRAMEBUFFER, [gl.GL_COLOR_ATTACHMENT0]);
+ ok(gl.getError() == gl.INVALID_ENUM, 'invalidateFrameBuffer should fail with GL_COLOR_ATTACHMENT on the default framebuffer');
+}, function () {
+ SimpleTest.finish();
+});
+
+SimpleTest.waitForExplicitFinish();
+
+</script>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html b/dom/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html
new file mode 100644
index 000000000..d8d2f54c0
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl2_not_exposed.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>WebGL test: WebGL2RenderingContext only exposed when appropriate</title>
+<script src='/tests/SimpleTest/SimpleTest.js'></script>
+<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+</head>
+<body>
+<script>
+
+function ShouldExpose() {
+ try {
+ return SpecialPowers.getBoolPref('webgl.enable-webgl2');
+ } catch (e) {}
+
+ return false;
+}
+
+function DoesExpose() {
+ try {
+ null instanceof WebGL2RenderingContext;
+ return true;
+ } catch (e) {}
+
+ return false;
+}
+
+var doesExpose = DoesExpose();
+if (ShouldExpose()) {
+ ok(doesExpose, 'WebGL2RenderingContext should be exposed.');
+} else {
+ ok(!doesExpose, 'WebGL2RenderingContext should not be exposed.');
+}
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_available.html b/dom/canvas/test/webgl-mochitest/test_webgl_available.html
new file mode 100644
index 000000000..f6817c985
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_available.html
@@ -0,0 +1,19 @@
+<!DOCTYPE HTML>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>WebGL test: Check that WebGL works out-of-the-box.</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css">
+ </head>
+ <body>
+ <script>
+
+'use strict';
+var c = document.createElement('canvas');
+var gl = c.getContext('experimental-webgl');
+ok(gl, 'Expected WebGL creation to succeed.');
+
+ </script>
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_color_buffer_float.html b/dom/canvas/test/webgl-mochitest/test_webgl_color_buffer_float.html
new file mode 100644
index 000000000..94a75fa91
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_color_buffer_float.html
@@ -0,0 +1,486 @@
+<html>
+ <head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+ </head>
+ <body>
+<script id='vs' type='x-shader/x-vertex'>
+
+attribute vec2 aVertCoord;
+
+void main(void) {
+ gl_Position = vec4(aVertCoord, 0.0, 1.0);
+}
+
+</script>
+<script id='fs' type='x-shader/x-fragment'>
+
+precision mediump float; // 💩
+
+uniform vec4 uFragColor;
+
+void main(void) {
+ gl_FragColor = uFragColor;
+}
+
+</script>
+
+<canvas id='c' width='200' height='200'></canvas>
+
+<script>
+
+function GetGLSLByElemId(elemId) {
+ var elem = document.getElementById(elemId);
+ if (!elem)
+ throw 'Bad `elemId`: ' + elemId;
+
+ return elem.innerHTML.trim();
+}
+
+function ProgramByElemIds(gl, vsId, fsId) {
+ var vs = gl.createShader(gl.VERTEX_SHADER);
+ gl.shaderSource(vs, GetGLSLByElemId(vsId));
+ gl.compileShader(vs);
+
+ var fs = gl.createShader(gl.FRAGMENT_SHADER);
+ gl.shaderSource(fs, GetGLSLByElemId(fsId));
+ gl.compileShader(fs);
+
+ var prog = gl.createProgram();
+ gl.attachShader(prog, vs);
+ gl.attachShader(prog, fs);
+
+ gl.linkProgram(prog);
+
+ var success = gl.getProgramParameter(prog, gl.LINK_STATUS);
+ if (success)
+ return prog;
+
+ console.log('Error linking program for \'' + vsId + '\' and \'' + fsId + '\'.');
+ console.log('\nLink log: ' + gl.getProgramInfoLog(prog));
+ console.log('\nVert shader log: ' + gl.getShaderInfoLog(vs));
+ console.log('\nFrag shader log: ' + gl.getShaderInfoLog(fs));
+ return null;
+}
+
+var RGBA = 0x1908;
+var UNSIGNED_BYTE = 0x1401;
+var FLOAT = 0x1406;
+var HALF_FLOAT_OES = 0x8D61;
+var HALF_FLOAT = 0x140B;
+var RGBA4 = 0x8056;
+var RGBA8 = 0x8058;
+var RGBA32F = 0x8814;
+var RGBA16F = 0x881A;
+
+function EnumName(val) {
+ switch (val) {
+ case RGBA:
+ return 'RGBA';
+ case UNSIGNED_BYTE:
+ return 'UNSIGNED_BYTE';
+ case FLOAT:
+ return 'FLOAT';
+ case HALF_FLOAT_OES:
+ return 'HALF_FLOAT_OES';
+ case HALF_FLOAT:
+ return 'HALF_FLOAT';
+ case RGBA4:
+ return 'RGBA4';
+ case RGBA32F:
+ return 'RGBA32F';
+ default:
+ throw 'Unknown enum: 0x' + val.toString(16);
+ }
+}
+
+var gl;
+
+function RGBAToString(arr) {
+ return '[' + arr[0].toPrecision(4) + ', ' +
+ arr[1].toPrecision(4) + ', ' +
+ arr[2].toPrecision(4) + ', ' +
+ arr[3].toPrecision(4) + ']';
+}
+
+function TestScreenColor(gl, isFBFloat, r, g, b, a) {
+ var readType = isFBFloat ? FLOAT : UNSIGNED_BYTE;
+
+ var arr;
+ switch (readType) {
+ case gl.UNSIGNED_BYTE:
+ arr = new Uint8Array(4);
+ break;
+
+ case gl.FLOAT:
+ arr = new Float32Array(4);
+ break;
+
+ default:
+ throw 'Bad `readType`.';
+ }
+
+ gl.readPixels(0, 0, 1, 1, gl.RGBA, readType, arr);
+
+ var err = gl.getError();
+ ok(err == 0, 'Should be no errors.');
+ if (err)
+ return;
+
+ var floatArr;
+ switch (readType) {
+ case gl.UNSIGNED_BYTE:
+ floatArr = new Float32Array(4);
+ floatArr[0] = arr[0] / 255.0;
+ floatArr[1] = arr[1] / 255.0;
+ floatArr[2] = arr[2] / 255.0;
+ floatArr[3] = arr[3] / 255.0;
+ break;
+
+ case gl.FLOAT:
+ floatArr = arr;
+ break;
+
+ default:
+ throw 'Bad `readType`.';
+ }
+
+ var testText = RGBAToString(floatArr);
+ var refText = RGBAToString([r, g, b, a]);
+
+ var eps = 1.0 / 255.0;
+ var isSame = (Math.abs(floatArr[0] - r) < eps &&
+ Math.abs(floatArr[1] - g) < eps &&
+ Math.abs(floatArr[2] - b) < eps &&
+ Math.abs(floatArr[3] - a) < eps);
+
+ ok(isSame, 'Should be ' + refText + ', was ' + testText + ',');
+}
+
+function TestReadFormat(gl, isFBFloat, format, type) {
+ var err = gl.getError();
+ if (err) {
+ ok(false, 'Should be no error at start of TestReadFormat(). (0x' + err.toString(16) + ')');
+ return;
+ }
+ var implFormat = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_FORMAT);
+ var implType = gl.getParameter(gl.IMPLEMENTATION_COLOR_READ_TYPE);
+
+ var err = gl.getError();
+ if (err) {
+ ok(false, 'Should be no error at start2 of TestReadFormat(). (0x' + err.toString(16) + ')');
+ return;
+ }
+
+ var defaultReadType = isFBFloat ? FLOAT : UNSIGNED_BYTE;
+
+ var formatOk = (format == gl.RGBA &&
+ type == defaultReadType);
+
+ if (format == implFormat &&
+ type == implType)
+ {
+ formatOk = true;
+ }
+
+ var w = 1;
+ var h = 1;
+ var channels = 4;
+ var arrSize = w * h * channels;
+
+ var arr;
+ switch (type) {
+ case UNSIGNED_BYTE:
+ arr = new Uint8Array(arrSize);
+ break;
+
+ case FLOAT:
+ arr = new Float32Array(arrSize);
+ break;
+
+ case HALF_FLOAT_OES:
+ case HALF_FLOAT:
+ arr = new Uint16Array(arrSize);
+ break;
+
+ default:
+ throw 'Bad `type`: 0x' + type.toString(16);
+ }
+
+ gl.readPixels(0, 0, 1, 1, format, type, arr);
+ var wasOk = gl.getError() == 0;
+
+ var text = 'Should ' + (formatOk ? '' : 'not ') + 'allow reading with ' +
+ EnumName(format) + '/' + EnumName(type) + '.'
+ ok(wasOk == formatOk, text);
+}
+
+function TestError(gl, expectedErr, descText) {
+ var err = gl.getError();
+
+ while (gl.getError()) {}
+
+ ok(err == expectedErr,
+ descText + ': Error should be 0x' + expectedErr.toString(16) + ', was 0x' +
+ err.toString(16) + '.');
+
+ return err;
+}
+
+function AttachRBToCurFB(gl, sizedFormat) {
+ var isSupported;
+ switch (sizedFormat) {
+ case RGBA4:
+ isSupported = true;
+ break;
+
+ case RGBA16F:
+ isSupported = !!gl.getExtension('EXT_color_buffer_half_float');
+ break;
+
+ case RGBA32F:
+ isSupported = !!gl.getExtension('WEBGL_color_buffer_float');
+ break;
+
+ default:
+ throw 'Bad `sizedFormat`.';
+ }
+
+ var rb = gl.createRenderbuffer();
+ gl.bindRenderbuffer(gl.RENDERBUFFER, rb);
+ gl.renderbufferStorage(gl.RENDERBUFFER, sizedFormat, 1, 1);
+
+ var correctError = isSupported ? 0 : gl.INVALID_ENUM;
+ var err = TestError(gl, correctError, 'RB specification with supported format');
+ if (err)
+ return false;
+
+ gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb);
+
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ var isComplete = (status == gl.FRAMEBUFFER_COMPLETE);
+ ok(isComplete, 'Framebuffer should be complete after RB attachment.');
+ return isComplete;
+}
+
+function AttachTexToCurFB(gl, sizedFormat) {
+ var canCreate;
+ var isAttachGuaranteed;
+ var format;
+ var type;
+
+ switch (sizedFormat) {
+ case RGBA8:
+ canCreate = true;
+ isAttachGuaranteed = true;
+ format = RGBA;
+ type = UNSIGNED_BYTE;
+ break;
+
+ case RGBA16F:
+ canCreate = !!gl.getExtension('OES_texture_half_float');
+ isAttachGuaranteed = !!gl.getExtension('EXT_color_buffer_half_float');
+ format = RGBA;
+ type = HALF_FLOAT_OES;
+ break;
+
+ case RGBA32F:
+ canCreate = !!gl.getExtension('OES_texture_float');
+ isAttachGuaranteed = !!gl.getExtension('WEBGL_color_buffer_float');
+ format = RGBA;
+ type = FLOAT;
+ break;
+
+ default:
+ throw 'Bad `sizedFormat`.';
+ }
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texImage2D(gl.TEXTURE_2D, 0, format, 1, 1, 0, format, type, null);
+
+ var correctError = canCreate ? 0 : gl.INVALID_ENUM;
+ var err = TestError(gl, correctError, 'Tex specification with supported format');
+ if (err)
+ return false;
+
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
+
+ var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
+ var isComplete = (status == gl.FRAMEBUFFER_COMPLETE);
+
+ if (!isAttachGuaranteed && !isComplete)
+ todo(false, 'Framebuffer needn\'t be complete after tex attachment.');
+ else
+ ok(isComplete, 'Framebuffer should be complete after tex attachment.');
+
+ return isComplete;
+}
+
+function IsFormatFloat(sizedFormat) {
+ switch (sizedFormat) {
+ case RGBA4:
+ case RGBA8:
+ return false;
+
+ case RGBA16F:
+ case RGBA32F:
+ return true;
+
+ default:
+ throw 'Bad `sizedFormat`.';
+ }
+}
+
+function TestType(gl, prog, isTex, sizedFormat) {
+ TestError(gl, 0, 'At start of TestRB()');
+
+ var isAttached = isTex ? AttachTexToCurFB(gl, sizedFormat)
+ : AttachRBToCurFB(gl, sizedFormat);
+ if (!isAttached)
+ return;
+
+ var isFormatFloat = IsFormatFloat(sizedFormat);
+
+ TestReadFormat(gl, isFormatFloat, gl.RGBA, gl.UNSIGNED_BYTE);
+ TestReadFormat(gl, isFormatFloat, gl.RGBA, gl.FLOAT);
+ TestReadFormat(gl, isFormatFloat, gl.RGBA, HALF_FLOAT);
+ TestReadFormat(gl, isFormatFloat, gl.RGBA, HALF_FLOAT_OES);
+
+ //////////////////////////////////////
+
+ ok(true, 'Drawing:');
+
+ gl.clearColor(0.0, 1.5, 0.5, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ if (isFormatFloat)
+ TestScreenColor(gl, isFormatFloat, 0, 1.5, 0.5, 1);
+ else
+ TestScreenColor(gl, isFormatFloat, 0, 1, 0.5, 1);
+
+ ////////
+
+ ok(true, 'Clearing:');
+
+ gl.uniform4f(prog.uFragColor, 0, 0.5, 1.5, 1);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+
+ if (isFormatFloat)
+ TestScreenColor(gl, isFormatFloat, 0, 0.5, 1.5, 1);
+ else
+ TestScreenColor(gl, isFormatFloat, 0, 0.5, 1.0, 1);
+
+ ////////
+
+ ok(true, 'Blending:');
+
+ gl.enable(gl.BLEND);
+ gl.blendFunc(gl.CONSTANT_COLOR, gl.ZERO);
+ gl.blendColor(0, 10, 0.1, 1);
+
+ gl.uniform4f(prog.uFragColor, 0, 0.5, 15.0, 1);
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
+
+ if (isFormatFloat)
+ TestScreenColor(gl, isFormatFloat, 0, 5.0, 1.5, 1);
+ else
+ TestScreenColor(gl, isFormatFloat, 0, 0.5, 0.1, 1);
+
+ gl.disable(gl.BLEND);
+
+ //////////////////////////////////////
+}
+
+// Give ourselves a scope to return early from:
+(function() {
+ var canvas = document.getElementById('c');
+ var attribs = {
+ antialias: false,
+ depth: false,
+ };
+ gl = canvas.getContext('experimental-webgl', attribs);
+ if (!gl) {
+ todo(false, 'WebGL is unavailable.');
+ return;
+ }
+
+ var cbf = gl.getExtension('WEBGL_color_buffer_float');
+ var cbhf = gl.getExtension('EXT_color_buffer_half_float');
+
+ //////////////////////////////////////
+
+ gl.viewport(0, 0, 1, 1);
+
+ var prog = ProgramByElemIds(gl, 'vs', 'fs');
+ ok(prog, 'Program should link.');
+ if (!prog)
+ return;
+
+ prog.aVertCoord = gl.getAttribLocation(prog, 'aVertCoord');
+ prog.uFragColor = gl.getUniformLocation(prog, 'uFragColor');
+
+ gl.useProgram(prog);
+
+ var arr = new Float32Array([
+ -1, -1,
+ 1, -1,
+ -1, 1,
+ 1, 1,
+ ]);
+ var vb = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vb);
+ gl.bufferData(gl.ARRAY_BUFFER, arr, gl.STATIC_DRAW);
+
+ gl.enableVertexAttribArray(0);
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
+
+ //////////////////////////////////////
+
+ var fb = gl.createFramebuffer();
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
+
+ error = gl.getError();
+ ok(error == 0, 'Should be no errors after setup. (0x' + error.toString(16) + ')');
+
+ //////////////////////////////////////
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA8 texture');
+ TestType(gl, prog, true, RGBA8);
+
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA16F texture');
+ TestType(gl, prog, true, RGBA16F);
+
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA32F texture');
+ TestType(gl, prog, true, RGBA32F);
+
+ ////////
+
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA4 renderbuffer');
+ TestType(gl, prog, false, RGBA4);
+
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA16F renderbuffer');
+ TestType(gl, prog, false, RGBA16F);
+
+ ok(true, '---------------------------------------------------------------------------');
+ ok(true, 'RGBA32F renderbuffer');
+ TestType(gl, prog, false, RGBA32F);
+
+ ok(true, '---------------------------------------------------------------------------');
+ //////////////////////////////////////
+
+ error = gl.getError();
+ ok(error == 0, 'Should be no errors after test.');
+
+ ok(true, 'TEST COMPLETE');
+})();
+
+</script>
+
+ </body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_compressed_texture_es3.html b/dom/canvas/test/webgl-mochitest/test_webgl_compressed_texture_es3.html
new file mode 100644
index 000000000..48dee2fc6
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_compressed_texture_es3.html
@@ -0,0 +1,753 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="webgl-util.js"></script>
+<script src="es3-data.js"></script>
+<title>WebGL test: test WEBGL_compressed_texture_es3 extension</title>
+<style>
+img {
+ border: 1px solid black;
+ margin-right: 1em;
+}
+.testimages {
+}
+
+.testimages br {
+ clear: both;
+}
+
+.testimages > div {
+ float: left;
+ margin: 1em;
+}
+</style>
+</head>
+<body>
+<div id="description"></div>
+<canvas id="canvas" width="8" height="8"></canvas>
+<div id="console"></div>
+<script id="vshader" type="x-shader/x-vertex">
+ attribute vec4 vPosition;
+ attribute vec2 texCoord0;
+ varying vec2 texCoord;
+ void main() {
+ gl_Position = vPosition;
+ texCoord = texCoord0;
+ }
+</script>
+<script id="fshader" type="x-shader/x-fragment">
+ precision mediump float;
+ uniform sampler2D tex;
+ varying vec2 texCoord;
+ void main() {
+ gl_FragData[0] = texture2D(tex, texCoord);
+ }
+</script>
+<script id="fshader-r" type="x-shader/x-fragment">
+ precision mediump float;
+ uniform sampler2D tex;
+ varying vec2 texCoord;
+ void main() {
+ vec4 pixel = (texture2D(tex, texCoord));
+ pixel.r = (pixel.r + 1.0) / 2.0;
+ gl_FragData[0] = pixel;
+ }
+</script>
+<script id="fshader-rg" type="x-shader/x-fragment">
+ precision mediump float;
+ uniform sampler2D tex;
+ varying vec2 texCoord;
+ void main() {
+ vec4 pixel = (texture2D(tex, texCoord));
+ pixel.rg = (pixel.rg + 1.0) / 2.0;
+ gl_FragData[0] = pixel;
+ }
+</script>
+<script>
+"use strict";
+var ext = null;
+var vao = null;
+var gl = null;
+var validFormats = {
+ COMPRESSED_R11_EAC : 0x9270,
+ COMPRESSED_SIGNED_R11_EAC : 0x9271,
+ COMPRESSED_RG11_EAC : 0x9272,
+ COMPRESSED_SIGNED_RG11_EAC : 0x9273,
+ COMPRESSED_RGB8_ETC2 : 0x9274,
+ COMPRESSED_SRGB8_ETC2 : 0x9275,
+ COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 : 0x9276,
+ COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 : 0x9277,
+ COMPRESSED_RGBA8_ETC2_EAC : 0x9278,
+ COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : 0x9279,
+};
+var name;
+var supportedFormats;
+
+function setupUnitQuad() {
+ var vertexObject = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+ 1.0, 1.0, 0.0,
+ -1.0, 1.0, 0.0,
+ -1.0, -1.0, 0.0,
+ 1.0, 1.0, 0.0,
+ -1.0, -1.0, 0.0,
+ 1.0, -1.0, 0.0]), gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(0);
+ gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
+
+ var vertexObject = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+ 1.0, 1.0,
+ 0.0, 1.0,
+ 0.0, 0.0,
+ 1.0, 1.0,
+ 0.0, 0.0,
+ 1.0, 0.0]), gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(1);
+ gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 0, 0);
+}
+
+function runTest() {
+ gl = WebGLUtil.getWebGL("canvas", false, {antialias: false});
+ if (!gl) {
+ ok(false, "WebGL context does not exist");
+ } else {
+ ok(true, "WebGL context exists");
+ setupUnitQuad();
+
+ // Run tests with extension disabled
+ runTestDisabled();
+
+ // Query the extension and store globally so shouldBe can access it
+ ext = gl.getExtension("WEBGL_compressed_texture_es3");
+ if (!ext) {
+ ok(true, "No WEBGL_compressed_texture_es3 support -- this is legal");
+ runSupportedTest(false);
+ } else {
+ ok(true, "Successfully enabled WEBGL_compressed_texture_es3 extension");
+
+ runSupportedTest(true);
+ runTestExtension();
+ }
+ }
+ SimpleTest.finish();
+}
+
+function runSupportedTest(extensionEnabled) {
+ var supported = gl.getSupportedExtensions();
+ if (supported.indexOf("WEBGL_compressed_texture_es3") >= 0) {
+ if (extensionEnabled) {
+ ok(true, "WEBGL_compressed_texture_es3 listed as supported and getExtension succeeded");
+ } else {
+ ok(false, "WEBGL_compressed_texture_es3 listed as supported but getExtension failed");
+ }
+ } else {
+ if (extensionEnabled) {
+ ok(false, "WEBGL_compressed_texture_es3 not listed as supported but getExtension succeeded");
+ } else {
+ ok(true, "WEBGL_compressed_texture_es3 not listed as supported and getExtension failed -- this is legal");
+ }
+ }
+}
+
+function runTestDisabled() {
+ is(gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS).length, 0,
+ "Should be no compressed texture formats");
+}
+
+function formatExists(format, supportedFormats) {
+ for (var ii = 0; ii < supportedFormats.length; ++ii) {
+ if (format == supportedFormats[ii]) {
+ ok(true, "supported format " + formatToString(format) + " is exists");
+ return;
+ }
+ }
+ ok(false, "supported format " + formatToString(format) + " does not exist");
+}
+
+function formatToString(format) {
+ for (var p in ext) {
+ if (ext[p] == format) {
+ return p;
+ }
+ }
+ return "0x" + format.toString(16);
+}
+
+function runTestExtension() {
+ // check that all format enums exist.
+ for (name in validFormats) {
+ is(ext[name], validFormats[name], "format is match");
+ }
+
+ supportedFormats = gl.getParameter(gl.COMPRESSED_TEXTURE_FORMATS);
+ // There should be exactly 10 formats
+ is(supportedFormats.length, 10, "Should be exactly 10 formats");
+
+ // check that all 10 formats exist
+ for (var name in validFormats.length) {
+ formatExists(validFormats[name], supportedFormats);
+ }
+
+ // Test each format
+ testETC2_RGB();
+}
+
+function testETC2_RGB() {
+ var tests = [
+ {
+ width: 4,
+ height: 4,
+ channels: 1,
+ data: img_4x4_r11_eac,
+ format: ext.COMPRESSED_R11_EAC
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 1,
+ data: img_4x4_signed_r11_eac,
+ format: ext.COMPRESSED_SIGNED_R11_EAC
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 2,
+ data: img_4x4_rg11_eac,
+ format: ext.COMPRESSED_RG11_EAC
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 2,
+ data: img_4x4_signed_rg11_eac,
+ format: ext.COMPRESSED_SIGNED_RG11_EAC
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 3,
+ data: img_4x4_rgb_etc2,
+ format: ext.COMPRESSED_RGB8_ETC2
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 3,
+ data: img_4x4_rgb_etc2,
+ format: ext.COMPRESSED_SRGB8_ETC2
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 4,
+ data: img_4x4_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 4,
+ data: img_4x4_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 4,
+ data: img_4x4_rgba_etc2,
+ format: ext.COMPRESSED_RGBA8_ETC2_EAC
+ },
+ {
+ width: 4,
+ height: 4,
+ channels: 4,
+ data: img_4x4_rgba_etc2,
+ format: ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 1,
+ data: img_8x8_r11_eac,
+ format: ext.COMPRESSED_R11_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 1,
+ data: img_8x8_signed_r11_eac,
+ format: ext.COMPRESSED_SIGNED_R11_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 2,
+ data: img_8x8_rg11_eac,
+ format: ext.COMPRESSED_RG11_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 2,
+ data: img_8x8_signed_rg11_eac,
+ format: ext.COMPRESSED_SIGNED_RG11_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 3,
+ data: img_8x8_rgb_etc2,
+ format: ext.COMPRESSED_RGB8_ETC2
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 3,
+ data: img_8x8_rgb_etc2,
+ format: ext.COMPRESSED_SRGB8_ETC2
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 4,
+ data: img_8x8_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 4,
+ data: img_8x8_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 4,
+ data: img_8x8_rgba_etc2,
+ format: ext.COMPRESSED_RGBA8_ETC2_EAC
+ },
+ {
+ width: 8,
+ height: 8,
+ channels: 4,
+ data: img_8x8_rgba_etc2,
+ format: ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 1,
+ data: img_32x32_r11_eac,
+ format: ext.COMPRESSED_R11_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 1,
+ data: img_32x32_signed_r11_eac,
+ format: ext.COMPRESSED_SIGNED_R11_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 2,
+ data: img_32x32_rg11_eac,
+ format: ext.COMPRESSED_RG11_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 2,
+ data: img_32x32_signed_rg11_eac,
+ format: ext.COMPRESSED_SIGNED_RG11_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 3,
+ data: img_32x32_rgb_etc2,
+ format: ext.COMPRESSED_RGB8_ETC2
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 3,
+ data: img_32x32_rgb_etc2,
+ format: ext.COMPRESSED_SRGB8_ETC2
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 4,
+ data: img_32x32_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 4,
+ data: img_32x32_rgb_punchthrough_etc2,
+ format: ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 4,
+ data: img_32x32_rgba_etc2,
+ format: ext.COMPRESSED_RGBA8_ETC2_EAC
+ },
+ {
+ width: 32,
+ height: 32,
+ channels: 4,
+ data: img_32x32_rgba_etc2,
+ format: ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
+ },
+ ];
+ testETCTextures(tests);
+}
+
+function testETCTextures(tests) {
+ for (var ii = 0; ii < tests.length; ++ii) {
+ testETCTexture(tests[ii]);
+ }
+}
+
+/* Return the size of block in bytes */
+function getBlockSize(format) {
+ switch (format) {
+ case ext.COMPRESSED_R11_EAC:
+ case ext.COMPRESSED_SIGNED_R11_EAC:
+ case ext.COMPRESSED_RGB8_ETC2:
+ case ext.COMPRESSED_SRGB8_ETC2:
+ case ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ return 8;
+ case ext.COMPRESSED_RG11_EAC:
+ case ext.COMPRESSED_SIGNED_RG11_EAC:
+ case ext.COMPRESSED_RGBA8_ETC2_EAC:
+ case ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ return 16
+ }
+}
+
+function copyRect(data, srcX, srcY, dstX, dstY, width, height, stride) {
+ var bytesPerLine = width * 4;
+ var srcOffset = srcX * 4 + srcY * stride;
+ var dstOffset = dstX * 4 + dstY * stride;
+ for (var jj = height; jj > 0; --jj) {
+ for (var ii = 0; ii < bytesPerLine; ++ii) {
+ data[dstOffset + ii] = data[srcOffset + ii];
+ }
+ srcOffset += stride;
+ dstOffset += stride;
+ }
+}
+
+function testETCTexture(test) {
+ var data = new Uint8Array(test.data.compressed);
+ var width = test.width;
+ var height = test.height;
+ var format = test.format;
+
+ var uncompressedData = new Uint8Array(test.data.decompressed);
+ var glErrorShouldBe = (gl, glError, msg) => {
+ msg = msg || "";
+ var err = gl.getError();
+ var getGLErrorAsString = err => {
+ if (err === gl.NO_ERROR) {
+ return "NO_ERROR";
+ }
+ for (var name in gl) {
+ if (gl[name] === err) {
+ return name;
+ }
+ }
+ return err.toString();
+ }
+
+ if (err != glError) {
+ ok(false, "getError expected: " + getGLErrorAsString(glError) +
+ ". Was " + getGLErrorAsString(err) + " : " + msg);
+ } else {
+ ok(true, "getError was expected value: " +
+ getGLErrorAsString(glError) + " : " + msg);
+ }
+ };
+
+ canvas.width = width;
+ canvas.height = height;
+ gl.viewport(0, 0, width, height);
+
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
+ gl.generateMipmap(gl.TEXTURE_2D);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "trying to generate mipmaps from compressed texture");
+ if (format == ext.COMPRESSED_SIGNED_R11_EAC) {
+ var program = WebGLUtil.createProgramByIds(gl, 'vshader', 'fshader-r');
+ } else if (format == ext.COMPRESSED_SIGNED_RG11_EAC) {
+ var program = WebGLUtil.createProgramByIds(gl, 'vshader', 'fshader-rg');
+ } else {
+ var program = WebGLUtil.createProgramByIds(gl, 'vshader', 'fshader');
+ }
+ gl.bindAttribLocation(program, 0, 'vPosition');
+ gl.bindAttribLocation(program, 1, 'texCoord0');
+ gl.useProgram(program);
+
+ gl.clearColor(1.0, 1.0, 1.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ compareRect(width, height, test.channels, width, height, uncompressedData, data, format);
+
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 1, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "non 0 border");
+
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width + 4, height, 0, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height + 4, 0, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 4, height, 0, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 4, 0, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 1, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "non multiple-of-4 supported");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width - 2, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "non multiple-of-4 supported");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 1, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "non multiple-of-4 supported");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height - 2, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "non multiple-of-4 supported");
+
+ if (width == 4) {
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, 1, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, 2, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
+ }
+ if (height == 4) {
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, width, 1, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 1, format, width, 2, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "valid dimensions for level > 0");
+ }
+
+ // pick a wrong format that uses the same amount of data.
+ var wrongFormat;
+ switch (format) {
+ case ext.COMPRESSED_R11_EAC:
+ wrongFormat = ext.COMPRESSED_SIGNED_R11_EAC;
+ break;
+ case ext.COMPRESSED_SIGNED_R11_EAC:
+ wrongFormat = ext.COMPRESSED_R11_EAC;
+ break;
+ case ext.COMPRESSED_RG11_EAC:
+ wrongFormat = ext.COMPRESSED_SIGNED_RG11_EAC;
+ break;
+ case ext.COMPRESSED_SIGNED_RG11_EAC:
+ wrongFormat = ext.COMPRESSED_RG11_EAC;
+ break;
+ case ext.COMPRESSED_RGB8_ETC2:
+ wrongFormat = ext.COMPRESSED_SRGB8_ETC2;
+ break;
+ case ext.COMPRESSED_SRGB8_ETC2:
+ wrongFormat = ext.COMPRESSED_RGB8_ETC2;
+ break;
+ case ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ wrongFormat = ext.COMPRESSED_RGB8_ETC2;
+ break;
+ case ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ wrongFormat = ext.COMPRESSED_RGB8_ETC2;
+ break;
+ case ext.COMPRESSED_RGBA8_ETC2_EAC:
+ wrongFormat = ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;
+ break;
+ case ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+ wrongFormat = ext.COMPRESSED_RGBA8_ETC2_EAC;
+ break;
+ }
+
+ // Restore original texture.
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
+
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height, wrongFormat, data);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "format does not match");
+
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width + 4, height, format, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height + 4, format, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 4, height, format, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 4, format, data);
+ glErrorShouldBe(gl, gl.INVALID_VALUE, "data size does not match dimensions");
+
+ gl.compressedTexImage2D(gl.TEXTURE_2D, 0, format, width, height, 0, data);
+ glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 1, height, format, data);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width - 2, height, format, data);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 1, format, data);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, width, height - 2, format, data);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid dimensions");
+
+ var subData = new Uint8Array(data.buffer, 0, getBlockSize(format));
+
+ if (width == 8 && height == 8) {
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 1, 0, 4, 4, format, subData);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid offset");
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, 0, 1, 4, 4, format, subData);
+ glErrorShouldBe(gl, gl.INVALID_OPERATION, "invalid offset");
+ }
+
+ if (width < 32 && height < 32) {
+ var stride = width * 4;
+ for (var yoff = 0; yoff < height; yoff += 4) {
+ for (var xoff = 0; xoff < width; xoff += 4) {
+ copyRect(uncompressedData, 0, 0, xoff, yoff, 4, 4, stride);
+ gl.compressedTexSubImage2D(gl.TEXTURE_2D, 0, xoff, yoff, 4, 4, format, subData);
+ glErrorShouldBe(gl, gl.NO_ERROR, "uploading compressed texture");
+ gl.clearColor(1.0, 1.0, 1.0, 1.0);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ compareRect(width, height, test.channels, width, height, uncompressedData, data, format);
+ }
+ }
+ }
+}
+
+function insertImg(element, caption, img) {
+ var div = document.createElement("div");
+ div.appendChild(img);
+ var label = document.createElement("div");
+ label.appendChild(document.createTextNode(caption));
+ div.appendChild(label);
+ element.appendChild(div);
+}
+
+function convertToSRGB(val) {
+ var norm = val / 255.0;
+ var res = 0;
+ if (norm <= 0.04045) {
+ res = norm / 12.92;
+ } else {
+ res = Math.pow(((norm + 0.055)/1.055), 2.4);
+ }
+
+ return res * 255.0;
+}
+
+function makeImage(imageWidth, imageHeight, dataWidth, data, alpha) {
+ var scale = 8;
+ var c = document.createElement("canvas");
+ c.width = imageWidth * scale;
+ c.height = imageHeight * scale;
+ var ctx = c.getContext("2d");
+ for (var yy = 0; yy < imageHeight; ++yy) {
+ for (var xx = 0; xx < imageWidth; ++xx) {
+ var offset = (yy * dataWidth + xx) * 4;
+ ctx.fillStyle = "rgba(" +
+ data[offset + 0] + "," +
+ data[offset + 1] + "," +
+ data[offset + 2] + "," +
+ (alpha ? data[offset + 3] / 255 : 1) + ")";
+ ctx.fillRect(xx * scale, yy * scale, scale, scale);
+ }
+ }
+ var img = document.createElement("img");
+ img.src = c.toDataURL();
+ return img;
+}
+
+function compareRect(actualWidth, actualHeight, actualChannels,
+ dataWidth, dataHeight, expectedData,
+ testData, testFormat)
+{
+ var actual = new Uint8Array(actualWidth * actualHeight * 4);
+ gl.readPixels(
+ 0, 0, actualWidth, actualHeight, gl.RGBA, gl.UNSIGNED_BYTE, actual);
+
+ var div = document.createElement("div");
+ div.className = "testimages";
+ var hasAlpha = actualChannels == 4;
+ var imgExpected = makeImage(actualWidth, actualHeight, dataWidth, expectedData, hasAlpha);
+ var imgActual = makeImage(actualWidth, actualHeight, actualWidth, actual, hasAlpha);
+ insertImg(div, "expected", imgExpected);
+ insertImg(div, "actual", imgActual);
+ div.appendChild(document.createElement('br'));
+ document.getElementById("console").appendChild(div);
+
+ var failed = false;
+ for (var yy = 0; yy < actualHeight; ++yy) {
+ for (var xx = 0; xx < actualWidth; ++xx) {
+ var actualOffset = (yy * actualWidth + xx) * 4;
+ var expectedOffset = (yy * dataWidth + xx) * 4;
+ var expected = expectedData.slice(expectedOffset, expectedOffset + 4);
+
+ var maxDiffPixel = 0;
+ switch (testFormat) {
+ case ext.COMPRESSED_SRGB8_ETC2:
+ case ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:
+ case ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:
+
+ // Alpha shouldn't do conversion.
+ for (var i = 0; i < 3; ++i) {
+ expected[i] = convertToSRGB(expected[i]);
+ }
+ //fallthrough
+ case ext.COMPRESSED_R11_EAC:
+ case ext.COMPRESSED_RG11_EAC:
+ case ext.COMPRESSED_SIGNED_R11_EAC:
+ case ext.COMPRESSED_SIGNED_RG11_EAC:
+ // Due to floating round error, we need fuzzy test here.
+ var maxDiffPixel = 1;
+ break;
+ default:
+ var maxDiffPixel = 0;
+ break;
+ }
+
+ for (var channel = 0; channel < actualChannels; ++channel) {
+ var diff = Math.abs(expected[channel] - actual[actualOffset + channel]);
+
+ if (diff > maxDiffPixel) {
+ failed = true;
+ var was = actual.slice(actualOffset, actualOffset + 4).join();
+ ok(false, 'at (' + xx + ', ' + yy +
+ ') expected: ' + expected.join() + ' was ' + was);
+ break;
+ }
+ }
+ }
+ }
+ if (!failed) {
+ ok(true, "texture rendered correctly");
+ }
+}
+
+var prefArrArr = [
+ ['webgl.enable-draft-extensions', true],
+];
+var prefEnv = {'set': prefArrArr};
+SimpleTest.waitForExplicitFinish();
+SpecialPowers.pushPrefEnv(prefEnv, runTest);
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_conformance.html b/dom/canvas/test/webgl-mochitest/test_webgl_conformance.html
new file mode 100644
index 000000000..b4d1407f9
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_conformance.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>WebGL test: 'webgl' context request</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="webgl-util.js"></script>
+</head>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+var gl = WebGLUtil.getWebGL('c', true);
+
+var isMobile = /Mobile/.test(navigator.userAgent);
+var isTablet = /Tablet/.test(navigator.userAgent);
+var shouldBeConformant = !isMobile && !isTablet;
+
+if (shouldBeConformant) {
+ // Desktop.
+ ok(gl, 'Expected conformance on: ' + navigator.userAgent);
+} else {
+ // Fennec, B2G.
+ ok(!gl, 'Expected no conformance on: ' + navigator.userAgent);
+}
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_force_enable.html b/dom/canvas/test/webgl-mochitest/test_webgl_force_enable.html
new file mode 100644
index 000000000..4b4611dd2
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_force_enable.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>WebGL test: Check that WebGL works (or not) if it should (or should not).</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="webgl-util.js"></script>
+<script src="driver-info.js"></script>
+</head>
+<body>
+<canvas id="c"></canvas>
+<script>
+
+function test() {
+ ok(SpecialPowers.getBoolPref('webgl.force-enabled'), 'WebGL should be force-enabled.');
+
+ var shouldSucceed = true;
+ var shouldFail = false;
+
+ if (DriverInfo.getOS() == DriverInfo.OS.ANDROID &&
+ DriverInfo.getOSVersion() < 15)
+ {
+ // Consider 'random'. Actually, ARMv6 fails, and ARMv7 succeeds, but we have
+ // not been successful at determining this from JS. (see bug 917478)
+ shouldSucceed = false;
+ shouldFail = false;
+ }
+
+ var gl = WebGLUtil.getWebGL('c');
+ if (shouldSucceed) {
+ ok(gl, 'Expected WebGL creation to succeed.');
+ }
+ if (shouldFail) {
+ ok(!gl, 'Expected WebGL creation to fail.');
+ }
+
+ SimpleTest.finish();
+}
+
+SimpleTest.waitForExplicitFinish();
+
+var prefArrArr = [
+ ['webgl.force-enabled', true]
+];
+var prefEnv = {'set': prefArrArr};
+SpecialPowers.pushPrefEnv(prefEnv, test);
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_request_context.html b/dom/canvas/test/webgl-mochitest/test_webgl_request_context.html
new file mode 100644
index 000000000..d11584e08
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_request_context.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<title>WebGL test: 'webgl' and 'experimental-webgl' context requests succeed,
+ 'moz-webgl' context requests fail.</title>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+<script src="driver-info.js"></script>
+<body>
+<canvas id="c1"></canvas>
+<canvas id="c2"></canvas>
+<script>
+
+var testFunc = ok;
+
+function testContextRetrieval(canvasId, creationId, shouldSucceed) {
+ var canvas = document.getElementById(canvasId);
+ ok(canvas, 'Invalid `canvasId`: ' + canvasId);
+
+ var createdGL = canvas.getContext(creationId);
+ if (shouldSucceed) {
+ testFunc(createdGL, 'Request for \'' + creationId + '\' should succeed.');
+ } else {
+ ok(!createdGL, 'Request for \'' + creationId + '\' should fail.');
+ }
+}
+
+SimpleTest.waitForExplicitFinish();
+SpecialPowers.pushPrefEnv({'set': [
+ ['webgl.force-enabled', true]
+]}, function() {
+ testContextRetrieval('c1', 'experimental-webgl', true);
+ testContextRetrieval('c2', 'moz-webgl', false);
+ SimpleTest.finish();
+});
+
+</script>
+
diff --git a/dom/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html b/dom/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html
new file mode 100644
index 000000000..8b8920603
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webgl_request_mismatch.html
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script src="/tests/SimpleTest/SimpleTest.js"></script>
+<link rel="stylesheet" href="/tests/SimpleTest/test.css">
+</head>
+<body>
+<script>
+
+WEBGL_TYPES = {};
+WEBGL_TYPES['experimental-webgl'] = true;
+WEBGL_TYPES['webgl'] = true;
+
+function AreBothIn(a, b, set) {
+ return (a in set) && (b in set);
+}
+
+function IsAlias(typeA, typeB) {
+ if (typeA == typeB)
+ return true;
+
+ if (AreBothIn(typeA, typeB, WEBGL_TYPES))
+ return true;
+
+ return false;
+}
+
+function TestContextRetrieval(creationType, requestType, functionalTypeSet) {
+ var canvas = document.createElement('canvas');
+ var createdGL = canvas.getContext(creationType);
+
+ var didCreationSucceed = (createdGL != null);
+ if (creationType in functionalTypeSet) {
+ ok(createdGL, 'Context creation should succeed for type \'' +
+ creationType + '\'');
+ } else {
+ ok(!createdGL, 'Context creation should fail for type \'' +
+ creationType + '\'');
+ return;
+ }
+
+ var requestedGL = canvas.getContext(requestType);
+
+ if (requestType in functionalTypeSet &&
+ IsAlias(creationType, requestType))
+ {
+ ok(requestedGL, 'Request for \'' + requestType + '\' from \'' +
+ creationType + '\' should succeed.');
+ ok(requestedGL == createdGL, 'Request for \'' + requestType +
+ '\' from \'' + creationType +
+ '\' should match.');
+ } else {
+ ok(!requestedGL, 'Request for \'' + requestType + '\' from \'' +
+ creationType + '\' should fail.');
+ }
+}
+
+function IsWebGLFunctional() {
+ var canvas = document.createElement('canvas');
+ return canvas.getContext('experimental-webgl') != null;
+}
+
+function IsWebGLConformant() {
+ var canvas = document.createElement('canvas');
+ return canvas.getContext('webgl') != null;
+}
+
+var typeList = ['2d', 'experimental-webgl', 'webgl'];
+var functionalTypeSet = {};
+functionalTypeSet['2d'] = true;
+
+if (IsWebGLFunctional())
+ functionalTypeSet['experimental-webgl'] = true;
+
+if (IsWebGLConformant())
+ functionalTypeSet['webgl'] = true;
+
+for (var i in typeList) {
+ var creationType = typeList[i];
+
+ for (var j in typeList) {
+ var requestType = typeList[j];
+
+ TestContextRetrieval(creationType, requestType, functionalTypeSet);
+ }
+}
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html b/dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html
new file mode 100644
index 000000000..65d9b4eb2
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/test_webglcontextcreationerror.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset='UTF-8'>
+ <script src='/tests/SimpleTest/SimpleTest.js'></script>
+ <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
+</head>
+<body>
+<script>
+'use strict';
+
+function RunWithPrefs(prefPairList, func) {
+ var prefEnv = {'set': prefPairList};
+ try {
+ SpecialPowers.pushPrefEnv(prefEnv, func);
+ } catch (e) {
+ console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList));
+ func();
+ }
+}
+
+////////////////////////////////////////
+
+function Check(expr, text) {
+ ok(expr, text);
+ return expr;
+}
+
+function TestWhenDisabled() {
+ var c = document.createElement('canvas');
+
+ var generatedEvent = null;
+ var f = function(event) { generatedEvent = event; };
+ c.addEventListener('webglcontextcreationerror', f);
+
+ var gl = c.getContext('webgl'); // Should fail.
+
+ do {
+ if (!Check(!gl, 'When disabled, context creation should fail.'))
+ break;
+
+ if (!Check(generatedEvent, 'Context creation failure should generate an event.'))
+ break;
+
+ var reason = generatedEvent.statusMessage;
+ if (!Check(reason !== undefined, 'generatedEvent.statusMessage should be defined.'))
+ break;
+
+ ok(reason.length, 'statusMessage should be non-empty.');
+ } while (false);
+
+ SimpleTest.finish();
+}
+
+////////////////////////////////////////
+
+SimpleTest.waitForExplicitFinish();
+
+var prefPairList = [
+ ['webgl.disabled', true],
+];
+RunWithPrefs(prefPairList, TestWhenDisabled);
+
+</script>
+</body>
+</html>
diff --git a/dom/canvas/test/webgl-mochitest/webgl-util.js b/dom/canvas/test/webgl-mochitest/webgl-util.js
new file mode 100644
index 000000000..21ef9cf0f
--- /dev/null
+++ b/dom/canvas/test/webgl-mochitest/webgl-util.js
@@ -0,0 +1,170 @@
+WebGLUtil = (function() {
+ // ---------------------------------------------------------------------------
+ // Error handling (for obvious failures, such as invalid element ids)
+
+ function defaultErrorFunc(str) {
+ console.log('Error: ' + str);
+ }
+
+ var gErrorFunc = defaultErrorFunc;
+ function setErrorFunc(func) {
+ gErrorFunc = func;
+ }
+
+ function error(str) {
+ gErrorFunc(str);
+ }
+
+ // ---------------------------------------------------------------------------
+ // Warning handling (for failures that may be intentional)
+
+ function defaultWarningFunc(str) {
+ console.log('Warning: ' + str);
+ }
+
+ var gWarningFunc = defaultWarningFunc;
+ function setWarningFunc(func) {
+ gWarningFunc = func;
+ }
+
+ function warning(str) {
+ gWarningFunc(str);
+ }
+
+ // ---------------------------------------------------------------------------
+ // WebGL helpers
+
+ function getWebGL(canvasId, requireConformant, attributes) {
+ // `requireConformant` will default to falsey if it is not supplied.
+
+ var canvas = document.getElementById(canvasId);
+
+ var gl = null;
+ try {
+ gl = canvas.getContext('webgl', attributes);
+ } catch(e) {}
+
+ if (!gl && !requireConformant) {
+ try {
+ gl = canvas.getContext('experimental-webgl', attributes);
+ } catch(e) {}
+ }
+
+ if (!gl) {
+ error('WebGL context could not be retrieved from \'' + canvasId + '\'.');
+ return null;
+ }
+
+ return gl;
+ }
+
+ function withWebGL2(canvasId, callback, onFinished) {
+ var run = function() {
+ var canvas = document.getElementById(canvasId);
+
+ var gl = null;
+ try {
+ gl = canvas.getContext('webgl2');
+ } catch(e) {}
+
+ if (!gl) {
+ todo(false, 'WebGL2 is not supported');
+ onFinished();
+ return;
+ }
+
+ function errorFunc(str) {
+ ok(false, 'Error: ' + str);
+ }
+ setErrorFunc(errorFunc);
+ setWarningFunc(errorFunc);
+
+ callback(gl);
+ onFinished();
+ };
+
+ try {
+ var prefArrArr = [
+ ['webgl.force-enabled', true],
+ ['webgl.enable-webgl2', true],
+ ];
+ var prefEnv = {'set': prefArrArr};
+ SpecialPowers.pushPrefEnv(prefEnv, run);
+ } catch (e) {
+ warning('No SpecialPowers, but trying WebGL2 anyway...');
+ run();
+ }
+ }
+
+ function getContentFromElem(elem) {
+ var str = "";
+ var k = elem.firstChild;
+ while (k) {
+ if (k.nodeType == 3)
+ str += k.textContent;
+
+ k = k.nextSibling;
+ }
+
+ return str;
+ }
+
+ // Returns a valid shader, or null on errors.
+ function createShaderById(gl, id) {
+ var elem = document.getElementById(id);
+ if (!elem) {
+ error('Failed to create shader from non-existent id \'' + id + '\'.');
+ return null;
+ }
+
+ var src = getContentFromElem(elem);
+
+ var shader;
+ if (elem.type == "x-shader/x-fragment") {
+ shader = gl.createShader(gl.FRAGMENT_SHADER);
+ } else if (elem.type == "x-shader/x-vertex") {
+ shader = gl.createShader(gl.VERTEX_SHADER);
+ } else {
+ error('Bad MIME type for shader \'' + id + '\': ' + elem.type + '.');
+ return null;
+ }
+
+ gl.shaderSource(shader, src);
+ gl.compileShader(shader);
+
+ return shader;
+ }
+
+ function createProgramByIds(gl, vsId, fsId) {
+ var vs = createShaderById(gl, vsId);
+ var fs = createShaderById(gl, fsId);
+ if (!vs || !fs)
+ return null;
+
+ var prog = gl.createProgram();
+ gl.attachShader(prog, vs);
+ gl.attachShader(prog, fs);
+ gl.linkProgram(prog);
+
+ if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {
+ var str = "Shader program linking failed:";
+ str += "\nShader program info log:\n" + gl.getProgramInfoLog(prog);
+ str += "\n\nVert shader log:\n" + gl.getShaderInfoLog(vs);
+ str += "\n\nFrag shader log:\n" + gl.getShaderInfoLog(fs);
+ warning(str);
+ return null;
+ }
+
+ return prog;
+ }
+
+ return {
+ setErrorFunc: setErrorFunc,
+ setWarningFunc: setWarningFunc,
+
+ getWebGL: getWebGL,
+ withWebGL2: withWebGL2,
+ createShaderById: createShaderById,
+ createProgramByIds: createProgramByIds,
+ };
+})();