daily pastebin goal
41%
SHARE
TWEET

webp support via javascript; webpjs.appspot.com

a guest Nov 21st, 2011 406 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var h='                                                                                         \
  2. // Copyright 2011 Google Inc.                                                                   \
  3. //                                                                                              \
  4. // This code is licensed under the same terms as WebM:                                          \
  5. //  Software License Agreement:  http://www.webmproject.org/license/software/                   \
  6. //  Additional IP Rights Grant:  http://www.webmproject.org/license/additional/                 \
  7. // -----------------------------------------------------------------------------                \
  8. //                                                                                              \
  9. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND              \
  10. // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED                \
  11. // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.           \
  12. // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,             \
  13. // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,               \
  14. // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,                \
  15. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY                 \
  16. // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING                      \
  17. // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,                 \
  18. // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                                           \
  19. //                                                                                              \
  20. // -----------------------------------------------------------------------------                \
  21. //                                                                                              \
  22. // Copyright 2011 Dominik Homberger                                                             \
  23. // WebPJS & Libwebp JavaScript   / libwebpjs - the libwebp implementation in JavaScript         \
  24. // WebPJS & Libwebp ActionScript / libwebpas - the libwebp implementation in ActionScript       \
  25. // with alpha channel support (WEBP_EXPERIMENTAL_FEATURES)                                      \
  26. //                                                                                              \
  27. // Author: Dominik Homberger (dominik.homberger@googlemail.com)                                 \
  28. //Libwebp Decoder Library libwebpjs-0.1.3-small.min.js';
  29.  
  30. var char = 0,
  31.     short = 0,
  32.     int = 0,
  33.     long = 0,
  34.     void_ = 0;
  35. var int8_t = char;
  36. var uint8_t = char;
  37. var int16_t = short;
  38. var uint16_t = short;
  39. var int32_t = int;
  40. var uint32_t = int;
  41. var uint64_t = long;
  42. var int64_t = long;
  43. var float = 0.00;
  44. var size_t = 0;
  45. var double = 0;
  46. var score_t = int64_t;
  47.  
  48. function alert2(a) {}
  49. function newObjectIt(a) {
  50.     return JSON.parse(JSON.stringify(a))
  51. }
  52. function convertBinaryToArray(a) {
  53.     var b = new Array();
  54.     var c = a.length;
  55.     for (i = 0; i < c; ++i) b.push(a.charCodeAt(i));
  56.     return b
  57. }
  58. function Byte2Hex(a) {
  59.     return '0x' + a.toString(16)
  60. }
  61. function memcpy(a, b, c, d, e) {
  62.     for (i = 0; i < e; ++i) a[b + i] = c[d + i]
  63. }
  64. function memcpyArrM(b, c, d, e, f) {
  65.     for (i = 0; i < f; ++i) {
  66.         var g = b[c + i].length;
  67.         for (var a = 0; a < g; ++a) b[c + i][a] = d[e + i][a]
  68.     }
  69. }
  70. function ArrCopy(a) {
  71.     var b = new Array();
  72.     var c = a.length;
  73.     for (i = 0; i < c; ++i) {
  74.         b.push(a[i])
  75.     }
  76.     return b
  77. }
  78. function memset_wl(a, b) {
  79.     var c = new Array();
  80.     c.push(newObjectIt(a));
  81.     for (i = 0; i < b; ++i) c.push(newObjectIt(a));
  82.     c.push(0);
  83.     return c
  84. }
  85. function memset(a, b) {
  86.     var c = new Array();
  87.     for (i = 0; i < b; ++i) c.push(a);
  88.     c.push(0);
  89.     return c
  90. }
  91. function membuild_wl(a, b) {
  92.     var c = new Array();
  93.     c.push(newObjectIt(a));
  94.     for (i = 0; i < b; ++i) c.push(newObjectIt(a));
  95.     c.push(0);
  96.     return c
  97. }
  98. function membuild(a, b) {
  99.     var c = new Array();
  100.     for (i = 0; i < b; ++i) c.push(a);
  101.     c.push(0);
  102.     return c
  103. }
  104. function memset_(a, b, c, d) {
  105.     for (i = 0; i < d; ++i) a[b + i] = c
  106. }
  107. function malloc(a, b) {
  108.     var c = new Array();
  109.     for (i = 0; i < a; ++i) c.push(b);
  110.     c.push(0);
  111.     return c
  112. }
  113. function sizeof(a) {
  114.     return 1
  115. }
  116. function memcmp(a, b, s, c) {
  117.     var w = '';
  118.     for (i = 0; i < c; ++i) w += String.fromCharCode(a[b + i]);
  119.     if (s == w) return 0;
  120.     else return 1
  121. }
  122. function Arr(a, b) {
  123.     var c = new Array();
  124.     for (i = 0; i < a; ++i) c.push(b);
  125.     return c
  126. }
  127. function Arr_nOI(a, b) {
  128.     var c = new Array();
  129.     for (i = 0; i < a; ++i) c.push(newObjectIt(b));
  130.     return c
  131. }
  132. function ArrM(b, c) {
  133.     var d, resStr = new Array();
  134.     for (a = (b.length - 1); a >= 0; --a) c = newObjectIt(Arr(b[a], c));
  135.     return c
  136. }
  137. function assert(a) {
  138.     if (!a) {
  139.         throw new Error('assert :P');
  140.     }
  141. }
  142. function WebPDecoder() {
  143.     var ba = (function ba() {
  144.         var bb = (function () {
  145.             var D = 32768;
  146.             var E = 0;
  147.             var F = 1;
  148.             var G = 2;
  149.             var H = 9;
  150.             var I = 6;
  151.             var J = 32768;
  152.             var K = 64;
  153.             var L;
  154.             var M;
  155.             var N = null;
  156.             var O;
  157.             var P, fixed_bd;
  158.             var Q;
  159.             var R;
  160.             var S;
  161.             var T;
  162.             var U;
  163.             var V;
  164.             var W, zip_td;
  165.             var X, zip_bd;
  166.             var Y;
  167.             var Z;
  168.             var bc = new Array(0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff);
  169.             var bd = new Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0);
  170.             var be = new Array(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99);
  171.             var bf = new Array(1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577);
  172.             var bg = new Array(0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13);
  173.             var bh = new Array(16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15);
  174.             var bi = function () {
  175.                     this.next = null;
  176.                     this.list = null
  177.                 };
  178.             var bj = function () {
  179.                     this.e = 0;
  180.                     this.b = 0;
  181.                     this.n = 0;
  182.                     this.t = null
  183.                 };
  184.             var bk = function (b, n, s, d, e, l) {
  185.                     this.BMAX = 16;
  186.                     this.N_MAX = 288;
  187.                     this.status = 0;
  188.                     this.root = null;
  189.                     this.m = 0; {
  190.                         var a;
  191.                         var c = new Array(this.BMAX + 1);
  192.                         var m;
  193.                         var f;
  194.                         var g;
  195.                         var h;
  196.                         var i;
  197.                         var j;
  198.                         var k;
  199.                         var t = new Array(this.BMAX + 1);
  200.                         var p;
  201.                         var A;
  202.                         var q;
  203.                         var r = new bj();
  204.                         var u = new Array(this.BMAX);
  205.                         var v = new Array(this.N_MAX);
  206.                         var w;
  207.                         var x = new Array(this.BMAX + 1);
  208.                         var B;
  209.                         var y;
  210.                         var z;
  211.                         var o;
  212.                         var C;
  213.                         C = this.root = null;
  214.                         for (i = 0; i < c.length; i++) c[i] = 0;
  215.                         for (i = 0; i < t.length; i++) t[i] = 0;
  216.                         for (i = 0; i < u.length; i++) u[i] = null;
  217.                         for (i = 0; i < v.length; i++) v[i] = 0;
  218.                         for (i = 0; i < x.length; i++) x[i] = 0;
  219.                         m = n > 256 ? b[256] : this.BMAX;
  220.                         p = b;
  221.                         A = 0;
  222.                         i = n;
  223.                         do {
  224.                             c[p[A]]++;
  225.                             A++
  226.                         } while (--i > 0);
  227.                         if (c[0] == n) {
  228.                             this.root = null;
  229.                             this.m = 0;
  230.                             this.status = 0;
  231.                             return
  232.                         }
  233.                         for (j = 1; j <= this.BMAX; j++) if (c[j] != 0) break;
  234.                         k = j;
  235.                         if (l < j) l = j;
  236.                         for (i = this.BMAX; i != 0; i--) if (c[i] != 0) break;
  237.                         g = i;
  238.                         if (l > i) l = i;
  239.                         for (y = 1 << j; j < i; j++, y <<= 1) if ((y -= c[j]) < 0) {
  240.                             this.status = 2;
  241.                             this.m = l;
  242.                             return
  243.                         }
  244.                         if ((y -= c[i]) < 0) {
  245.                             this.status = 2;
  246.                             this.m = l;
  247.                             return
  248.                         }
  249.                         c[i] += y;
  250.                         x[1] = j = 0;
  251.                         p = c;
  252.                         A = 1;
  253.                         B = 2;
  254.                         while (--i > 0) x[B++] = (j += p[A++]);
  255.                         p = b;
  256.                         A = 0;
  257.                         i = 0;
  258.                         do {
  259.                             if ((j = p[A++]) != 0) v[x[j]++] = i
  260.                         } while (++i < n);
  261.                         n = x[g];
  262.                         x[0] = i = 0;
  263.                         p = v;
  264.                         A = 0;
  265.                         h = -1;
  266.                         w = t[0] = 0;
  267.                         q = null;
  268.                         z = 0;
  269.                         for (; k <= g; k++) {
  270.                             a = c[k];
  271.                             while (a-- > 0) {
  272.                                 while (k > w + t[1 + h]) {
  273.                                     w += t[1 + h];
  274.                                     h++;
  275.                                     z = (z = g - w) > l ? l : z;
  276.                                     if ((f = 1 << (j = k - w)) > a + 1) {
  277.                                         f -= a + 1;
  278.                                         B = k;
  279.                                         while (++j < z) {
  280.                                             if ((f <<= 1) <= c[++B]) break;
  281.                                             f -= c[B]
  282.                                         }
  283.                                     }
  284.                                     if (w + j > m && w < m) j = m - w;
  285.                                     z = 1 << j;
  286.                                     t[1 + h] = j;
  287.                                     q = new Array(z);
  288.                                     for (o = 0; o < z; o++) {
  289.                                         q[o] = new bj()
  290.                                     }
  291.                                     if (C == null) C = this.root = new bi();
  292.                                     else C = C.next = new bi();
  293.                                     C.next = null;
  294.                                     C.list = q;
  295.                                     u[h] = q;
  296.                                     if (h > 0) {
  297.                                         x[h] = i;
  298.                                         r.b = t[h];
  299.                                         r.e = 16 + j;
  300.                                         r.t = q;
  301.                                         j = (i & ((1 << w) - 1)) >> (w - t[h]);
  302.                                         u[h - 1][j].e = r.e;
  303.                                         u[h - 1][j].b = r.b;
  304.                                         u[h - 1][j].n = r.n;
  305.                                         u[h - 1][j].t = r.t
  306.                                     }
  307.                                 }
  308.                                 r.b = k - w;
  309.                                 if (A >= n) r.e = 99;
  310.                                 else if (p[A] < s) {
  311.                                     r.e = (p[A] < 256 ? 16 : 15);
  312.                                     r.n = p[A++]
  313.                                 } else {
  314.                                     r.e = e[p[A] - s];
  315.                                     r.n = d[p[A++] - s]
  316.                                 }
  317.                                 f = 1 << (k - w);
  318.                                 for (j = i >> w; j < z; j += f) {
  319.                                     q[j].e = r.e;
  320.                                     q[j].b = r.b;
  321.                                     q[j].n = r.n;
  322.                                     q[j].t = r.t
  323.                                 }
  324.                                 for (j = 1 << (k - 1);
  325.                                 (i & j) != 0; j >>= 1) i ^= j;
  326.                                 i ^= j;
  327.                                 while ((i & ((1 << w) - 1)) != x[h]) {
  328.                                     w -= t[h];
  329.                                     h--
  330.                                 }
  331.                             }
  332.                         }
  333.                         this.m = t[1];
  334.                         this.status = ((y != 0 && g != 1) ? 1 : 0)
  335.                     }
  336.                 };
  337.             var bl = function () {
  338.                     if (Y.length == Z) return -1;
  339.                     return Y[Z++]
  340.                 };
  341.             var bm = function (n) {
  342.                     while (R < n) {
  343.                         Q |= bl() << R;
  344.                         R += 8
  345.                     }
  346.                 };
  347.             var bn = function (n) {
  348.                     return Q & bc[n]
  349.                 };
  350.             var bo = function (n) {
  351.                     Q >>= n;
  352.                     R -= n
  353.                 };
  354.             var bp = function (a, b, c) {
  355.                     var e;
  356.                     var t;
  357.                     var n;
  358.                     if (c == 0) return 0;
  359.                     n = 0;
  360.                     for (;;) {
  361.                         bm(X);
  362.                         t = W.list[bn(X)];
  363.                         e = t.e;
  364.                         while (e > 16) {
  365.                             if (e == 99) return -1;
  366.                             bo(t.b);
  367.                             e -= 16;
  368.                             bm(e);
  369.                             t = t.t[bn(e)];
  370.                             e = t.e
  371.                         }
  372.                         bo(t.b);
  373.                         if (e == 16) {
  374.                             M &= D - 1;
  375.                             a[b + n++] = L[M++] = t.n;
  376.                             if (n == c) return c;
  377.                             continue
  378.                         }
  379.                         if (e == 15) break;
  380.                         bm(e);
  381.                         U = t.n + bn(e);
  382.                         bo(e);
  383.                         bm(zip_bd);
  384.                         t = zip_td.list[bn(zip_bd)];
  385.                         e = t.e;
  386.                         while (e > 16) {
  387.                             if (e == 99) return -1;
  388.                             bo(t.b);
  389.                             e -= 16;
  390.                             bm(e);
  391.                             t = t.t[bn(e)];
  392.                             e = t.e
  393.                         }
  394.                         bo(t.b);
  395.                         bm(e);
  396.                         V = M - t.n - bn(e);
  397.                         bo(e);
  398.                         while (U > 0 && n < c) {
  399.                             U--;
  400.                             V &= D - 1;
  401.                             M &= D - 1;
  402.                             a[b + n++] = L[M++] = L[V++]
  403.                         }
  404.                         if (n == c) return c
  405.                     }
  406.                     S = -1;
  407.                     return n
  408.                 };
  409.             var bq = function (a, b, c) {
  410.                     var n;
  411.                     n = R & 7;
  412.                     bo(n);
  413.                     bm(16);
  414.                     n = bn(16);
  415.                     bo(16);
  416.                     bm(16);
  417.                     if (n != ((~Q) & 0xffff)) return -1;
  418.                     bo(16);
  419.                     U = n;
  420.                     n = 0;
  421.                     while (U > 0 && n < c) {
  422.                         U--;
  423.                         M &= D - 1;
  424.                         bm(8);
  425.                         a[b + n++] = L[M++] = bn(8);
  426.                         bo(8)
  427.                     }
  428.                     if (U == 0) S = -1;
  429.                     return n
  430.                 };
  431.             var br = function (a, b, c) {
  432.                     if (N == null) {
  433.                         var i;
  434.                         var l = new Array(288);
  435.                         var h;
  436.                         for (i = 0; i < 144; i++) l[i] = 8;
  437.                         for (; i < 256; i++) l[i] = 9;
  438.                         for (; i < 280; i++) l[i] = 7;
  439.                         for (; i < 288; i++) l[i] = 8;
  440.                         P = 7;
  441.                         h = new bk(l, 288, 257, bd, be, P);
  442.                         if (h.status != 0) {
  443.                             alert2("HufBuild error: " + h.status);
  444.                             return -1
  445.                         }
  446.                         N = h.root;
  447.                         P = h.m;
  448.                         for (i = 0; i < 30; i++) l[i] = 5;
  449.                         var d = 5;
  450.                         h = new bk(l, 30, 0, bf, bg, d);
  451.                         if (h.status > 1) {
  452.                             N = null;
  453.                             alert2("HufBuild error: " + h.status);
  454.                             return -1
  455.                         }
  456.                         O = h.root;
  457.                         d = h.m
  458.                     }
  459.                     W = N;
  460.                     zip_td = O;
  461.                     X = P;
  462.                     zip_bd = d;
  463.                     return bp(a, b, c)
  464.                 };
  465.             var bs = function (a, b, c) {
  466.                     var i;
  467.                     var j;
  468.                     var l;
  469.                     var n;
  470.                     var t;
  471.                     var d;
  472.                     var e;
  473.                     var f;
  474.                     var g = new Array(286 + 30);
  475.                     var h;
  476.                     for (i = 0; i < g.length; i++) g[i] = 0;
  477.                     bm(5);
  478.                     e = 257 + bn(5);
  479.                     bo(5);
  480.                     bm(5);
  481.                     f = 1 + bn(5);
  482.                     bo(5);
  483.                     bm(4);
  484.                     d = 4 + bn(4);
  485.                     bo(4);
  486.                     if (e > 286 || f > 30) return -1;
  487.                     for (j = 0; j < d; j++) {
  488.                         bm(3);
  489.                         g[bh[j]] = bn(3);
  490.                         bo(3)
  491.                     }
  492.                     for (; j < 19; j++) g[bh[j]] = 0;
  493.                     X = 7;
  494.                     h = new bk(g, 19, 19, null, null, X);
  495.                     if (h.status != 0) return -1;
  496.                     W = h.root;
  497.                     X = h.m;
  498.                     n = e + f;
  499.                     i = l = 0;
  500.                     while (i < n) {
  501.                         bm(X);
  502.                         t = W.list[bn(X)];
  503.                         j = t.b;
  504.                         bo(j);
  505.                         j = t.n;
  506.                         if (j < 16) g[i++] = l = j;
  507.                         else if (j == 16) {
  508.                             bm(2);
  509.                             j = 3 + bn(2);
  510.                             bo(2);
  511.                             if (i + j > n) return -1;
  512.                             while (j-- > 0) g[i++] = l
  513.                         } else if (j == 17) {
  514.                             bm(3);
  515.                             j = 3 + bn(3);
  516.                             bo(3);
  517.                             if (i + j > n) return -1;
  518.                             while (j-- > 0) g[i++] = 0;
  519.                             l = 0
  520.                         } else {
  521.                             bm(7);
  522.                             j = 11 + bn(7);
  523.                             bo(7);
  524.                             if (i + j > n) return -1;
  525.                             while (j-- > 0) g[i++] = 0;
  526.                             l = 0
  527.                         }
  528.                     }
  529.                     X = H;
  530.                     h = new bk(g, e, 257, bd, be, X);
  531.                     if (X == 0) h.status = 1;
  532.                     if (h.status != 0) {
  533.                         if (h.status == 1);
  534.                         return -1
  535.                     }
  536.                     W = h.root;
  537.                     X = h.m;
  538.                     for (i = 0; i < f; i++) g[i] = g[i + e];
  539.                     zip_bd = I;
  540.                     h = new bk(g, f, 0, bf, bg, zip_bd);
  541.                     zip_td = h.root;
  542.                     zip_bd = h.m;
  543.                     if (zip_bd == 0 && e > 257) {
  544.                         return -1
  545.                     }
  546.                     if (h.status == 1) {}
  547.                     if (h.status != 0) return -1;
  548.                     return bp(a, b, c)
  549.                 };
  550.             var bt = function () {
  551.                     var i;
  552.                     if (L == null) L = new Array(2 * D);
  553.                     M = 0;
  554.                     Q = 0;
  555.                     R = 0;
  556.                     S = -1;
  557.                     T = false;
  558.                     U = V = 0;
  559.                     W = null
  560.                 };
  561.             var bu = function (a, b, c) {
  562.                     var n, i;
  563.                     n = 0;
  564.                     while (n < c) {
  565.                         if (T && S == -1) return n;
  566.                         if (U > 0) {
  567.                             if (S != E) {
  568.                                 while (U > 0 && n < c) {
  569.                                     U--;
  570.                                     V &= D - 1;
  571.                                     M &= D - 1;
  572.                                     a[b + n++] = L[M++] = L[V++]
  573.                                 }
  574.                             } else {
  575.                                 while (U > 0 && n < c) {
  576.                                     U--;
  577.                                     M &= D - 1;
  578.                                     bm(8);
  579.                                     a[b + n++] = L[M++] = bn(8);
  580.                                     bo(8)
  581.                                 }
  582.                                 if (U == 0) S = -1
  583.                             }
  584.                             if (n == c) return n
  585.                         }
  586.                         if (S == -1) {
  587.                             if (T) break;
  588.                             bm(1);
  589.                             if (bn(1) != 0) T = true;
  590.                             bo(1);
  591.                             bm(2);
  592.                             S = bn(2);
  593.                             bo(2);
  594.                             W = null;
  595.                             U = 0
  596.                         }
  597.                         switch (S) {
  598.                         case 0:
  599.                             i = bq(a, b + n, c - n);
  600.                             break;
  601.                         case 1:
  602.                             if (W != null) i = bp(a, b + n, c - n);
  603.                             else i = br(a, b + n, c - n);
  604.                             break;
  605.                         case 2:
  606.                             if (W != null) i = bp(a, b + n, c - n);
  607.                             else i = bs(a, b + n, c - n);
  608.                             break;
  609.                         default:
  610.                             i = -1;
  611.                             break
  612.                         }
  613.                         if (i == -1) {
  614.                             if (T) return 0;
  615.                             return -1
  616.                         }
  617.                         n += i
  618.                     }
  619.                     return n
  620.                 };
  621.             var bv = function (a) {
  622.                     var i, j;
  623.                     bt();
  624.                     Y = a;
  625.                     Z = 0;
  626.                     var b = [0];
  627.                     var c = [];
  628.                     while ((i = bu(b, 0, b.length)) > 0) {
  629.                         c.push(b[0])
  630.                     }
  631.                     Y = null;
  632.                     return c
  633.                 };
  634.             return bv
  635.         })();
  636.         var bw = function (c) {
  637.                 var a = 1,
  638.                     b = 0;
  639.                 var i;
  640.                 var d = c.length;
  641.                 var e = 65521;
  642.                 for (i = 0; i < d; i += 1) {
  643.                     a = (a + c[i]) % e;
  644.                     b = (b + a) % e
  645.                 }
  646.                 return (b << 16) | a
  647.             };
  648.         var bx = function (a, b) {
  649.                 var i;
  650.                 var c = bw(a);
  651.                 var d = Deflate(a, b);
  652.                 a = d;
  653.                 a.unshift(0x78, 0xDA);
  654.                 for (i = 0; i < 4; ++i) a.push(c >> i * 8 & 25);
  655.                 return a
  656.             };
  657.         var by = function (a) {
  658.                 if (a.length < 6) {
  659.                     throw "DataError: Not enough input";
  660.                 }
  661.                 var b = bb(a.slice(2, a.length - 4));
  662.                 if (a.length > 6 && b.length === 0) {
  663.                     throw "DataError: Unable to inflate the data";
  664.                 }
  665.                 return b
  666.             };
  667.         return {
  668.             'inflate': bb,
  669.             'uncompress': by
  670.         }
  671.     })();
  672.     var bz = 0x0002;
  673.     var bA = 0,
  674.         MODE_RGBA = 1,
  675.         MODE_BGR = 2,
  676.         MODE_BGRA = 3,
  677.         MODE_ARGB = 4,
  678.         MODE_RGBA_4444 = 5,
  679.         MODE_RGB_565 = 6,
  680.         MODE_YUV = 7,
  681.         MODE_YUVA = 8,
  682.         MODE_LAST = 9;
  683.     this.WEBP_CSP_MODE = {
  684.         MODE_RGB: 0,
  685.         MODE_RGBA: 1,
  686.         MODE_BGR: 2,
  687.         MODE_BGRA: 3,
  688.         MODE_ARGB: 4,
  689.         MODE_RGBA_4444: 5,
  690.         MODE_RGB_565: 6,
  691.         MODE_YUV: 7,
  692.         MODE_YUVA: 8,
  693.         MODE_LAST: 9
  694.     };
  695.     var bB = {
  696.         rgba: uint8_t,
  697.         rgba_off: 0,
  698.         stride: int,
  699.         size: int
  700.     };
  701.     var bC = {
  702.         y: uint8_t,
  703.         u: uint8_t,
  704.         v: uint8_t,
  705.         a: uint8_t,
  706.         y_off: uint8_t,
  707.         u_off: uint8_t,
  708.         v_off: uint8_t,
  709.         a_off: uint8_t,
  710.         y_stride: int,
  711.         u_stride: int,
  712.         v_stride: int,
  713.         a_stride: int,
  714.         y_size: int,
  715.         u_size: int,
  716.         v_size: int,
  717.         a_size: int
  718.     };
  719.     var bD = {
  720.         colorspace: 'WEBP_CSP_MODE',
  721.         width: int,
  722.         height: int,
  723.         is_external_memory: int,
  724.         u: {
  725.             RGBA: bB,
  726.             YUVA: bC
  727.         },
  728.         private_memory: null,
  729.         private_memory_off: uint8_t
  730.     };
  731.  
  732.     function WebPInitDecBuffer(a) {
  733.         return WebPInitDecBufferInternal(a, bz)
  734.     }
  735.     var bE = 0,
  736.         VP8_STATUS_OUT_OF_MEMORY = 1,
  737.         VP8_STATUS_INVALID_PARAM = 2,
  738.         VP8_STATUS_BITSTREAM_ERROR = 3,
  739.         VP8_STATUS_UNSUPPORTED_FEATURE = 4,
  740.         VP8_STATUS_SUSPENDED = 5,
  741.         VP8_STATUS_USER_ABORT = 6,
  742.         VP8_STATUS_NOT_ENOUGH_DATA = 7;
  743.     this.VP8StatusCode = {
  744.         VP8_STATUS_OK: 0,
  745.         VP8_STATUS_OUT_OF_MEMORY: 1,
  746.         VP8_STATUS_INVALID_PARAM: 2,
  747.         VP8_STATUS_BITSTREAM_ERROR: 3,
  748.         VP8_STATUS_UNSUPPORTED_FEATURE: 4,
  749.         VP8_STATUS_SUSPENDED: 5,
  750.         VP8_STATUS_USER_ABORT: 6,
  751.         VP8_STATUS_NOT_ENOUGH_DATA: 7
  752.     };
  753.     var bF = {
  754.         width: {
  755.             value: int
  756.         },
  757.         height: {
  758.             value: int
  759.         },
  760.         has_alpha: {
  761.             value: int
  762.         },
  763.         no_incremental_decoding: int,
  764.         rotate: int,
  765.         uv_sampling: int,
  766.         bitstream_version: int
  767.     };
  768.     this.WebPGetFeatures = function (a, b, c) {
  769.         return WebPGetFeaturesInternal(a, b, c, bz)
  770.     };
  771.     var bG = {
  772.         bypass_filtering: int,
  773.         no_fancy_upsampling: int,
  774.         use_cropping: int,
  775.         crop_left: int,
  776.         crop_top: int,
  777.         crop_width: int,
  778.         crop_height: int,
  779.         use_scaling: int,
  780.         scaled_width: int,
  781.         scaled_height: int,
  782.         force_rotation: int,
  783.         no_enhancement: int,
  784.         use_threads: int
  785.     };
  786.     this.WebPDecoderConfig = {
  787.         input: newObjectIt(bF),
  788.         output: newObjectIt(bD),
  789.         options: newObjectIt(bG)
  790.     };
  791.     this.WebPInitDecoderConfig = function (a) {
  792.         return WebPInitDecoderConfigInternal(a, bz)
  793.     };
  794.     var bH = {
  795.         width: int,
  796.         height: int,
  797.         mb_y: int,
  798.         mb_w: int,
  799.         mb_h: int,
  800.         y: uint8_t,
  801.         u: uint8_t,
  802.         v: uint8_t,
  803.         y_off: 0,
  804.         u_off: 0,
  805.         v_off: 0,
  806.         y_stride: int,
  807.         uv_stride: int,
  808.         opaque: void_,
  809.         put: 0,
  810.         setup: 0,
  811.         teardown: 0,
  812.         fancy_upsampling: int,
  813.         data_size: uint32_t,
  814.         data: uint8_t,
  815.         data_off: 0,
  816.         bypass_filtering: int,
  817.         use_cropping: int,
  818.         crop_left: int,
  819.         crop_right: int,
  820.         crop_top: int,
  821.         crop_bottom: int,
  822.         use_scaling: int,
  823.         scaled_width: int,
  824.         scaled_height: int,
  825.         a: uint8_t,
  826.         a_off: 0
  827.     };
  828.  
  829.     function VP8InitIo(a) {
  830.         return VP8InitIoInternal(a, bz)
  831.     };
  832.     var bI = {
  833.         x_expand: int,
  834.         fy_scale: int,
  835.         fx_scale: int,
  836.         fxy_scale: int64_t,
  837.         y_accum: int,
  838.         y_add: int,
  839.         y_sub: int,
  840.         x_add: int,
  841.         x_sub: int,
  842.         src_width: int,
  843.         src_height: int,
  844.         dst_width: int,
  845.         dst_height: int,
  846.         dst: uint8_t,
  847.         dst_off: 0,
  848.         dst_stride: int,
  849.         irow: int32_t,
  850.         irow_off: 0,
  851.         frow: int32_t,
  852.         frow_off: 0
  853.     };
  854.     var bJ = {
  855.         output: newObjectIt(bD),
  856.         tmp_y: uint8_t,
  857.         tmp_u: uint8_t,
  858.         tmp_v: uint8_t,
  859.         tmp_y_off: 0,
  860.         tmp_u_off: 0,
  861.         tmp_v_off: 0,
  862.         last_y: int,
  863.         options_: newObjectIt(bG),
  864.         scaler_y: newObjectIt(bI),
  865.         scaler_u: newObjectIt(bI),
  866.         scaler_v: newObjectIt(bI),
  867.         scaler_a: newObjectIt(bI),
  868.         memory: void_,
  869.         emit: '(OutputFunc)',
  870.         emit_alpha: '(OutputFunc)'
  871.     };
  872.     var bK = {
  873.         buf_: uint8_t,
  874.         buf_off: null,
  875.         buf_end_: uint8_t,
  876.         eof_: int,
  877.         range_: uint32_t,
  878.         value_: uint32_t,
  879.         missing_: int
  880.     };
  881.  
  882.     function VP8Get(a) {
  883.         return VP8GetValue(a, 1)
  884.     };
  885.  
  886.     function VP8GetByte(a) {
  887.         assert(a);
  888.         if (a.buf_off < a.buf_end_) {
  889.             assert(a.buf_);
  890.             return (a.buf_[a.buf_off++])
  891.         }
  892.         a.eof_ = 1;
  893.         return 0xff
  894.     }
  895.     function VP8BitUpdate(a, b) {
  896.         var c = uint32_t;
  897.         var d = (b + 1) << 8;
  898.         if (a.missing_ > 0) {
  899.             a.value_ |= VP8GetByte(a) << a.missing_;
  900.             a.missing_ -= 8
  901.         }
  902.         c = (a.value_ >= d) + 0;
  903.         if (c) {
  904.             a.range_ -= b + 1;
  905.             a.value_ -= d
  906.         } else {
  907.             a.range_ = b
  908.         }
  909.         return c
  910.     }
  911.     function VP8Shift(a) {
  912.         var b = bL[a.range_];
  913.         a.range_ = bM[a.range_];
  914.         a.value_ <<= b;
  915.         a.missing_ += b
  916.     };
  917.  
  918.     function VP8GetBit(a, b) {
  919.         var c = (a.range_ * b) >> 8;
  920.         var d = VP8BitUpdate(a, c);
  921.         if (a.range_ < 0x7f) {
  922.             VP8Shift(a)
  923.         }
  924.         return d
  925.     };
  926.  
  927.     function VP8GetSigned(a, v) {
  928.         var b = a.range_ >> 1;
  929.         var c = VP8BitUpdate(a, b);
  930.         VP8Shift(a);
  931.         return c ? -v : v
  932.     };
  933.  
  934.     function VP8InitBitReader(a, b, c, d) {
  935.         assert(a);
  936.         assert(b);
  937.         assert(d);
  938.         a.range_ = 255 - 1;
  939.         a.buf_ = b;
  940.         a.buf_off = c;
  941.         a.buf_end_ = d;
  942.         a.value_ = 0;
  943.         a.missing_ = 8;
  944.         a.eof_ = 0
  945.     };
  946.     var bL = new Array(7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0);
  947.     var bM = new Array(127, 127, 191, 127, 159, 191, 223, 127, 143, 159, 175, 191, 207, 223, 239, 127, 135, 143, 151, 159, 167, 175, 183, 191, 199, 207, 215, 223, 231, 239, 247, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 175, 179, 183, 187, 191, 195, 199, 203, 207, 211, 215, 219, 223, 227, 231, 235, 239, 243, 247, 251, 127, 129, 131, 133, 135, 137, 139, 141, 143, 145, 147, 149, 151, 153, 155, 157, 159, 161, 163, 165, 167, 169, 171, 173, 175, 177, 179, 181, 183, 185, 187, 189, 191, 193, 195, 197, 199, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 227, 229, 231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 127);
  948.  
  949.     function VP8GetValue(a, b) {
  950.         var v = 0;
  951.         while (b-- > 0) {
  952.             v |= VP8GetBit(a, 0x80) << b
  953.         }
  954.         return v
  955.     };
  956.  
  957.     function VP8GetSignedValue(a, b) {
  958.         var c = VP8GetValue(a, b);
  959.         return VP8Get(a) ? -c : c
  960.     };
  961.     var bN = 0;
  962.     var bO = 1;
  963.     var bP = 2;
  964.     var bQ = 0,
  965.         B_TM_PRED = 1,
  966.         B_VE_PRED = 2,
  967.         B_HE_PRED = 3,
  968.         B_RD_PRED = 4,
  969.         B_VR_PRED = 5,
  970.         B_LD_PRED = 6,
  971.         B_VL_PRED = 7,
  972.         B_HD_PRED = 8,
  973.         B_HU_PRED = 9,
  974.         NUM_BMODES = B_HU_PRED + 1 - bQ,
  975.         DC_PRED = bQ,
  976.         V_PRED = B_VE_PRED,
  977.         H_PRED = B_HE_PRED,
  978.         TM_PRED = B_TM_PRED,
  979.         B_PRED = NUM_BMODES,
  980.         B_DC_PRED_NOTOP = 4,
  981.         B_DC_PRED_NOLEFT = 5,
  982.         B_DC_PRED_NOTOPLEFT = 6,
  983.         NUM_B_DC_MODES = 7;
  984.     var bR = 3,
  985.         NUM_MB_SEGMENTS = 4,
  986.         NUM_REF_LF_DELTAS = 4,
  987.         NUM_MODE_LF_DELTAS = 4,
  988.         MAX_NUM_PARTITIONS = 8,
  989.         NUM_TYPES = 4,
  990.         NUM_BANDS = 8,
  991.         NUM_CTX = 3,
  992.         NUM_PROBAS = 11,
  993.         NUM_MV_PROBAS = 19;
  994.     var bS = 32;
  995.     var bT = (bS * 17 + bS * 9);
  996.     var bU = (bS * 17);
  997.     var bV = (bS * 1 + 8);
  998.     var bW = (bV + bS * 16 + bS);
  999.     var bX = (bW + 16);
  1000.     var bY = {
  1001.         key_frame_: uint8_t,
  1002.         profile_: uint8_t,
  1003.         show_: uint8_t,
  1004.         partition_length_: uint32_t
  1005.     };
  1006.     var bZ = {
  1007.         width_: uint16_t,
  1008.         height_: uint16_t,
  1009.         xscale_: uint8_t,
  1010.         yscale_: uint8_t,
  1011.         colorspace_: uint8_t,
  1012.         clamp_type_: uint8_t
  1013.     };
  1014.     var ca = {
  1015.         use_segment_: int,
  1016.         update_map_: int,
  1017.         absolute_delta_: int,
  1018.         quantizer_: Arr(NUM_MB_SEGMENTS, int8_t),
  1019.         filter_strength_: Arr(NUM_MB_SEGMENTS, int8_t)
  1020.     };
  1021.     var cb = {
  1022.         segments_: Arr(bR, uint8_t),
  1023.         coeffs_: ArrM(new Array(NUM_TYPES, NUM_BANDS, NUM_CTX, NUM_PROBAS), uint8_t)
  1024.     };
  1025.     var cc = {
  1026.         simple_: int,
  1027.         level_: int,
  1028.         sharpness_: int,
  1029.         use_lf_delta_: int,
  1030.         ref_lf_delta_: Arr(NUM_REF_LF_DELTAS, int),
  1031.         mode_lf_delta_: Arr(NUM_REF_LF_DELTAS, int)
  1032.     };
  1033.     var cd = {
  1034.         f_level_: int,
  1035.         f_ilevel_: int,
  1036.         f_inner_: int
  1037.     };
  1038.     var ce = {
  1039.         nz_: int,
  1040.         dc_nz_: int,
  1041.         skip_: int
  1042.     };
  1043.     var cf = {
  1044.         y1_mat_: Arr(2, uint16_t),
  1045.         y2_mat_: Arr(2, uint16_t),
  1046.         uv_mat_: Arr(2, uint16_t)
  1047.     };
  1048.     var cg = {
  1049.         id_: int,
  1050.         mb_y_: int,
  1051.         filter_row_: int,
  1052.         f_info_: cd,
  1053.         io_: bH
  1054.     };
  1055.     var ci = {
  1056.         status_: 'VP8StatusCode',
  1057.         ready_: int,
  1058.         error_msg_: char,
  1059.         br_: newObjectIt(bK),
  1060.         frm_hdr_: newObjectIt(bY),
  1061.         pic_hdr_: newObjectIt(bZ),
  1062.         filter_hdr_: newObjectIt(cc),
  1063.         segment_hdr_: newObjectIt(ca),
  1064.         worker_: 'WebPWorker',
  1065.         use_threads_: int,
  1066.         cache_id_: int,
  1067.         num_caches_: int,
  1068.         thread_ctx_: cg,
  1069.         mb_w_: int,
  1070.         mb_h_: int,
  1071.         tl_mb_x_: int,
  1072.         tl_mb_y_: int,
  1073.         br_mb_x_: int,
  1074.         br_mb_y_: int,
  1075.         num_parts_: int,
  1076.         parts_: Arr_nOI(MAX_NUM_PARTITIONS, bK),
  1077.         buffer_flags_: uint32_t,
  1078.         dqm_: Arr_nOI(NUM_MB_SEGMENTS, cf),
  1079.         proba_: newObjectIt(cb),
  1080.         use_skip_proba_: int,
  1081.         skip_p_: uint8_t,
  1082.         intra_t_: uint8_t,
  1083.         intra_l_: Arr(4, uint8_t),
  1084.         y_t_: uint8_t,
  1085.         u_t_: uint8_t,
  1086.         v_t_: uint8_t,
  1087.         mb_info_: newObjectIt(ce),
  1088.         f_info_: newObjectIt(cd),
  1089.         yuv_b_: uint8_t,
  1090.         coeffs_: int16_t,
  1091.         cache_y_: uint8_t,
  1092.         cache_u_: uint8_t,
  1093.         cache_v_: uint8_t,
  1094.         cache_y_off: int,
  1095.         cache_u_off: int,
  1096.         cache_v_off: int,
  1097.         cache_y_stride_: int,
  1098.         cache_uv_stride_: int,
  1099.         mem_: void_,
  1100.         mem_size_: int,
  1101.         mb_x_: int,
  1102.         mb_y_: int,
  1103.         is_i4x4_: uint8_t,
  1104.         imodes_: Arr(16, uint8_t),
  1105.         imodes_offset_: 0,
  1106.         uvmode_: uint8_t,
  1107.         segment_: uint8_t,
  1108.         non_zero_: uint32_t,
  1109.         non_zero_ac_: uint32_t,
  1110.         filter_type_: int,
  1111.         filter_row_: int,
  1112.         filter_levels_: Arr(NUM_MB_SEGMENTS, uint8_t),
  1113.         alpha_data_: uint8_t,
  1114.         alpha_data_off: 0,
  1115.         alpha_data_size_: size_t,
  1116.         alpha_plane_: uint8_t,
  1117.         alpha_plane_off: 0,
  1118.         layer_colorspace_: int,
  1119.         layer_data_: uint8_t,
  1120.         layer_data_off: 0,
  1121.         layer_data_size_: size_t
  1122.     };
  1123.  
  1124.     function VP8DecompressAlphaRows(a, b, c) {
  1125.         var d = a.alpha_plane_;
  1126.         var e = a.pic_hdr_.width_;
  1127.         if (b < 0 || b + c > a.pic_hdr_.height_) {
  1128.             return null
  1129.         }
  1130.         if (b == 0) {
  1131.             var f = a.alpha_data_;
  1132.             var g = a.alpha_data_off;
  1133.             var h = a.alpha_data_size_;
  1134.             var i = e * a.pic_hdr_.height_;
  1135.             d = ba.uncompress(f.slice(g, g + h))
  1136.         }
  1137.         return (b == 0 ? d : (+b * e))
  1138.     }
  1139.     var cj = new Array(3, 4, 3, 4, 4, 2, 2, 1, 1);
  1140.  
  1141.     function CheckDecBuffer(a) {
  1142.         var b = 1;
  1143.         var c = a.colorspace;
  1144.         var d = a.width;
  1145.         var e = a.height;
  1146.         if (c >= MODE_YUV) {
  1147.             var f = a.u.YUVA;
  1148.             var g = f.y_stride * e;
  1149.             var h = f.u_stride * parseInt((e + 1) / 2);
  1150.             var i = f.v_stride * parseInt((e + 1) / 2);
  1151.             var j = f.a_stride * e;
  1152.             b &= (g <= f.y_size);
  1153.             b &= (h <= f.u_size);
  1154.             b &= (i <= f.v_size);
  1155.             b &= (j <= f.a_size);
  1156.             b &= (f.y_stride >= d);
  1157.             b &= (f.u_stride >= parseInt(d + 1) / 2);
  1158.             b &= (f.v_stride >= parseInt(d + 1) / 2);
  1159.             if (f.a) {
  1160.                 b &= (f.a_stride >= d)
  1161.             }
  1162.         } else {
  1163.             var f = a.u.RGBA;
  1164.             b &= (f.stride * e <= f.size);
  1165.             b &= (f.stride >= d * cj[c])
  1166.         }
  1167.         return b ? bE : VP8_STATUS_INVALID_PARAM
  1168.     }
  1169.     function AllocateBuffer(a) {
  1170.         var w = a.width;
  1171.         var h = a.height;
  1172.         if (w <= 0 || h <= 0) {
  1173.             return VP8_STATUS_INVALID_PARAM
  1174.         }
  1175.         if (!a.is_external_memory && a.private_memory == null) {
  1176.             var b = uint8_t;
  1177.             var c = 0;
  1178.             var d = a.colorspace;
  1179.             var e = int;
  1180.             var f = 0,
  1181.                 a_stride = 0;
  1182.             var g = 0;
  1183.             var i = uint64_t,
  1184.                 a_size = 0,
  1185.                 total_size = uint64_t;
  1186.             e = w * cj[d];
  1187.             i = e * h;
  1188.             if (d >= MODE_YUV) {
  1189.                 f = parseInt((w + 1) / 2);
  1190.                 g = f * parseInt((h + 1) / 2);
  1191.                 if (d == MODE_YUVA) {
  1192.                     a_stride = w;
  1193.                     a_size = a_stride * h
  1194.                 }
  1195.             }
  1196.             total_size = i + 2 * g + a_size;
  1197.             if ((total_size != total_size)) {
  1198.                 return VP8_STATUS_INVALID_PARAM
  1199.             }
  1200.             a.private_memory = b = malloc(total_size, size_t);
  1201.             a.private_memory_off = c = 0;
  1202.             if (b == null) {
  1203.                 return VP8_STATUS_OUT_OF_MEMORY
  1204.             }
  1205.             if (d >= MODE_YUV) {
  1206.                 var j = a.u.YUVA;
  1207.                 j.y = b;
  1208.                 j.y_off = c;
  1209.                 j.y_stride = e;
  1210.                 j.y_size = i;
  1211.                 j.u = b;
  1212.                 j.u_off = c + i;
  1213.                 j.u_stride = f;
  1214.                 j.u_size = g;
  1215.                 j.v = b;
  1216.                 j.v_off = c + i + g;
  1217.                 j.v_stride = f;
  1218.                 j.v_size = g;
  1219.                 if (d == MODE_YUVA) {
  1220.                     j.a = b;
  1221.                     j.a_off = c + i + 2 * g
  1222.                 }
  1223.                 j.a_size = a_size;
  1224.                 j.a_stride = a_stride
  1225.             } else {
  1226.                 var j = a.u.RGBA;
  1227.                 j.rgba = b;
  1228.                 j.rgba_off = c;
  1229.                 j.stride = e;
  1230.                 j.size = i
  1231.             }
  1232.         }
  1233.         return CheckDecBuffer(a)
  1234.     }
  1235.     function WebPAllocateDecBuffer(w, h, a, b) {
  1236.         if (b == null || w <= 0 || h <= 0) {
  1237.             return VP8_STATUS_INVALID_PARAM
  1238.         }
  1239.         if (a != null) {
  1240.             if (a.use_cropping) {
  1241.                 var c = a.crop_width;
  1242.                 var d = a.crop_height;
  1243.                 var x = a.crop_left & ~1;
  1244.                 var y = a.crop_top & ~1;
  1245.                 if (x < 0 || y < 0 || c <= 0 || d <= 0 || x + c > w || y + d > h) {
  1246.                     return VP8_STATUS_INVALID_PARAM
  1247.                 }
  1248.                 w = c;
  1249.                 h = d
  1250.             }
  1251.             if (a.use_scaling) {
  1252.                 if (a.scaled_width <= 0 || a.scaled_height <= 0) {
  1253.                     return VP8_STATUS_INVALID_PARAM
  1254.                 }
  1255.                 w = a.scaled_width;
  1256.                 h = a.scaled_height
  1257.             }
  1258.         }
  1259.         b.width = w;
  1260.         b.height = h;
  1261.         return AllocateBuffer(b)
  1262.     }
  1263.     function WebPInitDecBufferInternal(a, b) {
  1264.         if (b != bz) return 0;
  1265.         if (!a) return 0;
  1266.         memset_(a, 0, 0, sizeof(a) * a.length);
  1267.         return 1
  1268.     }
  1269.     this.WebPFreeDecBuffer = function (a) {
  1270.         if (a) {
  1271.             if (!a.is_external_memory) a.private_memory = '';
  1272.             a.private_memory_off = 0;
  1273.             a.private_memory = a.private_memory_off = null
  1274.         }
  1275.     };
  1276.  
  1277.     function WebPCopyDecBuffer(a, b) {
  1278.         alert2('todo: WebPCopyDecBuffer')
  1279.     }
  1280.     function WebPGrabDecBuffer(a, b) {
  1281.         alert2('todo: WebPGrabDecBuffer')
  1282.     }
  1283.     function VP8DecodeLayer(a) {
  1284.         assert(a);
  1285.         assert(a.layer_data_size_ > 0);
  1286.         return 1
  1287.     }
  1288.     var ck = Arr((255 + 255 + 1), uint8_t);
  1289.     var cl = Arr((255 + 255 + 1), uint8_t);
  1290.     var cm = Arr((1020 + 1020 + 1), int8_t);
  1291.     var cn = Arr((112 + 112 + 1), int8_t);
  1292.     var co = Arr((255 + 510 + 1), uint8_t);
  1293.     var cp = 0;
  1294.  
  1295.     function VP8DspInitTables(a) {
  1296.         if (!cp) {
  1297.             var i;
  1298.             for (i = -255; i <= 255; ++i) {
  1299.                 ck[255 + i] = (i < 0) ? -i : i;
  1300.                 cl[255 + i] = ck[255 + i] >> 1
  1301.             }
  1302.             for (i = -1020; i <= 1020; ++i) {
  1303.                 cm[1020 + i] = (i < -128) ? -128 : (i > 127) ? 127 : i
  1304.             }
  1305.             for (i = -112; i <= 112; ++i) {
  1306.                 cn[112 + i] = (i < -16) ? -16 : (i > 15) ? 15 : i
  1307.             }
  1308.             for (i = -255; i <= 255 + 255; ++i) {
  1309.                 co[255 + i] = (i < 0) ? 0 : (i > 255) ? 255 : i
  1310.             }
  1311.             cp = 1
  1312.         }
  1313.     };
  1314.  
  1315.     function clip_8b(v) {
  1316.         return (!(v & ~0xff)) ? v : (v < 0) ? 0 : 255
  1317.     };
  1318.  
  1319.     function STORE(x, y, v) {
  1320.         dst[dst_off + x + y * bS] = clip_8b(dst_off + dst[x + y * bS] + ((v) >> 3))
  1321.     };
  1322.     var cq = 20091 + (1 << 16);
  1323.     var cr = 35468;
  1324.  
  1325.     function MUL(a, b) {
  1326.         return (((a) * (b)) >> 16)
  1327.     }
  1328.     function TransformOne(e, f, g, h) {
  1329.         var C = Arr(4 * 4, 0),
  1330.             tmp, tmp_off;
  1331.         tmp_off = 0;
  1332.         var i;
  1333.         tmp = C;
  1334.         for (i = 0; i < 4; ++i) {
  1335.             var a = e[f + 0] + e[f + 8];
  1336.             var b = e[f + 0] - e[f + 8];
  1337.             var c = MUL(e[f + 4], cr) - MUL(e[f + 12], cq);
  1338.             var d = MUL(e[f + 4], cq) + MUL(e[f + 12], cr);
  1339.             tmp[tmp_off + 0] = a + d;
  1340.             tmp[tmp_off + 1] = b + c;
  1341.             tmp[tmp_off + 2] = b - c;
  1342.             tmp[tmp_off + 3] = a - d;
  1343.             tmp_off += 4;
  1344.             f++
  1345.         }
  1346.         tmp_off = 0;
  1347.         for (i = 0; i < 4; ++i) {
  1348.             var j = tmp[tmp_off + 0] + 4;
  1349.             var a = j + tmp[tmp_off + 8];
  1350.             var b = j - tmp[tmp_off + 8];
  1351.             var c = MUL(tmp[tmp_off + 4], cr) - MUL(tmp[tmp_off + 12], cq);
  1352.             var d = MUL(tmp[tmp_off + 4], cq) + MUL(tmp[tmp_off + 12], cr);
  1353.             g[h + 0 + 0 * bS] = clip_8b(g[h + 0 + 0 * bS] + ((a + d) >> 3));
  1354.             g[h + 1 + 0 * bS] = clip_8b(g[h + 1 + 0 * bS] + ((b + c) >> 3));
  1355.             g[h + 2 + 0 * bS] = clip_8b(g[h + 2 + 0 * bS] + ((b - c) >> 3));
  1356.             g[h + 3 + 0 * bS] = clip_8b(g[h + 3 + 0 * bS] + ((a - d) >> 3));
  1357.             tmp_off++;
  1358.             h += bS
  1359.         }
  1360.     };
  1361.  
  1362.     function TransformTwo(a, b, c, d, e) {
  1363.         TransformOne(a, b, c, d);
  1364.         if (e) {
  1365.             TransformOne(a, b + 16, c, d + 4)
  1366.         }
  1367.     }
  1368.     function TransformUV(a, b, c, d) {
  1369.         cv(a, b + 0 * 16, c, d + 0, 1);
  1370.         cv(a, b + 2 * 16, c, d + 4 * bS, 1)
  1371.     }
  1372.     function TransformDC(a, b, c, d) {
  1373.         var e = a[b + 0] + 4;
  1374.         var i, j;
  1375.         for (j = 0; j < 4; ++j) {
  1376.             for (i = 0; i < 4; ++i) {
  1377.                 var f = c[d + i + j * bS];
  1378.                 c[d + i + j * bS] = clip_8b(c[d + i + j * bS] + ((e) >> 3))
  1379.             }
  1380.         }
  1381.     };
  1382.  
  1383.     function TransformDCUV(a, b, c, d) {
  1384.         if (a[b + 0 * 16]) TransformDC(a, b + 0 * 16, c, d + 0);
  1385.         if (a[b + 1 * 16]) TransformDC(a, b + 1 * 16, c, d + 4);
  1386.         if (a[b + 2 * 16]) TransformDC(a, b + 2 * 16, c, d + 4 * bS);
  1387.         if (a[b + 3 * 16]) TransformDC(a, b + 3 * 16, c, d + 4 * bS + 4)
  1388.     };
  1389.  
  1390.     function TransformWHT(a, b) {
  1391.         var c = Arr(16, int);
  1392.         var i = int;
  1393.         for (i = 0; i < 4; ++i) {
  1394.             var d = a[0 + i] + a[12 + i];
  1395.             var e = a[4 + i] + a[8 + i];
  1396.             var f = a[4 + i] - a[8 + i];
  1397.             var g = a[0 + i] - a[12 + i];
  1398.             c[0 + i] = d + e;
  1399.             c[8 + i] = d - e;
  1400.             c[4 + i] = g + f;
  1401.             c[12 + i] = g - f
  1402.         }
  1403.         for (i = 0; i < 4; ++i) {
  1404.             var h = b[b.length - 1];
  1405.             var j = c[0 + i * 4] + 3;
  1406.             var d = j + c[3 + i * 4];
  1407.             var e = c[1 + i * 4] + c[2 + i * 4];
  1408.             var f = c[1 + i * 4] - c[2 + i * 4];
  1409.             var g = j - c[3 + i * 4];
  1410.             b[h + 0] = (d + e) >> 3;
  1411.             b[h + 16] = (g + f) >> 3;
  1412.             b[h + 32] = (d - e) >> 3;
  1413.             b[h + 48] = (g - f) >> 3;
  1414.             b[b.length - 1] += 64
  1415.         }
  1416.     };
  1417.  
  1418.     function VP8TransformWHT(a, b) {
  1419.         TransformWHT(a, b)
  1420.     };
  1421.  
  1422.     function OUT(x, y) {
  1423.         dst[(x) + (y) * bS]
  1424.     }
  1425.     function TrueMotion(a, b, c) {
  1426.         var d = a;
  1427.         var e = b - bS;
  1428.         var f = co;
  1429.         var g = +255 - d[e - 1];
  1430.         var y;
  1431.         for (y = 0; y < c; ++y) {
  1432.             var h = f;
  1433.             var i = g + a[b - 1];
  1434.             var x;
  1435.             for (x = 0; x < c; ++x) {
  1436.                 a[b + x] = h[i + d[e + x]]
  1437.             }
  1438.             b += bS
  1439.         }
  1440.     };
  1441.  
  1442.     function TM4(a, b) {
  1443.         TrueMotion(a, b, 4)
  1444.     }
  1445.     function TM8uv(a, b) {
  1446.         TrueMotion(a, b, 8)
  1447.     }
  1448.     function TM16(a, b) {
  1449.         TrueMotion(a, b, 16)
  1450.     }
  1451.     function VE16(a, b) {
  1452.         var j;
  1453.         for (j = 0; j < 16; ++j) {
  1454.             memcpy(a, b + j * bS, a, b - bS, 16)
  1455.         }
  1456.     };
  1457.  
  1458.     function HE16(a, b) {
  1459.         var j;
  1460.         for (j = 16; j > 0; --j) {
  1461.             memset_(a, b + 0, a[b - 1], 16);
  1462.             b += bS
  1463.         }
  1464.     };
  1465.  
  1466.     function Put16(v, a, b) {
  1467.         var j;
  1468.         for (j = 0; j < 16; ++j) {
  1469.             for (i = 0; i < (16); ++i) a[b + j * bS + i] = v
  1470.         }
  1471.     };
  1472.  
  1473.     function DC16(a, b) {
  1474.         var c = 16;
  1475.         var j;
  1476.         for (j = 0; j < 16; ++j) {
  1477.             c += a[b - 1 + j * bS] + a[b + j - bS]
  1478.         }
  1479.         Put16(c >> 5, a, b)
  1480.     };
  1481.  
  1482.     function DC16NoTop(a, b) {
  1483.         var c = 8;
  1484.         var j;
  1485.         for (j = 0; j < 16; ++j) {
  1486.             c += a[b - 1 + j * bS]
  1487.         }
  1488.         Put16(c >> 4, a, b)
  1489.     };
  1490.  
  1491.     function DC16NoLeft(a, b) {
  1492.         var c = 8;
  1493.         var i;
  1494.         for (i = 0; i < 16; ++i) {
  1495.             c += a[b + i - bS]
  1496.         }
  1497.         Put16(c >> 4, a, b)
  1498.     };
  1499.  
  1500.     function DC16NoTopLeft(a, b) {
  1501.         Put16(0x80, a, b)
  1502.     };
  1503.  
  1504.     function AVG3(a, b, c) {
  1505.         return (((a) + 2 * (b) + (c) + 2) >> 2)
  1506.     };
  1507.  
  1508.     function AVG2(a, b) {
  1509.         return (((a) + (b) + 1) >> 1)
  1510.     };
  1511.  
  1512.     function VE4(a, b) {
  1513.         var c = a;
  1514.         var d = b - bS;
  1515.         var e = new Array();
  1516.         e.push(AVG3(c[d - 1], c[d + 0], c[d + 1]));
  1517.         e.push(AVG3(c[d + 0], c[d + 1], c[d + 2]));
  1518.         e.push(AVG3(c[d + 1], c[d + 2], c[d + 3]));
  1519.         e.push(AVG3(c[d + 2], c[d + 3], c[d + 4]));
  1520.         var i;
  1521.         for (i = 0; i < 4; ++i) {
  1522.             memcpy(a, b + i * bS, e, 0, 4 * sizeof(e))
  1523.         }
  1524.     };
  1525.  
  1526.     function HE4(a, b) {
  1527.         var A = a[b - 1 - bS];
  1528.         var B = a[b - 1];
  1529.         var C = a[b - 1 + bS];
  1530.         var D = a[b - 1 + 2 * bS];
  1531.         var E = a[b - 1 + 3 * bS];
  1532.         a[b + 0 + 0 * bS] = a[b + 1 + 0 * bS] = a[b + 2 + 0 * bS] = a[b + 3 + 0 * bS] = AVG3(A, B, C);
  1533.         a[b + 0 + 1 * bS] = a[b + 1 + 1 * bS] = a[b + 2 + 1 * bS] = a[b + 3 + 1 * bS] = AVG3(B, C, D);
  1534.         a[b + 0 + 2 * bS] = a[b + 1 + 2 * bS] = a[b + 2 + 2 * bS] = a[b + 3 + 2 * bS] = AVG3(C, D, E);
  1535.         a[b + 0 + 3 * bS] = a[b + 1 + 3 * bS] = a[b + 2 + 3 * bS] = a[b + 3 + 3 * bS] = AVG3(D, E, E)
  1536.     };
  1537.  
  1538.     function DC4(a, b) {
  1539.         var c = 4;
  1540.         var i;
  1541.         for (i = 0; i < 4; ++i) c += a[b + i - bS] + a[b - 1 + i * bS];
  1542.         c >>= 3;
  1543.         for (i = 0; i < 4; ++i) {
  1544.             memset_(a, b + i * bS, c, 4)
  1545.         }
  1546.     };
  1547.  
  1548.     function RD4(a, b) {
  1549.         var I = a[b - 1 + 0 * bS];
  1550.         var J = a[b - 1 + 1 * bS];
  1551.         var K = a[b - 1 + 2 * bS];
  1552.         var L = a[b - 1 + 3 * bS];
  1553.         var X = a[b - 1 - bS];
  1554.         var A = a[b + 0 - bS];
  1555.         var B = a[b + 1 - bS];
  1556.         var C = a[b + 2 - bS];
  1557.         var D = a[b + 3 - bS];
  1558.         a[b + (0) + (3) * bS] = AVG3(J, K, L);
  1559.         a[b + (0) + (2) * bS] = a[b + (1) + (3) * bS] = AVG3(I, J, K);
  1560.         a[b + (0) + (1) * bS] = a[b + (1) + (2) * bS] = a[b + (2) + (3) * bS] = AVG3(X, I, J);
  1561.         a[b + (0) + (0) * bS] = a[b + (1) + (1) * bS] = a[b + (2) + (2) * bS] = a[b + (3) + (3) * bS] = AVG3(A, X, I);
  1562.         a[b + (1) + (0) * bS] = a[b + (2) + (1) * bS] = a[b + (3) + (2) * bS] = AVG3(B, A, X);
  1563.         a[b + (2) + (0) * bS] = a[b + (3) + (1) * bS] = AVG3(C, B, A);
  1564.         a[b + (3) + (0) * bS] = AVG3(D, C, B)
  1565.     };
  1566.  
  1567.     function LD4(a, b) {
  1568.         var A = a[b + 0 - bS];
  1569.         var B = a[b + 1 - bS];
  1570.         var C = a[b + 2 - bS];
  1571.         var D = a[b + 3 - bS];
  1572.         var E = a[b + 4 - bS];
  1573.         var F = a[b + 5 - bS];
  1574.         var G = a[b + 6 - bS];
  1575.         var H = a[b + 7 - bS];
  1576.         a[b + (0) + (0) * bS] = AVG3(A, B, C);
  1577.         a[b + (1) + (0) * bS] = a[b + (0) + (1) * bS] = AVG3(B, C, D);
  1578.         a[b + (2) + (0) * bS] = a[b + (1) + (1) * bS] = a[b + (0) + (2) * bS] = AVG3(C, D, E);
  1579.         a[b + (3) + (0) * bS] = a[b + (2) + (1) * bS] = a[b + (1) + (2) * bS] = a[b + (0) + (3) * bS] = AVG3(D, E, F);
  1580.         a[b + (3) + (1) * bS] = a[b + (2) + (2) * bS] = a[b + (1) + (3) * bS] = AVG3(E, F, G);
  1581.         a[b + (3) + (2) * bS] = a[b + (2) + (3) * bS] = AVG3(F, G, H);
  1582.         a[b + (3) + (3) * bS] = AVG3(G, H, H)
  1583.     };
  1584.  
  1585.     function VR4(a, b) {
  1586.         var I = a[b - 1 + 0 * bS];
  1587.         var J = a[b - 1 + 1 * bS];
  1588.         var K = a[b - 1 + 2 * bS];
  1589.         var X = a[b - 1 - bS];
  1590.         var A = a[b + 0 - bS];
  1591.         var B = a[b + 1 - bS];
  1592.         var C = a[b + 2 - bS];
  1593.         var D = a[b + 3 - bS];
  1594.         a[b + (0) + (0) * bS] = a[b + (1) + (2) * bS] = AVG2(X, A);
  1595.         a[b + (1) + (0) * bS] = a[b + (2) + (2) * bS] = AVG2(A, B);
  1596.         a[b + (2) + (0) * bS] = a[b + (3) + (2) * bS] = AVG2(B, C);
  1597.         a[b + (3) + (0) * bS] = AVG2(C, D);
  1598.         a[b + (0) + (3) * bS] = AVG3(K, J, I);
  1599.         a[b + (0) + (2) * bS] = AVG3(J, I, X);
  1600.         a[b + (0) + (1) * bS] = a[b + (1) + (3) * bS] = AVG3(I, X, A);
  1601.         a[b + (1) + (1) * bS] = a[b + (2) + (3) * bS] = AVG3(X, A, B);
  1602.         a[b + (2) + (1) * bS] = a[b + (3) + (3) * bS] = AVG3(A, B, C);
  1603.         a[b + (3) + (1) * bS] = AVG3(B, C, D)
  1604.     };
  1605.  
  1606.     function VL4(a, b) {
  1607.         var A = a[b + 0 - bS];
  1608.         var B = a[b + 1 - bS];
  1609.         var C = a[b + 2 - bS];
  1610.         var D = a[b + 3 - bS];
  1611.         var E = a[b + 4 - bS];
  1612.         var F = a[b + 5 - bS];
  1613.         var G = a[b + 6 - bS];
  1614.         var H = a[b + 7 - bS];
  1615.         a[b + (0) + (0) * bS] = AVG2(A, B);
  1616.         a[b + (1) + (0) * bS] = a[b + (0) + (2) * bS] = AVG2(B, C);
  1617.         a[b + (2) + (0) * bS] = a[b + (1) + (2) * bS] = AVG2(C, D);
  1618.         a[b + (3) + (0) * bS] = a[b + (2) + (2) * bS] = AVG2(D, E);
  1619.         a[b + (0) + (1) * bS] = AVG3(A, B, C);
  1620.         a[b + (1) + (1) * bS] = a[b + (0) + (3) * bS] = AVG3(B, C, D);
  1621.         a[b + (2) + (1) * bS] = a[b + (1) + (3) * bS] = AVG3(C, D, E);
  1622.         a[b + (3) + (1) * bS] = a[b + (2) + (3) * bS] = AVG3(D, E, F);
  1623.         a[b + (3) + (2) * bS] = AVG3(E, F, G);
  1624.         a[b + (3) + (3) * bS] = AVG3(F, G, H)
  1625.     };
  1626.  
  1627.     function HU4(a, b) {
  1628.         var I = a[b - 1 + 0 * bS];
  1629.         var J = a[b - 1 + 1 * bS];
  1630.         var K = a[b - 1 + 2 * bS];
  1631.         var L = a[b - 1 + 3 * bS];
  1632.         a[b + (0) + (0) * bS] = AVG2(I, J);
  1633.         a[b + (2) + (0) * bS] = a[b + (0) + (1) * bS] = AVG2(J, K);
  1634.         a[b + (2) + (1) * bS] = a[b + (0) + (2) * bS] = AVG2(K, L);
  1635.         a[b + (1) + (0) * bS] = AVG3(I, J, K);
  1636.         a[b + (3) + (0) * bS] = a[b + (1) + (1) * bS] = AVG3(J, K, L);
  1637.         a[b + (3) + (1) * bS] = a[b + (1) + (2) * bS] = AVG3(K, L, L);
  1638.         a[b + (3) + (2) * bS] = a[b + (2) + (2) * bS] = a[b + (0) + (3) * bS] = a[b + (1) + (3) * bS] = a[b + (2) + (3) * bS] = a[b + (3) + (3) * bS] = L
  1639.     };
  1640.  
  1641.     function HD4(a, b) {
  1642.         var I = a[b - 1 + 0 * bS];
  1643.         var J = a[b - 1 + 1 * bS];
  1644.         var K = a[b - 1 + 2 * bS];
  1645.         var L = a[b - 1 + 3 * bS];
  1646.         var X = a[b - 1 - bS];
  1647.         var A = a[b + 0 - bS];
  1648.         var B = a[b + 1 - bS];
  1649.         var C = a[b + 2 - bS];
  1650.         a[b + (0) + (0) * bS] = a[b + (2) + (1) * bS] = AVG2(I, X);
  1651.         a[b + (0) + (1) * bS] = a[b + (2) + (2) * bS] = AVG2(J, I);
  1652.         a[b + (0) + (2) * bS] = a[b + (2) + (3) * bS] = AVG2(K, J);
  1653.         a[b + (0) + (3) * bS] = AVG2(L, K);
  1654.         a[b + (3) + (0) * bS] = AVG3(A, B, C);
  1655.         a[b + (2) + (0) * bS] = AVG3(X, A, B);
  1656.         a[b + (1) + (0) * bS] = a[b + (3) + (1) * bS] = AVG3(I, X, A);
  1657.         a[b + (1) + (1) * bS] = a[b + (3) + (2) * bS] = AVG3(J, I, X);
  1658.         a[b + (1) + (2) * bS] = a[b + (3) + (3) * bS] = AVG3(K, J, I);
  1659.         a[b + (1) + (3) * bS] = AVG3(L, K, J)
  1660.     };
  1661.  
  1662.     function VE8uv(a, b) {
  1663.         var j;
  1664.         for (j = 0; j < 8; ++j) {
  1665.             memcpy(a, b + j * bS, a, b - bS, 8)
  1666.         }
  1667.     };
  1668.  
  1669.     function HE8uv(a, b) {
  1670.         var j;
  1671.         for (j = 0; j < 8; ++j) {
  1672.             memset_(a, b + 0, a[b - 1], 8);
  1673.             b += bS
  1674.         }
  1675.     };
  1676.  
  1677.     function Put8x8uv(v, a, b) {
  1678.         var j, k;
  1679.         for (j = 0; j < 8; ++j) {
  1680.             for (k = 0; k < 8; ++k) a[b + k + j * bS] = v
  1681.         }
  1682.     };
  1683.  
  1684.     function DC8uv(a, b) {
  1685.         var c = 8;
  1686.         var i;
  1687.         for (i = 0; i < 8; ++i) {
  1688.             c += a[b + i - bS] + a[b - 1 + i * bS]
  1689.         }
  1690.         Put8x8uv(((c >> 4) * 0x01), a, b)
  1691.     };
  1692.  
  1693.     function DC8uvNoLeft(a, b) {
  1694.         var c = 4;
  1695.         var i;
  1696.         for (i = 0; i < 8; ++i) {
  1697.             c += a[b + i - bS]
  1698.         }
  1699.         Put8x8uv(((c >> 3) * 0x01), a, b)
  1700.     };
  1701.  
  1702.     function DC8uvNoTop(a, b) {
  1703.         var c = 4;
  1704.         var i;
  1705.         for (i = 0; i < 8; ++i) {
  1706.             c += a[b - 1 + i * bS]
  1707.         }
  1708.         Put8x8uv(((c >> 3) * 0x01), a, b)
  1709.     };
  1710.  
  1711.     function DC8uvNoTopLeft(a, b) {
  1712.         Put8x8uv(0x80, a, b)
  1713.     };
  1714.     var cs = new Array(function (v, o) {
  1715.         DC4(v, o)
  1716.     }, function (v, o) {
  1717.         TM4(v, o)
  1718.     }, function (v, o) {
  1719.         VE4(v, o)
  1720.     }, function (v, o) {
  1721.         HE4(v, o)
  1722.     }, function (v, o) {
  1723.         RD4(v, o)
  1724.     }, function (v, o) {
  1725.         VR4(v, o)
  1726.     }, function (v, o) {
  1727.         LD4(v, o)
  1728.     }, function (v, o) {
  1729.         VL4(v, o)
  1730.     }, function (v, o) {
  1731.         HD4(v, o)
  1732.     }, function (v, o) {
  1733.         HU4(v, o)
  1734.     });
  1735.     var ct = new Array(function (v, o) {
  1736.         DC16(v, o)
  1737.     }, function (v, o) {
  1738.         TM16(v, o)
  1739.     }, function (v, o) {
  1740.         VE16(v, o)
  1741.     }, function (v, o) {
  1742.         HE16(v, o)
  1743.     }, function (v, o) {
  1744.         DC16NoTop(v, o)
  1745.     }, function (v, o) {
  1746.         DC16NoLeft(v, o)
  1747.     }, function (v, o) {
  1748.         DC16NoTopLeft(v, o)
  1749.     });
  1750.     var cu = new Array(function (v, o) {
  1751.         DC8uv(v, o)
  1752.     }, function (v, o) {
  1753.         TM8uv(v, o)
  1754.     }, function (v, o) {
  1755.         VE8uv(v, o)
  1756.     }, function (v, o) {
  1757.         HE8uv(v, o)
  1758.     }, function (v, o) {
  1759.         DC8uvNoTop(v, o)
  1760.     }, function (v, o) {
  1761.         DC8uvNoLeft(v, o)
  1762.     }, function (v, o) {
  1763.         DC8uvNoTopLeft(v, o)
  1764.     });
  1765.  
  1766.     function do_filter2(p, b, c) {
  1767.         var d = p[b - 2 * c],
  1768.             p0 = p[b - c],
  1769.             q0 = p[b + 0],
  1770.             q1 = p[b + c];
  1771.         var a = 3 * (q0 - p0) + cm[1020 + d - q1];
  1772.         var e = cn[112 + ((a + 4) >> 3)];
  1773.         var f = cn[112 + ((a + 3) >> 3)];
  1774.         p[b - c] = co[255 + p0 + f];
  1775.         p[b + 0] = co[255 + q0 - e]
  1776.     };
  1777.  
  1778.     function do_filter4(p, b, c) {
  1779.         var d = p[b - 2 * c],
  1780.             p0 = p[b - c],
  1781.             q0 = p[b + 0],
  1782.             q1 = p[b + c];
  1783.         var a = 3 * (q0 - p0);
  1784.         var e = cn[112 + ((a + 4) >> 3)];
  1785.         var f = cn[112 + ((a + 3) >> 3)];
  1786.         var g = (e + 1) >> 1;
  1787.         p[b - 2 * c] = co[255 + d + g];
  1788.         p[b - c] = co[255 + p0 + f];
  1789.         p[b + 0] = co[255 + q0 - e];
  1790.         p[b + c] = co[255 + q1 - g]
  1791.     };
  1792.  
  1793.     function do_filter6(p, b, c) {
  1794.         var d = p[b - 3 * c],
  1795.             p1 = p[b - 2 * c],
  1796.             p0 = p[b - c];
  1797.         var e = p[b + 0],
  1798.             q1 = p[b + c],
  1799.             q2 = p[b + 2 * c];
  1800.         var a = cm[1020 + 3 * (e - p0) + cm[1020 + p1 - q1]];
  1801.         var f = (27 * a + 63) >> 7;
  1802.         var g = (18 * a + 63) >> 7;
  1803.         var h = (9 * a + 63) >> 7;
  1804.         p[b - 3 * c] = co[255 + d + h];
  1805.         p[b - 2 * c] = co[255 + p1 + g];
  1806.         p[b - c] = co[255 + p0 + f];
  1807.         p[b + 0] = co[255 + e - f];
  1808.         p[b + c] = co[255 + q1 - g];
  1809.         p[b + 2 * c] = co[255 + q2 - h]
  1810.     };
  1811.  
  1812.     function hev(p, a, b, c) {
  1813.         var d = p[a - 2 * b],
  1814.             p0 = p[a - b],
  1815.             q0 = p[a + 0],
  1816.             q1 = p[a + b];
  1817.         return (ck[255 + d - p0] > c) || (ck[255 + q1 - q0] > c)
  1818.     };
  1819.  
  1820.     function needs_filter(p, a, b, c) {
  1821.         var d = p[a - 2 * b],
  1822.             p0 = p[a - b],
  1823.             q0 = p[a + 0],
  1824.             q1 = p[a + b];
  1825.         return (2 * ck[255 + p0 - q0] + cl[255 + d - q1]) <= c
  1826.     };
  1827.  
  1828.     function needs_filter2(p, a, b, t, c) {
  1829.         var d = p[a - 4 * b],
  1830.             p2 = p[a - 3 * b],
  1831.             p1 = p[a - 2 * b],
  1832.             p0 = p[a - b];
  1833.         var e = p[a + 0],
  1834.             q1 = p[a + b],
  1835.             q2 = p[a + 2 * b],
  1836.             q3 = p[a + 3 * b];
  1837.         if ((2 * ck[255 + p0 - e] + cl[255 + p1 - q1]) > t) return 0;
  1838.         return ck[255 + d - p2] <= c && ck[255 + p2 - p1] <= c && ck[255 + p1 - p0] <= c && ck[255 + q3 - q2] <= c && ck[255 + q2 - q1] <= c && ck[255 + q1 - e] <= c
  1839.     };
  1840.  
  1841.     function SimpleVFilter16(p, a, b, c) {
  1842.         var i;
  1843.         for (i = 0; i < 16; ++i) {
  1844.             if (needs_filter(p, a + i, b, c)) {
  1845.                 do_filter2(p, a + i, b)
  1846.             }
  1847.         }
  1848.     };
  1849.  
  1850.     function SimpleHFilter16(p, a, b, c) {
  1851.         var i;
  1852.         for (i = 0; i < 16; ++i) {
  1853.             if (needs_filter(p, a + i * b, 1, c)) {
  1854.                 do_filter2(p, a + i * b, 1)
  1855.             }
  1856.         }
  1857.     };
  1858.  
  1859.     function SimpleVFilter16i(p, a, b, c) {
  1860.         var k;
  1861.         for (k = 3; k > 0; --k) {
  1862.             a += 4 * b;
  1863.             SimpleVFilter16(p, a + 0, b, c)
  1864.         }
  1865.     };
  1866.  
  1867.     function SimpleHFilter16i(p, a, b, c) {
  1868.         var k;
  1869.         for (k = 3; k > 0; --k) {
  1870.             a += 4;
  1871.             SimpleHFilter16(p, a + 0, b, c)
  1872.         }
  1873.     };
  1874.  
  1875.     function FilterLoop26(p, a, b, c, d, e, f, g) {
  1876.         while (d-- > 0) {
  1877.             if (needs_filter2(p, a + 0, b, e, f)) {
  1878.                 if (hev(p, a + 0, b, g)) {
  1879.                     do_filter2(p, a + 0, b)
  1880.                 } else {
  1881.                     do_filter6(p, a + 0, b)
  1882.                 }
  1883.             }
  1884.             a += c
  1885.         }
  1886.     };
  1887.  
  1888.     function FilterLoop24(p, a, b, c, d, e, f, g) {
  1889.         while (d-- > 0) {
  1890.             if (needs_filter2(p, a + 0, b, e, f)) {
  1891.                 if (hev(p, a + 0, b, g)) {
  1892.                     do_filter2(p, a + 0, b)
  1893.                 } else {
  1894.                     do_filter4(p, a + 0, b)
  1895.                 }
  1896.             }
  1897.             a += c
  1898.         }
  1899.     };
  1900.  
  1901.     function VFilter16(p, a, b, c, d, e) {
  1902.         FilterLoop26(p, a + 0, b, 1, 16, c, d, e)
  1903.     }
  1904.     function HFilter16(p, a, b, c, d, e) {
  1905.         FilterLoop26(p, a + 0, 1, b, 16, c, d, e)
  1906.     };
  1907.  
  1908.     function VFilter16i(p, a, b, c, d, e) {
  1909.         var k;
  1910.         for (k = 3; k > 0; --k) {
  1911.             a += 4 * b;
  1912.             FilterLoop24(p, a + 0, b, 1, 16, c, d, e)
  1913.         }
  1914.     };
  1915.  
  1916.     function HFilter16i(p, a, b, c, d, e) {
  1917.         var k;
  1918.         for (k = 3; k > 0; --k) {
  1919.             a += 4;
  1920.             FilterLoop24(p, a + 0, 1, b, 16, c, d, e)
  1921.         }
  1922.     };
  1923.  
  1924.     function VFilter8(u, a, v, b, c, d, e, f) {
  1925.         FilterLoop26(u, a, c, 1, 8, d, e, f);
  1926.         FilterLoop26(v, b, c, 1, 8, d, e, f)
  1927.     };
  1928.  
  1929.     function HFilter8(u, a, v, b, c, d, e, f) {
  1930.         FilterLoop26(u, a, 1, c, 8, d, e, f);
  1931.         FilterLoop26(v, b, 1, c, 8, d, e, f)
  1932.     };
  1933.  
  1934.     function VFilter8i(u, a, v, b, c, d, e, f) {
  1935.         FilterLoop24(u, a + 4 * c, c, 1, 8, d, e, f);
  1936.         FilterLoop24(v, b + 4 * c, c, 1, 8, d, e, f)
  1937.     };
  1938.  
  1939.     function HFilter8i(u, a, v, b, c, d, e, f) {
  1940.         FilterLoop24(u, a + 4, 1, c, 8, d, e, f);
  1941.         FilterLoop24(v, b + 4, 1, c, 8, d, e, f)
  1942.     };
  1943.     var cv;
  1944.     var cw;
  1945.     var cx;
  1946.     var cy;
  1947.     var cz;
  1948.     var cA;
  1949.     var cB;
  1950.     var cC;
  1951.     var cD;
  1952.     var cE;
  1953.     var cF;
  1954.     var cG;
  1955.     var cH;
  1956.     var cI;
  1957.     var cJ;
  1958.     var cK;
  1959.  
  1960.     function VP8DspInit(a) {
  1961.         cv = TransformTwo;
  1962.         cw = TransformUV;
  1963.         cx = TransformDC;
  1964.         cy = TransformDCUV;
  1965.         cz = VFilter16;
  1966.         cA = HFilter16;
  1967.         cB = VFilter8;
  1968.         cC = HFilter8;
  1969.         cD = VFilter16i;
  1970.         cE = HFilter16i;
  1971.         cF = VFilter8i;
  1972.         cG = HFilter8i;
  1973.         cH = SimpleVFilter16;
  1974.         cI = SimpleHFilter16;
  1975.         cJ = SimpleVFilter16i;
  1976.         cK = SimpleHFilter16i
  1977.     };
  1978.     var cL = (32 - 1);
  1979.     var cM = 3;
  1980.     var cN = 1;
  1981.  
  1982.     function InitThreadContext(a) {
  1983.         a.cache_id_ = 0;
  1984.         if (a.use_threads_) {
  1985.             var b = a.worker_;
  1986.             if (!WebPWorkerReset(b)) {
  1987.                 return VP8SetError(a, VP8_STATUS_OUT_OF_MEMORY, "thread initialization failed.")
  1988.             }
  1989.             b.data1 = a;
  1990.             b.data2 = a.thread_ctx_.io_;
  1991.             b.hook = VP8FinishRow;
  1992.             a.num_caches_ = (a.filter_type_ > 0) ? cM : cM - 1
  1993.         } else {
  1994.             a.num_caches_ = cN
  1995.         }
  1996.         return 1
  1997.     }
  1998.     var cO = new Array(0, 2, 8);
  1999.  
  2000.     function AllocateMemory(a) {
  2001.         var b = a.num_caches_;
  2002.         var c = a.mb_w_;
  2003.         var d = 4 * c * sizeof(uint8_t);
  2004.         var e = (16 + 8 + 8) * c;
  2005.         var f = (c + 1) * sizeof(ce);
  2006.         var g = (a.filter_type_ > 0) ? c * (a.use_threads_ ? 2 : 1) * sizeof(cd) : 0;
  2007.         var h = bT * sizeof(a.yuv_b_);
  2008.         var i = 384 * sizeof(a.coeffs_);
  2009.         var j = (16 * b + parseInt(cO[a.filter_type_]) * 3 / 2);
  2010.         var k = e * j;
  2011.         var l = a.alpha_data_ ? (a.pic_hdr_.width_ * a.pic_hdr_.height_) : 0;
  2012.         var m = d + e + f + g + h + i + k + l + cL;
  2013.         var n = uint8_t,
  2014.             mem_offset = 0;
  2015.         if (m > a.mem_size_) {
  2016.             a.mem_ = 0;
  2017.             a.mem_size_ = 0;
  2018.             if (a.mem_ == null) {
  2019.                 return VP8SetError(a, 'VP8_STATUS_OUT_OF_MEMORY', "no memory during frame initialization.")
  2020.             }
  2021.             a.mem_size_ = m
  2022.         }
  2023.         n = a.mem_;
  2024.         a.intra_t_ = 205;
  2025.         a.y_t_ = memset(205, (16 * c) * sizeof(a.y_t_));
  2026.         a.u_t_ = memset(205, (8 * c) * sizeof(a.u_t_));
  2027.         a.v_t_ = memset(205, (8 * c) * sizeof(a.v_t_));
  2028.         a.f_info_ = g ? memset_wl(cd, g) : null;
  2029.         a.f_info_off = g ? 0 : null;
  2030.         a.thread_ctx_.id_ = 0;
  2031.         a.thread_ctx_.f_info_ = a.f_info_;
  2032.         if (a.use_threads_) {
  2033.             a.thread_ctx_.f_info_off += c
  2034.         }
  2035.         assert((h & cL) == 0);
  2036.         a.yuv_b_ = memset(205, h * sizeof(a.yuv_b_));
  2037.         a.coeffs_ = -12851;
  2038.         a.cache_y_stride_ = 16 * c;
  2039.         a.cache_uv_stride_ = 8 * c; {
  2040.             var o = cO[a.filter_type_];
  2041.             var p = o * a.cache_y_stride_;
  2042.             var q = (o / 2) * a.cache_uv_stride_;
  2043.             a.cache_y_ = Arr(k, 205);
  2044.             a.cache_y_off = +p;
  2045.             a.cache_u_ = a.cache_y_;
  2046.             a.cache_u_off = a.cache_y_off + 16 * b * a.cache_y_stride_ + q;
  2047.             a.cache_v_ = a.cache_u_;
  2048.             a.cache_v_off = a.cache_u_off + 8 * b * a.cache_uv_stride_ + q
  2049.         }
  2050.         a.alpha_plane_ = l ? Arr(l, uint8_t) : null;
  2051.         a.mb_info_ = memset_wl(ce, f);
  2052.         a.intra_t_ = memset(bQ, d);
  2053.         return 1
  2054.     }
  2055.     function InitIo(a, b) {
  2056.         b.width = a.pic_hdr_.width_;
  2057.         b.height = a.pic_hdr_.height_;
  2058.         b.mb_y = 0;
  2059.         b.y = a.cache_y_;
  2060.         b.y_off = a.cache_y_off;
  2061.         b.u = a.cache_u_;
  2062.         b.u_off = a.cache_u_off;
  2063.         b.v = a.cache_v_;
  2064.         b.v_off = a.cache_v_off;
  2065.         b.y_stride = a.cache_y_stride_;
  2066.         b.uv_stride = a.cache_uv_stride_;
  2067.         b.fancy_upsampling = 0;
  2068.         b.a = null;
  2069.         b.a_off = null
  2070.     }
  2071.     function VP8InitFrame(a, b) {
  2072.         if (!InitThreadContext(a)) return 0;
  2073.         if (!AllocateMemory(a)) return 0;
  2074.         InitIo(a, b);
  2075.         VP8DspInitTables();
  2076.         VP8DspInit();
  2077.         return 1
  2078.     }
  2079.     function hev_thresh_from_level(a, b) {
  2080.         if (b) {
  2081.             return (a >= 40) ? 2 : (a >= 15) ? 1 : 0
  2082.         } else {
  2083.             return (a >= 40) ? 3 : (a >= 20) ? 2 : (a >= 15) ? 1 : 0
  2084.         }
  2085.     }
  2086.     function DoFilter(a, b, c) {
  2087.         var d = a.thread_ctx_;
  2088.         var e = a.cache_y_stride_;
  2089.         var f = d.f_info_[1 + b];
  2090.         var g = a.cache_y_;
  2091.         var h = a.cache_y_off + d.id_ * 16 * e + b * 16;
  2092.         var i = f.f_level_;
  2093.         var j = f.f_ilevel_;
  2094.         var k = 2 * i + j;
  2095.         if (i == 0) {
  2096.             return
  2097.         }
  2098.         if (a.filter_type_ == 1) {
  2099.             if (b > 0) {
  2100.                 cI(g, h, e, k + 4)
  2101.             }
  2102.             if (f.f_inner_) {
  2103.                 cK(g, h, e, k)
  2104.             }
  2105.             if (c > 0) {
  2106.                 cH(g, h, e, k + 4)
  2107.             }
  2108.             if (f.f_inner_) {
  2109.                 cJ(g, h, e, k)
  2110.             }
  2111.         } else {
  2112.             var l = a.cache_uv_stride_;
  2113.             var m = a.cache_u_;
  2114.             var n = a.cache_u_off + d.id_ * 8 * l + b * 8;
  2115.             var o = a.cache_v_;
  2116.             var p = a.cache_v_off + d.id_ * 8 * l + b * 8;
  2117.             var q = hev_thresh_from_level(i, a.frm_hdr_.key_frame_);
  2118.             if (b > 0) {
  2119.                 cA(g, h, e, k + 4, j, q);
  2120.                 cC(m, n, o, p, l, k + 4, j, q)
  2121.             }
  2122.             if (f.f_inner_) {
  2123.                 cE(g, h, e, k, j, q);
  2124.                 cG(m, n, o, p, l, k, j, q)
  2125.             }
  2126.             if (c > 0) {
  2127.                 cz(g, h, e, k + 4, j, q);
  2128.                 cB(m, n, o, p, l, k + 4, j, q)
  2129.             }
  2130.             if (f.f_inner_) {
  2131.                 cD(g, h, e, k, j, q);
  2132.                 cF(m, n, o, p, l, k, j, q)
  2133.             }
  2134.         }
  2135.     }
  2136.     function FilterRow(a) {
  2137.         var b = int;
  2138.         var c = a.thread_ctx_.mb_y_;
  2139.         assert(a.thread_ctx_.filter_row_);
  2140.         for (b = a.tl_mb_x_; b < a.br_mb_x_; ++b) {
  2141.             DoFilter(a, b, c)
  2142.         }
  2143.     }
  2144.     function VP8StoreBlock(a) {
  2145.         if (a.filter_type_ > 0) {
  2146.             var b = a.f_info_[1 + a.mb_x_];
  2147.             var c = a.mb_info_[1 + a.mb_x_].skip_;
  2148.             var d = a.filter_levels_[a.segment_];
  2149.             if (a.filter_hdr_.use_lf_delta_) {
  2150.                 d += a.filter_hdr_.ref_lf_delta_[0];
  2151.                 if (a.is_i4x4_) {
  2152.                     d += a.filter_hdr_.mode_lf_delta_[0]
  2153.                 }
  2154.             }
  2155.             d = (d < 0) ? 0 : (d > 63) ? 63 : d;
  2156.             b.f_level_ = d;
  2157.             if (a.filter_hdr_.sharpness_ > 0) {
  2158.                 if (a.filter_hdr_.sharpness_ > 4) {
  2159.                     d >>= 2
  2160.                 } else {
  2161.                     d >>= 1
  2162.                 }
  2163.                 if (d > 9 - a.filter_hdr_.sharpness_) {
  2164.                     d = 9 - a.filter_hdr_.sharpness_
  2165.                 }
  2166.             }
  2167.             b.f_ilevel_ = (d < 1) ? 1 : d;
  2168.             b.f_inner_ = (!c || a.is_i4x4_) + 0
  2169.         } {
  2170.             var y;
  2171.             var e = a.cache_id_ * 16 * a.cache_y_stride_;
  2172.             var f = a.cache_id_ * 8 * a.cache_uv_stride_;
  2173.             var g = a.cache_y_;
  2174.             var h = a.cache_y_off + a.mb_x_ * 16 + e;
  2175.             var i = a.cache_u_;
  2176.             var j = a.cache_u_off + a.mb_x_ * 8 + f;
  2177.             var k = a.cache_v_;
  2178.             var l = a.cache_v_off + a.mb_x_ * 8 + f;
  2179.             for (y = 0; y < 16; ++y) {
  2180.                 memcpy(g, h + y * a.cache_y_stride_, a.yuv_b_, +bV + y * bS, 16)
  2181.             }
  2182.             for (y = 0; y < 8; ++y) {
  2183.                 memcpy(i, j + y * a.cache_uv_stride_, a.yuv_b_, +bW + y * bS, 8);
  2184.                 memcpy(k, l + y * a.cache_uv_stride_, a.yuv_b_, +bX + y * bS, 8)
  2185.             }
  2186.         }
  2187.     }
  2188.     function MACROBLOCK_VPOS(a) {
  2189.         return ((a) * 16)
  2190.     }
  2191.     function VP8FinishRow(a, b) {
  2192.         var c = 1;
  2193.         var d = a.thread_ctx_;
  2194.         var e = cO[a.filter_type_];
  2195.         var f = e * a.cache_y_stride_;
  2196.         var g = parseInt(e / 2) * a.cache_uv_stride_;
  2197.         var h = d.id_ * 16 * a.cache_y_stride_;
  2198.         var i = d.id_ * 8 * a.cache_uv_stride_;
  2199.         var j = a.cache_y_;
  2200.         var k = a.cache_y_off - f + h;
  2201.         var l = a.cache_u_;
  2202.         var m = a.cache_u_off - g + i;
  2203.         var n = a.cache_v_;
  2204.         var o = a.cache_v_off - g + i;
  2205.         var p = (d.mb_y_ == 0);
  2206.         var q = (d.mb_y_ >= a.mb_h_ - 1) + 0;
  2207.         var r = MACROBLOCK_VPOS(d.mb_y_);
  2208.         var s = MACROBLOCK_VPOS(d.mb_y_ + 1);
  2209.         if (d.filter_row_) {
  2210.             FilterRow(a)
  2211.         }
  2212.         if (b.put) {
  2213.             if (!p) {
  2214.                 r -= e;
  2215.                 b.y = j;
  2216.                 b.y_off = k;
  2217.                 b.u = l;
  2218.                 b.u_off = m;
  2219.                 b.v = n;
  2220.                 b.v_off = o
  2221.             } else {
  2222.                 b.y = a.cache_y_;
  2223.                 b.y_off = a.cache_y_off + h;
  2224.                 b.u = a.cache_u_;
  2225.                 b.u_off = a.cache_u_off + i;
  2226.                 b.v = a.cache_v_;
  2227.                 b.v_off = a.cache_v_off + i
  2228.             }
  2229.             if (!q) {
  2230.                 s -= e
  2231.             }
  2232.             if (s > b.crop_bottom) {
  2233.                 s = b.crop_bottom
  2234.             }
  2235.             if (a.alpha_data_) {
  2236.                 if (r == 0) {
  2237.                     b.a = VP8DecompressAlphaRows(a, r, s - r);
  2238.                     b.a_off = 0
  2239.                 } else {
  2240.                     b.a_off = VP8DecompressAlphaRows(a, r, s - r)
  2241.                 }
  2242.                 if (b.a == null) {
  2243.                     return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "Could not decode alpha data.")
  2244.                 }
  2245.             }
  2246.             if (r < b.crop_top) {
  2247.                 var t = b.crop_top - r;
  2248.                 r = b.crop_top;
  2249.                 assert(!(t & 1));
  2250.                 b.y_off += a.cache_y_stride_ * t;
  2251.                 b.u_off += a.cache_uv_stride_ * (t >> 1);
  2252.                 b.v_off += a.cache_uv_stride_ * (t >> 1);
  2253.                 if (b.a) {
  2254.                     b.a_off += b.width * t
  2255.                 }
  2256.             }
  2257.             if (r < s) {
  2258.                 b.y_off += b.crop_left;
  2259.                 b.u_off += b.crop_left >> 1;
  2260.                 b.v_off += b.crop_left >> 1;
  2261.                 if (b.a) {
  2262.                     b.a_off += b.crop_left
  2263.                 }
  2264.                 b.mb_y = r - b.crop_top;
  2265.                 b.mb_w = b.crop_right - b.crop_left;
  2266.                 b.mb_h = s - r;
  2267.                 c = b.put(b)
  2268.             }
  2269.         }
  2270.         if (d.id_ + 1 == a.num_caches_) {
  2271.             if (!q) {
  2272.                 memcpy(a.cache_y_, a.cache_y_off - f, j, k + 16 * a.cache_y_stride_, f);
  2273.                 memcpy(a.cache_u_, a.cache_u_off - g, l, m + 8 * a.cache_uv_stride_, g);
  2274.                 memcpy(a.cache_v_, a.cache_v_off - g, n, o + 8 * a.cache_uv_stride_, g)
  2275.             }
  2276.         }
  2277.         return c
  2278.     }
  2279.     function VP8ProcessRow(a, b) {
  2280.         var c = 1;
  2281.         var d = a.thread_ctx_;
  2282.         if (!a.use_threads_) {
  2283.             d.mb_y_ = a.mb_y_;
  2284.             d.filter_row_ = a.filter_row_;
  2285.             c = VP8FinishRow(a, b)
  2286.         } else {
  2287.             var e = a.worker_;
  2288.             c &= WebPWorkerSync(e);
  2289.             assert(e.status_ == OK);
  2290.             if (c) {
  2291.                 d.io_ = b;
  2292.                 d.id_ = a.cache_id_;
  2293.                 d.mb_y_ = a.mb_y_;
  2294.                 d.filter_row_ = a.filter_row_;
  2295.                 if (d.filter_row_) {
  2296.                     var f = d.f_info_;
  2297.                     d.f_info_ = a.f_info_;
  2298.                     a.f_info_ = f
  2299.                 }
  2300.                 WebPWorkerLaunch(e);
  2301.                 if (++a.cache_id_ == a.num_caches_) {
  2302.                     a.cache_id_ = 0
  2303.                 }
  2304.             }
  2305.         }
  2306.         return c
  2307.     }
  2308.     function VP8EnterCritical(a, b) {
  2309.         if (b.setup && !b.setup(b)) {
  2310.             VP8SetError(a, VP8_STATUS_USER_ABORT, "Frame setup failed");
  2311.             return a.status_
  2312.         }
  2313.         if (b.bypass_filtering) {
  2314.             a.filter_type_ = 0
  2315.         } {
  2316.             var c = cO[a.filter_type_];
  2317.             if (a.filter_type_ == 2) {
  2318.                 a.tl_mb_x_ = 0;
  2319.                 a.tl_mb_y_ = 0
  2320.             } else {
  2321.                 a.tl_mb_y_ = b.crop_top >> 4;
  2322.                 a.tl_mb_x_ = b.crop_left >> 4
  2323.             }
  2324.             a.br_mb_y_ = (b.crop_bottom + 15 + c) >> 4;
  2325.             a.br_mb_x_ = (b.crop_right + 15 + c) >> 4;
  2326.             if (a.br_mb_x_ > a.mb_w_) {
  2327.                 a.br_mb_x_ = a.mb_w_
  2328.             }
  2329.             if (a.br_mb_y_ > a.mb_h_) {
  2330.                 a.br_mb_y_ = a.mb_h_
  2331.             }
  2332.         }
  2333.         return bE
  2334.     }
  2335.     function VP8ExitCritical(a, b) {
  2336.         var c = 1;
  2337.         if (a.use_threads_) {
  2338.             c = WebPWorkerSync(a.worker_)
  2339.         }
  2340.         if (b.teardown) {
  2341.             b.teardown(b)
  2342.         }
  2343.         return c
  2344.     }
  2345.     var cP = new Array(0 + 0 * bS, 4 + 0 * bS, 8 + 0 * bS, 12 + 0 * bS, 0 + 4 * bS, 4 + 4 * bS, 8 + 4 * bS, 12 + 4 * bS, 0 + 8 * bS, 4 + 8 * bS, 8 + 8 * bS, 12 + 8 * bS, 0 + 12 * bS, 4 + 12 * bS, 8 + 12 * bS, 12 + 12 * bS);
  2346.  
  2347.     function CheckMode(a, b) {
  2348.         if (b == bQ) {
  2349.             if (a.mb_x_ == 0) {
  2350.                 return (a.mb_y_ == 0) ? B_DC_PRED_NOTOPLEFT : B_DC_PRED_NOLEFT
  2351.             } else {
  2352.                 return (a.mb_y_ == 0) ? B_DC_PRED_NOTOP : bQ
  2353.             }
  2354.         }
  2355.         return b
  2356.     }
  2357.     function Copy32b(a, b, c, d) {
  2358.         for (i = 0; i < 4; ++i) a[b + i] = c[d + i]
  2359.     }
  2360.     function VP8ReconstructBlock(a) {
  2361.         var b = a.yuv_b_;
  2362.         var c = bV;
  2363.         var d = a.yuv_b_;
  2364.         var e = bW;
  2365.         var f = a.yuv_b_;
  2366.         var g = bX;
  2367.         if (a.mb_x_ > 0) {
  2368.             var j;
  2369.             for (j = -1; j < 16; ++j) {
  2370.                 Copy32b(b, (c + j * bS - 4), b, (c + j * bS + 12))
  2371.             }
  2372.             for (j = -1; j < 8; ++j) {
  2373.                 Copy32b(d, (e + j * bS - 4), d, (e + j * bS + 4));
  2374.                 Copy32b(f, (g + j * bS - 4), f, (g + j * bS + 4))
  2375.             }
  2376.         } else {
  2377.             var j;
  2378.             for (j = 0; j < 16; ++j) {
  2379.                 b[c + j * bS - 1] = 129
  2380.             }
  2381.             for (j = 0; j < 8; ++j) {
  2382.                 d[e + j * bS - 1] = 129;
  2383.                 f[g + j * bS - 1] = 129
  2384.             }
  2385.             if (a.mb_y_ > 0) {
  2386.                 b[c - 1 - bS] = d[e - 1 - bS] = f[g - 1 - bS] = 129
  2387.             }
  2388.         } {
  2389.             var h = a.y_t_;
  2390.             var k = +a.mb_x_ * 16;
  2391.             var l = a.u_t_;
  2392.             var m = +a.mb_x_ * 8;
  2393.             var o = a.v_t_;
  2394.             var p = +a.mb_x_ * 8;
  2395.             var q = a.coeffs_;
  2396.             var n;
  2397.             if (a.mb_y_ > 0) {
  2398.                 memcpy(b, c - bS, h, k, 16);
  2399.                 memcpy(d, e - bS, l, m, 8);
  2400.                 memcpy(f, g - bS, o, p, 8)
  2401.             } else if (a.mb_x_ == 0) {
  2402.                 for (i = 0; i < (16 + 4 + 1); ++i) b[c - bS - 1 + i] = 127;
  2403.                 for (i = 0; i < (8 + 1); ++i) d[e - bS - 1 + i] = 127;
  2404.                 for (i = 0; i < (8 + 1); ++i) f[g - bS - 1 + i] = 127
  2405.             }
  2406.             if (a.is_i4x4_) {
  2407.                 var r = b;
  2408.                 var s = c - bS + 16;
  2409.                 if (a.mb_y_ > 0) {
  2410.                     if (a.mb_x_ >= a.mb_w_ - 1) {
  2411.                         r[s + 0] = r[s + 1] = r[s + 2] = r[s + 3] = h[k + 15]
  2412.                     } else {
  2413.                         memcpy(r, s + 0, h, k + 16, 4)
  2414.                     }
  2415.                 }
  2416.                 for (ii = 0; ii < 4; ++ii) r[ii + s + bS * 4] = r[ii + s + 1 * bS * 4] = r[ii + s + 2 * bS * 4] = r[ii + s + 3 * bS * 4] = r[ii + s + 0 * 4];
  2417.                 for (n = 0; n < 16; n++) {
  2418.                     var t = b;
  2419.                     var u = c + cP[n];
  2420.                     cs[a.imodes_[n]](t, u);
  2421.                     if (a.non_zero_ac_ & (1 << n)) {
  2422.                         cv(q, +n * 16, t, u, 0)
  2423.                     } else if (a.non_zero_ & (1 << n)) {
  2424.                         cx(q, +n * 16, t, u)
  2425.                     }
  2426.                 }
  2427.             } else {
  2428.                 var v = CheckMode(a, a.imodes_[0]);
  2429.                 ct[v](b, c);
  2430.                 if (a.non_zero_) {
  2431.                     for (n = 0; n < 16; n++) {
  2432.                         var t = b;
  2433.                         var u = c + cP[n];
  2434.                         if (a.non_zero_ac_ & (1 << n)) {
  2435.                             cv(q, +n * 16, t, u, 0)
  2436.                         } else if (a.non_zero_ & (1 << n)) {
  2437.                             cx(q, +n * 16, t, u)
  2438.                         }
  2439.                     }
  2440.                 }
  2441.             } {
  2442.                 var v = CheckMode(a, a.uvmode_);
  2443.                 cu[v](d, e);
  2444.                 cu[v](f, g);
  2445.                 if (a.non_zero_ & 0x0f0000) {
  2446.                     var w = a.coeffs_;
  2447.                     var x = 16 * 16;
  2448.                     if (a.non_zero_ac_ & 0x0f0000) {
  2449.                         cw(w, x, d, e)
  2450.                     } else {
  2451.                         cy(w, x, d, e)
  2452.                     }
  2453.                 }
  2454.                 if (a.non_zero_ & 0xf00000) {
  2455.                     var y = a.coeffs_;
  2456.                     var x = 20 * 16;
  2457.                     if (a.non_zero_ac_ & 0xf00000) {
  2458.                         cw(y, x, f, g)
  2459.                     } else {
  2460.                         cy(y, x, f, g)
  2461.                     }
  2462.                 }
  2463.                 if (a.mb_y_ < (a.mb_h_ - 1)) {
  2464.                     memcpy(h, k, b, c + 15 * bS, 16);
  2465.                     memcpy(l, m, d, e + 7 * bS, 8);
  2466.                     memcpy(o, p, f, g + 7 * bS, 8)
  2467.                 }
  2468.             }
  2469.         }
  2470.     }
  2471.     function clip(v, M) {
  2472.         return v < 0 ? 0 : v > M ? M : v
  2473.     }
  2474.     var cQ = new Array(4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157);
  2475.     var cR = new Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284);
  2476.  
  2477.     function VP8ParseQuant(a) {
  2478.         var b = a.br_;
  2479.         var c = VP8GetValue(b, 7);
  2480.         var d = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  2481.         var e = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  2482.         var f = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  2483.         var g = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  2484.         var h = VP8Get(b) ? VP8GetSignedValue(b, 4) : 0;
  2485.         var j = a.segment_hdr_;
  2486.         var i = int;
  2487.         for (i = 0; i < NUM_MB_SEGMENTS; ++i) {
  2488.             var q = int;
  2489.             if (j.use_segment_) {
  2490.                 q = j.quantizer_[i];
  2491.                 if (!j.absolute_delta_) {
  2492.                     q += c
  2493.                 }
  2494.             } else {
  2495.                 if (i > 0) {
  2496.                     a.dqm_[i] = a.dqm_[0];
  2497.                     continue
  2498.                 } else {
  2499.                     q = c
  2500.                 }
  2501.             } {
  2502.                 var m = a.dqm_[i];
  2503.                 m.y1_mat_[0] = cQ[clip(q + d, 127)];
  2504.                 m.y1_mat_[1] = cR[clip(q + 0, 127)];
  2505.                 m.y2_mat_[0] = cQ[clip(q + e, 127)] * 2;
  2506.                 m.y2_mat_[1] = parseInt(cR[clip(q + f, 127)] * 155 / 100);
  2507.                 if (m.y2_mat_[1] < 8) m.y2_mat_[1] = 8;
  2508.                 m.uv_mat_[0] = cQ[clip(q + g, 117)];
  2509.                 m.uv_mat_[1] = cR[clip(q + h, 127)]
  2510.             }
  2511.         }
  2512.     }
  2513.     var cS = new Array(-bQ, 1, -B_TM_PRED, 2, -B_VE_PRED, 3, 4, 6, -B_HE_PRED, 5, -B_RD_PRED, -B_VR_PRED, -B_LD_PRED, 7, -B_VL_PRED, 8, -B_HD_PRED, -B_HU_PRED);
  2514.     var cT = new Array(new Array(new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128), new Array(189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128), new Array(106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128)), new Array(new Array(1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128), new Array(181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128), new Array(78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128)), new Array(new Array(1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128), new Array(184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128), new Array(77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128)), new Array(new Array(1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128), new Array(170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128), new Array(37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128)), new Array(new Array(1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128), new Array(207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128), new Array(102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128)), new Array(new Array(1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128), new Array(177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128), new Array(80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62), new Array(131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1), new Array(68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128)), new Array(new Array(1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128), new Array(184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128), new Array(81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128)), new Array(new Array(1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128), new Array(99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128), new Array(23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128)), new Array(new Array(1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128), new Array(109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128), new Array(44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128)), new Array(new Array(1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128), new Array(94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128), new Array(22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128)), new Array(new Array(1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128), new Array(124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128), new Array(35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128)), new Array(new Array(1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128), new Array(121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128), new Array(45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128)), new Array(new Array(1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128), new Array(203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128))), new Array(new Array(new Array(253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128), new Array(175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128), new Array(73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128)), new Array(new Array(1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128), new Array(239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128), new Array(155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128)), new Array(new Array(1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128), new Array(201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128), new Array(69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128)), new Array(new Array(1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128), new Array(223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128), new Array(141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128), new Array(190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128), new Array(149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128), new Array(213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128), new Array(55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128)), new Array(new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128), new Array(128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128))), new Array(new Array(new Array(202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255), new Array(126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128), new Array(61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128)), new Array(new Array(1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128), new Array(166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128), new Array(39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128)), new Array(new Array(1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128), new Array(124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128), new Array(24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128)), new Array(new Array(1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128), new Array(149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128), new Array(28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128)), new Array(new Array(1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128), new Array(123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128), new Array(20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128)), new Array(new Array(1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128), new Array(168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128), new Array(47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128)), new Array(new Array(1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128), new Array(141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128), new Array(42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128)), new Array(new Array(1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128), new Array(238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128))));
  2515.     var cU = new Array(new Array(new Array(231, 120, 48, 89, 115, 113, 120, 152, 112), new Array(152, 179, 64, 126, 170, 118, 46, 70, 95), new Array(175, 69, 143, 80, 85, 82, 72, 155, 103), new Array(56, 58, 10, 171, 218, 189, 17, 13, 152), new Array(114, 26, 17, 163, 44, 195, 21, 10, 173), new Array(121, 24, 80, 195, 26, 62, 44, 64, 85), new Array(144, 71, 10, 38, 171, 213, 144, 34, 26), new Array(170, 46, 55, 19, 136, 160, 33, 206, 71), new Array(63, 20, 8, 114, 114, 208, 12, 9, 226), new Array(81, 40, 11, 96, 182, 84, 29, 16, 36)), new Array(new Array(134, 183, 89, 137, 98, 101, 106, 165, 148), new Array(72, 187, 100, 130, 157, 111, 32, 75, 80), new Array(66, 102, 167, 99, 74, 62, 40, 234, 128), new Array(41, 53, 9, 178, 241, 141, 26, 8, 107), new Array(74, 43, 26, 146, 73, 166, 49, 23, 157), new Array(65, 38, 105, 160, 51, 52, 31, 115, 128), new Array(104, 79, 12, 27, 217, 255, 87, 17, 7), new Array(87, 68, 71, 44, 114, 51, 15, 186, 23), new Array(47, 41, 14, 110, 182, 183, 21, 17, 194), new Array(66, 45, 25, 102, 197, 189, 23, 18, 22)), new Array(new Array(88, 88, 147, 150, 42, 46, 45, 196, 205), new Array(43, 97, 183, 117, 85, 38, 35, 179, 61), new Array(39, 53, 200, 87, 26, 21, 43, 232, 171), new Array(56, 34, 51, 104, 114, 102, 29, 93, 77), new Array(39, 28, 85, 171, 58, 165, 90, 98, 64), new Array(34, 22, 116, 206, 23, 34, 43, 166, 73), new Array(107, 54, 32, 26, 51, 1, 81, 43, 31), new Array(68, 25, 106, 22, 64, 171, 36, 225, 114), new Array(34, 19, 21, 102, 132, 188, 16, 76, 124), new Array(62, 18, 78, 95, 85, 57, 50, 48, 51)), new Array(new Array(193, 101, 35, 159, 215, 111, 89, 46, 111), new Array(60, 148, 31, 172, 219, 228, 21, 18, 111), new Array(112, 113, 77, 85, 179, 255, 38, 120, 114), new Array(40, 42, 1, 196, 245, 209, 10, 25, 109), new Array(88, 43, 29, 140, 166, 213, 37, 43, 154), new Array(61, 63, 30, 155, 67, 45, 68, 1, 209), new Array(100, 80, 8, 43, 154, 1, 51, 26, 71), new Array(142, 78, 78, 16, 255, 128, 34, 197, 171), new Array(41, 40, 5, 102, 211, 183, 4, 1, 221), new Array(51, 50, 17, 168, 209, 192, 23, 25, 82)), new Array(new Array(138, 31, 36, 171, 27, 166, 38, 44, 229), new Array(67, 87, 58, 169, 82, 115, 26, 59, 179), new Array(63, 59, 90, 180, 59, 166, 93, 73, 154), new Array(40, 40, 21, 116, 143, 209, 34, 39, 175), new Array(47, 15, 16, 183, 34, 223, 49, 45, 183), new Array(46, 17, 33, 183, 6, 98, 15, 32, 183), new Array(57, 46, 22, 24, 128, 1, 54, 17, 37), new Array(65, 32, 73, 115, 28, 128, 23, 128, 205), new Array(40, 3, 9, 115, 51, 192, 18, 6, 223), new Array(87, 37, 9, 115, 59, 77, 64, 21, 47)), new Array(new Array(104, 55, 44, 218, 9, 54, 53, 130, 226), new Array(64, 90, 70, 205, 40, 41, 23, 26, 57), new Array(54, 57, 112, 184, 5, 41, 38, 166, 213), new Array(30, 34, 26, 133, 152, 116, 10, 32, 134), new Array(39, 19, 53, 221, 26, 114, 32, 73, 255), new Array(31, 9, 65, 234, 2, 15, 1, 118, 73), new Array(75, 32, 12, 51, 192, 255, 160, 43, 51), new Array(88, 31, 35, 67, 102, 85, 55, 186, 85), new Array(56, 21, 23, 111, 59, 205, 45, 37, 192), new Array(55, 38, 70, 124, 73, 102, 1, 34, 98)), new Array(new Array(125, 98, 42, 88, 104, 85, 117, 175, 82), new Array(95, 84, 53, 89, 128, 100, 113, 101, 45), new Array(75, 79, 123, 47, 51, 128, 81, 171, 1), new Array(57, 17, 5, 71, 102, 57, 53, 41, 49), new Array(38, 33, 13, 121, 57, 73, 26, 1, 85), new Array(41, 10, 67, 138, 77, 110, 90, 47, 114), new Array(115, 21, 2, 10, 102, 255, 166, 23, 6), new Array(101, 29, 16, 10, 85, 128, 101, 196, 26), new Array(57, 18, 10, 102, 102, 213, 34, 20, 43), new Array(117, 20, 15, 36, 163, 128, 68, 1, 26)), new Array(new Array(102, 61, 71, 37, 34, 53, 31, 243, 192), new Array(69, 60, 71, 38, 73, 119, 28, 222, 37), new Array(68, 45, 128, 34, 1, 47, 11, 245, 171), new Array(62, 17, 19, 70, 146, 85, 55, 62, 70), new Array(37, 43, 37, 154, 100, 163, 85, 160, 1), new Array(63, 9, 92, 136, 28, 64, 32, 201, 85), new Array(75, 15, 9, 9, 64, 255, 184, 119, 16), new Array(86, 6, 28, 5, 64, 255, 25, 248, 1), new Array(56, 8, 17, 132, 137, 255, 55, 116, 128), new Array(58, 15, 20, 82, 135, 57, 26, 121, 40)), new Array(new Array(164, 50, 31, 137, 154, 133, 25, 35, 218), new Array(51, 103, 44, 131, 131, 123, 31, 6, 158), new Array(86, 40, 64, 135, 148, 224, 45, 183, 128), new Array(22, 26, 17, 131, 240, 154, 14, 1, 209), new Array(45, 16, 21, 91, 64, 222, 7, 1, 197), new Array(56, 21, 39, 155, 60, 138, 23, 102, 213), new Array(83, 12, 13, 54, 192, 255, 68, 47, 28), new Array(85, 26, 85, 85, 128, 128, 32, 146, 171), new Array(18, 11, 7, 63, 144, 171, 4, 4, 246), new Array(35, 27, 10, 146, 174, 171, 12, 26, 128)), new Array(new Array(190, 80, 35, 99, 180, 80, 126, 54, 45), new Array(85, 126, 47, 87, 176, 51, 41, 20, 32), new Array(101, 75, 128, 139, 118, 146, 116, 128, 85), new Array(56, 41, 15, 176, 236, 85, 37, 9, 62), new Array(71, 30, 17, 119, 118, 255, 17, 18, 138), new Array(101, 38, 60, 138, 55, 70, 43, 26, 142), new Array(146, 36, 19, 30, 171, 255, 97, 27, 20), new Array(138, 45, 61, 62, 219, 1, 81, 188, 64), new Array(32, 41, 20, 117, 151, 142, 20, 21, 163), new Array(112, 19, 12, 61, 195, 128, 48, 4, 24)));
  2516.  
  2517.     function VP8ResetProba(a) {
  2518.         for (i = 0; i < a.segments_.length; ++i) a.segments_[i] = 255;
  2519.         a.coeffs_ = newObjectIt(cT)
  2520.     }
  2521.     function VP8ParseIntraMode(a, b) {
  2522.         var c = b.intra_t_;
  2523.         c[c.length - 1] = 0 + 4 * b.mb_x_;
  2524.         var d = b.intra_l_;
  2525.         b.is_i4x4_ = !VP8GetBit(a, 145);
  2526.         if (!b.is_i4x4_) {
  2527.             var e = VP8GetBit(a, 156) ? (VP8GetBit(a, 128) ? TM_PRED : H_PRED) : (VP8GetBit(a, 163) ? V_PRED : DC_PRED);
  2528.             b.imodes_[0] = e;
  2529.             for (i = 0; i < 4; ++i) c[i + c[c.length - 1]] = e;
  2530.             for (i = 0; i < 4; ++i) d[i] = e
  2531.         } else {
  2532.             var f = b.imodes_;
  2533.             var g = 0;
  2534.             var y;
  2535.             for (y = 0; y < 4; ++y) {
  2536.                 var e = d[y];
  2537.                 var x;
  2538.                 for (x = 0; x < 4; ++x) {
  2539.                     var h = cU[c[c[c.length - 1] + x]][e];
  2540.                     var i = 0;
  2541.                     do {
  2542.                         i = cS[2 * i + VP8GetBit(a, h[i])]
  2543.                     } while (i > 0);
  2544.                     e = -i;
  2545.                     c[c[c.length - 1] + x] = e;
  2546.                     f[g] = e;
  2547.                     g++
  2548.                 }
  2549.                 d[y] = e
  2550.             }
  2551.         }
  2552.         b.uvmode_ = !VP8GetBit(a, 142) ? DC_PRED : !VP8GetBit(a, 114) ? V_PRED : VP8GetBit(a, 183) ? TM_PRED : H_PRED
  2553.     }
  2554.     var cV = new Array(new Array(new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255), new Array(250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255), new Array(234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255), new Array(234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255), new Array(251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255)), new Array(new Array(255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))), new Array(new Array(new Array(248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255), new Array(248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255), new Array(250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255)), new Array(new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255), new Array(255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255))));
  2555.  
  2556.     function VP8ParseProba(a, d) {
  2557.         var e = d.proba_;
  2558.         var t, b, c, p;
  2559.         for (t = 0; t < NUM_TYPES; ++t) {
  2560.             for (b = 0; b < NUM_BANDS; ++b) {
  2561.                 for (c = 0; c < NUM_CTX; ++c) {
  2562.                     for (p = 0; p < NUM_PROBAS; ++p) {
  2563.                         if (VP8GetBit(a, cV[t][b][c][p])) {
  2564.                             e.coeffs_[t][b][c][p] = VP8GetValue(a, 8)
  2565.                         }
  2566.                     }
  2567.                 }
  2568.             }
  2569.         }
  2570.         d.use_skip_proba_ = VP8Get(a);
  2571.         if (d.use_skip_proba_) {
  2572.             d.skip_p_ = VP8GetValue(a, 8)
  2573.         }
  2574.     }
  2575.     var cW = 12;
  2576.     var cX = 20;
  2577.     this.WebPGetDecoderVersion = function (a) {
  2578.         return (bN << 16) | (bO << 8) | bP
  2579.     };
  2580.  
  2581.     function SetOk(a) {
  2582.         a.status_ = 'VP8_STATUS_OK';
  2583.         a.error_msg_ = "OK"
  2584.     }
  2585.     var cY;
  2586.  
  2587.     function VP8InitIoInternal(a, b) {
  2588.         if (b != bz) {
  2589.             alert2('mismatch error');
  2590.             return 0
  2591.         }
  2592.         if (a) {}
  2593.         return 1
  2594.     }
  2595.     var cZ;
  2596.  
  2597.     function VP8New(a) {
  2598.         var b = newObjectIt(ci);
  2599.         if (b) {
  2600.             SetOk(b);
  2601.             b.ready_ = 0
  2602.         }
  2603.         return b
  2604.     }
  2605.     function VP8Delete(a) {
  2606.         if (a) {
  2607.             VP8Clear(a);
  2608.             a = 0
  2609.         }
  2610.     }
  2611.     function VP8SetError(a, b, c) {
  2612.         a.status_ = b;
  2613.         a.error_msg_ = c;
  2614.         a.ready_ = 0;
  2615.         alert2(b + ': ' + c);
  2616.         return 0
  2617.     }
  2618.     function get_le32(a, b) {
  2619.         return a[b + 0] | (a[b + 1] << 8) | (a[b + 2] << 16) | (a[b + 3] << 24)
  2620.     }
  2621.     function VP8CheckAndSkipHeader(a, b, c, d, e, f) {
  2622.         if (!a || !c || !d || !e) {
  2623.             return 0
  2624.         }
  2625.         if (c.value >= 8) {
  2626.             if (!memcmp(a, b.value, "VP8 ", 4)) {
  2627.                 d.value = 1;
  2628.                 e.value = get_le32(a, b.value + 4);
  2629.                 if ((f.value >= cW) && (e.value > f.value - cW)) {
  2630.                     return 0
  2631.                 }
  2632.                 b.value += 8;
  2633.                 c.value -= 8
  2634.             } else {
  2635.                 d.value = 0;
  2636.                 e.value = 0
  2637.             }
  2638.         } else {
  2639.             d.value = -1;
  2640.             e.value = 0
  2641.         }
  2642.         return 1
  2643.     }
  2644.     function VP8GetInfo(a, b, c, d, e, f, g) {
  2645.         if (c.value < 10) {
  2646.             return 0
  2647.         }
  2648.         if (a[b.value + 3] != 0x9d || a[b.value + 4] != 0x01 || a[b.value + 5] != 0x2a) {
  2649.             return 0
  2650.         } else {
  2651.             var i = a[b.value + 0] | (a[b.value + 1] << 8) | (a[b.value + 2] << 16);
  2652.             var j = !(i & 1) + 0;
  2653.             var w = ((a[b.value + 7] << 8) | a[b.value + 6]) & 0x3fff;
  2654.             var h = ((a[b.value + 9] << 8) | a[b.value + 8]) & 0x3fff;
  2655.             if (g) {
  2656.                 if (c.value < 11) return 0;
  2657.                 g.value = !! (a[b.value + 10] & 0x80)
  2658.             }
  2659.             if (!j) {
  2660.                 return 0
  2661.             }
  2662.             if (((i >> 1) & 7) > 3) {
  2663.                 return 0
  2664.             }
  2665.             if (!((i >> 4) & 1)) {
  2666.                 return 0
  2667.             }
  2668.             if (((i >> 5)) >= d) {
  2669.                 return 0
  2670.             }
  2671.             if (e) {
  2672.                 e.value = w
  2673.             }
  2674.             if (f) {
  2675.                 f.value = h
  2676.             }
  2677.             return 1
  2678.         }
  2679.     }
  2680.     function VP8XGetInfo(a, b, c, d, e, f, g) {
  2681.         if (!a || !c || !d) {
  2682.             return 0
  2683.         }
  2684.         if (c.value >= cX) {
  2685.             if (!memcmp(a, b.value, "VP8X", 4)) {
  2686.                 var h = get_le32(a, b.value + 4);
  2687.                 d.value = 1;
  2688.                 if (h.value != (cX - 8)) {
  2689.                     return 0
  2690.                 }
  2691.                 if (g) {
  2692.                     g.value = get_le32(a, b.value + 8)
  2693.                 }
  2694.                 if (e) {
  2695.                     e.value = get_le32(a, b.value + 12)
  2696.                 }
  2697.                 if (f) {
  2698.                     f.value = get_le32(a, b.value + 16)
  2699.                 }
  2700.                 b.value += cX;
  2701.                 c.value -= cX
  2702.             } else {
  2703.                 d.value = 0
  2704.             }
  2705.         } else {
  2706.             d.value = -1
  2707.         }
  2708.         return 1
  2709.     }
  2710.     function ResetSegmentHeader(a) {
  2711.         assert(a);
  2712.         a.use_segment_ = 0;
  2713.         a.update_map_ = 0;
  2714.         a.absolute_delta_ = 1;
  2715.         for (i = 0; i < a.quantizer_.length; ++i) a.quantizer_[i] = 0;
  2716.         for (i = 0; i < a.filter_strength_.length; ++i) a.filter_strength_[i] = 0
  2717.     }
  2718.     function ParseSegmentHeader(a, b, c) {
  2719.         assert(a);
  2720.         assert(b);
  2721.         b.use_segment_ = VP8Get(a);
  2722.         if (b.use_segment_) {
  2723.             b.update_map_ = VP8Get(a);
  2724.             if (VP8Get(a)) {
  2725.                 var s;
  2726.                 b.absolute_delta_ = VP8Get(a);
  2727.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  2728.                     b.quantizer_[s] = VP8Get(a) ? VP8GetSignedValue(a, 7) : 0
  2729.                 }
  2730.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  2731.                     b.filter_strength_[s] = VP8Get(a) ? VP8GetSignedValue(a, 6) : 0
  2732.                 }
  2733.             }
  2734.             if (b.update_map_) {
  2735.                 var s;
  2736.                 for (s = 0; s < bR; ++s) {
  2737.                     c.segments_[s] = VP8Get(a) ? VP8GetValue(a, 8) : 255
  2738.                 }
  2739.             }
  2740.         } else {
  2741.             b.update_map_ = 0
  2742.         }
  2743.         return !a.eof_
  2744.     }
  2745.     function ParsePartitions(a, b, c, d) {
  2746.         var e = a.br_;
  2747.         var f = b;
  2748.         var g = c;
  2749.         var h = b,
  2750.             buf_end_off = c + d;
  2751.         var i;
  2752.         var j = 0;
  2753.         var k = int;
  2754.         var p = int;
  2755.         a.num_parts_ = 1 << VP8GetValue(e, 2);
  2756.         k = a.num_parts_ - 1;
  2757.         i = b;
  2758.         var j = c + k * 3;
  2759.         if (buf_end_off < j) {
  2760.             return 'VP8_STATUS_NOT_ENOUGH_DATA'
  2761.         }
  2762.         for (p = 0; p < k; ++p) {
  2763.             var l = f[g + 0] | (f[g + 1] << 8) | (f[g + 2] << 16);
  2764.             var m = i;
  2765.             var n = j + l;
  2766.             if (n > buf_end_off) m = h;
  2767.             VP8InitBitReader(a.parts_[+p], i, j, n);
  2768.             i = m;
  2769.             j = n;
  2770.             g += 3
  2771.         }
  2772.         VP8InitBitReader(a.parts_[+k], i, j, buf_end_off);
  2773.         return (j < buf_end_off) ? 'VP8_STATUS_OK' : 'VP8_STATUS_SUSPENDED'
  2774.     }
  2775.     function ParseFilterHeader(a, b) {
  2776.         var c = b.filter_hdr_;
  2777.         c.simple_ = VP8Get(a);
  2778.         c.level_ = VP8GetValue(a, 6);
  2779.         c.sharpness_ = VP8GetValue(a, 3);
  2780.         c.use_lf_delta_ = VP8Get(a);
  2781.         if (c.use_lf_delta_) {
  2782.             if (VP8Get(a)) {
  2783.                 var i;
  2784.                 for (i = 0; i < NUM_REF_LF_DELTAS; ++i) {
  2785.                     if (VP8Get(a)) {
  2786.                         c.ref_lf_delta_[i] = VP8GetSignedValue(a, 6)
  2787.                     }
  2788.                 }
  2789.                 for (i = 0; i < NUM_MODE_LF_DELTAS; ++i) {
  2790.                     if (VP8Get(a)) {
  2791.                         c.mode_lf_delta_[i] = VP8GetSignedValue(a, 6)
  2792.                     }
  2793.                 }
  2794.             }
  2795.         }
  2796.         b.filter_type_ = (c.level_ == 0) ? 0 : c.simple_ ? 1 : 2;
  2797.         if (b.filter_type_ > 0) {
  2798.             if (b.segment_hdr_.use_segment_) {
  2799.                 var s;
  2800.                 for (s = 0; s < NUM_MB_SEGMENTS; ++s) {
  2801.                     var d = b.segment_hdr_.filter_strength_[s];
  2802.                     if (!b.segment_hdr_.absolute_delta_) {
  2803.                         d += c.level_
  2804.                     }
  2805.                     b.filter_levels_[s] = d
  2806.                 }
  2807.             } else {
  2808.                 b.filter_levels_[0] = c.level_
  2809.             }
  2810.         }
  2811.         return !a.eof_
  2812.     }
  2813.     function VP8GetHeaders(a, b) {
  2814.         var c = {
  2815.             value: 0
  2816.         };
  2817.         var d = uint8_t;
  2818.         var e = {
  2819.             value: uint32_t
  2820.         };
  2821.         var f = {
  2822.             value: uint32_t
  2823.         };
  2824.         var g = {
  2825.             value: uint32_t
  2826.         };
  2827.         var h = {
  2828.             value: 0
  2829.         };
  2830.         var i = {
  2831.             value: 0
  2832.         };
  2833.         var j = newObjectIt(bY);
  2834.         var k = newObjectIt(bZ);
  2835.         var l = newObjectIt(bK);
  2836.         var m = 'VP8StatusCode';
  2837.         if (a == null) {
  2838.             alert2('(dec == null)');
  2839.             return 0
  2840.         }
  2841.         SetOk(a);
  2842.         if (b == null) {
  2843.             return VP8SetError(a, 'VP8_STATUS_INVALID_PARAM', "null VP8Io passed to VP8GetHeaders()")
  2844.         }
  2845.         d = b.data;
  2846.         c.value = b.data_off;
  2847.         e.value = b.data_size;
  2848.         if (d == null || e.value <= 4) {
  2849.             return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "Not enough data to parse frame header")
  2850.         }
  2851.         if (!WebPCheckAndSkipRIFFHeader(d, c, e, f)) {
  2852.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Invalid RIFF container")
  2853.         }
  2854.         if (!VP8XGetInfo(d, c, e, h, null, null, null)) {
  2855.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Invalid VP8X container")
  2856.         }
  2857.         if (!VP8CheckAndSkipHeader(d, c, e, i, g, f)) {
  2858.             return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Inconsistent size information.")
  2859.         }
  2860.         if (i.value == -1) {
  2861.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "RIFF: Inconsistent size information.")
  2862.         }
  2863.         if (e.value < 4) {
  2864.             return VP8SetError(a, VP8_STATUS_NOT_ENOUGH_DATA, "RIFF: Truncated header.")
  2865.         }
  2866.         c = c.value;
  2867.         e = e.value; {
  2868.             var n = d[c + 0] | (d[c + 1] << 8) | (d[c + 2] << 16);
  2869.             j = a.frm_hdr_;
  2870.             j.key_frame_ = !(n & 1) + 0;
  2871.             j.profile_ = (n >> 1) & 7;
  2872.             j.show_ = (n >> 4) & 1;
  2873.             j.partition_length_ = (n >> 5);
  2874.             if (j.profile_ > 3) return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "Incorrect keyframe parameters.");
  2875.             if (!j.show_) return VP8SetError(a, 'VP8_STATUS_UNSUPPORTED_FEATURE', "Frame not displayable.");
  2876.             c += 3;
  2877.             e -= 3
  2878.         }
  2879.         k = a.pic_hdr_;
  2880.         if (j.key_frame_) {
  2881.             if (e < 7) {
  2882.                 return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "cannot parse picture header")
  2883.             }
  2884.             if (Byte2Hex(d[c + 0]) != 0x9d || Byte2Hex(d[c + 1]) != 0x01 || Byte2Hex(d[c + 2]) != 0x2a) {
  2885.                 return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "Bad code word")
  2886.             }
  2887.             k.width_ = ((d[c + 4] << 8) | d[c + 3]) & 0x3fff;
  2888.             k.xscale_ = d[c + 4] >> 6;
  2889.             k.height_ = ((d[c + 6] << 8) | d[c + 5]) & 0x3fff;
  2890.             k.yscale_ = d[c + 6] >> 6;
  2891.             c += 7;
  2892.             e -= 7;
  2893.             a.mb_w_ = (k.width_ + 15) >> 4;
  2894.             a.mb_h_ = (k.height_ + 15) >> 4;
  2895.             b.width = k.width_;
  2896.             b.height = k.height_;
  2897.             b.use_scaling = 0;
  2898.             b.use_cropping = 0;
  2899.             b.crop_top = 0;
  2900.             b.crop_left = 0;
  2901.             b.crop_right = b.width;
  2902.             b.crop_bottom = b.height;
  2903.             b.mb_w = b.width;
  2904.             b.mb_h = b.height;
  2905.             VP8ResetProba(a.proba_);
  2906.             ResetSegmentHeader(a.segment_hdr_);
  2907.             a.segment_ = 0
  2908.         }
  2909.         if (j.partition_length_ > e) {
  2910.             return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "bad partition length")
  2911.         }
  2912.         a.alpha_data_ = null;
  2913.         a.alpha_data_size_ = 0;
  2914.         var l = a.br_;
  2915.         VP8InitBitReader(l, d, c, c + j.partition_length_);
  2916.         c += j.partition_length_;
  2917.         e -= j.partition_length_;
  2918.         if (j.key_frame_) {
  2919.             k.colorspace_ = VP8Get(l);
  2920.             k.clamp_type_ = VP8Get(l)
  2921.         }
  2922.         if (!ParseSegmentHeader(l, a.segment_hdr_, a.proba_)) {
  2923.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse segment header")
  2924.         }
  2925.         if (!ParseFilterHeader(l, a)) {
  2926.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse filter header")
  2927.         }
  2928.         m = ParsePartitions(a, d, c, e);
  2929.         if (m != 'VP8_STATUS_OK') {
  2930.             return VP8SetError(a, 'VP8_STATUS_BITSTREAM_ERROR', "cannot parse partitions")
  2931.         }
  2932.         VP8ParseQuant(a);
  2933.         if (!j.key_frame_) {
  2934.             return VP8SetError(a, VP8_STATUS_UNSUPPORTED_FEATURE, "Not a key frame.")
  2935.         } else {
  2936.             a.buffer_flags_ = 0x003 | 0x100
  2937.         }
  2938.         VP8Get(l);
  2939.         VP8ParseProba(l, a);
  2940.         if (a.pic_hdr_.colorspace_) {
  2941.             var o = 8;
  2942.             var p = 0x01;
  2943.             var q = d;
  2944.             ext_buf_off = c - o;
  2945.             var r = size_t;
  2946.             if (j.partition_length_ < o || q[ext_buf_off + o - 1] != p) {}
  2947.             r = (q[ext_buf_off + 4] << 0) | (q[ext_buf_off + 5] << 8) | (q[ext_buf_off + 6] << 16);
  2948.             if (j.partition_length_ < r + o) {
  2949.                 return VP8SetError(a, VP8_STATUS_BITSTREAM_ERROR, "RIFF: Inconsistent extra information.")
  2950.             }
  2951.             a.alpha_data_ = (r > 0) ? q : null;
  2952.             a.alpha_data_off = (r > 0) ? ext_buf_off - r : null;
  2953.             a.alpha_data_size_ = r;
  2954.             r = (q[ext_buf_off + 0] << 0) | (q[ext_buf_off + 1] << 8) | (q[ext_buf_off + 2] << 16);
  2955.             a.layer_data_size_ = r;
  2956.             a.layer_data_ = null;
  2957.             a.layer_colorspace_ = q[ext_buf_off + 3]
  2958.         }
  2959.         a.ready_ = 1;
  2960.         return 1
  2961.     }
  2962.     var da = new Array(0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0);
  2963.     var db = new Array(173, 148, 140, 0);
  2964.     var dc = new Array(176, 155, 140, 135, 0);
  2965.     var dd = new Array(180, 157, 141, 134, 130, 0);
  2966.     var de = new Array(254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0);
  2967.     var df = new Array(db, dc, dd, de);
  2968.     var dg = new Array(0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15);
  2969.     var dh = ArrM(new Array(NUM_CTX, NUM_PROBAS), '');
  2970.  
  2971.     function GetCoeffs(a, b, c, d, n, e) {
  2972.         var p = b[da[n]][c];
  2973.         if (!VP8GetBit(a, p[0])) {
  2974.             return 0
  2975.         }
  2976.         while (1) {
  2977.             ++n;
  2978.             if (!VP8GetBit(a, p[1])) {
  2979.                 p = b[da[n]][0]
  2980.             } else {
  2981.                 var v, j;
  2982.                 if (!VP8GetBit(a, p[2])) {
  2983.                     p = b[da[n]][1];
  2984.                     v = 1
  2985.                 } else {
  2986.                     if (!VP8GetBit(a, p[3])) {
  2987.                         if (!VP8GetBit(a, p[4])) {
  2988.                             v = 2
  2989.                         } else {
  2990.                             v = 3 + VP8GetBit(a, p[5])
  2991.                         }
  2992.                     } else {
  2993.                         if (!VP8GetBit(a, p[6])) {
  2994.                             if (!VP8GetBit(a, p[7])) {
  2995.                                 v = 5 + VP8GetBit(a, 159)
  2996.                             } else {
  2997.                                 v = 7 + 2 * VP8GetBit(a, 165);
  2998.                                 v += VP8GetBit(a, 145)
  2999.                             }
  3000.                         } else {
  3001.                             var f = uint8_t;
  3002.                             var g = VP8GetBit(a, p[8]);
  3003.                             var h = VP8GetBit(a, p[9 + g]);
  3004.                             var k = 2 * g + h;
  3005.                             v = 0;
  3006.                             f = df[k];
  3007.                             var l;
  3008.                             for (i = 0; i < (f.length - 1); ++i) {
  3009.                                 v += v + VP8GetBit(a, f[i])
  3010.                             }
  3011.                             v += 3 + (8 << k)
  3012.                         }
  3013.                     }
  3014.                     p = b[da[n]][2]
  3015.                 }
  3016.                 j = dg[n - 1];
  3017.                 e[e[e.length - 1] + j] = VP8GetSigned(a, v) * d[((j > 0) + 0)];
  3018.                 if (n == 16 || !VP8GetBit(a, p[0])) {
  3019.                     return n
  3020.                 }
  3021.             }
  3022.             if (n == 16) {
  3023.                 return 16
  3024.             }
  3025.         }
  3026.     }
  3027.     var di = {
  3028.         i8: Arr(4, uint8_t),
  3029.         i32: uint32_t
  3030.     };
  3031.     var dj = new Array(new Array(0, 0, 0, 0), new Array(1, 0, 0, 0), new Array(0, 1, 0, 0), new Array(1, 1, 0, 0), new Array(0, 0, 1, 0), new Array(1, 0, 1, 0), new Array(0, 1, 1, 0), new Array(1, 1, 1, 0), new Array(0, 0, 0, 1), new Array(1, 0, 0, 1), new Array(0, 1, 0, 1), new Array(1, 1, 0, 1), new Array(0, 0, 1, 1), new Array(1, 0, 1, 1), new Array(0, 1, 1, 1), new Array(1, 1, 1, 1));
  3032.     var dk = 0x08040201;
  3033.  
  3034.     function PACK(X, S) {
  3035.         return ((((X[0] * 0x1000000 + X[1] * 0x10000 + X[2] * 0x100 + X[3] * 0x1) * dk) & 0xff000000) >> (S))
  3036.     }
  3037.     function ParseResiduals(a, b, c) {
  3038.         var d, out_l_nz, first;
  3039.         var e = dh;
  3040.         var q = a.dqm_[a.segment_];
  3041.         var f = a.coeffs_;
  3042.         var g = a.mb_info_[1 - 1];
  3043.         var h = Arr(4, 0),
  3044.             nz_dc = Arr(4, 0);
  3045.         var i = Arr(4, 0),
  3046.             lnz = Arr(4, 0);
  3047.         var j = 0;
  3048.         var k = 0;
  3049.         var x, y, ch;
  3050.         f = memset(0, 384 * sizeof(f));
  3051.         if (!a.is_i4x4_) {
  3052.             var m = Arr(16, 0);
  3053.             var n = b.dc_nz_ + g.dc_nz_;
  3054.             b.dc_nz_ = g.dc_nz_ = (GetCoeffs(c, a.proba_.coeffs_[1], n, q.y2_mat_, 0, m) > 0) + 0;
  3055.             first = 1;
  3056.             e = a.proba_.coeffs_[0];
  3057.             VP8TransformWHT(m, f);
  3058.             f[f.length - 1] = 0
  3059.         } else {
  3060.             first = 0;
  3061.             e = a.proba_.coeffs_[3]
  3062.         }
  3063.         i = ArrCopy(dj[b.nz_ & 0xf]);
  3064.         lnz = ArrCopy(dj[g.nz_ & 0xf]);
  3065.         for (y = 0; y < 4; ++y) {
  3066.             var l = lnz[y];
  3067.             for (x = 0; x < 4; ++x) {
  3068.                 var n = l + i[x];
  3069.                 var o = GetCoeffs(c, e, n, q.y1_mat_, first, f);
  3070.                 i[x] = l = (o > 0) + 0;
  3071.                 nz_dc[x] = ((f[f[f.length - 1] + 0] != 0) + 0);
  3072.                 h[x] = (o > 1) + 0;
  3073.                 f[f.length - 1] += 16
  3074.             }
  3075.             lnz[y] = l;
  3076.             k |= PACK(nz_dc, 24 - y * 4);
  3077.             j |= PACK(h, 24 - y * 4)
  3078.         }
  3079.         d = PACK(i, 24);
  3080.         out_l_nz = PACK(lnz, 24);
  3081.         i = ArrCopy(dj[b.nz_ >> 4]);
  3082.         lnz = ArrCopy(dj[g.nz_ >> 4]);
  3083.         for (ch = 0; ch < 4; ch += 2) {
  3084.             for (y = 0; y < 2; ++y) {
  3085.                 var l = lnz[ch + y];
  3086.                 for (x = 0; x < 2; ++x) {
  3087.                     var n = l + i[ch + x];
  3088.                     var o = GetCoeffs(c, a.proba_.coeffs_[2], n, q.uv_mat_, 0, f);
  3089.                     i[ch + x] = l = (o > 0) + 0;
  3090.                     nz_dc[y * 2 + x] = ((f[f[f.length - 1] + 0] != 0) + 0);
  3091.                     h[y * 2 + x] = (o > 1) + 0;
  3092.                     f[f.length - 1] += 16
  3093.                 }
  3094.                 lnz[ch + y] = l
  3095.             }
  3096.             k |= PACK(nz_dc, 8 - ch * 2);
  3097.             j |= PACK(h, 8 - ch * 2)
  3098.         }
  3099.         d |= PACK(i, 20);
  3100.         out_l_nz |= PACK(lnz, 20);
  3101.         b.nz_ = d;
  3102.         g.nz_ = out_l_nz;
  3103.         a.coeffs_ = f;
  3104.         a.non_zero_ac_ = j + 0;
  3105.         a.non_zero_ = j | k;
  3106.         b.skip_ = (!a.non_zero_) + 0
  3107.     }
  3108.     function VP8DecodeMB(a, b) {
  3109.         var c = a.br_;
  3110.         var d = a.mb_info_[1 - 1];
  3111.         var e = a.mb_info_[1 + a.mb_x_];
  3112.         if (a.segment_hdr_.update_map_) {
  3113.             a.segment_ = !VP8GetBit(c, a.proba_.segments_[0]) ? 0 + VP8GetBit(c, a.proba_.segments_[1]) : 2 + VP8GetBit(c, a.proba_.segments_[2])
  3114.         }
  3115.         e.skip_ = a.use_skip_proba_ ? VP8GetBit(c, a.skip_p_) : 0;
  3116.         VP8ParseIntraMode(c, a);
  3117.         if (c.eof_) {
  3118.             return 0
  3119.         }
  3120.         if (!e.skip_) {
  3121.             ParseResiduals(a, e, b)
  3122.         } else {
  3123.             d.nz_ = e.nz_ = 0;
  3124.             if (!a.is_i4x4_) {
  3125.                 d.dc_nz_ = e.dc_nz_ = 0
  3126.             }
  3127.             a.non_zero_ = 0;
  3128.             a.non_zero_ac_ = 0
  3129.         }
  3130.         return (!b.eof_)
  3131.     }
  3132.     function VP8InitScanline(a) {
  3133.         var b = a.mb_info_[1 - 1];
  3134.         b.nz_ = 0;
  3135.         b.dc_nz_ = 0;
  3136.         memset_(a.intra_l_, 0, bQ, a.intra_l_.length);
  3137.         a.filter_row_ = ((a.filter_type_ > 0) && (a.mb_y_ >= a.tl_mb_y_) && (a.mb_y_ <= a.br_mb_y_)) + 0
  3138.     }
  3139.     var dl;
  3140.  
  3141.     function ParseFrame(a, b) {
  3142.         for (a.mb_y_ = 0; a.mb_y_ < a.br_mb_y_; ++a.mb_y_) {
  3143.             dl = a.parts_[a.mb_y_ & (a.num_parts_ - 1)];
  3144.             VP8InitScanline(a);
  3145.             for (a.mb_x_ = 0; a.mb_x_ < a.mb_w_; a.mb_x_++) {
  3146.                 if (!VP8DecodeMB(a, dl)) {
  3147.                     return VP8SetError(a, 'VP8_STATUS_NOT_ENOUGH_DATA', "Premature end-of-file encountered." + a.mb_x_ + ' ' + a.mb_y_)
  3148.                 }
  3149.                 VP8ReconstructBlock(a);
  3150.                 VP8StoreBlock(a)
  3151.             }
  3152.             if (!VP8ProcessRow(a, b)) {
  3153.                 return VP8SetError(a, 'VP8_STATUS_USER_ABORT', "Output aborted.")
  3154.             }
  3155.         }
  3156.         if (a.use_threads_ && !WebPWorkerSync(a.worker_)) {
  3157.