吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5762|回复: 12
收起左侧

[Web逆向] 《JavaScript AST其实很简单》五、Step4-平坦化控制流

  [复制链接]
漁滒 发表于 2020-12-31 22:09

平坦化控制流

上一篇我们说到去除了if判断下的废代码,那么本篇文章为本阶段的最后一篇,可能平坦化控制流不知道是什么,那么直接看看下面截图就知道了
在这里插入图片描述
可以看到,这里代码的都是有用的代码,不同于上一篇存在废代码,但是代码的执行顺序并不是按照一般的从上到下执行,这对代码阅读并不友好。

var _0x51adbe = '3|4|0|5|1|2'['split']('|'), _0x50da1a = 0;
while (!![]) {
    switch (_0x51adbe[_0x50da1a++]) {
    case '0':
        var _0x89f607 = _0x5c99f5[_0x55b3ce] || _0x527778;
        continue;
    case '1':
        _0x527778['toString'] = _0x89f607['toString']['bind'](_0x89f607);
        continue;
    case '2':
        _0x5c99f5[_0x55b3ce] = _0x527778;
        continue;
    case '3':
        var _0x527778 = _0x5a83cd['constructor']['prototype']['bind'](_0x5a83cd);
        continue;
    case '4':
        var _0x55b3ce = _0x5b4bc9[_0x13a6aa];
        continue;
    case '5':
        _0x527778['__proto__'] = _0x5a83cd['bind'](_0x5a83cd);
        continue;
    }
    break;
}

先看一下上面代码的规律,可以看到先定义了一个字符串,并且使用split切割,作为代码执行的顺序,再定义一个临时变量。跟着就是一个while循环,下面就是我们需要的代码了。
看起来好像是最困难的,但是经过分析后发现,其实只是比上一篇难一点点,属于第二简单的。将上面代码做一下语法的分析
在这里插入图片描述
可以看到,这部分的代码块包含两部分。一部分是VariableDeclaration节点,一部分是WhileStatement节点。前面VariableDeclaration节点就是定义字符串的部分,所以我们要首先遍历所有BlockStatement(代码块)的节点,找到第一个节点的类型是VariableDeclaration,第二个节点是WhileStatement,并且VariableDeclaration节点一次定义了两个变量,且第一个变量的的属性赋值是一个CallExpression
在这里插入图片描述
那么我们就可以递归遍历找到所有这类型的代码块,然后我们最终也是要返回一个代码块的,那么我们就创建一个空列表,用来保存每一个case下的代码。获取第一个变量的字符串,可以直接在python里面的split函数切分,得到一个顺序的列表
在这里插入图片描述
这里可以看到,case部分的代码在cases节点下是按顺序的,那么就可以按照前面切分得到列表的顺序来遍历case,将里面的代码部分添加到前面我们新建的空列表里面。当所有case遍历完以后,也得到我们最终的代码块数组,将原本整个节点部分的的代码块替换为后面添加了代码的列表。这时就完成了平坦化控制流。

运行替换后格式化一下代码
在这里插入图片描述

可以看到代码已经完成反混淆的工作,此时阅读代码已经不再困难了。
备注:源文件见最下方附件内的ob_decrypt.txt

免费评分

参与人数 5吾爱币 +6 热心值 +5 收起 理由
triangle111 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
云深云潜 + 2 + 1 谢谢@Thanks!
技术小星 + 1 + 1 用心讨论,共获提升!
踮起脚尖过日子 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
天空宫阙 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

不苦小和尚 发表于 2020-12-31 22:50
天空宫阙 发表于 2020-12-31 22:43
抖音web端现在不返回重要参数tac所以搞定了也拿不到数据,并且那个代码属于精心设计的大型控制流平坦化代 ...

[JavaScript] 纯文本查看 复制代码
_$jsvmprt = function(b, a, e) {
    function f() {
        if ("undefined" == typeof Reflect || !Reflect.construct)
            return !1;
        if (Reflect.construct.sham)
            return !1;
        if ("function" == typeof Proxy)
            return !0;
        try {
            return Date.prototype.toString.call(Reflect.construct(Date, [], (function() {}
            ))),
            !0
        } catch (b) {
            return !1
        }
    }
    function d(b, a, e) {
        return (d = f() ? Reflect.construct : function(b, a, e) {
            var f = [null];
            f.push.apply(f, a);
            var d = new (Function.bind.apply(b, f));
            return e && c(d, e.prototype),
            d
        }
        ).apply(null, arguments)
    }
    function c(b, a) {
        return (c = Object.setPrototypeOf || function(b, a) {
            return b.__proto__ = a,
            b
        }
        )(b, a)
    }
    function r(b) {
        return function(b) {
            if (Array.isArray(b)) {
                for (var a = 0, e = new Array(b.length); a < b.length; a++)
                    e[a] = b[a];
                return e
            }
        }(b) || function(b) {
            if (Symbol.iterator in Object(b) || "[object Arguments]" === Object.prototype.toString.call(b))
                return Array.from(b)
        }(b) || function() {
            throw new TypeError("Invalid attempt to spread non-iterable instance")
        }()
    }
    for (var n = [], l = 0, t = [], i = 0, o = function(b, a) {
        var e = b[a++]
          , f = b[a]
          , d = parseInt("" + e + f, 16);
        if (d >> 7 == 0)
            return [1, d];
        if (d >> 6 == 2) {
            var c = parseInt("" + b[++a] + b[++a], 16);
            return d &= 63,
            [2, c = (d <<= 8) + c]
        }
        if (d >> 6 == 3) {
            var r = parseInt("" + b[++a] + b[++a], 16)
              , n = parseInt("" + b[++a] + b[++a], 16);
            return d &= 63,
            [3, n = (d <<= 16) + (r <<= 8) + n]
        }
    }, s = function(b, a) {
        var e = parseInt("" + b[a] + b[a + 1], 16);
        return e = e > 127 ? -256 + e : e
    }, u = function(b, a) {
        var e = parseInt("" + b[a] + b[a + 1] + b[a + 2] + b[a + 3], 16);
        return e = e > 32767 ? -65536 + e : e
    }, p = function(b, a) {
        var e = parseInt("" + b[a] + b[a + 1] + b[a + 2] + b[a + 3] + b[a + 4] + b[a + 5] + b[a + 6] + b[a + 7], 16);
        return e = e > 2147483647 ? 0 + e : e
    }, v = function(b, a) {
        return parseInt("" + b[a] + b[a + 1], 16)
    }, y = function(b, a) {
        return parseInt("" + b[a] + b[a + 1] + b[a + 2] + b[a + 3], 16)
    }, h = h || this || window, g = Object.keys || function(b) {
        var a = {}
          , e = 0;
        for (var f in b)
            a[e++] = f;
        return a.length = e,
        a
    }
    , m = (b.length,
    0), w = "", C = m; C < m + 16; C++) {
        var q = "" + b[C++] + b[C];
        q = parseInt(q, 16),
        w += String.fromCharCode(q)
    }
    if ("HNOJ@?RC" != w)
        throw new Error("error magic number " + w);
    m += 16;
    parseInt("" + b[m] + b[m + 1], 16);
    m += 8,
    l = 0;
    for (var I = 0; I < 4; I++) {
        var z = m + 2 * I
          , S = "" + b[z++] + b[z]
          , x = parseInt(S, 16);
        l += (3 & x) << 2 * I
    }
    m += 16,
    m += 8;
    var j = parseInt("" + b[m] + b[m + 1] + b[m + 2] + b[m + 3] + b[m + 4] + b[m + 5] + b[m + 6] + b[m + 7], 16)
      , $ = j
      , O = m += 8
      , R = y(b, m += j);
    R[1];
    m += 4,
    n = {
        p: [],
        q: []
    };
    for (var _ = 0; _ < R; _++) {
        for (var A = o(b, m), k = m += 2 * A[0], D = 0; D < A[1]; D++) {
            var E = "" + b[k++] + b[k++];
            E = parseInt(E, 16),
            n.p.push(E)
        }
        n.q.push([n.p.length - A[1], n.p.length]),
        m += 2 * A[1]
    }
    var P = {
        5: 1,
        6: 1,
        70: 1,
        22: 1,
        23: 1,
        37: 1,
        73: 1
    }
      , F = {
        72: 1
    }
      , H = {
        74: 1
    }
      , J = {
        11: 1,
        12: 1,
        24: 1,
        26: 1,
        27: 1,
        31: 1
    }
      , N = {
        10: 1
    }
      , T = {
        2: 1,
        29: 1,
        30: 1,
        20: 1
    }
      , B = []
      , G = [];
    function K(b, a, e) {
        for (var f = a; f < a + e; ) {
            var d = v(b, f);
            B[f] = d,
            f += 2;
            var c = void 0;
            F[d] ? (G[f] = s(b, f),
            f += 2) : P[d] ? (G[f] = u(b, f),
            f += 4) : H[d] ? (G[f] = p(b, f),
            f += 8) : J[d] ? (c = v(b, f),
            G[f] = c,
            f += 2) : N[d] ? (c = y(b, f),
            G[f] = c,
            f += 4) : T[d] && (c = y(b, f),
            G[f] = c,
            f += 4)
        }
    }
    return M(b, O, $ / 2, [], a, e);
    function L(b, a, e, f, c, o, m, w) {
        null == o && (o = this);
        var C, q, I, z = [], S = 0;
        m && (C = m);
        var x, j, $ = a, O = $ + 2 * e;
        if (!w)
            for (; $ < O; ) {
                var R = parseInt("" + b[$] + b[$ + 1], 16);
                $ += 2;
                var _ = 3 & (x = 13 * R % 241);
                if (x >>= 2,
                _ > 2) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) > 13 ? (z[++S] = p(b, $),
                        $ += 8) : _ > 11 ? (C = z[S--],
                        z[S] = z[S] >>> C) : _ > 9 ? z[++S] = !0 : _ > 7 ? (j = v(b, $),
                        $ += 2,
                        z[S] = z[S][j]) : _ > 0 && (C = z[S--],
                        z[S] = z[S] < C);
                    else if (_ > 1) {
                        (_ = x) < 6 || (_ < 8 ? C = z[S--] : _ < 10 ? (C = z[S--],
                        z[S] = z[S] ^ C) : _ < 12 && (j = u(b, $),
                        t[++i] = [[$ + 4, j - 3], 0, 0],
                        $ += 2 * j - 2))
                    } else if (_ > 0) {
                        if ((_ = x) < 3) {
                            var A = 0
                              , k = z[S].length
                              , E = z[S];
                            z[++S] = function() {
                                var b = A < k;
                                if (b) {
                                    var a = E[A++];
                                    z[++S] = a
                                }
                                z[++S] = b
                            }
                        } else
                            _ < 5 ? (j = v(b, $),
                            $ += 2,
                            C = c[j],
                            z[++S] = C) : _ < 7 ? z[S] = ++z[S] : _ < 9 && (C = z[S--],
                            z[S] = z[S]in C)
                    } else {
                        if ((_ = x) < 2) {
                            for (j = y(b, $),
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            _ = +_,
                            $ += 4,
                            z[++S] = _
                        } else
                            _ < 4 ? (C = z[S--],
                            z[S] = z[S] - C) : _ < 6 ? (C = z[S--],
                            z[S] = z[S] === C) : _ < 15 && (C = z[S],
                            z[S] = z[S - 1],
                            z[S - 1] = C)
                    }
                } else if (_ > 1) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) > 7 ? (C = z[S--],
                        z[S] = z[S] | C) : _ > 5 ? (j = v(b, $),
                        $ += 2,
                        z[++S] = c["$" + j]) : _ > 3 && (j = u(b, $),
                        t[i][0] && !t[i][2] ? t[i][1] = [$ + 4, j - 3] : t[i++] = [0, [$ + 4, j - 3], 0],
                        $ += 2 * j - 2);
                    else if (_ > 1) {
                        if ((_ = x) < 2) {
                            for (j = y(b, $),
                            C = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                C += String.fromCharCode(l ^ n.p[D]);
                            z[++S] = C,
                            $ += 4
                        } else if (_ < 4)
                            if (z[S--])
                                $ += 4;
                            else {
                                if ((j = u(b, $)) < 0) {
                                    w = 1,
                                    K(b, a, 2 * e),
                                    $ += 2 * j - 2;
                                    break
                                }
                                $ += 2 * j - 2
                            }
                        else
                            _ < 6 ? (C = z[S--],
                            z[S] = z[S] % C) : _ < 8 ? (C = z[S--],
                            z[S] = z[S]instanceof C) : _ < 15 && (z[++S] = !1)
                    } else if (_ > 0) {
                        (_ = x) > 12 ? (C = z[S - 1],
                        q = z[S],
                        z[++S] = C,
                        z[++S] = q) : _ > 3 ? (C = z[S--],
                        z[S] = z[S] == C) : _ > 1 ? (C = z[S--],
                        z[S] = z[S] + C) : _ > -1 && (z[++S] = h)
                    } else {
                        (_ = x) < 2 ? (C = z[S--],
                        z[S] = z[S] > C) : _ < 9 ? (j = y(b, $),
                        $ += 4,
                        q = S + 1,
                        z[S -= j - 1] = j ? z.slice(S, q) : []) : _ < 11 ? (j = v(b, $),
                        $ += 2,
                        C = z[S--],
                        c[j] = C) : _ < 13 ? (C = z[S--],
                        z[S] = z[S] >> C) : _ < 15 && (z[++S] = u(b, $),
                        $ += 4)
                    }
                } else if (_ > 0) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ < 1)
                        if ((_ = x) < 5) {
                            j = u(b, $);
                            try {
                                if (t[i][2] = 1,
                                1 == (C = L(b, $ + 4, j - 3, [], c, o, null, 0))[0])
                                    return C
                            } catch (m) {
                                if (t[i] && t[i][1] && 1 == (C = L(b, t[i][1][0], t[i][1][1], [], c, o, m, 0))[0])
                                    return C
                            } finally {
                                if (t[i] && t[i][0] && 1 == (C = L(b, t[i][0][0], t[i][0][1], [], c, o, null, 0))[0])
                                    return C;
                                t[i] = 0,
                                i--
                            }
                            $ += 2 * j - 2
                        } else
                            _ < 7 ? (j = v(b, $),
                            $ += 2,
                            z[S -= j] = 0 === j ? new z[S] : d(z[S], r(z.slice(S + 1, S + j + 1)))) : _ < 9 && (C = z[S--],
                            z[S] = z[S] & C);
                    else if (_ < 2) {
                        if ((_ = x) < 8)
                            q = z[S--],
                            C = delete z[S--][q];
                        else if (_ < 10) {
                            for (j = y(b, $),
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            $ += 4,
                            z[S] = z[S][_]
                        } else
                            _ < 12 ? (C = z[S--],
                            z[S] = z[S] << C) : _ < 14 && (z[++S] = s(b, $),
                            $ += 2)
                    } else if (_ < 3) {
                        (_ = x) > 11 ? (C = z[S],
                        z[++S] = C) : _ > 9 ? (C = z[S -= 2][z[S + 1]] = z[S + 2],
                        S--) : _ > 2 ? (C = z[S--],
                        z[S] = z[S] <= C) : _ > 0 && (z[++S] = C)
                    } else {
                        if ((_ = x) > 12)
                            z[++S] = o;
                        else if (_ > 5)
                            C = z[S--],
                            z[S] = z[S] !== C;
                        else if (_ > 3)
                            C = z[S--],
                            z[S] = z[S] / C;
                        else if (_ > 1) {
                            if ((j = u(b, $)) < 0) {
                                w = 1,
                                K(b, a, 2 * e),
                                $ += 2 * j - 2;
                                break
                            }
                            $ += 2 * j - 2
                        } else
                            _ > -1 && (z[S] = !z[S])
                    }
                } else {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ < 1) {
                        if ((_ = x) > 14)
                            j = u(b, $),
                            (P = function a() {
                                var e = arguments;
                                return a.y > 0 ? M(b, a.c, a.l, e, a.z, this, null, 0) : (a.y++,
                                M(b, a.c, a.l, e, a.z, this, null, 0))
                            }
                            ).c = $ + 4,
                            P.l = j - 2,
                            P.x = L,
                            P.y = 0,
                            P.z = c,
                            z[S] = P,
                            $ += 2 * j - 2;
                        else if (_ > 12)
                            q = z[S--],
                            I = z[S--],
                            (_ = z[S--]).x === L ? _.y >= 1 ? z[++S] = M(b, _.c, _.l, q, _.z, I, null, 1) : (z[++S] = M(b, _.c, _.l, q, _.z, I, null, 0),
                            _.y++) : z[++S] = _.apply(I, q);
                        else if (_ > 5)
                            C = z[S--],
                            z[S] = z[S] != C;
                        else if (_ > 3)
                            C = z[S--],
                            z[S] = z[S] * C;
                        else if (_ > -1)
                            return [1, z[S--]]
                    } else if (_ < 2) {
                        (_ = x) < 4 ? (q = z[S--],
                        (_ = z[S]).x === L ? _.y >= 1 ? z[S] = M(b, _.c, _.l, [q], _.z, I, null, 1) : (z[S] = M(b, _.c, _.l, [q], _.z, I, null, 0),
                        _.y++) : z[S] = _(q)) : _ < 6 ? z[S -= 1] = z[S][z[S + 1]] : _ < 8 ? z[S] = --z[S] : _ < 10 && (C = z[S--],
                        z[S] = typeof C)
                    } else if (_ < 3) {
                        if ((_ = x) > 11)
                            throw z[S--];
                        if (_ > 7) {
                            for (C = z[S--],
                            j = y(b, $),
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            $ += 4,
                            z[S--][_] = C
                        } else
                            _ > 5 && (z[S] = g(z[S]))
                    } else {
                        (_ = x) > 10 ? z[++S] = void 0 : _ > 1 ? (C = z[S--],
                        z[S] = z[S] >= C) : _ > -1 && (z[++S] = null)
                    }
                }
            }
        if (w)
            for (; $ < O; ) {
                R = B[$];
                $ += 2;
                _ = 3 & (x = 13 * R % 241);
                if (x >>= 2,
                _ < 1) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) > 10 ? z[++S] = void 0 : _ > 1 ? (C = z[S--],
                        z[S] = z[S] >= C) : _ > -1 && (z[++S] = null);
                    else if (_ > 1) {
                        if ((_ = x) < 7)
                            z[S] = g(z[S]);
                        else if (_ < 9) {
                            for (C = z[S--],
                            j = G[$],
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            $ += 4,
                            z[S--][_] = C
                        } else if (_ < 13)
                            throw z[S--]
                    } else if (_ > 0) {
                        (_ = x) > 8 ? (C = z[S--],
                        z[S] = typeof C) : _ > 6 ? z[S] = --z[S] : _ > 4 ? z[S -= 1] = z[S][z[S + 1]] : _ > 2 && (q = z[S--],
                        (_ = z[S]).x === L ? _.y >= 1 ? z[S] = M(b, _.c, _.l, [q], _.z, I, null, 1) : (z[S] = M(b, _.c, _.l, [q], _.z, I, null, 0),
                        _.y++) : z[S] = _(q))
                    } else {
                        var P;
                        if ((_ = x) > 14)
                            j = G[$],
                            (P = function a() {
                                var e = arguments;
                                return a.y > 0 ? M(b, a.c, a.l, e, a.z, this, null, 0) : (a.y++,
                                M(b, a.c, a.l, e, a.z, this, null, 0))
                            }
                            ).c = $ + 4,
                            P.l = j - 2,
                            P.x = L,
                            P.y = 0,
                            P.z = c,
                            z[S] = P,
                            $ += 2 * j - 2;
                        else if (_ > 12)
                            q = z[S--],
                            I = z[S--],
                            (_ = z[S--]).x === L ? _.y >= 1 ? z[++S] = M(b, _.c, _.l, q, _.z, I, null, 1) : (z[++S] = M(b, _.c, _.l, q, _.z, I, null, 0),
                            _.y++) : z[++S] = _.apply(I, q);
                        else if (_ > 5)
                            C = z[S--],
                            z[S] = z[S] != C;
                        else if (_ > 3)
                            C = z[S--],
                            z[S] = z[S] * C;
                        else if (_ > -1)
                            return [1, z[S--]]
                    }
                } else if (_ < 2) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) < 1 ? z[S] = !z[S] : _ < 3 ? $ += 2 * (j = G[$]) - 2 : _ < 5 ? (C = z[S--],
                        z[S] = z[S] / C) : _ < 7 ? (C = z[S--],
                        z[S] = z[S] !== C) : _ < 14 && (z[++S] = o);
                    else if (_ > 1) {
                        (_ = x) > 11 ? (C = z[S],
                        z[++S] = C) : _ > 9 ? (C = z[S -= 2][z[S + 1]] = z[S + 2],
                        S--) : _ > 2 ? (C = z[S--],
                        z[S] = z[S] <= C) : _ > 0 && (z[++S] = C)
                    } else if (_ > 0) {
                        if ((_ = x) < 8)
                            q = z[S--],
                            C = delete z[S--][q];
                        else if (_ < 10) {
                            for (j = G[$],
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            $ += 4,
                            z[S] = z[S][_]
                        } else
                            _ < 12 ? (C = z[S--],
                            z[S] = z[S] << C) : _ < 14 && (z[++S] = G[$],
                            $ += 2)
                    } else {
                        if ((_ = x) < 5) {
                            j = G[$];
                            try {
                                if (t[i][2] = 1,
                                1 == (C = L(b, $ + 4, j - 3, [], c, o, null, 0))[0])
                                    return C
                            } catch (m) {
                                if (t[i] && t[i][1] && 1 == (C = L(b, t[i][1][0], t[i][1][1], [], c, o, m, 0))[0])
                                    return C
                            } finally {
                                if (t[i] && t[i][0] && 1 == (C = L(b, t[i][0][0], t[i][0][1], [], c, o, null, 0))[0])
                                    return C;
                                t[i] = 0,
                                i--
                            }
                            $ += 2 * j - 2
                        } else
                            _ < 7 ? (j = G[$],
                            $ += 2,
                            z[S -= j] = 0 === j ? new z[S] : d(z[S], r(z.slice(S + 1, S + j + 1)))) : _ < 9 && (C = z[S--],
                            z[S] = z[S] & C)
                    }
                } else if (_ < 3) {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) > 7 ? (C = z[S--],
                        z[S] = z[S] | C) : _ > 5 ? (j = G[$],
                        $ += 2,
                        z[++S] = c["$" + j]) : _ > 3 && (j = G[$],
                        t[i][0] && !t[i][2] ? t[i][1] = [$ + 4, j - 3] : t[i++] = [0, [$ + 4, j - 3], 0],
                        $ += 2 * j - 2);
                    else if (_ > 1) {
                        if ((_ = x) > 13)
                            z[++S] = !1;
                        else if (_ > 6)
                            C = z[S--],
                            z[S] = z[S]instanceof C;
                        else if (_ > 4)
                            C = z[S--],
                            z[S] = z[S] % C;
                        else if (_ > 2)
                            z[S--] ? $ += 4 : $ += 2 * (j = G[$]) - 2;
                        else if (_ > 0) {
                            for (j = G[$],
                            C = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                C += String.fromCharCode(l ^ n.p[D]);
                            z[++S] = C,
                            $ += 4
                        }
                    } else if (_ > 0) {
                        (_ = x) > 12 ? (C = z[S - 1],
                        q = z[S],
                        z[++S] = C,
                        z[++S] = q) : _ > 3 ? (C = z[S--],
                        z[S] = z[S] == C) : _ > 1 ? (C = z[S--],
                        z[S] = z[S] + C) : _ > -1 && (z[++S] = h)
                    } else {
                        (_ = x) > 13 ? (z[++S] = G[$],
                        $ += 4) : _ > 11 ? (C = z[S--],
                        z[S] = z[S] >> C) : _ > 9 ? (j = G[$],
                        $ += 2,
                        C = z[S--],
                        c[j] = C) : _ > 7 ? (j = G[$],
                        $ += 4,
                        q = S + 1,
                        z[S -= j - 1] = j ? z.slice(S, q) : []) : _ > 0 && (C = z[S--],
                        z[S] = z[S] > C)
                    }
                } else {
                    _ = 3 & x;
                    if (x >>= 2,
                    _ > 2)
                        (_ = x) > 13 ? (z[++S] = G[$],
                        $ += 8) : _ > 11 ? (C = z[S--],
                        z[S] = z[S] >>> C) : _ > 9 ? z[++S] = !0 : _ > 7 ? (j = G[$],
                        $ += 2,
                        z[S] = z[S][j]) : _ > 0 && (C = z[S--],
                        z[S] = z[S] < C);
                    else if (_ > 1) {
                        (_ = x) > 10 ? (j = G[$],
                        t[++i] = [[$ + 4, j - 3], 0, 0],
                        $ += 2 * j - 2) : _ > 8 ? (C = z[S--],
                        z[S] = z[S] ^ C) : _ > 6 && (C = z[S--])
                    } else if (_ > 0) {
                        if ((_ = x) < 3) {
                            A = 0,
                            k = z[S].length,
                            E = z[S];
                            z[++S] = function() {
                                var b = A < k;
                                if (b) {
                                    var a = E[A++];
                                    z[++S] = a
                                }
                                z[++S] = b
                            }
                        } else
                            _ < 5 ? (j = G[$],
                            $ += 2,
                            C = c[j],
                            z[++S] = C) : _ < 7 ? z[S] = ++z[S] : _ < 9 && (C = z[S--],
                            z[S] = z[S]in C)
                    } else {
                        if ((_ = x) < 2) {
                            for (j = G[$],
                            _ = "",
                            D = n.q[j][0]; D < n.q[j][1]; D++)
                                _ += String.fromCharCode(l ^ n.p[D]);
                            _ = +_,
                            $ += 4,
                            z[++S] = _
                        } else
                            _ < 4 ? (C = z[S--],
                            z[S] = z[S] - C) : _ < 6 ? (C = z[S--],
                            z[S] = z[S] === C) : _ < 15 && (C = z[S],
                            z[S] = z[S - 1],
                            z[S - 1] = C)
                    }
                }
            }
        return [0, null]
    }
    function M(b, a, e, f, d, c, r, n) {
        var l, t;
        null == c && (c = this),
        d && !d.d && (d.d = 0,
        d.$0 = d,
        d[1] = {});
        var i = {}
          , o = i.d = d ? d.d + 1 : 0;
        for (i["$" + o] = i,
        t = 0; t < o; t++)
            i[l = "$" + t] = d[l];
        for (t = 0,
        o = i.length = f.length; t < o; t++)
            i[t] = f[t];
        return n && !B[a] && K(b, a, 2 * e),
        B[a] ? L(b, a, e, 0, i, c, null, 1)[1] : L(b, a, e, 0, i, c, null, 0)[1]
    }
}
_$jsvmprt("484e4f4a403f5243000031133876e56fb6ce78d50000000000009d60020000250074211b000b02430200013e2217000e1c211b000b03430200024017000e18011b000b02041c16004c21131e0003430200043e2217000b1c131e00031e0005170018131e0003260200060a000118010a0002101c16001e180022011700051c131f0018011800131e00071a001d000827041c002611020000254e2e02000925000d131e000a1e000b0101001f0702000c25000e21131e000d4302000240001f0802000e25005b131e000f0200100200111a02221e001224131e00130a000110220117003c1c0200002500131800221e0014240a0000100200153e00131e001601220117001a1c21131e001643020002402217000b1c131e00161e001704001f09020018250013131e00191a00221e001a240a000010001f0a02001b250039211800430200023e22011700081c1800263e170007020000002118004302001c3e170012180017000902001d16000602001e001800001f0b02001f2500521801011700080200201f010200001f0618001f07180748003917003318061801131e0021221e002224131e0021221e0023240a00001018011e00242a0a00011019281f0618072e1f0716ffcb1806001f0c0200252500df0200021f0621134318063e22011700121c13221e0014240a00001002002640220117001c1c131e00071e00271e0014221e002824130a00011002002640220117000d1c21131e000a4318063e22011700201c131e000a221e0014240a000010221e00292402002a0a00011048003a220117000d1c21131e002b4318063e22011700151c131e002b221e0014240a00001002002c40220117000d1c21131e002d4318063e17000520001b020b07260a0000100117002821131e002e4318063e22011700151c131e002e221e0014240a00001002002f40170005200012001f0d0200302500a32118014302003140170004001800020032281f061801221e003324131e000f0200340200001a020a0001101f0748001f09180918071e00243a17006618071809191f081808221e00352448000a0001100200363e17001a1808221e003724480118081e00240a0002101f0816ffd81808221e00292418060a00011048003e1700191808221e00372418061e002418081e00240a0002100018092d1f0916ff95001f0e02003825007146000306000a271f06020000000500600200001f06131e003917001c131e0039221e003a2418000a0001101f061806170006180600131e003b17001c131e003b221e003a2418000a0001101f0618061700061806001b020b0e261800131e000a1e003c0a0002101f0618060007001f0f02003d25009c460003060006271f0605008f131e0039170015131e0039221e003e24180018010a0002101c131e003b170015131e003b221e003e24180018010a0002101c49016d48182a483c2a483c2a4903e82a1f06131e000a180002003f281d003c131e000a18000200322818012802004028131e0019131e00191a00221e001a240a0000101806281a01221e0041240a00001028020042281d003c07001f1002004325004c460003060006271f0605003f131e0039170013131e0039221e00442418000a0001101c131e003b170013131e003b221e00442418000a0001101c131e000a180002003f281d003c07001f110200452500a3131e00461a001f06131e0007221e0047241806020048131e00071a002202000025000c1b030b00201d0049001d004a0a0003101c131e004b221e004c2402004d18060a0002101c13221700081c131e004b2217000b1c131e004b1e004e1700091800201d00491b020b08260a00001017003013221700221c131e004f131e00502948643922011700101c131e0051131e0052294864391700091800201d0049001f1302005325002b211343020002402217001f1c131e00071e00271e0014221e002824131e00540a0001100200553e001f140200562500611b020b07260a00001001170052020057131e002b420122011700111c131e002b1e0057131e0058410122011700091c020059134222011700091c02005a134222011700091c02005b1342220117000f1c02005c134202005d13423a0012001f1502005e250163131e002b1e005f1700052000020060131e000742170043131e0007221e006024131e002b0a0001101f081808221e00292402005f0a00011048003b22011700151c1808221e0029240200610a00011048003b170005200013221700081c131e00622217000b1c131e00621e00632217000e1c131e00621e00631e0064170027460003060006271f0805001b131e00621e0063221e0064240a000010213e17000520000702006502006602006702006802006902006a02006b02006c02006d02006e02006f0a000b1f060200700200710200720a00031f07180708031f09180921041700181f0818071808191f0a13180a19170005200016ffe7180608031f091809210417001b1f0818061808191f0a131e000a180a19170005200016ffe4131e000a08031f09180921041700341f081808221e007324131e000f0200740200001a020a0001102217000f1c131e000a18081902007519170005200016ffcb12001f160200762500c71b020b08260a000010170029131e0077221e0078240200120a0001101f06180602000025000c1b030b00201d0079001d007a1b020b09260a00001017005b46000306002c271f0618061e007b131e007c02007d193e2217000e1c131e00391e002448003e1700091800201d0079050029131e0039221e003e2402007e0200000a0002101c131e0039221e00442402007e0a0001101c071b020b07260a000010170024131e007701221700121c131e007f22011700081c131e00801700091800201d0079001f170200812500b11b020b07260a000010011700a2131e000a221e0082240200830a0001101f0618061e0084221e0014240a000010221e008524131e000f0200860200871a020200000a000210221e0029240200880a00011048003a220117003b1c131e002b1e0014221e0014240a000010221e008524131e000f0200860200871a020200000a000210221e0029240200880a00011048003a22011700181c131e002b1e0057221e0014240a000010020089400012001f1802008a250075131e000f02008b0200001a021f0613221700081c131e002d2217000b1c131e002d1e008c17004c131e002d1e008c1f071807221e00292402008d0a00011048003e22011700151c1807221e00292402008e0a00011048003e22011700111c1806221e00122418070a000110170005200012001f1902008f2500961b020b1a1e009017000b1b020b1a1e00900046000306000a271f0602000000050073131e000a221e0082240200830a0001101f061806221e0091240200920a0001101f071807221e0093240200940a0001101f081807221e0095241808020096190a0001101f091807221e0095241808020097190a0001101f0a180902009828180a281f0b1b020b1a180b1d0090180b0007001f1b0200992501270200001f061b020b1a1e009a17000f1b020b1a1e009a1f061600fb48051f070a00001f08131e002b1e00571f09180922011700071c0a00001f0a48001f0b180b18073a1700b7460003060006271f0c0500a3180a180b191f0c0a00001f0d48001f0f180f180c1e00243a170037180c221e009b24180f0a00011017001f180d221e009c24180c221e009b24180f0a0001101e009d0a0001101c180f2d1f0f16ffc4180c1e009e020000281f0e180c1e009f170011180e180c1e009f02000028281f0e180e180c1e00a002000028281f0e180e180d221e00a1240200000a000110281f0e1808221e009c24180e0a0001101c07180b2d1f0b16ff471808221e00a1240200a20a0001101f061b020b1a18061d009a1806221e00a32448004904000a000210001f1c0200a4250463131e002b1e00a5221e00a6240a0000101f06131e002b1e00a7221e00a6240a0000101f0748001f0848011f0948021f0a48031f0b48041f0c48051f0d180d1f0e0200a81f0f0200a91f100200aa1f110200ab1f120200ac1f130200ad1f140200ae1f150200af1f161806221e0029240200b00a00011048003b22011700151c1806221e0029240200b10a00011048003b17000a180c1f0e1600f71806221e002924180f0a00011048003b17000a18081f0e1600dd1806221e00292418110a00011048003b17000a18091f0e1600c31806221e00292418120a00011048003b22011700151c1806221e0029240200b20a00011048003b22011700151c1806221e0029240200b30a00011048003b17000a180a1f0e16007b1806221e00292418130a00011048003b22011700141c1806221e00292418140a00011048003b22011700141c1806221e00292418150a00011048003b22011700151c1806221e0029240200b40a00011048003b22011700151c1806221e0029240200b50a00011048003b17000a180b1f0e160007180d1f0e1807221e00292418100a00011048003b221700091c180e18084017000820001601521807221e00292418120a00011048003b22011700141c1807221e00292418110a00011048003b22011700151c1807221e0029240200b60a00011048003b221700091c180e180a40221700091c180e18094017000820001600f91807221e00292418160a00011048003b22011700141c1807221e00292418140a00011048003b22011700141c1807221e00292418150a00011048003b22011700141c1807221e00292418130a00011048003b221700091c180e180c40221700091c180e180b40170008200016008b1807221e00292418100a00011048003a221700141c1807221e00292418120a00011048003a221700141c1807221e00292418160a00011048003a221700141c1807221e00292418130a00011048003a221700141c1807221e00292418140a00011048003a221700141c1807221e00292418150a00011048003a1f1f181f180e180d3e40170005200048001f1748011f1848021f1948041f1a48051f1b181b1f1c1806221e0029240200b70a00011048003b17000a18191f1c1600861806221e0029240200b80a00011048003b22011700151c1806221e0029240200b90a00011048003b17000a18181f1c1600541806221e0029240200ba0a00011048003b17000a18171f1c1600391806221e0029240200bb0a00011048003b22011700151c1806221e0029240200bc0a00011048003b17000a181a1f1c160007181b1f1c1b020b1c260a000010221e00a6240a0000101f1d1b020b1b260a000010221e00a6240a0000101f1e181c18173f221700091c181c18183f2217002d1c131e006222011700231c131e002b1e00bd221e0014240a000010221e0029240200be0a00011048003b1700052000181c18173f221700091c181c18183f221700151c181d221e0029240200620a00011048003b1700052000181c181a3e2217000a1c181e0200003f170005200012001f1d0200bf2500da261f0646000306000f271f09131e000a1e00c01f06050019131e000a221e00c1240200c20a0001104800191f06071806263e17000400131e000a221e0082240200c30a0001101f070200c4131e00c526492710131e0021221e0023240a0000102a480a0a000210280200c428131e00191a00221e001a240a000010281f0818000200c6180828281f00180718001d00c71318080200002500311b030b011800041c460003060006271f0605001c1b030b06221e00c8241b030b070a0001101c131b030b080907000d1806221e00c92418070a0001101c001f1e0200ca2500be18001e00241f0618064802331f07180117003018001806480129191f0818074804291f07180818074803293a22011700091c1808180739170005260018081f0748001f09180918063a17004a18001809131e00cb221e00cc2418001809194900ff2f18001809194808354900ff2f18001809194810354900ff2f18001809194818354900ff2f0a0004100d18092d1f0916ffb41800221e00a1240200000a0001101f0a1801170013180a221e003724480018070a00021000180a001f200200cd25007f18001e00241f0618064802341f07180648032f48004017000818072d1f07180117001a131e00ce18074801281a011f081808180718060d16000d131e00ce18071a011f0848001f09180918063a17002c1808180948023423191800221e00cf2418090a000110180948032f48033333300d18092d1f0916ffd21808001f210200d025000a18001400d12f001f220200d2250030180248053518014802333118014803351802480433312818001801311805180348032f180431191802312831001f230200d325001818001e002448043a17000a180048041d00241800001f240200d42500d618001e00241f0618064801291f0718001807191f0948001f0a131e0021221e0022244806483418062b280a0001104800301f0d180d4800391700981b020b22180a1b020b1f28041f0a180a48023548032f1f0b48001f0c180c18073a17003d1800180c480128191f081800180c1b020b221800180c191b020b2326180a18081809180c180b18010a00061028040d271f09180c2d1f0c16ffc118004800191f08180018071b020b2218001807191b020b2326180a180818091807180b18010a00061028040d271f09180d2e1f0d16ff661800001f250200d52500d818001e00241f0618064801291f0718004800191f08131e0021221e0022244806483418062b280a0001101f0d1b020b22180d1b020b1f2a041f0a180a480040170093180a48023548032f1f0b18071f0c180c48003917003d1800180c480129191f091800180c1b020b221800180c191b020b2326180a18081809180c180b18010a00061029040d271f08180c2e1f0c16ffc118001807191f09180048001b020b2218004800191b020b2326180a180818094800180b18010a00061029040d271f081b020b22180a1b020b1f29041f0a16ff6b1800001f260200d62501ac131e000f0200d70200001a02221e00122418000a0001101700061800000a00001f0618001e00241f0748001f0848001f09180818073a1701641800221e00cf2418080a0001101f0a180a4900803a170018180618091800221e00352418080a0001100d16012a180a4908003a17002a18061809131e00cb221e00cc244900c0180a48063430490080180a483f2f300a0002100d1600fa180a4a0000d8003a220117000c1c180a4a0000dfff3917003618061809131e00cb221e00cc244900e0180a480c3430490080180a480634483f2f30490080180a483f2f300a0003100d1600ae180848012818073a1700991800221e00cf2418084801280a0001101f0b180a4a0000dc003a2217000c1c4a0000dc00180b3c2217000c1c180b4a0000dfff3c170062180a4903ff2f480a33180b4903ff2f304a00010000281f0c18061809131e00cb221e00cc244900f0180c481234483f2f30490080180c480c34483f2f30490080180c480634483f2f30490080180c483f2f300a0004100d18082d1f0816000d131e00d80200d91a014718082d1f0818092d1f0916fe9a1806221e00a1240200000a000110001f270200da25024e131e00ce18011a011f0648001f0748001f0818001e00241f09180718013a221700091c180818093a1702051800221e00cf241808222d1f080a0001101f0a180a4804341f0c180c480040170061180c480140170059180c480240170051180c480340170049180c480440170041180c480540170039180c480640170031180c480740170029180c480c4017002b180c480d40170023180c480e40170055180c480f401700a216016816017d18061807180a0d160173180818093a17002818061807180a481f2f4806331800221e00cf241808222d1f080a000110483f2f300d16000d131e00d80200db1a0147160139180848012818093a17004018061807180a480f2f480c331800221e00cf241808222d1f080a000110483f2f480633301800221e00cf241808222d1f080a000110483f2f300d16000d131e00d80200db1a01471600e4180848022818093a1700b4180a48072f4812331800221e00cf241808222d1f080a000110483f2f480c33301800221e00cf241808222d1f080a000110483f2f480633301800221e00cf241808222d1f080a000110483f2f304a00010000291f0b4800180b3c2217000c1c180b4a000fffff3c17002f18061807222d1f07180b480a344903ff2f4a0000d800300d18061807180b4903ff2f4a0000dc00300d16001b131e00d80200dc180b221e00142448100a000110281a014716000d131e00d80200db1a014716001b131e00d80200dd180a221e00142448100a000110281a014718072d1f0716fdef180718013a17000a180618071d0024131e00cb1e00cc131e00cb180610001f280200de2502aa0a00001f06131e00ce4a000080001a011f0748001f0848001f0918001e00241f0a180818013a221700091c1809180a3a1702431800221e00cf241809222d1f090a0001101f0b180b4804341f0e180e480040170061180e480140170059180e480240170051180e480340170049180e480440170041180e480540170039180e480640170031180e480740170029180e480c4017002b180e480d40170023180e480e40170055180e480f401700a216016816017d18071808180b0d1601731809180a3a17002818071808180b481f2f4806331800221e00cf241809222d1f090a000110483f2f300d16000d131e00d80200db1a01471601391809480128180a3a17004018071808180b480f2f480c331800221e00cf241809222d1f090a000110483f2f480633301800221e00cf241809222d1f090a000110483f2f300d16000d131e00d80200db1a01471600e41809480228180a3a1700b4180b48072f4812331800221e00cf241809222d1f090a000110483f2f480c33301800221e00cf241809222d1f090a000110483f2f480633301800221e00cf241809222d1f090a000110483f2f304a00010000291f0c4800180c3c2217000c1c180c4a000fffff3c17002f18071808222d1f08180c480a344903ff2f4a0000d800300d18071808180c4903ff2f4a0000dc00300d16001b131e00d80200dc180c221e00142448100a000110281a014716000d131e00d80200db1a014716001b131e00d80200dd180b221e00142448100a000110281a01471808497fff4801293b17003518084801281f0d1807180d1d0024180618061e0024131e00cb1e00cc131e00cb1807100d1801180d291f0148004801291f0818082d1f0816fdb11808480039170020180718081d0024180618061e0024131e00cb1e00cc131e00cb1807100d1806221e00a1240200000a000110001f290200df2500b11801213e22011700081c1801263e22011700091c180148003a17000a18001e00241f01180148003e17000702000000131e000f0200d70200001a02221e00122418000a000110220117001c1c131e000f0200e00200001a02221e00122418000a00011001170021180118001e00243e1700061800001800221e00e124480018010a0002100018014a0000ffff3a1700131b020b2826180018010a0002101600101b020b2926180018010a000210001f2a0200e22500681800213e22011700081c1800263e220117000c1c18001e002448003e1700061800001b020b271800041f001b020b271801041f011b020b20261b020b25261b020b21261800200a0002101b020b241b020b21261801120a000210040a000210120a000210001f2b0200e32500641800213e22011700081c1800263e220117000c1c18001e002448003e1700061800001b020b271801041f011b020b2a1b020b20261b020b26261b020b21261800120a0002101b020b241b020b21261801120a000210040a000210200a00021004001f2c0200e425019d0200e51f060200321f0718021700080200001f07180117000718011f060200001f0848001f0a18001e0024180a4803283b1700b31800221e00cf24180a222d1f0a0a0001104900ff2f4810331800221e00cf24180a222d1f0a0a0001104900ff2f480833301800221e00cf24180a222d1f0a0a0001104900ff2f301f0918081806221e00352418094a00fc00002f4812340a000110281f0818081806221e00352418094a0003f0002f480c340a000110281f0818081806221e0035241809490fc02f4806340a000110281f0818081806221e0035241809483f2f0a000110281f0816ff4518001e0024180a294800391700a81800221e00cf24180a222d1f0a0a0001104900ff2f48103318001e0024180a3917001a1800221e00cf24180a0a0001104900ff2f4808331600054800301f0918081806221e00352418094a00fc00002f4812340a000110281f0818081806221e00352418094a0003f0002f480c340a000110281f08180818001e0024180a3917001a1806221e0035241809490fc02f4806340a0001101600051807281f0818081807281f081808001f2d0200e62500120200e7221e00292418000a000110001f2e0200e82501100200001f0648001f07180718001e00244803293a1700f61b020b2e1800221e00352418074800280a000110041f081b020b2e1800221e00352418074801280a000110041f091b020b2e1800221e00352418074802280a000110041f0a1b020b2e1800221e00352418074803280a000110041f0b1806131e00cb221e00cc2418084802331809480435300a000110281f061800221e00352418074802280a0001100200323f1700271806131e00cb221e00cc2418094804334900f02f180a480235480f2f300a000110281f061800221e00352418074803280a0001100200323f1700211806131e00cb221e00cc24180a4806334900c02f180b300a000110281f0618074804281f0716ff021806001f2f0200e925004a1800483f2f1f00131e00cb221e00cc2418001800481a3a1700084841160025180048343a17000848471600181800483e3a17000b48004804291600084800481129280a000110001f310200ea2500331b020b311f06180618004818340418061800481234042818061800480c340428180618004806340428180618000428001f320200eb2500981b020b121e00ec0200ed281f061b020b1e26180602000025007818001e002448083a17000400460003060006271f0605005f1b020b2c261b020b2f1800221e00a32448080a000110041800221e00a324480048080a0002100a0002101f0618060200ee3e1700131b020b38262018000a0002101c16001918060200ef3e1700101b020b38261218000a0002101c07000a0002101c001f370200f025004e1b020b1218001d00f1460003060006271f06050038131e0039170016131e0039221e003e240200f218010a0002101c131e003b170016131e003b221e003e240200f218010a0002101c07001f380200f32500a90200001f06460003060006271f0705003f131e0039170015131e0039221e003a240200f20a0001101f0618060122011700081c131e003b170015131e003b221e003a240200f20a0001101f06071806170055460003060006271f070500491b020b2c261b020b2f1806221e00a32448080a000110041806221e00a324480048080a0002100a0002101f0718070200ee3e170008200016000e18070200ef3e17000512000712001f390200f42500fe121f061b020b121e00f1203e170009201f061600201b020b121e00f1123e170009121f0616000e1b020b39260a0000101f06131e00071a0022121d00f522121d002d2218061d00f622121d00f722121d004922121d00f822121d00f922121d005f22121d007922121d00fa220200fb25000520001f0818081d00121f0718071b020b0d260a0000101d00f718071e00f7011700671b020b131807041c1b020b171807041c18071b020b14260a0000101d00f818071b020b15260a0000101d00f918071b020b16260a0000101d005f18071b020b18260a0000101d00fa18071b020b19260a0000101d002d18071b020b1d260a0000101d00f51807001f3a0200fc25005c131e0007221e00fd2418000a0001101f0648001f0718061e00244801291f08180848003b1700321800180618081919170008480116000548001f09180918061e0024180829480129331807301f0718082e1f0816ffcc1807001f3b0200fe25003848001f06180618011e00243a17002618004a0001003f2a1801221e00cf2418060a000110284800351f0018062d1f0616ffd51800001f3c0200ff25003848001f06180618011e00243a17002618001801221e00cf2418060a000110314a0001003f2a4800351f0018062d1f0616ffd51800001f3d0201002500a348001f06180618011e00243a1700911801221e00cf2418060a0001101f0718074a0000d8003b2217000c1c18074a0000dbff3c2217000c1c180618011e00243a1700451801221e00cf2418064801280a0001101f0818084a0000fc002f4a0000dc003d17002218074903ff2f480a3318084903ff2f284a00010000281f0718064801281f0618004a0001003f2a1807284800351f0018062d1f0616ff6a1800001f3e020101250077180022011700071c0200001f061806221e008524131e000f0201020200001a020200000a0002101f061806221e0029240200ed0a0001104800480129401700211806221e00e12448001806221e0029240200ed0a0001100a00021016000518061f06180617000818061600060200981f061806001f3f0201032500b1180022011700071c0200001f061806221e007324131e000f0201040200001a020a0001101f0718071700161807480019221e00e12448010a0001101600060200001f0618061700141806221e0033240201050a000110160004261f08131e00071a001f09180817004548001f0a180a18081e00243a17003618091808180a19221e0033240200320a0001104800191808180a19221e0033240200320a0001104801190d180a2d1f0a16ffc51809001f4002010625009118000122011700171c131e0107221e01082418000a0001100201093e17000a131e00071a0000131e0007221e00fd2418000a000110221e010a240a0000101f06131e00071a001f0748001f08180818061e00243a170037180117001a180718061808191800180618081919020000280d1600131807180618081918001806180819190d18082d1f0816ffc41807001f4102010b250078131e00ce221e010c2418000a0001101700131800221e010d241b020b420a000110001800131e000741170049131e0007221e00fd2418000a000110221e010a240a0000101f061806221e010e24020000250017180018011b020b421b030b00180119040d180000131e00071a000a000210001800001f4202010f25007d18000122011700171c131e0107221e01082418000a0001100201093e17000702000000131e0007221e00fd2418000a000110221e010a240a0000101f060200001f0748001f08180818061e00243a170029180718061808190a00010200322818001806180819192802010528281f0718082d1f0816ffd21807001f430201102500cb131e000a221e0082240200830a0001101f07180748301d0111180748101d01121807221e0091240201130a0001101f0818080201141d01151808221e0116240201174802480c0a0003101c180848021d0118180848011d0119180802011a1d011b1808221e011c24480848084808480048020a0005101c1808221e011d240a0000101c1807221e0084240a0000101f0648001f09180948203a17002c18004a0001003f2a1806221e00cf24180018061e00242c0a000110284800351f0018092d1f0916ffd21800001f4402011e25002046000306000c271f0648004801290005000d1b020b4414011f040007001f45020120250011110201201d009e1118001d0121001f4602012225001a460003060008271f06200005000b131e003901010007001f4702012325001a460003060008271f06200005000b131e003b01010007001f4802012425001a460003060008271f06200005000b131e007701010007001f490201252500301b020b0b1b020b49260a000010041b020b0b1b020b48260a00001004281b020b0b1b020b47260a0000100428001f4a020126250023131e01271f0618061e01110200c42818061e0112280200c42818061e012828001f4b020129250019131e01271f0618061e012a0200c42818061e012b28001f4c02012c250071131e012d02000025006402012e131e002b42170051131e002b221e012e240a000010221e012f240200002500311b040b001800020130190200c428180002013119280200c428180002013219280200c42818000201331928041c000a0001101c16000a1800020000041c001a01001f4d02013425007d0201351f0648001f0721131e002b180619430200024017000f131e002b1806191f0716001c21131e002b180619430200024017000c131e002b1806191f07460003060009271f0a121f08050018131e000a221e0136240201370a0001101c201f080702013813421f0918070200c4281808280200c428180928001f4e020139250067131e00191a001f061806221e013a2448010a0001101c1806221e013b2448050a0001101c48001806221e013c240a000010291f071806221e013b24480b0a0001101c48001806221e013c240a000010291f08131e0021221e013d24180718080a000210001f4f02013e2501dd02013f0201400201410a00031f06131e00071a001f07131e00071a001f08131e000a1e00c00117000702001e001806031f0e180e21041700711f0d131e000a221e0082240201420a0001101f0f180f0201431d0144180f1e01450201461d0147180f1e0145180d1d0148131e000a1e00c0221e00c924180f0a0001101c1807180d180f1e01490d1808180d180f1e014a0d131e000a1e00c0221e00c824180f0a0001101c16ff8e02014b02014c02014d02014e02014f02015002015102015202015302015402015502015602015702015802015902015a02015b02015c02015d02015e02015f0201600201610201620201630201640201650201660201670a001d1f0948001f0b271f0a271f0c48001f0d180d18091e00243a1700b31806031f0f180f210417009f1f0e131e000a221e0082240201420a0001101f1018100201431d014418101e01450201461d014718101e01451809180d1902016828180e281d0148131e000a1e00c0221e00c92418100a0001101c18101e01491807180e1940220117000f1c18101e014a1808180e19401f11131e000a1e00c0221e00c82418100a0001101c1811170018180d481e3a17000d4801180d33180a301f0a16000616ff60180d2d1f0d16ff48180a221e00142448100a000110001f5002016925002146000306000c271f0618061e01210005000e131e016a02016b1a011c07001f5102016c250014131e016d221e0014240a0000101e0024001f5202016e2501e81b020b07260a000010220117000d1c1b020b09260a00001022011700231c131e002b1e00a5221e00a6240a000010221e00292402016f0a00011048003917000702000000131e017022011700081c131e017122011700081c131e01721f06131e012d02000025017d46000306000d271f061800020000041c0501691b030b0617015a1b030b06131e00071a0022131e00071a00220201731d01740a00011d01751a011f06020000250004001f07131e000f0201760200001a021f08131e000f0201770200871a021f091806221e0178240200000a0001101c131e01792602000025000d1b040b00020000041c004901f40a0002101c1806221e017a240a0000101f0a180a131e012d41170038180a221e012f240200002500131b040b06221e017b2418000a000110000a000110221e012f24020000250004000a0001101c1600301806221e017a2402000025001c1b040b06221e017b2418001b040b071b040b070a0003101c0018070a0002101c18060200002500601800221700091c18001e017c2217000c1c18001e017c1e017c1700431b040b08221e017d2418001e017c1e017c0a0001101f0618061700271806480019221e0073241b040b090a0001101f07180717000e1b040b001806480019041c001d017e16000a1800020000041c07001a01001f5302017f25005d020180221e008524131e000f0201810200871a0202000025003e131e0021221e0023240a00001048102a4800301f0618000201823d170008180616000b180648032f4808301f071807221e00142448100a000110000a000210001f5402018325005518001e002448223e1700481b020b3c2648001800221e003724480048200a0002100a0002101f061806221e0014240a000010221e003724480048020a0002101800221e003724482048220a0002103e0012001f5502018425005d1b020b0f020185041f0618062217000b1c1b020b551806041700061806001b020b54260a0000101f0618061b020b3c26480018060a00021028221e003724480048220a0002101f061b020b102602018518060a0002101c1806001f56020186250033180001170007020000001b020b0c4804041f0618061b020b2d261b020b2b26180018060a0002100201870a00021028001f5702018825015d180117003a48001f0b48001f0c180c18001e00243a1700271800180c191e01891700141800180c191801180b222d1f0b191d018a180c2d1f0c16ffd40200001f061800221e018b2402000025001b1b03220b061b020b0b18001e018a0402018c28281d018d000a0001101c18061b020b0a260a000010281f061b020b54260a0000101f07131e0021221e0022241807221e00cf2448030a00011048082b0a0001101807221e00cf2448030a00011048082c281f081807221e003724480448041808280a0002101f091b020b2d1b020b2b26180618090a000210180728041f061b020b12221e018e02018f131e01901806042802010528281d018e271f0a1b020b1e26180a02000025004d18000201911948003d2217000a1c1800020192191700351b020b121b020b57180002019219041d01931b020b121800020192191d01941b020b10260201951800020192190a0002101c000a0002101c001f5802019625049a131e002b221700051c13221700081c131e000a0117000400131e00071a00220201971d01982248041d01992218001e01971d018a131e00071a002202019a1d01982248031d0199221b020b0a1d019b131e00071a002202019c1d01982248031d0199221b020b4a1d019b131e00071a00220200831d01982248031d0199221b020b451d019b131e00071a002202019d1d01982248031d0199221b020b0a1d019b131e00071a00220200a71d01982248001d0199131e00071a002202019e1d01982248001d0199131e00071a002202019f1d01982248001d0199131e00071a00220201a01d01982248001d0199131e00071a00220200611d01982248001d0199131e00071a00220201a11d01982248031d0199221b020b4b1d019b131e00071a00220201a21d01982248031d0199221b020b4c1d019b131e00071a00220201a31d01982248011d0199131e00071a00220201a41d01982248011d0199131e00071a00220201a51d01982248011d0199131e00071a00220201a61d01982248001d0199131e00071a00220201a71d01982248031d0199221b020b4d1d019b2248011d0189131e00071a00220201a81d01982248031d0199221b020b4e1d019b131e00071a00220201a91d01982248031d0199221b020b4f1d019b131e00071a00220201aa1d01982248031d0199221b020b0a1d019b131e00071a00220201ab1d01982248031d0199221b020b1b1d019b131e00071a00220201ac1d01982248031d0199221b020b501d019b131e00071a00220201ad1d01982248031d0199221b020b1c1d019b131e00071a00220201ae1d01982248031d0199221b020b0a1d019b131e00071a00220200a51d01982248001d0199131e00071a00220201af1d01982248031d0199221b020b0f1d019b220201951d01b0131e00071a00220201b11d01982248031d0199221b020b511d019b131e00071a00220201b21d01982248031d0199221b020b521d019b131e00071a00220201b31d01982248031d0199221b020b531d019b2248011d0189131e00071a002202002d1d01982248011d0199131e00071a00220201b41d01982248041d0199221b020b061e01b51d018a131e00071a00220201b61d01982248031d0199221b020b561d019b131e00071a00220201b71d01982248031d0199221b020b0a1d019b131e00071a00220201b81d01982248041d01990a00221f060a00001f07180608031f09180921041700db1f0818061808191e01991f0a180a48004017001e180a480140170033180a480240170040180a4803401700501600a918061808191b020b0b131e002b18061808191e019819041d018a16008c18061808191318061808191e0198191d018a1600771806180819131e000a18061808191e0198191d018a16005f18061808191e0189170032131e012d1700281807221e009c2418061808191e019b221e00282418061808191e01b00a0001100a0001101c160025180618081918061808191e019b221e0028242618061808191e01b00a0002101d018a16ff24131e012d170036131e012d221e01b92418070a000110221e012f240200002500141b020b58261b030b0618000a0002101c000a0001101c16000b1b020b581806041c001f590201ba250044131e000a2217000b1c131e000a1e01bb01170004001b020b5b08031f071807210417001f1f06131e000a221e01bb2418061b020b5b1806190a0002101c16ffe0001f5d0201bc25008418001e00244900c8391700131800221e01bd24480048640a0002101c18001e002448003917004e180018001e0024480129191f0618011e01be18061e01be2948003c220117002a1c0201bf1801422217000f1c18011e018218061e01823d2217000f1c18011e01bf18061e01bf3d170004001800221e009c2418010a0001101c001f610201c025006048001f0618001e01c122011700091c18001e01c222011700091c18001e01c322011700091c18001e01c417000748011f061b020b61261b020b60131e00071a002218061d018222131e0019221e01c5240a0000101d01be0a0002101c001f620201c625006d18001f0618001e009d1f0718001e01c72217000a1c18070201c83e17001318001e01c94800191f061b02201d01ca131e00071a002218061e01cb1d01822218061e01cc1d01bf22131e0019221e01c5240a0000101d01be1f081b020b61261b020b5e18080a0002101c001f630201cd25006d18001f0618001e009d1f0718001e01c72217000a1c18070201ce3e17001318001e01c94800191f061b02201d01ca131e00071a002218061e01cb1d01822218061e01cc1d01bf22131e0019221e01c5240a0000101d01be1f081b020b61261b020b5f18080a0002101c001f640201cf2500191800221e010e241b020b650a00011018001e00242b001f670201d025006818001e002448013c1700064800001b020b671800041f061800221e010d2402000025000b18001b030b0629000a0001101f07131e0021221e01d1241807221e010d241b020b660a000110221e010e241b020b650a00011018001e00244801292b0a000110001f680201d22500d548001f0648001f0718001e00241801391700ba0a00001f0848001f09180918001e00244801293a17008418001809480128191f0a18001809191f0b180a1e01be180b1e01be291f0c180c17005918021700171808221e009c244801180c2b0a0001101c1600401808221e009c24131e0021221e01d1241b020b66180a1e0182180b1e018229041b020b66180a1e01bf180b1e01bf2904280a000110180c2b0a0001101c18092d1f0916ff741b020b671808041f061b020b681808041f07180748003d1700081401d31f07180618070a0002001f690201d4250119121f06460003060006271f0b05002b131e000a2217000b1c131e000a1e0136170017131e000a221e0136240201370a0001101c201f06071b020b69261b020b5e48010a0002101f071b020b69261b020b604805200a0003101f0848011f09180601221700081c1b020b5c17000a18094840301f091b020b5e1e002448003e17000d18094802301f09160015180748001948323917000a18094810301f091b020b5f1e002448003e17000a18094804301f091b020b601e002448003e17000d18094808301f0916001618084800191401d53917000a18094820301f091809221e00142448200a0001101f0a180a1e002448013e17000e0201d6180a281f0a160016180a1e002448023e17000b02001e180a281f0a180a001f6a0201d725002d0200001f06460003060006271f070500191b020b0e260201d8131e000a1e003c0a0002101f06071806001f6b0201d9250053131e0107221e010824131e00071a002218001d001122131e01da131e0107221e01082418011e00c00a000110041d01db2218021d01980a0001101f061b020b2d261806020187200a0003101f071807001f6c0201dc250420211801430200023e2217000c1c21180043020001402217000a1c18001e01dd0117000d1b020b460201de1a014748001f0648001f074a0000fff11f08131e00191a00221e001a240a0000104903e82b4800351f091b020b061e01df012217003e1c1b020b3d261b020b3d2648001809020000280a000210131e002d1e008c221e003724131e002d1e01e01e00244802280a0001100a00021018082c1f071809180718082a31480035221e00142448020a0001101f0a180a1f0b180a1e002448203917001b180a221e003724180a1e00244820290a0001101f0b16003c180a1e002448203a1700310200001f1c48001f1d181d4820180a1e0024293a170013181c02001e281f1c181d2d1f1d16ffe5181c180b281f0b0201e11f0c0201e21f0d0201e31f0e180e180d28180c28180b281f06131e00c526180648020a0002101f061b020b3d2648001806020000280a0002101f0f1b020b3a260a0000101f100200001f11180117000a18011f1116011e1b020b5a1e01e4221e002824110201e518000a0003101c18001e00c02217001a1c131e0107221e01082418001e00c00a0001100201094017006f48001f1d18001e01e61700331b020b3e264800131e0107221e0108241b020b412618001e00c018001e01e60a0002100a0001100a0002101f1d1600271b020b3e264800131e0107221e0108241b020b4218001e00c0040a0001100a0002101f1d0201e7181d28020105281f111b020b4018001e01dd041f1c18001e01e817001a131e0007221e01e924181c18001e01e80a000210160005181c1f1c18111b020b43181c04281f1118110201ea281b020b3f18001e01dd0428020105281f1118110201eb280201ec281f111b020b5a1e01e4221e002824110201ed18110a0003101c1b020b3b1810041f121b020b061e01df012217000d1c1b020b45260a0000101f131b020b061e01df012217001e1c1b020b121e019322011700111c1b020b571b020b0f02019504041f141b020b331806041b020b3318061401ee2b48003504281b020b33181318063104281b020b331b020b3d26180f1b020b061e01df012217000b1c131e002b1e00a5221e0014240a0000100a00021018082c4810331b020b3d26180f1811020000280a00021018082c3004281b020b3318124808331b020b061e01ef4804333018063104281b020b32180704281f151b020b334800041c181417000a18151814281f151b020b6a260a00001022011700071c0201f01f160200c41b020b6d281b020b061e01f1281f1718171816281f1718171b020b6e181528281f171b020b3e26480018170a000210221e00142448100a0001101f181818221e00a32418181e002448022918181e00240a0002101f1918171819281f170200001f1a1b020b6b260a0000101f1b181b17001f1b020b6c26181b180018110a0003101f1a18170201f228181a281f171817001f6f0201f325003b48001f0618061b020b121e01f41e00243a1700251b020b121e01f4180619221e00122418000a000110170005200018062d1f0616ffd112001f700201f5250375131e01f61e00271f0618061e00781f0718061e01f71f0818061e01f81f0918061e01f91f0a18061e01fa170007001600091806201d01fa1806020000250076111e01fb01170065111e01fc221e009c24131e00071a00220201f71d01fd221b041d01fe0a0001101c131e000f0201ff0200111a02221e00122418000a00011017002a111801221e0014240a000010221e00a6240a000010221e0033240202000a0001104800191d02011b030b08111b0410001d01f71806020000250012111b041d02021b030b0a111b0410001d01f91806020000250040110a00001d01fc111e01fc221e009c24131e00071a00220200781d01fd221b041d01fe0a0001101c1118001d02031118011d02041b030b07111b0410001d007802020502007a02020602020702020802020902020a0a00071f0b180602000025023811201d01fb1b020b70111e02040417021e111e0204221e00292402020b0a00011048004801293917000c1b030b09111b0410001118001d020c111e020d1f06111e02051f07111e007a1f08111e02061f09111e02071f0a111e02081f0b111e02091f0c111e020a1f0d111e020e1f0e111e020f1f0f131e00071a001f1048001f1518151b030b0b1e00243a17002118101b030b0b181519111e02101b030b0b181519190d18152d1f1516ffd8131e00071a00221b020b79261b030b00111e02040a0002101d01dd1f11111e02030202113d17003c111e02010202123e220117000c1c111e02010202133e17001a1b020b77261811111e0201111e020c0a0003101c16000c1b030b09111b0410001b020b7c1b030b00041700151b030b00221e02142418110a00011016000a1b020b6f1811041f121b020b7a26111e020418120a0002101f13111e01fc221700131c111e01fc4800190201fd190200783f1700052600111e01fc1f1448001f15181518141e00243a170036181548003e17001018141815191e01fe480118130d1118141815190201fd19191118141815191e01fe101c18152d1f1516ffc5111e020217000e111e01f911111e0202101c110201fc091118061d020d1118071d02051118081d007a1118091d020611180a1d020711180b1d020811180c1d020911180d1d020a11180e1d020e11180f1d020f48001f1518151b030b0b1e00243a170021111e02101b030b0b18151918101b030b0b181519190d18152d1f1516ffd81b030b09111b0410001d01f8001f710202152502d102021625029e1801220117000a1c131e00071a001f011b020b722217000b1c1800131e0217411f060200001f070202181f08180617001418001e01dd1f0718001e02191f0816002418001f0718011e021917001418011e0219221e021a240a00001016000518081f081808020218402217000a1c180802021140220117000c1c1b020b70180704011700111b030b0626180018010a00021000131e00071a00221b020b79261b030b0018070a0002101d01dd1f0918080202113d1701621b020b7626180018010a000210221e0033240202000a000110480019221e00a6240a0000101f0a180a0202123e220117000a1c180a0202133e17011518061700b61800221e021b240a000010221e021c240a000010221e012f240200002500761b020b77261b040b091b040b0a18000a0003101c1b020b7c1b030b00041700171b030b00221e0214241b040b090a00011016000c1b020b6f1b040b09041f061b020b7a261b040b0718060a0002101f071b020b78261b040b00180718000a0003101f081b030b062618081b040b010a00021000020000250016131e012d0200002500091b050b0047001a01000a0002100016005a1b020b77261809180a18011e00c00a0003101c1b020b7c1b030b00041700151b030b00221e02142418090a00011016000a1b020b6f1809041f0b1b020b7a261807180b0a0002101f0c1b030b0626180c18010a000210001600111b030b0626180018010a0002100016008718080202183e1700701b020b7c1b030b00041700151b030b00221e02142418090a00011016000a1b020b6f1809041f0a1b020b7a261807180a0a0002101f0b18061700241b020b78261800180b210a0003101f0c1b030b0626180c18010a000210001600111b030b0626180b18010a000210001600111b030b0626180018010a00021000001f071b020b75260a0000100117000400131e021d1700070016000813201d021d131e021e1f061318071d021e001f7402021f250008131e021e001f7502022025010d0200001f061b020b722217000b1c1800131e02174117002218001e0221221e004a240202220a0001101f07180717000718071f061806001801221700091c18011e02211700c61b020b732217000e1c18011e0223131e02244117002218011e0221221e004a240202220a0001101f07180717000718071f0618060018011e0221131e00ce4117004448001f07180718011e02211e00243a17003218011e0221180719480019221e00a6240a0000100202223d17000f18011e02211807194801190018072d1f0716ffc618011e0221131e00074117003618011e022108031f08180821041700231f071807221e00a6240a0000100202223e17000c18011e02211807190016ffdc180600001f760202252500ba1802263e220117000a1c18020200003e1700061800001802221e0014240a0000101f0218010202123e1700771800201d01e61802221e0033240201050a0001101f06131e00071a001f07180617004a48001f08180818061e00243a17003b18071806180819221e0033240200320a000110480019131e02261806180819221e0033240200320a000110480119040d18082d1f0816ffc0180018071d00c01600171800131e0107221e02272418020a0001101d00c01800001f77020228250069131e02171801131e00071a002218001e02191d02192218001e02211d02212218021d00c02218001e02291d02292218001e022a1d022a2218001e022b1d022b2218001e022c1d022c2218001e022d1d022d2218001e022e1d022e2218001e022f1d022f1a02001f780202302500ad18011f061b020b121e02311e002448003917008048001f0718071b020b121e02311e00243a17006c1b020b121e02311807194800191f081808221e00122418010a0001101700451801221e00852418081b020b121e02311807194801190a0002101f061b020b5a1e01e4221e0028241800020232020233180128020234281806280a0003101c16000b18072d1f0716ff8a131e022618060418063d17000c131e01da1806041f061806001f7902023525002d18001800221e0029240200ed0a00011048004801294017000c02023618012816000902023718012828001f7a0202382500141b020b711800041c1b020b741800041c001f7b02023925000b18001b020b7e41001f7c02023a25001911131e0107221e0227241b020b7d0a0001101d023b001f7e02023c2500a81b020b061e01df17000526001b020b7c110417000a111e023b1600071b020b121f06131e0007221e01e924180618000a0002101c1b020b811806041c18061e02381700201b020b8218061e023d041c1b020b8318061e023e041c1b020b7b11041c1b020b5d260a0000101c1b020b121e023f01221700091c18061e01961700271b020b12201d023f1b020b37260a0000101c131e0179261b020b59480018060a0003101c001f8002024025006618001e019748003e220117001c1c131e0021221e00222418001e01970a00011018001e01973f17000d1b020b460202411a014718001e023817002a18001e023d1e002448003e220117000d1c18001e023d1e009c0117000d1b020b460202421a0147001f8102024325003f48001f06180618001e00243a17002f180018061917001f1b020b121e01f4221e009c24131e000f18001806191a010a0001101c18062d1f0616ffcc001f8202024425004c1800214017004448001f06180618001e00243a1700351b020b121e0231221e009c24131e000f18001806194800191a0118001806194801190a00020a0001101c18062d1f0616ffc6001f83020245250011131e024622011700071c020000001f840202472500561b020b0f1b020b061e02480422011700071c0200001f061b020b111b020b061e0248041c18060202493d17000b0200001f0616001518060200003d17000c131e000a1e02291f0618061700091318061d0246001f8521131e00071e01e943020004401700c1131e0007221e004724131e00070201e9131e00071a00220201e925008e1800263e22011700081c1800213e17000d131e024a02024b1a0147131e00071800041f0648011f0718071b031e00243a1700581b031807191f0818082640221700081c18082140170039180808031f0a180a210417002c1f09131e00071e00271e024c221e002824180818090a00021017000d1806180918081809190d16ffd318072d1f0716ffa31806001f8618861d024d22201d024e22201d024f0a0003101c131e00071e00fd01170114131e0007020000250102131e00071e00271e024c1f06131e00071a0022261d0014221e0250240200140a000110011f0702001402025102025202024c0202530202500200100a00071f0818081e00241f090200002500b42118004302000440221700161c211800430200014022011700081c1800263e17000d131e024a0202541a01470a00001f06180008031f091809210417002a1f071b030b06221e002824180018070a0002101700111806221e009c2418070a0001101c16ffd51b030b0717004548001f0818081b030b093a1700371b030b06221e00282418001b030b081808190a0002101700161806221e009c241b030b081808190a0001101c18082d1f0816ffc518060000260a0000101d00fd131e00071a00220202551d01b52248021d01ef22121d01df220202461d0248220202561d01f11f06131e00071a0022121d02572248001d019722121d019622121d0238220a00001d023d220a00001d01f4220a00001d023e220a00001d0231220202581d018e220202591d00ec2202025a1d025b1f12131e00071a001f1a14025c1f1f48001f3002000025001e1b021b020b351d025d1b0218001d025e1b020b32180048023404001f34271f3302000025002a1b021b020b361d025d1b020b30481c331800480435301f061b0218001d025e1b020b32180604001f350200002500271b021b020b341d025d1b020b321b020b30481a33180048063530041b020b3118000428001f36131e00071a0022020000250049121f061b020b7c110417000f111e023b1e02571f0616000c1b020b121e02571f061806221700201c131e004b221e004c2402025f1800280202602802026118010a0003101c001d01e41f5a131e00071a002218631d02622218631d01c82218621d02632218641d01ce2218641d02641f5b121f5c0a00001f5e0a00001f5f0a00001f600200002500091800180128001f65020000250009180018002a001f660202651f6d0202661f6e131e02172217000d1c131e0217131e0007411f72131e02242217000d1c131e0224131e0007411f73131e0107221e01082418120a0001101f7d186f1f7f187e1e002718801d023c187e1e0027187f1d0214187e1e002718841d02451806122217000b1c180d260a0000101d01df1885260a0000101c1800187e1d023a180018841d0245180018801d023c1800187f1d0214131e0007221e0047241800020267131e00071a0022201d024d0a0003101c000a0002101c0002680006b7bab2bdbbac09adb6bcbdbeb1b6bdbc06bcbdbeb1b6bd08beadb6bbacb1b7b603b9b5bc07bda0a8b7aaacab0697bab2bdbbac0ebaa1acbdbc87b9bbaab9afb4bdaa04b1ab919d08bcb7bbadb5bdb6ac0cbcb7bbadb5bdb6ac95b7bcbd09b1ab9eb1aabdbeb7a00e91b6abacb9b4b48caab1bfbfbdaa08b1ab8bb9beb9aab1068abdbf9da0a80bbbb7b6abacaaadbbacb7aa01b104acbdabac0b908c95949db4bdb5bdb6ac08acb78bacaab1b6bf2183b7bab2bdbbacf88bb9beb9aab18abdb5b7acbd96b7acb1beb1bbb9acb1b7b68506abb9beb9aab110a8adabb096b7acb1beb1bbb9acb1b7b60cbfbdac8cb1b5bdabacb9b5a8049cb9acbd07bfbdac8cb1b5bd08bfbdac8eb9b4adbd07bab7b7b4bdb9b601e901e80caab9b6bcb7b58bacaab1b6bf3ee8e9eaebecedeeefe0e1b9babbbcbdbebfb0b1b2b3b4b5b6b7a8a9aaabacadaeafa0a1a2999a9b9c9d9e9f909192939495969788898a8b8c8d8e8f8081820495b9acb005beb4b7b7aa06aab9b6bcb7b506b4bdb6bfacb009bcb7b59cbdacbdbbac0f83b7bab2bdbbacf88fb1b6bcb7af8509a8aab7acb7aca1a8bd04bbb9b4b407b1b6bcbda097be089cb7bbadb5bdb6ac09b6b9aeb1bfb9acb7aa1283b7bab2bdbbacf896b9aeb1bfb9acb7aa8508b4b7bbb9acb1b7b607b0b1abacb7aaa11083b7bab2bdbbacf890b1abacb7aaa1850abfbdac9eaab7b58bacaa06abacaab1b6bf01e505aba8b4b1ac0483e3fe8506bbb0b9aa99ac01f809abadbaabacaab1b6bf09bfbdac9bb7b7b3b1bd0eabbdababb1b7b68bacb7aab9bfbd07bfbdac91acbdb50cb4b7bbb9b48bacb7aab9bfbd06bbb7b7b3b1bd09abbdac9bb7b7b3b1bd07abbdac91acbdb531e5e3f8bda0a8b1aabdabe595b7b6f4f8eae8f88bbda8f8eae8e9e8f8e8e8e2e8e8e2e8e8f88d8c9be3f8a8b9acb0e5f7e30ae3f8bda0a8b1aabdabe50bacb79f958c8bacaab1b6bf09e3f8a8b9acb0e5f7e309bcbdb49bb7b7b3b1bd0aaabdb5b7aebd91acbdb50ebcbdbaadbfbfbdaa9cbdacbdbbac0591b5b9bfbd0ebcbdbeb1b6bd88aab7a8bdaaaca102b1bc08bcbdbaadbfbfbdaa03bfbdac07bbb7b6abb7b4bd03b4b7bf02fdbb07beb1aabdbaadbf0ab7adacbdaa8fb1bcacb00ab1b6b6bdaa8fb1bcacb00bb7adacbdaa90bdb1bfb0ac0bb1b6b6bdaa90bdb1bfb0ac0ab6b7bcbd9cbdacbdbbac07a8aab7bbbdabab1083b7bab2bdbbacf8a8aab7bbbdabab850da8b0b9b6acb7b59cbdacbdbbac07a8b4adbfb1b6ab0b88b4adbfb1b699aaaab9a10887a8b0b9b6acb7b50bbbb9b4b488b0b9b6acb7b50b8787b6b1bfb0acb5b9aabd0599adbcb1b7189bb9b6aeb9ab8abdb6bcbdaab1b6bf9bb7b6acbda0acea9c0fafbdbabcaab1aebdaa9cbdacbdbbac09afbdbabcaab1aebdaa13bfbdac97afb688aab7a8bdaaaca196b9b5bdab09b4b9b6bfadb9bfbdab06bbb0aab7b5bd07aaadb6acb1b5bd07bbb7b6b6bdbbac148787afbdbabcaab1aebdaa87bdaeb9b4adb9acbd138787abbdb4bdb6b1adb587bdaeb9b4adb9acbd1b8787afbdbabcaab1aebdaa87abbbaab1a8ac87beadb6bbacb1b7b6178787afbdbabcaab1aebdaa87abbbaab1a8ac87beadb6bb158787afbdbabcaab1aebdaa87abbbaab1a8ac87beb6138787bea0bcaab1aebdaa87bdaeb9b4adb9acbd128787bcaab1aebdaa87adb6afaab9a8a8bdbc158787afbdbabcaab1aebdaa87adb6afaab9a8a8bdbc118787bcaab1aebdaa87bdaeb9b4adb9acbd148787abbdb4bdb6b1adb587adb6afaab9a8a8bdbc148787bea0bcaab1aebdaa87adb6afaab9a8a8bdbc0987abbdb4bdb6b1adb50cbbb9b4b48bbdb4bdb6b1adb516878bbdb4bdb6b1adb587919c9d878abdbbb7aabcbdaa05b5b9acbbb00a84fc83b9f5a285bcbb8706bbb9bbb0bd870fb1b6bbb7bfb6b1acb79cbdacbdbbac09b1b6bcbda0bdbc9c9a04b7a8bdb609b1b6bbb7bfb6b1acb707b7b6bdaaaab7aa04bbb7bcbd0c9c97959da0bbbda8acb1b7b612898d978c99879d809b9d9d9c9d9c879d8a8a10abb7b5bd93bda190bdaabd9aa1acbdbc0c88b7b1b6acbdaa9daebdb6ac0e958b88b7b1b6acbdaa9daebdb6ac0ab0b7b7b39cbdacbdbbac0dbbaabdb9acbd9db4bdb5bdb6ac06bbb9b6aeb9ab09acb79cb9acb98d8a9407aabda8b4b9bbbd0384abf201bf0ab6b9acb1aebdbbb7bcbd1483b7bab2bdbbacf888b4adbfb1b699aaaab9a1850eb4b7bbb9acb1b7b69cbdacbdbbac4a86b0acaca8abe7e284f784f7f083e8f5e185a3e9f4eba5f084f683e8f5e185a3e9f4eba5f1a3eba5a483b9f5bee8f5e185a3e9f4eca5f0e283b9f5bee8f5e185a3e9f4eca5f1a3efa5f104b0aabdbe04beb1b4bd10b0acaca8e2f7f7b4b7bbb9b4b0b7abac06bfbdac9fa8ad079f888d91969e970abfbdac9bb7b6acbda0ac05afbdbabfb40cbfbdac9da0acbdb6abb1b7b6198f9d9a9f9487bcbdbaadbf87aabdb6bcbdaabdaa87b1b6beb70cbfbdac88b9aab9b5bdacbdaa158d9695998b939d9c878e9d969c978a878f9d9a9f94178d9695998b939d9c878a9d969c9d8a9d8a878f9d9a9f9401f70abfbdac88b4adbfb1b6ab0688948d9f919604b1acbdb504a8adabb004aca1a8bd04b6b9b5bd07aebdaaabb1b7b608beb1b4bdb6b9b5bd04b2b7b1b602fbfb05abb4b1bbbd0cbbb7b6abb1abac9bb0bdbbb309adabbdaa99bfbdb6ac0bacb794b7afbdaa9bb9abbd08a8b4b9acbeb7aab507afb1b6bcb7afab03afb1b607b9b6bcaab7b1bc05b4b1b6ada006b1a8b0b7b6bd04b1a8b9bc04b1a8b7bc03b5b9bb09b5b9bbb1b6acb7abb00cb5b9bb87a8b7afbdaaa8bbf104bbaab7ab03a0e9e905bbaab1b7ab05bea0b1b7ab04a8b1b3bd08beb1aabdbeb7a0f706b7a8bdaab9f705f8b7a8aaf707bbb0aab7b5bdf708acaab1bcbdb6acf704b5abb1bd06aebdb6bcb7aa069fb7b7bfb4bd05b2abb7b6a804bab7bca114bfbdac9db4bdb5bdb6acab9aa18cb9bf96b9b5bd04b0bdb9bc06abbbaab1a8ac018708a8b9aaabbd91b6ac09bbb9b4b4bab9bbb3e503abaabb0baabdb5b7aebd9bb0b1b4bc0bb9a8a8bdb6bc9bb0b1b4bc0eacb79ab1b6b9aaa18bacaab1b6bf068bacaab1b6bf0cbeaab7b59bb0b9aa9bb7bcbd0dacb78db1b6acebea99aaaab9a10599aaaab9a10abbb0b9aa9bb7bcbd99ac05b1b6acebea0aeceae1ece1eeefeae1ed02b5a004beb1a0b312bdb6bbaaa1a8ac8db1b6acebea99aaaab9a112bcbdbbaaa1a8ac8db1b6acebea99aaaab9a10aadacbee09db6bbb7bcbd0e868384a0e8e8f584a0efbe85f2fc059daaaab7aa1095b9b4beb7aab5bdbcf8abacaab1b6bf15adacbee09cbdbbb7bcbd8bb0b7aaac8bacaab1b6bf1f8db6beb1b6b1abb0bdbcf88d8c9ef5e0f8b7bbacbdacf8abbda9adbdb6bbbd299bb0b9aab9bbacbdaaf8b7adacabb1bcbdf8aeb9b4b1bcf88db6b1bbb7bcbdf8aab9b6bfbde2f8e8a0159ab9bcf88d8c9ef5e0f8bdb6bbb7bcb1b6bff8e8a014adacbee09cbdbbb7bcbd94b7b6bf8bacaab1b6bf0aadacbee09cbdbbb7bcbd0e868384a0e8e8f584a0bebe85f2fc06abadbaabacaa05a0a0acbdb907bcbdbbaaa1a8ac0ebab9abbdeeec8bacb9b6bcb9aabc409cb3bca8bfb0ec8293ab899ae0e8f795beaeafebee8091e98aeaedf38f8d99b49db1ef9694bab7a9818c9788ada2b59eb292b6aaa1a0e1908e9fbbb98bac9bbd10bab9abbdeeec87bbb0b9aa91b6bcbda040999a9b9c9d9e9f909192939495969788898a8b8c8d8e8f808182b9babbbcbdbebfb0b1b2b3b4b5b6b7a8a9aaabacadaeafa0a1a2e8e9eaebecedeeefe0e1f3f714bab9abbdeeec8bacb9b6bcb9aabc9cbdbbb7bcbd09bab9abbdeeec87bbb006baeeec87ebe808bfbdac88b9aab9b508a8b9aab9b58daab401e702b7b603b7bebe09abbdac8bafb1acbbb00e87a8b9aab9b58bafb1acbbb097b60f87baa1acbdbc87a8b9aab9b587abaf12bfbdac8bafb1acbbb09eaab7b59bb9bbb0bd0fbcbdacbdbbac99b6b7b5b9b4b1bdab0abbb7b6abb1abacbdb6ac06abafb1acbbb003bcb7b504b6b7bcbd07a8b0b9b6acb7b504b0b7b7b30bacbdabac9ebdb9acadaabd0eb9ababbdb5bab4bd8abdabadb4ac04b3bda1ab0babbcbab587abacb9bab4bd04abbcbab510abbcbab587abacb9bab4bd87a8b7b6a107bfbdac88b9acb022f0b0acaca8e284f784f7a4b0acaca8abe284f784f7a484f784f7f1e7838684f785f208bfbdac89adbdaaa10e83e785f084aff3e5f6f2fee7f1f201fe07b7bab28bb7aaac04928b979609abacaab1b6bfb1bea102a3a504abb7aaac08b2abb7b68bb7aaac07b1ab99aaaab9a103b5b9a806aabdbcadbbbd07b7bab2ea8bacaa12bbb9b6aeb9ab87beb1b6bfbdaaa8aab1b6ac05afb1bcacb006b0bdb1bfb0ac02eabc0ae9eca8a0f8abbdaab1be04beb7b6ac08beb1b4b48cbda0ac0440c9f8650aabb0b9bcb7af9ab4adaa0babb0b7af97bebeabbdac8004b4b1b5bd09abb0b7af9bb7b4b7aa03b9aabb06abacaab7b3bd09bfbdac9bb9b6aeb9ab0aebefebede1eae0edede10f9bb7b6beb1bf9da0bbbda8acb1b7b607b5bdababb9bfbd11b0b9ab8bbdababb1b7b68bacb7aab9bfbd0fb0b9ab94b7bbb9b48bacb7aab9bfbd0cb0b9ab91b6bcbda0bdbc9c9a0cbfbdac99bab1b4b1acb1bdab0dbfbdac8abdabb7b4adacb1b7b606abbbaabdbdb60abbb7b4b7aa9cbda8acb012bfbdac99aeb9b1b48abdabb7b4adacb1b7b60ab9aeb9b1b48fb1bcacb00bb9aeb9b1b490bdb1bfb0ac0ebfbdac9ab9acacbdaaa191b6beb70788aab7b5b1abbd0abfbdac9ab9acacbdaaa104acb0bdb608bbb0b9aabfb1b6bf0cbbb0b9aabfb1b6bf8cb1b5bd0fbcb1abbbb0b9aabfb1b6bf8cb1b5bd05b4bdaebdb40cbfbdac8cb7adbbb091b6beb70eb5b9a08cb7adbbb088b7b1b6acab0bbbaabdb9acbd9daebdb6ac0a8cb7adbbb09daebdb6ac0cb7b6acb7adbbb0abacb9aaac0bbfbdac8cb1b5bda2b7b6bd07abbdac9cb9acbd08abbdac95b7b6acb011bfbdac8cb1b5bda2b7b6bd97bebeabbdac03b5b1b608bfbdac9eb7b6acab09b5b7b6b7aba8b9bbbd0aabb9b6abf5abbdaab1be05abbdaab1be04aba8b9b60db5b5b5b5b5b5b5b5b5b5b4b4b109b1b6b6bdaa908c959405abaca1b4bd04efeaa8a008beb7b6ac8bb1a2bd0abeb7b6ac9eb9b5b1b4a10bb7bebeabbdac8fb1bcacb00cb7bebeabbdac90bdb1bfb0ac0c8caabdbaadbbb0bdacf8958b098fb1b6bfbcb1b6bfab078ba1b4beb9bdb6088bbdbfb7bdf88d910a9bb7b6abacb9b6acb1b90b8bb1b58badb6f59da0ac9a08958cf89da0acaab9059fadb4b1b50a94bdbdb4b9afb9bcbdbd058cadb6bfb90695bdb1aaa1b7068eaab1b6bcb9099bb7aabcb1b98d889b0999a8b9aab9b2b1acb90791aab1ab8d889b0888b9b4b9acb1b6b70a9bb7b4b7b6b6b9f8958c0888b4b9a1bab1b4b40892b7b3bdaab5b9b60988b9aabbb0b5bdb6ac0a958bf897adacb4b7b7b3098caff89bbdb6f8958c0697888c919599069eadacadaab906998e9d96918a0c99aab1b9b4f890bdbaaabdaf0a8bb9aeb7a1bdf8949d8c099bb9abacbdb4b4b9aa0a95818a91999cf8888a9701f40ebfbdac8ba1b6acb9a09daaaab7aa098fbdba8bb7bbb3bdac109baabdb9acbdf88fbdba8bb7bbb3bdac0fbfbdac96b9acb1aebd94bdb6bfacb004bdaeb9b408bfbdac8aacbb91a80baeb1aeb7baaab7afabbdaa118a8c9b88bdbdaa9bb7b6b6bdbbacb1b7b614b5b7a28a8c9b88bdbdaa9bb7b6b6bdbbacb1b7b617afbdbab3b1ac8a8c9b88bdbdaa9bb7b6b6bdbbacb1b7b61cabacadb6e2abacadb6f6b4f6bfb7b7bfb4bdf6bbb7b5e2e9e1ebe8ea04adaab4ab0ab1bbbd8bbdaaaebdaaab3ef083e8f5e185a3e9f4eba5f084f683e8f5e185a3e9f4eba5f1a3eba5a483b9f5bee8f5e185a3e9f4eca5f0e283b9f5bee8f5e185a3e9f4eca5f1a3efa5f13586f0e9e1ea84f6e9eee084f6a4e9eee184f6eaedec84f6a4e9e884f6a4e9efea84f6f0e983eef5e185a4ea84bca4eb83e8e985f1f111bbaabdb9acbd9cb9acb99bb0b9b6b6bdb40aabbdac8cb1b5bdb7adac0bbbaabdb9acbd97bebebdaa13abbdac94b7bbb9b49cbdabbbaab1a8acb1b7b609bbb9b6bcb1bcb9acbd04bda0bdbb0eb7b6b1bbbdbbb9b6bcb1bcb9acbd04adadb1bc20a0a0a0a0a0a0a0a0a0a0a0a0eca0a0a0a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a00483a0a18501a00dbbb0bdbbb39bb4b1bdb6ac91bc0bbfbdac9bb4b1bdb6ac91bc05acacbbb1bc0dbdb6bbaaa1a8ac8bbdbb9cb1bc40999a9b9c9d9e9f909192939495969788898a8b8c8d8e8f808182b9babbbcbdbebfb0b1b2b3b4b5b6b7a8a9aaabacadaeafa0a1a2e8e9eaebecedeeefe0e1f5f60eb9ababbdb5bab4bd88b9aab9b5ab01a801aa07beb7aa9db9bbb002868601ee0cbea888aab7beb1b4bd8daab403e7a9e512bdb6bbb7bcbd8d8a919bb7b5a8b7b6bdb6ac08aabdac87bbb7bcbd02bea80e87baa1acbdbc87abbdbb87bcb1bc0c87aab9af87abbdbb87bcb1bc07acac87abbbb1bc03bcbea803b9b1bc01b601be09abacb9aaac8cb1b5bd01ac09b9bab1b4b1acb1bdab0aacb1b5bdabacb9b5a8e913b0b9aabcafb9aabd9bb7b6bbadaaaabdb6bba10cbcbdaeb1bbbd95bdb5b7aaa108b4b9b6bfadb9bfbd0aaabdabb7b4adacb1b7b60fb9aeb9b1b48abdabb7b4adacb1b7b609abbbaabdbdb68cb7a80aabbbaabdbdb694bdbeac10bcbdaeb1bbbd88b1a0bdb48ab9acb1b70aa8aab7bcadbbac8badba07bab9acacbdaaa109acb7adbbb091b6beb708acb1b5bda2b7b6bd0aacb1b5bdabacb9b5a8ea07bfa8ad91b6beb70bb2ab9eb7b6acab94b1abac0ba8b4adbfb1b6ab94b1abac0aacb1b5bdabacb9b5a8eb0abdaebdaa9bb7b7b3b1bd01b50baba1b6acb9a09daaaab7aa0cb6b9acb1aebd94bdb6bfacb005aaacbb918809bea88ebdaaabb1b7b60b8787aebdaaabb1b7b6878708bbb4b1bdb6ac91bc0aacb1b5bdabacb9b5a8ec0bbda0acbdb6bc9eb1bdb4bc03b9b4b410abacb9aaac8bb1b5a8b1beb1bdbc8dba10b9bcbc9daebdb6ac94b1abacbdb6bdaa09b9bcbc8cb794b1abac06aba8b4b1bbbd01bc01a113b0b9b6bcb4bd93bda1bab7b9aabc9daebdb6ac06b9b4ac93bda107bbacaab493bda107b5bdacb993bda108abb0b1beac93bda103b6b7af13b0b9b6bcb4bd88b7abb1acb1b7b69daebdb6ac0ebbb0b9b6bfbdbc8cb7adbbb0bdab09acb7adbbb0b5b7aebd07acb7adbbb0bdab02e1ea07bbb4b1bdb6ac8007bbb4b1bdb6ac8110b0b9b6bcb4bd9bb4b1bbb39daebdb6ac0aacb7adbbb0abacb9aaac08bbb9b4bb95bdb9b615bbb9b4bb8bacb9b6bcb9aabc9cbdaeb1b9acb1b7b604aba9aaac09bbb9b4bb8ba8bdbdbc04e8f6e8e915bfbdac8bb1b5a8b4b1beb1bdbc8dba8abdabadb4ac03e8f6ed02e8e809bfbdac8cbdabac91bc0b8787b9bb87acbdabacb1bc0fbfbdb6bdaab9acbd8cbdabac94b7bf09bdb6bbb7bcbd8d8a9101ba0cbfbdac8bb1bfb6b9acadaabd03adaab42cb6b7b6bbbdf8b5adabacf8babdf8b9b6f8b7bab2bdbbacf8afb1acb0f8b9f8adaab4f8a8aab7a8bdaaaca1f90bbcb7b596b7ac8eb9b4b1bc08a8aab7acb7bbb7b404e8e8e8e808e8e8e8e8e8e8e8e902e9e805bcbdbaadbf05b6b7b6bbbd0bbab7bca18eb9b4eaabacaa0abab7bca187b0b9abb0e505a9adbdaaa106b9ababb1bfb609a8b9acb0b6b9b5bde509acac87afbdbab1bce506feadadb1bce508b6b7b6bbbd8bacaa0aeceae1ece1eeefeae1ee09bebd8ebdaaabb1b7b603e8e8e80ba8adabb08ebdaaabb1b7b601f20db1ab9db6b9bab4bdbc88b9acb01487bdb6b9bab4bd88b9acb094b1abac8abdbfbda00cb1b6acbdaabbbda8ac80908a0e80959490acaca88abda9adbdabac10abbdac8abda9adbdabac90bdb9bcbdaa04abbdb6bc10b7aebdaaaab1bcbd95b1b5bd8ca1a8bd0f87b9bb87b1b6acbdaabbbda8acbdbc0587abbdb6bc1587baa1acbdbc87b1b6acbdaabbbda8ac87b4b1abac04beadb6bb09b9aabfadb5bdb6acab0e86bbb7b6acbdb6acf5aca1a8bdfc01e30e87baa1acbdbc87bbb7b6acbdb6ac1187b7aebdaaaab1bcbd95b1b5bd8ca1a8bd0d87baa1acbdbc87b5bdacb0b7bc0a87baa1acbdbc87adaab407b7b6b9bab7aaac06b7b6b4b7b9bc09b7b6b4b7b9bcbdb6bc0bb7b6b4b7b9bcabacb9aaac0ab7b6a8aab7bfaabdabab09b7b6acb1b5bdb7adac0b87abb1bfb6b9acadaabde50b87baa1acbdbc87bab7bca112b7b6aabdb9bca1abacb9acbdbbb0b9b6bfbd0caabdaba8b7b6abbd8ca1a8bd07acb1b5bdb7adac06ada8b4b7b9bc0488978b8c21b9a8a8b4b1bbb9acb1b7b6f7a0f5afafaff5beb7aab5f5adaab4bdb6bbb7bcbdbc10b9a8a8b4b1bbb9acb1b7b6f7b2abb7b604abb1bfb60eb1b6acbdaabbbda8ac9ebdacbbb009afaab9a89ebdacbbb0078abda9adbdabac039f9d8c06b5bdacb0b7bc0bacb78da8a8bdaa9bb9abbd05bbb4b7b6bd04acbda0ac168787b9bb87b1b6acbdaabbbda8acbdbc87bebdacbbb005bebdacbbb00dabada8a8b7aaacab9ebdacbbb01487bfbdac9ebdacbbb09bb7b6acbdb6ac8ca1a8bd07b0bdb9bcbdaaab0cbbb7b6acbdb6acf5aca1a8bd06b0bdb9bcbdaa0790bdb9bcbdaaab0bada8bcb9acbd96b7b6bbbd12bcbdbbb7bcbd8d8a919bb7b5a8b7b6bdb6ac05a8b9aaabbd0fbaadb1b4bc96bdaf8abda9adbdabac08aabdbebdaaaabdaa0eaabdbebdaaaabdaa88b7b4b1bba104b5b7bcbd0bbbaabdbcbdb6acb1b9b4ab05bbb9bbb0bd08aabdbcb1aabdbbac09b1b6acbdbfaab1aca10ebfbdac8abdafaab1acbdbc8daab41087adaab48abdafaab1acbd8aadb4bdab0baabdafaab1acbd8daab4f808978a919f9196e2f80bd28a9d8f8a918c9d9ce2f808baadb1b4bc8daab40cfe87abb1bfb6b9acadaabde50ce787abb1bfb6b9acadaabde509b1b6acbdaabbbda8ac19b1ab91b6abacb9b6bbbd97be9aa1acbdbc99bbaab9afb4bdaa0d9aa1acbdbc99bbaab9afb4bdaa07b7a8acb1b7b6ab04b1b6b1ac0ebdb6b9bab4bd88b9acb094b1abac0fadaab48abdafaab1acbd8aadb4bdab0487bcbea80faeb9b4b1bcb9acbd97a8acb1b7b6ab1eb7a8acb1b7b6f8b9b1bcf091b6acbdbfbdaaf1f8b1abf8b6bdbdbcbdbcf927b7a8acb1b7b6f8bdb6b9bab4bd88b9acb094b1abacf099aaaab9a1f1f8b1abf8b6bdbdbcbdbcf910bfbdb688b9acb094b1abac8abdbfbda012bfbdb68daab48abdafaab1acbd8abdbfbda00abfbdac8abdbebdaabdaa0c8787b9bb87aabdbebdaabdaa10bcbdb9b48abdbebdaabdaa9bb9bbb0bd0aaabdbebdaabdaa93bda10a8787b9bb87bab4b9b6b3098ca1a8bd9daaaab7aa2a9bb9b6b6b7acf8bbb7b6aebdaaacf8adb6bcbdbeb1b6bdbcf8b7aaf8b6adb4b4f8acb7f8b7bab2bdbbac0eb0b9ab97afb688aab7a8bdaaaca105aeb9b4adbd08afaab1acb9bab4bd0cbbb7b6beb1bfadaab9bab4bd14a8aab7a8bdaaaca191ab9db6adb5bdaab9bab4bd0eacb794b7bbb9b4bd8bacaab1b6bf07aeb9b4adbd97be0db1ab88aab7acb7aca1a8bd97be2097bab2bdbbacf6b3bda1abf8bbb9b4b4bdbcf8b7b6f8b6b7b6f5b7bab2bdbbac05eaf6e9f6e1069aec82eeafb703bab7bd29b0acaca8abe2f7f7a0a0babff6abb6ababbcb3f6bbb7b5f7afbdbaabbcb3f7aee9f7bfbdac91b6beb723b0acaca8abe2f7f7a0a0babff6abb6ababbcb3f6bbb7b5f7afbdbaabbcb3f7aee9f7a823b0acaca8abe2f7f7a0a0babff6abb6ababbcb3f6bbb7b5f7afbdbaabbcb3f7aee9f7ac05adba8daab40aeaeeedececebedefeee102ede902ece003fdbbf802f5e60dbbb7b4b7aae2fbbae9e9edbcea09b5b7adabbdb5b7aebd07b3bda1bcb7afb609b5b7adabbdbcb7afb602e8ea02e8e90a8787bdab95b7bcadb4bd", [, , "undefined" != typeof exports ? exports : void 0, "undefined" != typeof module ? module : void 0]);
不苦小和尚 发表于 2020-12-31 22:54
不苦小和尚 发表于 2020-12-31 22:50
[mw_shl_code=javascript,true]_$jsvmprt = function(b, a, e) {
    function f() {
        if ("und ...

https://creator.douyin.com/creator-micro/home,这个是网址,控制台输出window.byted_acrawler.sign('','asd')
window.byted_acrawler.sign这个方法被混淆了
打印出来的就是siguare
"_02B4Z6wo00d01EMC5fgAAIBA-8Sbp1GoJ-xDB-FAAE8yR2bt5DdM.TS4Jhe5e6EVoHjCBMNBIlAlHrsFCFtWmviV2P6iWFkcopMFt.ppZI8WrLHGFL.dpqKxrr1rrS6Fsi5I6RY0VByNT5sgc7"
不苦小和尚 发表于 2020-12-31 22:35
天空宫阙 发表于 2020-12-31 22:43
不苦小和尚 发表于 2020-12-31 22:35
能讲下抖音那个siguare混淆怎么还原吗

抖音web端现在不返回重要参数tac所以搞定了也拿不到数据,并且那个代码属于精心设计的大型控制流平坦化代码,还原的难度上天,一般只能补充其检测的浏览器属性
不苦小和尚 发表于 2020-12-31 22:51
天空宫阙 发表于 2020-12-31 22:43
抖音web端现在不返回重要参数tac所以搞定了也拿不到数据,并且那个代码属于精心设计的大型控制流平坦化代 ...

是发布视频那个siguare,不是需要tac的
 楼主| 漁滒 发表于 2021-1-1 00:36
本帖最后由 漁滒 于 2021-1-1 00:45 编辑
天空宫阙 发表于 2020-12-31 22:43
抖音web端现在不返回重要参数tac所以搞定了也拿不到数据,并且那个代码属于精心设计的大型控制流平坦化代 ...

其实有一个骚操作,就是多线程一直请求web的接口,多请求几十次以后,有可能会有视频数据返回
QQ截图20210101004500.jpg
好久丿好酒 发表于 2021-1-1 07:58
siguare混淆怎么还原还原处出来
天空宫阙 发表于 2021-1-1 09:22
漁滒 发表于 2021-1-1 00:36
其实有一个骚操作,就是多线程一直请求web的接口,多请求几十次以后,有可能会有视频数据返回 ...

可以, 还有这操作。抖音web端也算是风控拉满连自己也不放过
 楼主| 漁滒 发表于 2021-1-1 11:20
好久丿好酒 发表于 2021-1-1 07:58
siguare混淆怎么还原还原处出来

赋空值就可以,不校验的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-8 11:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表