(function(t, e, i) {
    function n(i) {
        var r = e[i];
        if (!r) {
            var s = t[i];
            if (!s)
                return;
            var a = {};
            r = e[i] = {
                exports: a
            },
            s[0]((function(t) {
                return n(s[1][t] || t)
            }
            ), r, a)
        }
        return r.exports
    }
    for (var r = 0; r < i.length; r++)
        n(i[r])
}
)({
    1: [(function(t) {
        "use strict";
        t("../core/platform/CCClass");
        var e = t("../core/utils/misc");
        cc.Action = cc.Class({
            name: "cc.Action",
            ctor: function() {
                this.originalTarget = null,
                this.target = null,
                this.tag = cc.Action.TAG_INVALID
            },
            clone: function() {
                var t = new cc.Action;
                return t.originalTarget = null,
                t.target = null,
                t.tag = this.tag,
                t
            },
            isDone: function() {
                return !0
            },
            startWithTarget: function(t) {
                this.originalTarget = t,
                this.target = t
            },
            stop: function() {
                this.target = null
            },
            step: function() {
                cc.logID(1006)
            },
            update: function() {
                cc.logID(1007)
            },
            getTarget: function() {
                return this.target
            },
            setTarget: function(t) {
                this.target = t
            },
            getOriginalTarget: function() {
                return this.originalTarget
            },
            setOriginalTarget: function(t) {
                this.originalTarget = t
            },
            getTag: function() {
                return this.tag
            },
            setTag: function(t) {
                this.tag = t
            },
            retain: function() {},
            release: function() {}
        }),
        cc.Action.TAG_INVALID = -1,
        cc.FiniteTimeAction = cc.Class({
            name: "cc.FiniteTimeAction",
            extends: cc.Action,
            ctor: function() {
                this._duration = 0
            },
            getDuration: function() {
                return this._duration * (this._timesForRepeat || 1)
            },
            setDuration: function(t) {
                this._duration = t
            },
            reverse: function() {
                return cc.logID(1008),
                null
            },
            clone: function() {
                return new cc.FiniteTimeAction
            }
        }),
        cc.Speed = cc.Class({
            name: "cc.Speed",
            extends: cc.Action,
            ctor: function(t, e) {
                this._speed = 0,
                this._innerAction = null,
                t && this.initWithAction(t, e)
            },
            getSpeed: function() {
                return this._speed
            },
            setSpeed: function(t) {
                this._speed = t
            },
            initWithAction: function(t, e) {
                return t ? (this._innerAction = t,
                this._speed = e,
                !0) : (cc.errorID(1021),
                !1)
            },
            clone: function() {
                var t = new cc.Speed;
                return t.initWithAction(this._innerAction.clone(), this._speed),
                t
            },
            startWithTarget: function(t) {
                cc.Action.prototype.startWithTarget.call(this, t),
                this._innerAction.startWithTarget(t)
            },
            stop: function() {
                this._innerAction.stop(),
                cc.Action.prototype.stop.call(this)
            },
            step: function(t) {
                this._innerAction.step(t * this._speed)
            },
            isDone: function() {
                return this._innerAction.isDone()
            },
            reverse: function() {
                return new cc.Speed(this._innerAction.reverse(),this._speed)
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }),
        cc.speed = function(t, e) {
            return new cc.Speed(t,e)
        }
        ,
        cc.Follow = cc.Class({
            name: "cc.Follow",
            extends: cc.Action,
            ctor: function(t, e) {
                this._followedNode = null,
                this._boundarySet = !1,
                this._boundaryFullyCovered = !1,
                this._halfScreenSize = null,
                this._fullScreenSize = null,
                this.leftBoundary = 0,
                this.rightBoundary = 0,
                this.topBoundary = 0,
                this.bottomBoundary = 0,
                this._worldRect = cc.rect(0, 0, 0, 0),
                t && (e ? this.initWithTarget(t, e) : this.initWithTarget(t))
            },
            clone: function() {
                var t = new cc.Follow
                  , e = this._worldRect
                  , i = new cc.Rect(e.x,e.y,e.width,e.height);
                return t.initWithTarget(this._followedNode, i),
                t
            },
            isBoundarySet: function() {
                return this._boundarySet
            },
            setBoudarySet: function(t) {
                this._boundarySet = t
            },
            initWithTarget: function(t, e) {
                if (!t)
                    return cc.errorID(1022),
                    !1;
                e = e || cc.rect(0, 0, 0, 0),
                this._followedNode = t,
                this._worldRect = e,
                this._boundarySet = !(0 === e.width && 0 === e.height),
                this._boundaryFullyCovered = !1;
                var i = cc.winSize;
                return this._fullScreenSize = cc.v2(i.width, i.height),
                this._halfScreenSize = this._fullScreenSize.mul(.5),
                this._boundarySet && (this.leftBoundary = -(e.x + e.width - this._fullScreenSize.x),
                this.rightBoundary = -e.x,
                this.topBoundary = -e.y,
                this.bottomBoundary = -(e.y + e.height - this._fullScreenSize.y),
                this.rightBoundary < this.leftBoundary && (this.rightBoundary = this.leftBoundary = (this.leftBoundary + this.rightBoundary) / 2),
                this.topBoundary < this.bottomBoundary && (this.topBoundary = this.bottomBoundary = (this.topBoundary + this.bottomBoundary) / 2),
                this.topBoundary === this.bottomBoundary && this.leftBoundary === this.rightBoundary && (this._boundaryFullyCovered = !0)),
                !0
            },
            step: function() {
                var t = this.target.convertToWorldSpaceAR(cc.Vec2.ZERO)
                  , i = this._followedNode.convertToWorldSpaceAR(cc.Vec2.ZERO)
                  , n = t.sub(i)
                  , r = this.target.parent.convertToNodeSpaceAR(n.add(this._halfScreenSize));
                if (this._boundarySet) {
                    if (this._boundaryFullyCovered)
                        return;
                    this.target.setPosition(e.clampf(r.x, this.leftBoundary, this.rightBoundary), e.clampf(r.y, this.bottomBoundary, this.topBoundary))
                } else
                    this.target.setPosition(r.x, r.y)
            },
            isDone: function() {
                return !this._followedNode.activeInHierarchy
            },
            stop: function() {
                this.target = null,
                cc.Action.prototype.stop.call(this)
            }
        }),
        cc.follow = function(t, e) {
            return new cc.Follow(t,e)
        }
    }
    ), {
        "../core/platform/CCClass": 193,
        "../core/utils/misc": 267
    }],
    2: [(function() {
        "use strict";
        function t(t, e, i, n, r, s) {
            var a = s * s
              , o = a * s
              , l = (1 - r) / 2
              , h = l * (2 * a - o - s)
              , c = l * (-o + a) + (2 * o - 3 * a) + 1
              , u = l * (o - 2 * a + s) + -2 * o + 3 * a
              , _ = l * (o - a)
              , f = t.x * h + e.x * c + i.x * u + n.x * _
              , d = t.y * h + e.y * c + i.y * u + n.y * _;
            return cc.v2(f, d)
        }
        function e(t, e) {
            return t[Math.min(t.length - 1, Math.max(e, 0))]
        }
        function i(t) {
            for (var e = [], i = t.length - 1; i >= 0; i--)
                e.push(cc.v2(t[i].x, t[i].y));
            return e
        }
        function n(t) {
            for (var e = [], i = 0; i < t.length; i++)
                e.push(cc.v2(t[i].x, t[i].y));
            return e
        }
        cc.CardinalSplineTo = cc.Class({
            name: "cc.CardinalSplineTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._points = [],
                this._deltaT = 0,
                this._tension = 0,
                this._previousPosition = null,
                this._accumulatedDiff = null,
                void 0 !== i && cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return e && 0 !== e.length ? !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this.setPoints(e),
                this._tension = i,
                !0) : (cc.errorID(1024),
                !1)
            },
            clone: function() {
                var t = new cc.CardinalSplineTo;
                return t.initWithDuration(this._duration, n(this._points), this._tension),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._deltaT = 1 / (this._points.length - 1),
                this._previousPosition = cc.v2(this.target.x, this.target.y),
                this._accumulatedDiff = cc.v2(0, 0)
            },
            update: function(i) {
                var n, r;
                i = this._computeEaseTime(i);
                var s = this._points;
                if (1 === i)
                    n = s.length - 1,
                    r = 1;
                else {
                    var a = this._deltaT;
                    r = (i - a * (n = 0 | i / a)) / a
                }
                var o, l, h = t(e(s, n - 1), e(s, n - 0), e(s, n + 1), e(s, n + 2), this._tension, r);
                if (cc.macro.ENABLE_STACKABLE_ACTIONS && (o = this.target.x - this._previousPosition.x,
                l = this.target.y - this._previousPosition.y,
                0 !== o || 0 !== l)) {
                    var c = this._accumulatedDiff;
                    o = c.x + o,
                    l = c.y + l,
                    c.x = o,
                    c.y = l,
                    h.x += o,
                    h.y += l
                }
                this.updatePosition(h)
            },
            reverse: function() {
                var t = i(this._points);
                return cc.cardinalSplineTo(this._duration, t, this._tension)
            },
            updatePosition: function(t) {
                this.target.setPosition(t),
                this._previousPosition = t
            },
            getPoints: function() {
                return this._points
            },
            setPoints: function(t) {
                this._points = t
            }
        }),
        cc.cardinalSplineTo = function(t, e, i) {
            return new cc.CardinalSplineTo(t,e,i)
        }
        ,
        cc.CardinalSplineBy = cc.Class({
            name: "cc.CardinalSplineBy",
            extends: cc.CardinalSplineTo,
            ctor: function(t, e, i) {
                this._startPosition = cc.v2(0, 0),
                void 0 !== i && this.initWithDuration(t, e, i)
            },
            startWithTarget: function(t) {
                cc.CardinalSplineTo.prototype.startWithTarget.call(this, t),
                this._startPosition.x = t.x,
                this._startPosition.y = t.y
            },
            reverse: function() {
                for (var t, e = this._points.slice(), n = e[0], r = 1; r < e.length; ++r)
                    t = e[r],
                    e[r] = t.sub(n),
                    n = t;
                var s = i(e);
                for (n = s[s.length - 1],
                s.pop(),
                n.x = -n.x,
                n.y = -n.y,
                s.unshift(n),
                r = 1; r < s.length; ++r)
                    (t = s[r]).x = -t.x,
                    t.y = -t.y,
                    t.x += n.x,
                    t.y += n.y,
                    s[r] = t,
                    n = t;
                return cc.cardinalSplineBy(this._duration, s, this._tension)
            },
            updatePosition: function(t) {
                var e = this._startPosition
                  , i = t.x + e.x
                  , n = t.y + e.y;
                this._previousPosition.x = i,
                this._previousPosition.y = n,
                this.target.setPosition(i, n)
            },
            clone: function() {
                var t = new cc.CardinalSplineBy;
                return t.initWithDuration(this._duration, n(this._points), this._tension),
                t
            }
        }),
        cc.cardinalSplineBy = function(t, e, i) {
            return new cc.CardinalSplineBy(t,e,i)
        }
        ,
        cc.CatmullRomTo = cc.Class({
            name: "cc.CatmullRomTo",
            extends: cc.CardinalSplineTo,
            ctor: function(t, e) {
                e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, .5)
            },
            clone: function() {
                var t = new cc.CatmullRomTo;
                return t.initWithDuration(this._duration, n(this._points)),
                t
            }
        }),
        cc.catmullRomTo = function(t, e) {
            return new cc.CatmullRomTo(t,e)
        }
        ,
        cc.CatmullRomBy = cc.Class({
            name: "cc.CatmullRomBy",
            extends: cc.CardinalSplineBy,
            ctor: function(t, e) {
                e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return cc.CardinalSplineTo.prototype.initWithDuration.call(this, t, e, .5)
            },
            clone: function() {
                var t = new cc.CatmullRomBy;
                return t.initWithDuration(this._duration, n(this._points)),
                t
            }
        }),
        cc.catmullRomBy = function(t, e) {
            return new cc.CatmullRomBy(t,e)
        }
    }
    ), {}],
    3: [(function() {
        "use strict";
        cc.easeIn = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return Math.pow(t, this._rate)
                },
                reverse: function() {
                    return cc.easeIn(1 / this._rate)
                }
            }
        }
        ,
        cc.easeOut = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return Math.pow(t, 1 / this._rate)
                },
                reverse: function() {
                    return cc.easeOut(1 / this._rate)
                }
            }
        }
        ,
        cc.easeInOut = function(t) {
            return {
                _rate: t,
                easing: function(t) {
                    return (t *= 2) < 1 ? .5 * Math.pow(t, this._rate) : 1 - .5 * Math.pow(2 - t, this._rate)
                },
                reverse: function() {
                    return cc.easeInOut(this._rate)
                }
            }
        }
        ;
        var t = {
            easing: function(t) {
                return 0 === t ? 0 : Math.pow(2, 10 * (t - 1))
            },
            reverse: function() {
                return e
            }
        };
        cc.easeExponentialIn = function() {
            return t
        }
        ;
        var e = {
            easing: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            reverse: function() {
                return t
            }
        };
        cc.easeExponentialOut = function() {
            return e
        }
        ;
        var i = {
            easing: function(t) {
                return 1 !== t && 0 !== t ? (t *= 2) < 1 ? .5 * Math.pow(2, 10 * (t - 1)) : .5 * (2 - Math.pow(2, -10 * (t - 1))) : t
            },
            reverse: function() {
                return i
            }
        };
        cc.easeExponentialInOut = function() {
            return i
        }
        ;
        var n = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : -1 * Math.cos(t * Math.PI / 2) + 1
            },
            reverse: function() {
                return r
            }
        };
        cc.easeSineIn = function() {
            return n
        }
        ;
        var r = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : Math.sin(t * Math.PI / 2)
            },
            reverse: function() {
                return n
            }
        };
        cc.easeSineOut = function() {
            return r
        }
        ;
        var s = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : -.5 * (Math.cos(Math.PI * t) - 1)
            },
            reverse: function() {
                return s
            }
        };
        cc.easeSineInOut = function() {
            return s
        }
        ;
        var a = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : (t -= 1,
                -Math.pow(2, 10 * t) * Math.sin((t - .075) * Math.PI * 2 / .3))
            },
            reverse: function() {
                return o
            }
        };
        cc.easeElasticIn = function(t) {
            return t && .3 !== t ? {
                _period: t,
                easing: function(t) {
                    return 0 === t || 1 === t ? t : (t -= 1,
                    -Math.pow(2, 10 * t) * Math.sin((t - this._period / 4) * Math.PI * 2 / this._period))
                },
                reverse: function() {
                    return cc.easeElasticOut(this._period)
                }
            } : a
        }
        ;
        var o = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : Math.pow(2, -10 * t) * Math.sin((t - .075) * Math.PI * 2 / .3) + 1
            },
            reverse: function() {
                return a
            }
        };
        function l(t) {
            return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
        }
        cc.easeElasticOut = function(t) {
            return t && .3 !== t ? {
                _period: t,
                easing: function(t) {
                    return 0 === t || 1 === t ? t : Math.pow(2, -10 * t) * Math.sin((t - this._period / 4) * Math.PI * 2 / this._period) + 1
                },
                reverse: function() {
                    return cc.easeElasticIn(this._period)
                }
            } : o
        }
        ,
        cc.easeElasticInOut = function(t) {
            return {
                _period: t = t || .3,
                easing: function(t) {
                    var e = 0
                      , i = this._period;
                    if (0 === t || 1 === t)
                        e = t;
                    else {
                        t *= 2,
                        i || (i = this._period = .3 * 1.5);
                        var n = i / 4;
                        e = (t -= 1) < 0 ? -.5 * Math.pow(2, 10 * t) * Math.sin((t - n) * Math.PI * 2 / i) : Math.pow(2, -10 * t) * Math.sin((t - n) * Math.PI * 2 / i) * .5 + 1
                    }
                    return e
                },
                reverse: function() {
                    return cc.easeElasticInOut(this._period)
                }
            }
        }
        ;
        var h = {
            easing: function(t) {
                return 1 - l(1 - t)
            },
            reverse: function() {
                return c
            }
        };
        cc.easeBounceIn = function() {
            return h
        }
        ;
        var c = {
            easing: function(t) {
                return l(t)
            },
            reverse: function() {
                return h
            }
        };
        cc.easeBounceOut = function() {
            return c
        }
        ;
        var u = {
            easing: function(t) {
                return t < .5 ? .5 * (1 - l(1 - (t *= 2))) : .5 * l(2 * t - 1) + .5
            },
            reverse: function() {
                return u
            }
        };
        cc.easeBounceInOut = function() {
            return u
        }
        ;
        var _ = {
            easing: function(t) {
                return 0 === t || 1 === t ? t : t * t * (2.70158 * t - 1.70158)
            },
            reverse: function() {
                return f
            }
        };
        cc.easeBackIn = function() {
            return _
        }
        ;
        var f = {
            easing: function(t) {
                return 0 === t ? 0 : (t -= 1) * t * (2.70158 * t + 1.70158) + 1
            },
            reverse: function() {
                return _
            }
        };
        cc.easeBackOut = function() {
            return f
        }
        ;
        var d = {
            easing: function(t) {
                return (t *= 2) < 1 ? t * t * (3.5949095 * t - 2.5949095) / 2 : (t -= 2) * t * (3.5949095 * t + 2.5949095) / 2 + 1
            },
            reverse: function() {
                return d
            }
        };
        cc.easeBackInOut = function() {
            return d
        }
        ,
        cc.easeBezierAction = function(t, e, i, n) {
            return {
                easing: function(r) {
                    return Math.pow(1 - r, 3) * t + 3 * r * Math.pow(1 - r, 2) * e + 3 * Math.pow(r, 2) * (1 - r) * i + Math.pow(r, 3) * n
                },
                reverse: function() {
                    return cc.easeBezierAction(n, i, e, t)
                }
            }
        }
        ;
        var p = {
            easing: function(t) {
                return Math.pow(t, 2)
            },
            reverse: function() {
                return p
            }
        };
        cc.easeQuadraticActionIn = function() {
            return p
        }
        ;
        var m = {
            easing: function(t) {
                return -t * (t - 2)
            },
            reverse: function() {
                return m
            }
        };
        cc.easeQuadraticActionOut = function() {
            return m
        }
        ;
        var y = {
            easing: function(t) {
                return (t *= 2) < 1 ? t * t * .5 : -.5 * (--t * (t - 2) - 1)
            },
            reverse: function() {
                return y
            }
        };
        cc.easeQuadraticActionInOut = function() {
            return y
        }
        ;
        var v = {
            easing: function(t) {
                return t * t * t * t
            },
            reverse: function() {
                return v
            }
        };
        cc.easeQuarticActionIn = function() {
            return v
        }
        ;
        var g = {
            easing: function(t) {
                return -((t -= 1) * t * t * t - 1)
            },
            reverse: function() {
                return g
            }
        };
        cc.easeQuarticActionOut = function() {
            return g
        }
        ;
        var A = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
            },
            reverse: function() {
                return A
            }
        };
        cc.easeQuarticActionInOut = function() {
            return A
        }
        ;
        var x = {
            easing: function(t) {
                return t * t * t * t * t
            },
            reverse: function() {
                return x
            }
        };
        cc.easeQuinticActionIn = function() {
            return x
        }
        ;
        var b = {
            easing: function(t) {
                return (t -= 1) * t * t * t * t + 1
            },
            reverse: function() {
                return b
            }
        };
        cc.easeQuinticActionOut = function() {
            return b
        }
        ;
        var C = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
            },
            reverse: function() {
                return C
            }
        };
        cc.easeQuinticActionInOut = function() {
            return C
        }
        ;
        var T = {
            easing: function(t) {
                return -1 * (Math.sqrt(1 - t * t) - 1)
            },
            reverse: function() {
                return T
            }
        };
        cc.easeCircleActionIn = function() {
            return T
        }
        ;
        var S = {
            easing: function(t) {
                return t -= 1,
                Math.sqrt(1 - t * t)
            },
            reverse: function() {
                return S
            }
        };
        cc.easeCircleActionOut = function() {
            return S
        }
        ;
        var w = {
            easing: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : (t -= 2,
                .5 * (Math.sqrt(1 - t * t) + 1))
            },
            reverse: function() {
                return w
            }
        };
        cc.easeCircleActionInOut = function() {
            return w
        }
        ;
        var E = {
            easing: function(t) {
                return t * t * t
            },
            reverse: function() {
                return E
            }
        };
        cc.easeCubicActionIn = function() {
            return E
        }
        ;
        var M = {
            easing: function(t) {
                return (t -= 1) * t * t + 1
            },
            reverse: function() {
                return M
            }
        };
        cc.easeCubicActionOut = function() {
            return M
        }
        ;
        var D = {
            easing: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
            },
            reverse: function() {
                return D
            }
        };
        cc.easeCubicActionInOut = function() {
            return D
        }
    }
    ), {}],
    4: [(function() {
        "use strict";
        cc.ActionInstant = cc.Class({
            name: "cc.ActionInstant",
            extends: cc.FiniteTimeAction,
            isDone: function() {
                return !0
            },
            step: function() {
                this.update(1)
            },
            update: function() {},
            reverse: function() {
                return this.clone()
            },
            clone: function() {
                return new cc.ActionInstant
            }
        }),
        cc.Show = cc.Class({
            name: "cc.Show",
            extends: cc.ActionInstant,
            update: function() {
                for (var t = this.target.getComponentsInChildren(cc.RenderComponent), e = 0; e < t.length; ++e)
                    t[e].enabled = !0
            },
            reverse: function() {
                return new cc.Hide
            },
            clone: function() {
                return new cc.Show
            }
        }),
        cc.show = function() {
            return new cc.Show
        }
        ,
        cc.Hide = cc.Class({
            name: "cc.Hide",
            extends: cc.ActionInstant,
            update: function() {
                for (var t = this.target.getComponentsInChildren(cc.RenderComponent), e = 0; e < t.length; ++e)
                    t[e].enabled = !1
            },
            reverse: function() {
                return new cc.Show
            },
            clone: function() {
                return new cc.Hide
            }
        }),
        cc.hide = function() {
            return new cc.Hide
        }
        ,
        cc.ToggleVisibility = cc.Class({
            name: "cc.ToggleVisibility",
            extends: cc.ActionInstant,
            update: function() {
                for (var t = this.target.getComponentsInChildren(cc.RenderComponent), e = 0; e < t.length; ++e) {
                    var i = t[e];
                    i.enabled = !i.enabled
                }
            },
            reverse: function() {
                return new cc.ToggleVisibility
            },
            clone: function() {
                return new cc.ToggleVisibility
            }
        }),
        cc.toggleVisibility = function() {
            return new cc.ToggleVisibility
        }
        ,
        cc.RemoveSelf = cc.Class({
            name: "cc.RemoveSelf",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._isNeedCleanUp = !0,
                void 0 !== t && this.init(t)
            },
            update: function() {
                this.target.removeFromParent(this._isNeedCleanUp)
            },
            init: function(t) {
                return this._isNeedCleanUp = t,
                !0
            },
            reverse: function() {
                return new cc.RemoveSelf(this._isNeedCleanUp)
            },
            clone: function() {
                return new cc.RemoveSelf(this._isNeedCleanUp)
            }
        }),
        cc.removeSelf = function(t) {
            return new cc.RemoveSelf(t)
        }
        ,
        cc.DestroySelf = cc.Class({
            name: "cc.DestroySelf",
            extends: cc.ActionInstant,
            update: function() {
                this.target.destroy()
            },
            reverse: function() {
                return new cc.DestroySelf
            },
            clone: function() {
                return new cc.DestroySelf
            }
        }),
        cc.destroySelf = function() {
            return new cc.DestroySelf
        }
        ,
        cc.FlipX = cc.Class({
            name: "cc.FlipX",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._flippedX = !1,
                void 0 !== t && this.initWithFlipX(t)
            },
            initWithFlipX: function(t) {
                return this._flippedX = t,
                !0
            },
            update: function() {
                this.target.scaleX = Math.abs(this.target.scaleX) * (this._flippedX ? -1 : 1)
            },
            reverse: function() {
                return new cc.FlipX(!this._flippedX)
            },
            clone: function() {
                var t = new cc.FlipX;
                return t.initWithFlipX(this._flippedX),
                t
            }
        }),
        cc.flipX = function(t) {
            return new cc.FlipX(t)
        }
        ,
        cc.FlipY = cc.Class({
            name: "cc.FlipY",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._flippedY = !1,
                void 0 !== t && this.initWithFlipY(t)
            },
            initWithFlipY: function(t) {
                return this._flippedY = t,
                !0
            },
            update: function() {
                this.target.scaleY = Math.abs(this.target.scaleY) * (this._flippedY ? -1 : 1)
            },
            reverse: function() {
                return new cc.FlipY(!this._flippedY)
            },
            clone: function() {
                var t = new cc.FlipY;
                return t.initWithFlipY(this._flippedY),
                t
            }
        }),
        cc.flipY = function(t) {
            return new cc.FlipY(t)
        }
        ,
        cc.Place = cc.Class({
            name: "cc.Place",
            extends: cc.ActionInstant,
            ctor: function(t, e) {
                this._x = 0,
                this._y = 0,
                void 0 !== t && (void 0 !== t.x && (e = t.y,
                t = t.x),
                this.initWithPosition(t, e))
            },
            initWithPosition: function(t, e) {
                return this._x = t,
                this._y = e,
                !0
            },
            update: function() {
                this.target.setPosition(this._x, this._y)
            },
            clone: function() {
                var t = new cc.Place;
                return t.initWithPosition(this._x, this._y),
                t
            }
        }),
        cc.place = function(t, e) {
            return new cc.Place(t,e)
        }
        ,
        cc.CallFunc = cc.Class({
            name: "cc.CallFunc",
            extends: cc.ActionInstant,
            ctor: function(t, e, i) {
                this._selectorTarget = null,
                this._function = null,
                this._data = null,
                this.initWithFunction(t, e, i)
            },
            initWithFunction: function(t, e, i) {
                return t && (this._function = t),
                e && (this._selectorTarget = e),
                void 0 !== i && (this._data = i),
                !0
            },
            execute: function() {
                this._function && this._function.call(this._selectorTarget, this.target, this._data)
            },
            update: function() {
                this.execute()
            },
            getTargetCallback: function() {
                return this._selectorTarget
            },
            setTargetCallback: function(t) {
                t !== this._selectorTarget && (this._selectorTarget && (this._selectorTarget = null),
                this._selectorTarget = t)
            },
            clone: function() {
                var t = new cc.CallFunc;
                return t.initWithFunction(this._function, this._selectorTarget, this._data),
                t
            }
        }),
        cc.callFunc = function(t, e, i) {
            return new cc.CallFunc(t,e,i)
        }
    }
    ), {}],
    5: [(function() {
        "use strict";
        function t(t, e, i, n, r) {
            return Math.pow(1 - r, 3) * t + 3 * r * Math.pow(1 - r, 2) * e + 3 * Math.pow(r, 2) * (1 - r) * i + Math.pow(r, 3) * n
        }
        cc.ActionInterval = cc.Class({
            name: "cc.ActionInterval",
            extends: cc.FiniteTimeAction,
            ctor: function(t) {
                this.MAX_VALUE = 2,
                this._elapsed = 0,
                this._firstTick = !1,
                this._easeList = null,
                this._speed = 1,
                this._timesForRepeat = 1,
                this._repeatForever = !1,
                this._repeatMethod = !1,
                this._speedMethod = !1,
                void 0 !== t && cc.ActionInterval.prototype.initWithDuration.call(this, t)
            },
            getElapsed: function() {
                return this._elapsed
            },
            initWithDuration: function(t) {
                return this._duration = 0 === t ? cc.macro.FLT_EPSILON : t,
                this._elapsed = 0,
                this._firstTick = !0,
                !0
            },
            isDone: function() {
                return this._elapsed >= this._duration
            },
            _cloneDecoration: function(t) {
                t._repeatForever = this._repeatForever,
                t._speed = this._speed,
                t._timesForRepeat = this._timesForRepeat,
                t._easeList = this._easeList,
                t._speedMethod = this._speedMethod,
                t._repeatMethod = this._repeatMethod
            },
            _reverseEaseList: function(t) {
                if (this._easeList) {
                    t._easeList = [];
                    for (var e = 0; e < this._easeList.length; e++)
                        t._easeList.push(this._easeList[e].reverse())
                }
            },
            clone: function() {
                var t = new cc.ActionInterval(this._duration);
                return this._cloneDecoration(t),
                t
            },
            easing: function() {
                this._easeList ? this._easeList.length = 0 : this._easeList = [];
                for (var t = 0; t < arguments.length; t++)
                    this._easeList.push(arguments[t]);
                return this
            },
            _computeEaseTime: function(t) {
                var e = this._easeList;
                if (!e || 0 === e.length)
                    return t;
                for (var i = 0, n = e.length; i < n; i++)
                    t = e[i].easing(t);
                return t
            },
            step: function(t) {
                this._firstTick ? (this._firstTick = !1,
                this._elapsed = 0) : this._elapsed += t;
                var e = this._elapsed / (this._duration > 1.192092896e-7 ? this._duration : 1.192092896e-7);
                e = 1 > e ? e : 1,
                this.update(e > 0 ? e : 0),
                this._repeatMethod && this._timesForRepeat > 1 && this.isDone() && (this._repeatForever || this._timesForRepeat--,
                this.startWithTarget(this.target),
                this.step(this._elapsed - this._duration))
            },
            startWithTarget: function(t) {
                cc.Action.prototype.startWithTarget.call(this, t),
                this._elapsed = 0,
                this._firstTick = !0
            },
            reverse: function() {
                return cc.logID(1010),
                null
            },
            setAmplitudeRate: function() {
                cc.logID(1011)
            },
            getAmplitudeRate: function() {
                return cc.logID(1012),
                0
            },
            speed: function(t) {
                return t <= 0 ? (cc.logID(1013),
                this) : (this._speedMethod = !0,
                this._speed *= t,
                this)
            },
            getSpeed: function() {
                return this._speed
            },
            setSpeed: function(t) {
                return this._speed = t,
                this
            },
            repeat: function(t) {
                return t = Math.round(t),
                isNaN(t) || t < 1 ? (cc.logID(1014),
                this) : (this._repeatMethod = !0,
                this._timesForRepeat *= t,
                this)
            },
            repeatForever: function() {
                return this._repeatMethod = !0,
                this._timesForRepeat = this.MAX_VALUE,
                this._repeatForever = !0,
                this
            }
        }),
        cc.actionInterval = function(t) {
            return new cc.ActionInterval(t)
        }
        ,
        cc.Sequence = cc.Class({
            name: "cc.Sequence",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._actions = [],
                this._split = null,
                this._last = 0,
                this._reversed = !1;
                var e = t instanceof Array ? t : arguments;
                if (1 !== e.length) {
                    var i = e.length - 1;
                    if (i >= 0 && null == e[i] && cc.logID(1015),
                    i >= 0) {
                        for (var n, r = e[0], s = 1; s < i; s++)
                            e[s] && (n = r,
                            r = cc.Sequence._actionOneTwo(n, e[s]));
                        this.initWithTwoActions(r, e[i])
                    }
                } else
                    cc.errorID(1019)
            },
            initWithTwoActions: function(t, e) {
                if (!t || !e)
                    return cc.errorID(1025),
                    !1;
                var i = t._duration
                  , n = e._duration
                  , r = (i *= t._repeatMethod ? t._timesForRepeat : 1) + (n *= e._repeatMethod ? e._timesForRepeat : 1);
                return this.initWithDuration(r),
                this._actions[0] = t,
                this._actions[1] = e,
                !0
            },
            clone: function() {
                var t = new cc.Sequence;
                return this._cloneDecoration(t),
                t.initWithTwoActions(this._actions[0].clone(), this._actions[1].clone()),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._split = this._actions[0]._duration / this._duration,
                this._split *= this._actions[0]._repeatMethod ? this._actions[0]._timesForRepeat : 1,
                this._last = -1
            },
            stop: function() {
                -1 !== this._last && this._actions[this._last].stop(),
                cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                var e, i, n = 0, r = this._split, s = this._actions, a = this._last;
                (t = this._computeEaseTime(t)) < r ? (e = 0 !== r ? t / r : 1,
                0 === n && 1 === a && this._reversed && (s[1].update(0),
                s[1].stop())) : (n = 1,
                e = 1 === r ? 1 : (t - r) / (1 - r),
                -1 === a && (s[0].startWithTarget(this.target),
                s[0].update(1),
                s[0].stop()),
                0 === a && (s[0].update(1),
                s[0].stop())),
                i = s[n],
                a === n && i.isDone() || (a !== n && i.startWithTarget(this.target),
                e *= i._timesForRepeat,
                i.update(e > 1 ? e % 1 : e),
                this._last = n)
            },
            reverse: function() {
                var t = cc.Sequence._actionOneTwo(this._actions[1].reverse(), this._actions[0].reverse());
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t._reversed = !0,
                t
            }
        }),
        cc.sequence = function(t) {
            var e = t instanceof Array ? t : arguments;
            if (1 === e.length)
                return cc.errorID(1019),
                null;
            var i = e.length - 1;
            i >= 0 && null == e[i] && cc.logID(1015);
            var n = null;
            if (i >= 0) {
                n = e[0];
                for (var r = 1; r <= i; r++)
                    e[r] && (n = cc.Sequence._actionOneTwo(n, e[r]))
            }
            return n
        }
        ,
        cc.Sequence._actionOneTwo = function(t, e) {
            var i = new cc.Sequence;
            return i.initWithTwoActions(t, e),
            i
        }
        ,
        cc.Repeat = cc.Class({
            name: "cc.Repeat",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._times = 0,
                this._total = 0,
                this._nextDt = 0,
                this._actionInstant = !1,
                this._innerAction = null,
                void 0 !== e && this.initWithAction(t, e)
            },
            initWithAction: function(t, e) {
                var i = t._duration * e;
                return !!this.initWithDuration(i) && (this._times = e,
                this._innerAction = t,
                t instanceof cc.ActionInstant && (this._actionInstant = !0,
                this._times -= 1),
                this._total = 0,
                !0)
            },
            clone: function() {
                var t = new cc.Repeat;
                return this._cloneDecoration(t),
                t.initWithAction(this._innerAction.clone(), this._times),
                t
            },
            startWithTarget: function(t) {
                this._total = 0,
                this._nextDt = this._innerAction._duration / this._duration,
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._innerAction.startWithTarget(t)
            },
            stop: function() {
                this._innerAction.stop(),
                cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = this._innerAction
                  , i = this._duration
                  , n = this._times
                  , r = this._nextDt;
                if (t >= r) {
                    for (; t > r && this._total < n; )
                        e.update(1),
                        this._total++,
                        e.stop(),
                        e.startWithTarget(this.target),
                        r += e._duration / i,
                        this._nextDt = r > 1 ? 1 : r;
                    t >= 1 && this._total < n && (e.update(1),
                    this._total++),
                    this._actionInstant || (this._total === n ? e.stop() : e.update(t - (r - e._duration / i)))
                } else
                    e.update(t * n % 1)
            },
            isDone: function() {
                return this._total === this._times
            },
            reverse: function() {
                var t = new cc.Repeat(this._innerAction.reverse(),this._times);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }),
        cc.repeat = function(t, e) {
            return new cc.Repeat(t,e)
        }
        ,
        cc.RepeatForever = cc.Class({
            name: "cc.RepeatForever",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._innerAction = null,
                t && this.initWithAction(t)
            },
            initWithAction: function(t) {
                return t ? (this._innerAction = t,
                !0) : (cc.errorID(1026),
                !1)
            },
            clone: function() {
                var t = new cc.RepeatForever;
                return this._cloneDecoration(t),
                t.initWithAction(this._innerAction.clone()),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._innerAction.startWithTarget(t)
            },
            step: function(t) {
                var e = this._innerAction;
                e.step(t),
                e.isDone() && (e.startWithTarget(this.target),
                e.step(e.getElapsed() - e._duration))
            },
            isDone: function() {
                return !1
            },
            reverse: function() {
                var t = new cc.RepeatForever(this._innerAction.reverse());
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            setInnerAction: function(t) {
                this._innerAction !== t && (this._innerAction = t)
            },
            getInnerAction: function() {
                return this._innerAction
            }
        }),
        cc.repeatForever = function(t) {
            return new cc.RepeatForever(t)
        }
        ,
        cc.Spawn = cc.Class({
            name: "cc.Spawn",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._one = null,
                this._two = null;
                var e = t instanceof Array ? t : arguments;
                if (1 !== e.length) {
                    var i = e.length - 1;
                    if (i >= 0 && null == e[i] && cc.logID(1015),
                    i >= 0) {
                        for (var n, r = e[0], s = 1; s < i; s++)
                            e[s] && (n = r,
                            r = cc.Spawn._actionOneTwo(n, e[s]));
                        this.initWithTwoActions(r, e[i])
                    }
                } else
                    cc.errorID(1020)
            },
            initWithTwoActions: function(t, e) {
                if (!t || !e)
                    return cc.errorID(1027),
                    !1;
                var i = !1
                  , n = t._duration
                  , r = e._duration;
                return this.initWithDuration(Math.max(n, r)) && (this._one = t,
                this._two = e,
                n > r ? this._two = cc.Sequence._actionOneTwo(e, cc.delayTime(n - r)) : n < r && (this._one = cc.Sequence._actionOneTwo(t, cc.delayTime(r - n))),
                i = !0),
                i
            },
            clone: function() {
                var t = new cc.Spawn;
                return this._cloneDecoration(t),
                t.initWithTwoActions(this._one.clone(), this._two.clone()),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._one.startWithTarget(t),
                this._two.startWithTarget(t)
            },
            stop: function() {
                this._one.stop(),
                this._two.stop(),
                cc.Action.prototype.stop.call(this)
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this._one && this._one.update(t),
                this._two && this._two.update(t)
            },
            reverse: function() {
                var t = cc.Spawn._actionOneTwo(this._one.reverse(), this._two.reverse());
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.spawn = function(t) {
            var e = t instanceof Array ? t : arguments;
            if (1 === e.length)
                return cc.errorID(1020),
                null;
            e.length > 0 && null == e[e.length - 1] && cc.logID(1015);
            for (var i = e[0], n = 1; n < e.length; n++)
                null != e[n] && (i = cc.Spawn._actionOneTwo(i, e[n]));
            return i
        }
        ,
        cc.Spawn._actionOneTwo = function(t, e) {
            var i = new cc.Spawn;
            return i.initWithTwoActions(t, e),
            i
        }
        ,
        cc.RotateTo = cc.Class({
            name: "cc.RotateTo",
            extends: cc.ActionInterval,
            statics: {
                _reverse: !1
            },
            ctor: function(t, e) {
                this._startAngle = 0,
                this._dstAngle = 0,
                this._angle = 0,
                void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._dstAngle = e,
                !0)
            },
            clone: function() {
                var t = new cc.RotateTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._dstAngle),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.angle % 360
                  , i = cc.RotateTo._reverse ? this._dstAngle - e : this._dstAngle + e;
                i > 180 && (i -= 360),
                i < -180 && (i += 360),
                this._startAngle = e,
                this._angle = cc.RotateTo._reverse ? i : -i
            },
            reverse: function() {
                cc.logID(1016)
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this.target && (this.target.angle = this._startAngle + this._angle * t)
            }
        }),
        cc.rotateTo = function(t, e) {
            return new cc.RotateTo(t,e)
        }
        ,
        cc.RotateBy = cc.Class({
            name: "cc.RotateBy",
            extends: cc.ActionInterval,
            statics: {
                _reverse: !1
            },
            ctor: function(t, e) {
                e *= cc.RotateBy._reverse ? 1 : -1,
                this._deltaAngle = 0,
                this._startAngle = 0,
                void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._deltaAngle = e,
                !0)
            },
            clone: function() {
                var t = new cc.RotateBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._deltaAngle),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._startAngle = t.angle
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this.target && (this.target.angle = this._startAngle + this._deltaAngle * t)
            },
            reverse: function() {
                var t = new cc.RotateBy;
                return t.initWithDuration(this._duration, -this._deltaAngle),
                this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.rotateBy = function(t, e) {
            return new cc.RotateBy(t,e)
        }
        ,
        cc.MoveBy = cc.Class({
            name: "cc.MoveBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._positionDelta = cc.v2(0, 0),
                this._startPosition = cc.v2(0, 0),
                this._previousPosition = cc.v2(0, 0),
                void 0 !== e && cc.MoveBy.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (void 0 !== e.x && (i = e.y,
                e = e.x),
                this._positionDelta.x = e,
                this._positionDelta.y = i,
                !0)
            },
            clone: function() {
                var t = new cc.MoveBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._positionDelta),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x
                  , i = t.y;
                this._previousPosition.x = e,
                this._previousPosition.y = i,
                this._startPosition.x = e,
                this._startPosition.y = i
            },
            update: function(t) {
                if (t = this._computeEaseTime(t),
                this.target) {
                    var e = this._positionDelta.x * t
                      , i = this._positionDelta.y * t
                      , n = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var r = this.target.x
                          , s = this.target.y
                          , a = this._previousPosition;
                        n.x = n.x + r - a.x,
                        n.y = n.y + s - a.y,
                        e += n.x,
                        i += n.y,
                        a.x = e,
                        a.y = i,
                        this.target.setPosition(e, i)
                    } else
                        this.target.setPosition(n.x + e, n.y + i)
                }
            },
            reverse: function() {
                var t = new cc.MoveBy(this._duration,cc.v2(-this._positionDelta.x, -this._positionDelta.y));
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.moveBy = function(t, e, i) {
            return new cc.MoveBy(t,e,i)
        }
        ,
        cc.MoveTo = cc.Class({
            name: "cc.MoveTo",
            extends: cc.MoveBy,
            ctor: function(t, e, i) {
                this._endPosition = cc.v2(0, 0),
                void 0 !== e && this.initWithDuration(t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.MoveBy.prototype.initWithDuration.call(this, t, e, i) && (void 0 !== e.x && (i = e.y,
                e = e.x),
                this._endPosition.x = e,
                this._endPosition.y = i,
                !0)
            },
            clone: function() {
                var t = new cc.MoveTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._endPosition),
                t
            },
            startWithTarget: function(t) {
                cc.MoveBy.prototype.startWithTarget.call(this, t),
                this._positionDelta.x = this._endPosition.x - t.x,
                this._positionDelta.y = this._endPosition.y - t.y
            }
        }),
        cc.moveTo = function(t, e, i) {
            return new cc.MoveTo(t,e,i)
        }
        ,
        cc.SkewTo = cc.Class({
            name: "cc.SkewTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._skewX = 0,
                this._skewY = 0,
                this._startSkewX = 0,
                this._startSkewY = 0,
                this._endSkewX = 0,
                this._endSkewY = 0,
                this._deltaX = 0,
                this._deltaY = 0,
                void 0 !== i && cc.SkewTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                var n = !1;
                return cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._endSkewX = e,
                this._endSkewY = i,
                n = !0),
                n
            },
            clone: function() {
                var t = new cc.SkewTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._endSkewX, this._endSkewY),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._startSkewX = t.skewX % 180,
                this._deltaX = this._endSkewX - this._startSkewX,
                this._deltaX > 180 && (this._deltaX -= 360),
                this._deltaX < -180 && (this._deltaX += 360),
                this._startSkewY = t.skewY % 360,
                this._deltaY = this._endSkewY - this._startSkewY,
                this._deltaY > 180 && (this._deltaY -= 360),
                this._deltaY < -180 && (this._deltaY += 360)
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this.target.skewX = this._startSkewX + this._deltaX * t,
                this.target.skewY = this._startSkewY + this._deltaY * t
            }
        }),
        cc.skewTo = function(t, e, i) {
            return new cc.SkewTo(t,e,i)
        }
        ,
        cc.SkewBy = cc.Class({
            name: "cc.SkewBy",
            extends: cc.SkewTo,
            ctor: function(t, e, i) {
                void 0 !== i && this.initWithDuration(t, e, i)
            },
            initWithDuration: function(t, e, i) {
                var n = !1;
                return cc.SkewTo.prototype.initWithDuration.call(this, t, e, i) && (this._skewX = e,
                this._skewY = i,
                n = !0),
                n
            },
            clone: function() {
                var t = new cc.SkewBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._skewX, this._skewY),
                t
            },
            startWithTarget: function(t) {
                cc.SkewTo.prototype.startWithTarget.call(this, t),
                this._deltaX = this._skewX,
                this._deltaY = this._skewY,
                this._endSkewX = this._startSkewX + this._deltaX,
                this._endSkewY = this._startSkewY + this._deltaY
            },
            reverse: function() {
                var t = new cc.SkewBy(this._duration,-this._skewX,-this._skewY);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.skewBy = function(t, e, i) {
            return new cc.SkewBy(t,e,i)
        }
        ,
        cc.JumpBy = cc.Class({
            name: "cc.JumpBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n, r) {
                this._startPosition = cc.v2(0, 0),
                this._previousPosition = cc.v2(0, 0),
                this._delta = cc.v2(0, 0),
                this._height = 0,
                this._jumps = 0,
                void 0 !== n && cc.JumpBy.prototype.initWithDuration.call(this, t, e, i, n, r)
            },
            initWithDuration: function(t, e, i, n, r) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (void 0 === r && (r = n,
                n = i,
                i = e.y,
                e = e.x),
                this._delta.x = e,
                this._delta.y = i,
                this._height = n,
                this._jumps = r,
                !0)
            },
            clone: function() {
                var t = new cc.JumpBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._delta, this._height, this._jumps),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x
                  , i = t.y;
                this._previousPosition.x = e,
                this._previousPosition.y = i,
                this._startPosition.x = e,
                this._startPosition.y = i
            },
            update: function(t) {
                if (t = this._computeEaseTime(t),
                this.target) {
                    var e = t * this._jumps % 1
                      , i = 4 * this._height * e * (1 - e);
                    i += this._delta.y * t;
                    var n = this._delta.x * t
                      , r = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var s = this.target.x
                          , a = this.target.y
                          , o = this._previousPosition;
                        r.x = r.x + s - o.x,
                        r.y = r.y + a - o.y,
                        n += r.x,
                        i += r.y,
                        o.x = n,
                        o.y = i,
                        this.target.setPosition(n, i)
                    } else
                        this.target.setPosition(r.x + n, r.y + i)
                }
            },
            reverse: function() {
                var t = new cc.JumpBy(this._duration,cc.v2(-this._delta.x, -this._delta.y),this._height,this._jumps);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.jumpBy = function(t, e, i, n, r) {
            return new cc.JumpBy(t,e,i,n,r)
        }
        ,
        cc.JumpTo = cc.Class({
            name: "cc.JumpTo",
            extends: cc.JumpBy,
            ctor: function(t, e, i, n, r) {
                this._endPosition = cc.v2(0, 0),
                void 0 !== n && this.initWithDuration(t, e, i, n, r)
            },
            initWithDuration: function(t, e, i, n, r) {
                return !!cc.JumpBy.prototype.initWithDuration.call(this, t, e, i, n, r) && (void 0 === r && (i = e.y,
                e = e.x),
                this._endPosition.x = e,
                this._endPosition.y = i,
                !0)
            },
            startWithTarget: function(t) {
                cc.JumpBy.prototype.startWithTarget.call(this, t),
                this._delta.x = this._endPosition.x - this._startPosition.x,
                this._delta.y = this._endPosition.y - this._startPosition.y
            },
            clone: function() {
                var t = new cc.JumpTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._endPosition, this._height, this._jumps),
                t
            }
        }),
        cc.jumpTo = function(t, e, i, n, r) {
            return new cc.JumpTo(t,e,i,n,r)
        }
        ,
        cc.BezierBy = cc.Class({
            name: "cc.BezierBy",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._config = [],
                this._startPosition = cc.v2(0, 0),
                this._previousPosition = cc.v2(0, 0),
                e && cc.BezierBy.prototype.initWithDuration.call(this, t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._config = e,
                !0)
            },
            clone: function() {
                var t = new cc.BezierBy;
                this._cloneDecoration(t);
                for (var e = [], i = 0; i < this._config.length; i++) {
                    var n = this._config[i];
                    e.push(cc.v2(n.x, n.y))
                }
                return t.initWithDuration(this._duration, e),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.x
                  , i = t.y;
                this._previousPosition.x = e,
                this._previousPosition.y = i,
                this._startPosition.x = e,
                this._startPosition.y = i
            },
            update: function(e) {
                if (e = this._computeEaseTime(e),
                this.target) {
                    var i = this._config
                      , n = i[0].x
                      , r = i[1].x
                      , s = i[2].x
                      , a = i[0].y
                      , o = i[1].y
                      , l = i[2].y
                      , h = t(0, n, r, s, e)
                      , c = t(0, a, o, l, e)
                      , u = this._startPosition;
                    if (cc.macro.ENABLE_STACKABLE_ACTIONS) {
                        var _ = this.target.x
                          , f = this.target.y
                          , d = this._previousPosition;
                        u.x = u.x + _ - d.x,
                        u.y = u.y + f - d.y,
                        h += u.x,
                        c += u.y,
                        d.x = h,
                        d.y = c,
                        this.target.setPosition(h, c)
                    } else
                        this.target.setPosition(u.x + h, u.y + c)
                }
            },
            reverse: function() {
                var t = this._config
                  , e = t[0].x
                  , i = t[0].y
                  , n = t[1].x
                  , r = t[1].y
                  , s = t[2].x
                  , a = t[2].y
                  , o = [cc.v2(n - s, r - a), cc.v2(e - s, i - a), cc.v2(-s, -a)]
                  , l = new cc.BezierBy(this._duration,o);
                return this._cloneDecoration(l),
                this._reverseEaseList(l),
                l
            }
        }),
        cc.bezierBy = function(t, e) {
            return new cc.BezierBy(t,e)
        }
        ,
        cc.BezierTo = cc.Class({
            name: "cc.BezierTo",
            extends: cc.BezierBy,
            ctor: function(t, e) {
                this._toConfig = [],
                e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._toConfig = e,
                !0)
            },
            clone: function() {
                var t = new cc.BezierTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._toConfig),
                t
            },
            startWithTarget: function(t) {
                cc.BezierBy.prototype.startWithTarget.call(this, t);
                var e = this._startPosition
                  , i = this._toConfig
                  , n = this._config;
                n[0] = i[0].sub(e),
                n[1] = i[1].sub(e),
                n[2] = i[2].sub(e)
            }
        }),
        cc.bezierTo = function(t, e) {
            return new cc.BezierTo(t,e)
        }
        ,
        cc.ScaleTo = cc.Class({
            name: "cc.ScaleTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                this._scaleX = 1,
                this._scaleY = 1,
                this._startScaleX = 1,
                this._startScaleY = 1,
                this._endScaleX = 0,
                this._endScaleY = 0,
                this._deltaX = 0,
                this._deltaY = 0,
                void 0 !== e && cc.ScaleTo.prototype.initWithDuration.call(this, t, e, i)
            },
            initWithDuration: function(t, e, i) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._endScaleX = e,
                this._endScaleY = null != i ? i : e,
                !0)
            },
            clone: function() {
                var t = new cc.ScaleTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._endScaleX, this._endScaleY),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._startScaleX = t.scaleX,
                this._startScaleY = t.scaleY,
                this._deltaX = this._endScaleX - this._startScaleX,
                this._deltaY = this._endScaleY - this._startScaleY
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this.target && (this.target.scaleX = this._startScaleX + this._deltaX * t,
                this.target.scaleY = this._startScaleY + this._deltaY * t)
            }
        }),
        cc.scaleTo = function(t, e, i) {
            return new cc.ScaleTo(t,e,i)
        }
        ,
        cc.ScaleBy = cc.Class({
            name: "cc.ScaleBy",
            extends: cc.ScaleTo,
            startWithTarget: function(t) {
                cc.ScaleTo.prototype.startWithTarget.call(this, t),
                this._deltaX = this._startScaleX * this._endScaleX - this._startScaleX,
                this._deltaY = this._startScaleY * this._endScaleY - this._startScaleY
            },
            reverse: function() {
                var t = new cc.ScaleBy(this._duration,1 / this._endScaleX,1 / this._endScaleY);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            clone: function() {
                var t = new cc.ScaleBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._endScaleX, this._endScaleY),
                t
            }
        }),
        cc.scaleBy = function(t, e, i) {
            return new cc.ScaleBy(t,e,i)
        }
        ,
        cc.Blink = cc.Class({
            name: "cc.Blink",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._times = 0,
                this._originalState = !1,
                void 0 !== e && this.initWithDuration(t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._times = e,
                !0)
            },
            clone: function() {
                var t = new cc.Blink;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._times),
                t
            },
            update: function(t) {
                if (t = this._computeEaseTime(t),
                this.target && !this.isDone()) {
                    var e = 1 / this._times
                      , i = t % e;
                    this.target.opacity = i > e / 2 ? 255 : 0
                }
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._originalState = t.opacity
            },
            stop: function() {
                this.target.opacity = this._originalState,
                cc.ActionInterval.prototype.stop.call(this)
            },
            reverse: function() {
                var t = new cc.Blink(this._duration,this._times);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.blink = function(t, e) {
            return new cc.Blink(t,e)
        }
        ,
        cc.FadeTo = cc.Class({
            name: "cc.FadeTo",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._toOpacity = 0,
                this._fromOpacity = 0,
                void 0 !== e && cc.FadeTo.prototype.initWithDuration.call(this, t, e)
            },
            initWithDuration: function(t, e) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._toOpacity = e,
                !0)
            },
            clone: function() {
                var t = new cc.FadeTo;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._toOpacity),
                t
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = void 0 !== this._fromOpacity ? this._fromOpacity : 255;
                this.target.opacity = e + (this._toOpacity - e) * t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._fromOpacity = t.opacity
            }
        }),
        cc.fadeTo = function(t, e) {
            return new cc.FadeTo(t,e)
        }
        ,
        cc.FadeIn = cc.Class({
            name: "cc.FadeIn",
            extends: cc.FadeTo,
            ctor: function(t) {
                null == t && (t = 0),
                this._reverseAction = null,
                this.initWithDuration(t, 255)
            },
            reverse: function() {
                var t = new cc.FadeOut;
                return t.initWithDuration(this._duration, 0),
                this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            clone: function() {
                var t = new cc.FadeIn;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._toOpacity),
                t
            },
            startWithTarget: function(t) {
                this._reverseAction && (this._toOpacity = this._reverseAction._fromOpacity),
                cc.FadeTo.prototype.startWithTarget.call(this, t)
            }
        }),
        cc.fadeIn = function(t) {
            return new cc.FadeIn(t)
        }
        ,
        cc.FadeOut = cc.Class({
            name: "cc.FadeOut",
            extends: cc.FadeTo,
            ctor: function(t) {
                null == t && (t = 0),
                this._reverseAction = null,
                this.initWithDuration(t, 0)
            },
            reverse: function() {
                var t = new cc.FadeIn;
                return t._reverseAction = this,
                t.initWithDuration(this._duration, 255),
                this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            clone: function() {
                var t = new cc.FadeOut;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._toOpacity),
                t
            }
        }),
        cc.fadeOut = function(t) {
            return new cc.FadeOut(t)
        }
        ,
        cc.TintTo = cc.Class({
            name: "cc.TintTo",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._to = cc.color(0, 0, 0),
                this._from = cc.color(0, 0, 0),
                e instanceof cc.Color && (n = e.b,
                i = e.g,
                e = e.r),
                void 0 !== n && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._to = cc.color(e, i, n),
                !0)
            },
            clone: function() {
                var t = new cc.TintTo;
                this._cloneDecoration(t);
                var e = this._to;
                return t.initWithDuration(this._duration, e.r, e.g, e.b),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._from = this.target.color
            },
            update: function(t) {
                t = this._computeEaseTime(t);
                var e = this._from
                  , i = this._to;
                e && (this.target.color = cc.color(e.r + (i.r - e.r) * t, e.g + (i.g - e.g) * t, e.b + (i.b - e.b) * t))
            }
        }),
        cc.tintTo = function(t, e, i, n) {
            return new cc.TintTo(t,e,i,n)
        }
        ,
        cc.TintBy = cc.Class({
            name: "cc.TintBy",
            extends: cc.ActionInterval,
            ctor: function(t, e, i, n) {
                this._deltaR = 0,
                this._deltaG = 0,
                this._deltaB = 0,
                this._fromR = 0,
                this._fromG = 0,
                this._fromB = 0,
                void 0 !== n && this.initWithDuration(t, e, i, n)
            },
            initWithDuration: function(t, e, i, n) {
                return !!cc.ActionInterval.prototype.initWithDuration.call(this, t) && (this._deltaR = e,
                this._deltaG = i,
                this._deltaB = n,
                !0)
            },
            clone: function() {
                var t = new cc.TintBy;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration, this._deltaR, this._deltaG, this._deltaB),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = t.color;
                this._fromR = e.r,
                this._fromG = e.g,
                this._fromB = e.b
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this.target.color = cc.color(this._fromR + this._deltaR * t, this._fromG + this._deltaG * t, this._fromB + this._deltaB * t)
            },
            reverse: function() {
                var t = new cc.TintBy(this._duration,-this._deltaR,-this._deltaG,-this._deltaB);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            }
        }),
        cc.tintBy = function(t, e, i, n) {
            return new cc.TintBy(t,e,i,n)
        }
        ,
        cc.DelayTime = cc.Class({
            name: "cc.DelayTime",
            extends: cc.ActionInterval,
            update: function() {},
            reverse: function() {
                var t = new cc.DelayTime(this._duration);
                return this._cloneDecoration(t),
                this._reverseEaseList(t),
                t
            },
            clone: function() {
                var t = new cc.DelayTime;
                return this._cloneDecoration(t),
                t.initWithDuration(this._duration),
                t
            }
        }),
        cc.delayTime = function(t) {
            return new cc.DelayTime(t)
        }
        ,
        cc.ReverseTime = cc.Class({
            name: "cc.ReverseTime",
            extends: cc.ActionInterval,
            ctor: function(t) {
                this._other = null,
                t && this.initWithAction(t)
            },
            initWithAction: function(t) {
                return t ? t === this._other ? (cc.errorID(1029),
                !1) : !!cc.ActionInterval.prototype.initWithDuration.call(this, t._duration) && (this._other = t,
                !0) : (cc.errorID(1028),
                !1)
            },
            clone: function() {
                var t = new cc.ReverseTime;
                return this._cloneDecoration(t),
                t.initWithAction(this._other.clone()),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._other.startWithTarget(t)
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this._other && this._other.update(1 - t)
            },
            reverse: function() {
                return this._other.clone()
            },
            stop: function() {
                this._other.stop(),
                cc.Action.prototype.stop.call(this)
            }
        }),
        cc.reverseTime = function(t) {
            return new cc.ReverseTime(t)
        }
        ,
        cc.TargetedAction = cc.Class({
            name: "cc.TargetedAction",
            extends: cc.ActionInterval,
            ctor: function(t, e) {
                this._action = null,
                this._forcedTarget = null,
                e && this.initWithTarget(t, e)
            },
            initWithTarget: function(t, e) {
                return !!this.initWithDuration(e._duration) && (this._forcedTarget = t,
                this._action = e,
                !0)
            },
            clone: function() {
                var t = new cc.TargetedAction;
                return this._cloneDecoration(t),
                t.initWithTarget(this._forcedTarget, this._action.clone()),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t),
                this._action.startWithTarget(this._forcedTarget)
            },
            stop: function() {
                this._action.stop()
            },
            update: function(t) {
                t = this._computeEaseTime(t),
                this._action.update(t)
            },
            getForcedTarget: function() {
                return this._forcedTarget
            },
            setForcedTarget: function(t) {
                this._forcedTarget !== t && (this._forcedTarget = t)
            }
        }),
        cc.targetedAction = function(t, e) {
            return new cc.TargetedAction(t,e)
        }
    }
    ), {}],
    6: [(function(t) {
        "use strict";
        t("../core/platform/CCClass");
        var e = t("../core/platform/js")
          , i = function() {
            this.actions = [],
            this.target = null,
            this.actionIndex = 0,
            this.currentAction = null,
            this.paused = !1,
            this.lock = !1
        };
        cc.ActionManager = function() {
            this._hashTargets = e.createMap(!0),
            this._arrayTargets = [],
            this._currentTarget = null,
            cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
        }
        ,
        cc.ActionManager.prototype = {
            constructor: cc.ActionManager,
            _elementPool: [],
            _searchElementByTarget: function(t, e) {
                for (var i = 0; i < t.length; i++)
                    if (e === t[i].target)
                        return t[i];
                return null
            },
            _getElement: function(t, e) {
                var n = this._elementPool.pop();
                return n || (n = new i),
                n.target = t,
                n.paused = !!e,
                n
            },
            _putElement: function(t) {
                t.actions.length = 0,
                t.actionIndex = 0,
                t.currentAction = null,
                t.paused = !1,
                t.target = null,
                t.lock = !1,
                this._elementPool.push(t)
            },
            addAction: function(t, e, i) {
                if (t && e) {
                    var n = this._hashTargets[e._id];
                    n ? n.actions || (n.actions = []) : (n = this._getElement(e, i),
                    this._hashTargets[e._id] = n,
                    this._arrayTargets.push(n)),
                    n.actions.push(t),
                    t.startWithTarget(e)
                } else
                    cc.errorID(1e3)
            },
            removeAllActions: function() {
                for (var t = this._arrayTargets, i = 0; i < t.length; i++) {
                    var n = t[i];
                    n && this._putElement(n)
                }
                this._arrayTargets.length = 0,
                this._hashTargets = e.createMap(!0)
            },
            removeAllActionsFromTarget: function(t) {
                if (null != t) {
                    var e = this._hashTargets[t._id];
                    e && (e.actions.length = 0,
                    this._deleteHashElement(e))
                }
            },
            removeAction: function(t) {
                if (t) {
                    var e = t.getOriginalTarget()
                      , i = this._hashTargets[e._id];
                    if (i)
                        for (var n = 0; n < i.actions.length; n++)
                            if (i.actions[n] === t) {
                                i.actions.splice(n, 1),
                                i.actionIndex >= n && i.actionIndex--;
                                break
                            }
                }
            },
            _removeActionByTag: function(t, e, i) {
                for (var n = 0, r = e.actions.length; n < r; ++n) {
                    var s = e.actions[n];
                    if (s && s.getTag() === t) {
                        if (i && s.getOriginalTarget() !== i)
                            continue;
                        this._removeActionAtIndex(n, e);
                        break
                    }
                }
            },
            removeActionByTag: function(t, e) {
                t === cc.Action.TAG_INVALID && cc.logID(1002);
                var i = this._hashTargets;
                if (e) {
                    var n = i[e._id];
                    n && this._removeActionByTag(t, n, e)
                } else
                    for (var r in i) {
                        var s = i[r];
                        this._removeActionByTag(t, s)
                    }
            },
            getActionByTag: function(t, e) {
                t === cc.Action.TAG_INVALID && cc.logID(1004);
                var i = this._hashTargets[e._id];
                if (i) {
                    if (null != i.actions)
                        for (var n = 0; n < i.actions.length; ++n) {
                            var r = i.actions[n];
                            if (r && r.getTag() === t)
                                return r
                        }
                    cc.logID(1005, t)
                }
                return null
            },
            getNumberOfRunningActionsInTarget: function(t) {
                var e = this._hashTargets[t._id];
                return e && e.actions ? e.actions.length : 0
            },
            pauseTarget: function(t) {
                var e = this._hashTargets[t._id];
                e && (e.paused = !0)
            },
            resumeTarget: function(t) {
                var e = this._hashTargets[t._id];
                e && (e.paused = !1)
            },
            pauseAllRunningActions: function() {
                for (var t = [], e = this._arrayTargets, i = 0; i < e.length; i++) {
                    var n = e[i];
                    n && !n.paused && (n.paused = !0,
                    t.push(n.target))
                }
                return t
            },
            resumeTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++)
                        t[e] && this.resumeTarget(t[e])
            },
            pauseTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++)
                        t[e] && this.pauseTarget(t[e])
            },
            purgeSharedManager: function() {
                cc.director.getScheduler().unscheduleUpdate(this)
            },
            _removeActionAtIndex: function(t, e) {
                e.actions[t],
                e.actions.splice(t, 1),
                e.actionIndex >= t && e.actionIndex--,
                0 === e.actions.length && this._deleteHashElement(e)
            },
            _deleteHashElement: function(t) {
                var e = !1;
                if (t && !t.lock && this._hashTargets[t.target._id]) {
                    delete this._hashTargets[t.target._id];
                    for (var i = this._arrayTargets, n = 0, r = i.length; n < r; n++)
                        if (i[n] === t) {
                            i.splice(n, 1);
                            break
                        }
                    this._putElement(t),
                    e = !0
                }
                return e
            },
            update: function(t) {
                for (var e, i = this._arrayTargets, n = 0; n < i.length; n++) {
                    if (this._currentTarget = i[n],
                    !(e = this._currentTarget).paused && e.actions) {
                        for (e.lock = !0,
                        e.actionIndex = 0; e.actionIndex < e.actions.length; e.actionIndex++)
                            if (e.currentAction = e.actions[e.actionIndex],
                            e.currentAction) {
                                if (e.currentAction.step(t * (e.currentAction._speedMethod ? e.currentAction._speed : 1)),
                                e.currentAction && e.currentAction.isDone()) {
                                    e.currentAction.stop();
                                    var r = e.currentAction;
                                    e.currentAction = null,
                                    this.removeAction(r)
                                }
                                e.currentAction = null
                            }
                        e.lock = !1
                    }
                    0 === e.actions.length && this._deleteHashElement(e) && n--
                }
            }
        }
    }
    ), {
        "../core/platform/CCClass": 193,
        "../core/platform/js": 214
    }],
    7: [(function(t) {
        "use strict";
        t("./CCActionManager"),
        t("./CCAction"),
        t("./CCActionInterval"),
        t("./CCActionInstant"),
        t("./CCActionEase"),
        t("./CCActionCatmullRom"),
        t("./tween")
    }
    ), {
        "./CCAction": 1,
        "./CCActionCatmullRom": 2,
        "./CCActionEase": 3,
        "./CCActionInstant": 4,
        "./CCActionInterval": 5,
        "./CCActionManager": 6,
        "./tween": 8
    }],
    8: [(function(t) {
        "use strict";
        var e = t("../animation/bezier")
          , i = 0
          , n = cc.Class({
            name: "cc.TweenAction",
            extends: cc.ActionInterval,
            ctor: function(t, e, i) {
                if (this._opts = i = i || Object.create(null),
                this._props = Object.create(null),
                i.progress = i.progress || this.progress,
                i.easing && "string" == typeof i.easing) {
                    var n = i.easing;
                    i.easing = cc.easing[n],
                    !i.easing && cc.warnID(1031, n)
                }
                var r = this._opts.relative;
                for (var s in e) {
                    var a = e[s]
                      , o = void 0
                      , l = void 0;
                    if (void 0 !== a.value && (a.easing || a.progress) && ("string" == typeof a.easing ? !(o = cc.easing[a.easing]) && cc.warnID(1031, a.easing) : o = a.easing,
                    l = a.progress,
                    a = a.value),
                    "number" == typeof a || a.lerp && (!r || a.add || a.mul) && a.clone) {
                        var h = Object.create(null);
                        h.value = a,
                        h.easing = o,
                        h.progress = l,
                        this._props[s] = h
                    } else
                        cc.warn("Can not animate " + s + " property, because it do not have [lerp, (add|mul), clone] function.")
                }
                this._originProps = e,
                this.initWithDuration(t)
            },
            clone: function() {
                var t = new n(this._duration,this._originProps,this._opts);
                return this._cloneDecoration(t),
                t
            },
            startWithTarget: function(t) {
                cc.ActionInterval.prototype.startWithTarget.call(this, t);
                var e = !!this._opts.relative
                  , i = this._props;
                for (var n in i) {
                    var r = t[n]
                      , s = i[n];
                    "number" == typeof r ? (s.start = r,
                    s.current = r,
                    s.end = e ? r + s.value : s.value) : (s.start = r.clone(),
                    s.current = r.clone(),
                    s.end = e ? (r.add || r.mul).call(r, s.value) : s.value)
                }
            },
            update: function(t) {
                var e = this._opts
                  , i = t;
                e.easing && (i = e.easing(t));
                var n = this.target;
                if (n) {
                    var r = this._props
                      , s = e.progress;
                    for (var a in r) {
                        var o = r[a]
                          , l = o.easing ? o.easing(t) : i
                          , h = o.current = (o.progress || s)(o.start, o.end, o.current, l);
                        n[a] = h
                    }
                    var c = e.onUpdate;
                    c && c(n, t)
                }
            },
            progress: function(t, e, i, n) {
                return "number" == typeof t ? i = t + (e - t) * n : t.lerp(e, n, i),
                i
            }
        })
          , r = cc.Class({
            name: "cc.SetAction",
            extends: cc.ActionInstant,
            ctor: function(t) {
                this._props = {},
                void 0 !== t && this.init(t)
            },
            init: function(t) {
                for (var e in t)
                    this._props[e] = t[e];
                return !0
            },
            update: function() {
                var t = this._props
                  , e = this.target;
                for (var i in t)
                    e[i] = t[i]
            },
            clone: function() {
                var t = new r;
                return t.init(this._props),
                t
            }
        });
        function s(t) {
            this._actions = [],
            this._finalAction = null,
            this._target = t,
            this._tag = cc.Action.TAG_INVALID
        }
        s.stopAll = function() {
            cc.director.getActionManager().removeAllActions()
        }
        ,
        s.stopAllByTag = function(t) {
            cc.director.getActionManager().removeActionByTag(t)
        }
        ,
        s.stopAllByTarget = function(t) {
            cc.director.getActionManager().removeAllActionsFromTarget(t)
        }
        ,
        s.prototype.then = function(t) {
            return t instanceof cc.Action ? this._actions.push(t.clone()) : this._actions.push(t._union()),
            this
        }
        ,
        s.prototype.target = function(t) {
            return this._target = t,
            this
        }
        ,
        s.prototype.start = function() {
            var t = this._target;
            return t ? t instanceof cc.Object && !t.isValid ? void 0 : (this._finalAction && cc.director.getActionManager().removeAction(this._finalAction),
            this._finalAction = this._union(),
            void 0 === t._id && (t._id = ++i),
            this._finalAction.setTag(this._tag),
            cc.director.getActionManager().addAction(this._finalAction, t, !1),
            this) : (cc.warn("Please set target to tween first"),
            this)
        }
        ,
        s.prototype.stop = function() {
            return this._finalAction && cc.director.getActionManager().removeAction(this._finalAction),
            this
        }
        ,
        s.prototype.tag = function(t) {
            return this._tag = t,
            this
        }
        ,
        s.prototype.clone = function(t) {
            var e = this._union();
            return cc.tween(t).then(e.clone())
        }
        ,
        s.prototype.union = function() {
            var t = this._union();
            return this._actions.length = 0,
            this._actions.push(t),
            this
        }
        ,
        s.prototype._union = function() {
            var t = this._actions;
            return 1 === t.length ? t[0] : cc.sequence(t)
        }
        ,
        Object.assign(s.prototype, {
            bezierTo: function(t, i, n, r, s) {
                var a = i.x
                  , o = i.y
                  , l = n.x
                  , h = n.y;
                return (s = s || Object.create(null)).progress = function(t, i, n, r) {
                    return n.x = (0,
                    e.bezier)(t.x, a, l, i.x, r),
                    n.y = (0,
                    e.bezier)(t.y, o, h, i.y, r),
                    n
                }
                ,
                this.to(t, {
                    position: r
                }, s)
            },
            bezierBy: function(t, i, n, r, s) {
                var a = i.x
                  , o = i.y
                  , l = n.x
                  , h = n.y;
                return (s = s || Object.create(null)).progress = function(t, i, n, r) {
                    var s = t.x
                      , c = t.y;
                    return n.x = (0,
                    e.bezier)(s, a + s, l + s, i.x, r),
                    n.y = (0,
                    e.bezier)(c, o + c, h + c, i.y, r),
                    n
                }
                ,
                this.by(t, {
                    position: r
                }, s)
            },
            flipX: function() {
                var t = this;
                return this.call((function() {
                    t._target.scaleX *= -1
                }
                ), this)
            },
            flipY: function() {
                var t = this;
                return this.call((function() {
                    t._target.scaleY *= -1
                }
                ), this)
            },
            blink: function(t, e, i) {
                var n = 1 / e;
                return (i = i || Object.create(null)).progress = function(t, e, i, r) {
                    return r >= 1 ? t : r % n > n / 2 ? 255 : 0
                }
                ,
                this.to(t, {
                    opacity: 1
                }, i)
            }
        });
        var a = [];
        function o(t) {
            return function() {
                a.length = 0;
                for (var e = arguments.length, i = 0; i < e; i++) {
                    var n = a[i] = arguments[i];
                    n instanceof s && (a[i] = n._union())
                }
                return t.apply(this, a)
            }
        }
        for (var l = {
            to: function(t, e, i) {
                return (i = i || Object.create(null)).relative = !1,
                new n(t,e,i)
            },
            by: function(t, e, i) {
                return (i = i || Object.create(null)).relative = !0,
                new n(t,e,i)
            },
            set: function(t) {
                return new r(t)
            },
            delay: cc.delayTime,
            call: cc.callFunc,
            hide: cc.hide,
            show: cc.show,
            removeSelf: cc.removeSelf,
            sequence: o(cc.sequence),
            parallel: o(cc.spawn)
        }, h = {
            repeat: cc.repeat,
            repeatForever: function(t) {
                return cc.repeat(t, 1e9)
            },
            reverseTime: cc.reverseTime
        }, c = Object.keys(l), u = function(t) {
            var e = c[t];
            s.prototype[e] = function() {
                var t = l[e].apply(this, arguments);
                return this._actions.push(t),
                this
            }
        }, _ = 0; _ < c.length; _++)
            u(_);
        c = Object.keys(h);
        for (var f = function(t) {
            var e = c[t];
            s.prototype[e] = function() {
                var t = this._actions
                  , i = arguments[arguments.length - 1]
                  , n = arguments.length - 1;
                i instanceof cc.Tween ? i = i._union() : i instanceof cc.Action || (i = t[t.length - 1],
                t.length -= 1,
                n += 1);
                for (var r = [i], s = 0; s < n; s++)
                    r.push(arguments[s]);
                return i = h[e].apply(this, r),
                t.push(i),
                this
            }
        }, d = 0; d < c.length; d++)
            f(d);
        cc.tween = function(t) {
            return new s(t)
        }
        ,
        cc.Tween = s
    }
    ), {
        "../animation/bezier": 14
    }],
    9: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = t("./playable")
          , r = t("./animation-curves")
          , s = r.EventAnimCurve
          , a = r.EventInfo
          , o = t("./types").WrapModeMask
          , l = t("../core/utils/binary-search").binarySearchEpsilon;
        function h(t, e) {
            n.call(this),
            this.target = t,
            this.animation = e,
            this._anims = new i.array.MutableForwardIterator([])
        }
        i.extend(h, n);
        var c = h.prototype;
        function u(t, e) {
            var i = e.clip;
            e.duration = i.duration,
            e.speed = i.speed,
            e.wrapMode = i.wrapMode,
            e.frameRate = i.sample,
            (e.wrapMode & o.Loop) === o.Loop ? e.repeatCount = 1 / 0 : e.repeatCount = 1;
            var n = e.curves = i.createCurves(e, t)
              , r = i.events;
            if (r)
                for (var h, c = 0, u = r.length; c < u; c++) {
                    h || ((h = new s).target = t,
                    n.push(h));
                    var _ = r[c]
                      , f = _.frame / e.duration
                      , d = void 0
                      , p = l(h.ratios, f);
                    p >= 0 ? d = h.events[p] : (d = new a,
                    h.ratios.push(f),
                    h.events.push(d)),
                    d.add(_.func, _.params)
                }
        }
        c.playState = function(t, e) {
            t.clip && (t.curveLoaded || u(this.target, t),
            t.animator = this,
            t.play(),
            "number" == typeof e && t.setTime(e),
            this.play())
        }
        ,
        c.stopStatesExcept = function(t) {
            var e = this._anims
              , i = e.array;
            for (e.i = 0; e.i < i.length; ++e.i) {
                var n = i[e.i];
                n !== t && this.stopState(n)
            }
        }
        ,
        c.addAnimation = function(t) {
            -1 === this._anims.array.indexOf(t) && this._anims.push(t),
            t._setEventTarget(this.animation)
        }
        ,
        c.removeAnimation = function(t) {
            var e = this._anims.array.indexOf(t);
            e >= 0 ? (this._anims.fastRemoveAt(e),
            0 === this._anims.array.length && this.stop()) : cc.errorID(3907),
            t.animator = null
        }
        ,
        c.sample = function() {
            var t = this._anims
              , e = t.array;
            for (t.i = 0; t.i < e.length; ++t.i)
                e[t.i].sample()
        }
        ,
        c.stopState = function(t) {
            t && t.stop()
        }
        ,
        c.pauseState = function(t) {
            t && t.pause()
        }
        ,
        c.resumeState = function(t) {
            t && t.resume(),
            this.isPaused && this.resume()
        }
        ,
        c.setStateTime = function(t, e) {
            if (void 0 !== e)
                t && (t.setTime(e),
                t.sample());
            else {
                e = t;
                for (var i = this._anims.array, n = 0; n < i.length; ++n) {
                    var r = i[n];
                    r.setTime(e),
                    r.sample()
                }
            }
        }
        ,
        c.onStop = function() {
            var t = this._anims
              , e = t.array;
            for (t.i = 0; t.i < e.length; ++t.i)
                e[t.i].stop()
        }
        ,
        c.onPause = function() {
            for (var t = this._anims.array, e = 0; e < t.length; ++e) {
                var i = t[e];
                i.pause(),
                i.animator = null
            }
        }
        ,
        c.onResume = function() {
            for (var t = this._anims.array, e = 0; e < t.length; ++e) {
                var i = t[e];
                i.animator = this,
                i.resume()
            }
        }
        ,
        c._reloadClip = function(t) {
            u(this.target, t)
        }
        ,
        e.exports = h
    }
    ), {
        "../core/utils/binary-search": 260,
        "./animation-curves": 11,
        "./playable": 18,
        "./types": 19
    }],
    10: [(function(t, e) {
        "use strict";
        var i = t("./types").WrapMode
          , n = t("./animation-curves")
          , r = n.DynamicAnimCurve
          , s = n.quickFindIndex
          , a = t("./motion-path-helper").sampleMotionPaths
          , o = t("../core/utils/binary-search").binarySearchEpsilon
          , l = cc.Class({
            name: "cc.AnimationClip",
            extends: cc.Asset,
            properties: {
                _duration: {
                    default: 0,
                    type: cc.Float
                },
                duration: {
                    get: function() {
                        return this._duration
                    }
                },
                sample: {
                    default: 60
                },
                speed: {
                    default: 1
                },
                wrapMode: {
                    default: i.Normal
                },
                curveData: {
                    default: {},
                    visible: !1
                },
                events: {
                    default: [],
                    visible: !1
                }
            },
            statics: {
                createWithSpriteFrames: function(t, e) {
                    if (!Array.isArray(t))
                        return cc.errorID(3905),
                        null;
                    var i = new l;
                    i.sample = e || i.sample,
                    i._duration = t.length / i.sample;
                    for (var n = [], r = 1 / i.sample, s = 0, a = t.length; s < a; s++)
                        n[s] = {
                            frame: s * r,
                            value: t[s]
                        };
                    return i.curveData = {
                        comps: {
                            "cc.Sprite": {
                                spriteFrame: n
                            }
                        }
                    },
                    i
                }
            },
            onLoad: function() {
                this._duration = Number.parseFloat(this.duration),
                this.speed = Number.parseFloat(this.speed),
                this.wrapMode = Number.parseInt(this.wrapMode),
                this.frameRate = Number.parseFloat(this.sample)
            },
            createPropCurve: function(t, e, i) {
                var n = []
                  , l = t instanceof cc.Node && "position" === e
                  , h = new r;
                h.target = t,
                h.prop = e;
                for (var c = 0, u = i.length; c < u; c++) {
                    var _ = i[c]
                      , f = _.frame / this.duration;
                    h.ratios.push(f),
                    l && n.push(_.motionPath);
                    var d = _.value;
                    h.values.push(d);
                    var p = _.curve;
                    if (p) {
                        if ("string" == typeof p) {
                            h.types.push(p);
                            continue
                        }
                        if (Array.isArray(p)) {
                            p[0] === p[1] && p[2] === p[3] ? h.types.push(r.Linear) : h.types.push(r.Bezier(p));
                            continue
                        }
                    }
                    h.types.push(r.Linear)
                }
                l && a(n, h, this.duration, this.sample, t);
                for (var m, y, v = h.ratios, g = !0, A = 1, x = v.length; A < x; A++)
                    if (m = v[A] - v[A - 1],
                    1 === A)
                        y = m;
                    else if (Math.abs(m - y) > 1e-6) {
                        g = !1;
                        break
                    }
                h._findFrameIndex = g ? s : o;
                var b = h.values[0];
                return null == b || h._lerp || ("number" == typeof b ? h._lerp = r.prototype._lerpNumber : b instanceof cc.Quat ? h._lerp = r.prototype._lerpQuat : b instanceof cc.Vec2 ? h._lerp = r.prototype._lerpVector2 : b instanceof cc.Vec3 ? h._lerp = r.prototype._lerpVector3 : b.lerp && (h._lerp = r.prototype._lerpObject)),
                h
            },
            createTargetCurves: function(t, e, i) {
                var n = e.props
                  , r = e.comps;
                if (n)
                    for (var s in n) {
                        var a = n[s]
                          , o = this.createPropCurve(t, s, a);
                        i.push(o)
                    }
                if (r)
                    for (var l in r) {
                        var h = t.getComponent(l);
                        if (h) {
                            var c = r[l];
                            for (var u in c) {
                                var _ = c[u]
                                  , f = this.createPropCurve(h, u, _);
                                i.push(f)
                            }
                        }
                    }
            },
            createCurves: function(t, e) {
                var i = this.curveData
                  , n = i.paths
                  , r = [];
                for (var s in this.createTargetCurves(e, i, r),
                n) {
                    var a = cc.find(s, e);
                    if (a) {
                        var o = n[s];
                        this.createTargetCurves(a, o, r)
                    }
                }
                return r
            }
        });
        cc.AnimationClip = e.exports = l
    }
    ), {
        "../core/utils/binary-search": 260,
        "./animation-curves": 11,
        "./motion-path-helper": 17,
        "./types": 19
    }],
    11: [(function(t, e) {
        "use strict";
        var i = t("./bezier").bezierByTime
          , n = t("../core/utils/binary-search").binarySearchEpsilon
          , r = t("./types").WrapModeMask
          , s = t("./types").WrappedInfo;
        function a(t, e) {
            if ("string" == typeof e) {
                var n = cc.easing[e];
                n ? t = n(t) : cc.errorID(3906, e)
            } else
                Array.isArray(e) && (t = i(e, t));
            return t
        }
        var o = cc.Class({
            name: "cc.AnimCurve",
            sample: function() {},
            onTimeChangedManually: void 0
        });
        var l, h = cc.Class({
            name: "cc.DynamicAnimCurve",
            extends: o,
            ctor: function() {
                this._cachedIndex = 0
            },
            properties: {
                target: null,
                prop: "",
                values: [],
                ratios: [],
                types: []
            },
            _findFrameIndex: n,
            _lerp: void 0,
            _lerpNumber: function(t, e, i) {
                return t + (e - t) * i
            },
            _lerpObject: function(t, e, i) {
                return t.lerp(e, i)
            },
            _lerpQuat: (l = cc.quat(),
            function(t, e, i) {
                return t.lerp(e, i, l)
            }
            ),
            _lerpVector2: (function() {
                var t = cc.v2();
                return function(e, i, n) {
                    return e.lerp(i, n, t)
                }
            }
            )(),
            _lerpVector3: (function() {
                var t = cc.v3();
                return function(e, i, n) {
                    return e.lerp(i, n, t)
                }
            }
            )(),
            sample: function(t, e) {
                var i = this.values
                  , n = this.ratios
                  , r = n.length;
                if (0 !== r) {
                    var s, o = !0, l = this._cachedIndex;
                    if (l < 0 && (l = ~l) > 0 && l < n.length) {
                        var h = n[l - 1]
                          , c = n[l];
                        e > h && e < c && (o = !1)
                    }
                    o && (this._cachedIndex = this._findFrameIndex(n, e));
                    var u = this._cachedIndex;
                    if (u < 0)
                        if ((u = ~u) <= 0)
                            s = i[0];
                        else if (u >= r)
                            s = i[r - 1];
                        else {
                            var _ = i[u - 1];
                            if (this._lerp) {
                                var f = n[u - 1]
                                  , d = n[u]
                                  , p = this.types[u - 1]
                                  , m = (e - f) / (d - f);
                                p && (m = a(m, p));
                                var y = i[u];
                                s = this._lerp(_, y, m)
                            } else
                                s = _
                        }
                    else
                        s = i[u];
                    this.target[this.prop] = s
                }
            }
        });
        h.Linear = null,
        h.Bezier = function(t) {
            return t
        }
        ;
        var c = function() {
            this.events = []
        };
        c.prototype.add = function(t, e) {
            this.events.push({
                func: t || "",
                params: e || []
            })
        }
        ;
        var u = cc.Class({
            name: "cc.EventAnimCurve",
            extends: o,
            properties: {
                target: null,
                ratios: [],
                events: [],
                _wrappedInfo: {
                    default: function() {
                        return new s
                    }
                },
                _lastWrappedInfo: null,
                _ignoreIndex: NaN
            },
            _wrapIterations: function(t) {
                return t - (0 | t) == 0 && (t -= 1),
                0 | t
            },
            sample: function(t, e, i) {
                var a = this.ratios.length
                  , o = i.getWrappedInfo(i.time, this._wrappedInfo)
                  , l = o.direction
                  , h = n(this.ratios, o.ratio);
                if (h < 0 && (h = ~h - 1,
                l < 0 && (h += 1)),
                this._ignoreIndex !== h && (this._ignoreIndex = NaN),
                o.frameIndex = h,
                !this._lastWrappedInfo)
                    return this._fireEvent(h),
                    void (this._lastWrappedInfo = new s(o));
                var c = i.wrapMode
                  , u = this._wrapIterations(o.iterations)
                  , _ = this._lastWrappedInfo
                  , f = this._wrapIterations(_.iterations)
                  , d = _.frameIndex
                  , p = _.direction
                  , m = -1 !== f && u !== f;
                if (d === h && m && 1 === a)
                    this._fireEvent(0);
                else if (d !== h || m) {
                    l = p;
                    do {
                        if (d !== h) {
                            if (-1 === l && 0 === d && h > 0 ? ((c & r.PingPong) === r.PingPong ? l *= -1 : d = a,
                            f++) : 1 === l && d === a - 1 && h < a - 1 && ((c & r.PingPong) === r.PingPong ? l *= -1 : d = -1,
                            f++),
                            d === h)
                                break;
                            if (f > u)
                                break
                        }
                        d += l,
                        cc.director.getAnimationManager().pushDelayEvent(this, "_fireEvent", [d])
                    } while (d !== h && d > -1 && d < a)
                }
                this._lastWrappedInfo.set(o)
            },
            _fireEvent: function(t) {
                if (!(t < 0 || t >= this.events.length || this._ignoreIndex === t)) {
                    var e = this.events[t].events;
                    if (this.target.isValid)
                        for (var i = this.target._components, n = 0; n < e.length; n++)
                            for (var r = e[n], s = r.func, a = 0; a < i.length; a++) {
                                var o = i[a]
                                  , l = o[s];
                                l && l.apply(o, r.params)
                            }
                }
            },
            onTimeChangedManually: function(t, e) {
                this._lastWrappedInfo = null,
                this._ignoreIndex = NaN;
                var i = e.getWrappedInfo(t, this._wrappedInfo)
                  , r = i.direction
                  , s = n(this.ratios, i.ratio);
                s < 0 && (s = ~s - 1,
                r < 0 && (s += 1),
                this._ignoreIndex = s)
            }
        });
        e.exports = {
            AnimCurve: o,
            DynamicAnimCurve: h,
            EventAnimCurve: u,
            EventInfo: c,
            computeRatioByType: a,
            quickFindIndex: function(t, e) {
                var i = t.length - 1;
                if (0 === i)
                    return 0;
                var n = t[0];
                if (e < n)
                    return 0;
                var r = t[i];
                if (e > r)
                    return ~t.length;
                var s = (e = (e - n) / (r - n)) / (1 / i)
                  , a = 0 | s;
                return s - a < 1e-6 ? a : a + 1 - s < 1e-6 ? a + 1 : ~(a + 1)
            }
        }
    }
    ), {
        "../core/utils/binary-search": 260,
        "./bezier": 14,
        "./types": 19
    }],
    12: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = cc.Class({
            ctor: function() {
                this._anims = new i.array.MutableForwardIterator([]),
                this._delayEvents = [],
                cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
            },
            update: function(t) {
                var e = this._anims
                  , i = e.array;
                for (e.i = 0; e.i < i.length; ++e.i) {
                    var n = i[e.i];
                    n._isPlaying && !n._isPaused && n.update(t)
                }
                for (var r = this._delayEvents, s = 0; s < r.length; s++) {
                    var a = r[s];
                    a.target[a.func].apply(a.target, a.args)
                }
                r.length = 0
            },
            destruct: function() {},
            addAnimation: function(t) {
                -1 === this._anims.array.indexOf(t) && this._anims.push(t)
            },
            removeAnimation: function(t) {
                var e = this._anims.array.indexOf(t);
                e >= 0 ? this._anims.fastRemoveAt(e) : cc.errorID(3907)
            },
            pushDelayEvent: function(t, e, i) {
                this._delayEvents.push({
                    target: t,
                    func: e,
                    args: i
                })
            }
        });
        cc.AnimationManager = e.exports = n
    }
    ), {}],
    13: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = t("./playable")
          , r = t("./types")
          , s = r.WrappedInfo
          , a = r.WrapMode
          , o = r.WrapModeMask;
        function l(t, e) {
            n.call(this),
            this._currentFramePlayed = !1,
            this._delay = 0,
            this._delayTime = 0,
            this._wrappedInfo = new s,
            this._lastWrappedInfo = null,
            this._process = c,
            this._clip = t,
            this._name = e || t && t.name,
            this.animator = null,
            this.curves = [],
            this.delay = 0,
            this.repeatCount = 1,
            this.duration = 1,
            this.speed = 1,
            this.wrapMode = a.Normal,
            this.time = 0,
            this._target = null,
            this._lastframeEventOn = !1,
            this.emit = function() {
                for (var t = new Array(arguments.length), e = 0, i = t.length; e < i; e++)
                    t[e] = arguments[e];
                cc.director.getAnimationManager().pushDelayEvent(this, "_emit", t)
            }
        }
        i.extend(l, n);
        var h = l.prototype;
        function c() {
            var t, e = this.sample();
            this._lastframeEventOn && (t = this._lastWrappedInfo ? this._lastWrappedInfo : this._lastWrappedInfo = new s(e),
            this.repeatCount > 1 && (0 | e.iterations) > (0 | t.iterations) && this.emit("lastframe", this),
            t.set(e)),
            e.stopped && (this.stop(),
            this.emit("finished", this))
        }
        function u() {
            var t = this.time
              , e = this.duration;
            t > e ? 0 == (t %= e) && (t = e) : t < 0 && 0 != (t %= e) && (t += e);
            for (var i = t / e, n = this.curves, r = 0, s = n.length; r < s; r++)
                n[r].sample(t, i, this);
            this._lastframeEventOn && (void 0 === this._lastIterations && (this._lastIterations = i),
            (this.time > 0 && this._lastIterations > i || this.time < 0 && this._lastIterations < i) && this.emit("lastframe", this),
            this._lastIterations = i)
        }
        h._emit = function(t, e) {
            this._target && this._target.isValid && this._target.emit(t, t, e)
        }
        ,
        h.on = function(t, e, i) {
            return this._target && this._target.isValid ? ("lastframe" === t && (this._lastframeEventOn = !0),
            this._target.on(t, e, i)) : null
        }
        ,
        h.once = function(t, e, i) {
            if (this._target && this._target.isValid) {
                "lastframe" === t && (this._lastframeEventOn = !0);
                var n = this;
                return this._target.once(t, (function(t) {
                    e.call(i, t),
                    n._lastframeEventOn = !1
                }
                ))
            }
            return null
        }
        ,
        h.off = function(t, e, i) {
            this._target && this._target.isValid && ("lastframe" === t && (this._target.hasEventListener(t) || (this._lastframeEventOn = !1)),
            this._target.off(t, e, i))
        }
        ,
        h._setEventTarget = function(t) {
            this._target = t
        }
        ,
        h.onPlay = function() {
            this.setTime(0),
            this._delayTime = this._delay,
            cc.director.getAnimationManager().addAnimation(this),
            this.animator && this.animator.addAnimation(this),
            this.emit("play", this)
        }
        ,
        h.onStop = function() {
            this.isPaused || cc.director.getAnimationManager().removeAnimation(this),
            this.animator && this.animator.removeAnimation(this),
            this.emit("stop", this)
        }
        ,
        h.onResume = function() {
            cc.director.getAnimationManager().addAnimation(this),
            this.emit("resume", this)
        }
        ,
        h.onPause = function() {
            cc.director.getAnimationManager().removeAnimation(this),
            this.emit("pause", this)
        }
        ,
        h.setTime = function(t) {
            this._currentFramePlayed = !1,
            this.time = t || 0;
            for (var e = this.curves, i = 0, n = e.length; i < n; i++) {
                var r = e[i];
                r.onTimeChangedManually && r.onTimeChangedManually(t, this)
            }
        }
        ,
        h.update = function(t) {
            this._delayTime > 0 && (this._delayTime -= t,
            this._delayTime > 0) || (this._currentFramePlayed ? this.time += t * this.speed : this._currentFramePlayed = !0,
            this._process())
        }
        ,
        h._needRevers = function(t) {
            var e = this.wrapMode
              , i = !1;
            return (e & o.PingPong) === o.PingPong && (t - (0 | t) == 0 && t > 0 && (t -= 1),
            1 & t && (i = !i)),
            (e & o.Reverse) === o.Reverse && (i = !i),
            i
        }
        ,
        h.getWrappedInfo = function(t, e) {
            e = e || new s;
            var i = !1
              , n = this.duration
              , r = this.repeatCount
              , a = t > 0 ? t / n : -t / n;
            if (a >= r) {
                a = r,
                i = !0;
                var l = r - (0 | r);
                0 === l && (l = 1),
                t = l * n * (t > 0 ? 1 : -1)
            }
            if (t > n) {
                var h = t % n;
                t = 0 === h ? n : h
            } else
                t < 0 && 0 != (t %= n) && (t += n);
            var c = !1
              , u = this._wrapMode & o.ShouldWrap;
            u && (c = this._needRevers(a));
            var _ = c ? -1 : 1;
            return this.speed < 0 && (_ *= -1),
            u && c && (t = n - t),
            e.ratio = t / n,
            e.time = t,
            e.direction = _,
            e.stopped = i,
            e.iterations = a,
            e
        }
        ,
        h.sample = function() {
            for (var t = this.getWrappedInfo(this.time, this._wrappedInfo), e = this.curves, i = 0, n = e.length; i < n; i++)
                e[i].sample(t.time, t.ratio, this);
            return t
        }
        ,
        i.get(h, "clip", (function() {
            return this._clip
        }
        )),
        i.get(h, "name", (function() {
            return this._name
        }
        )),
        i.obsolete(h, "AnimationState.length", "duration"),
        i.getset(h, "curveLoaded", (function() {
            return this.curves.length > 0
        }
        ), (function() {
            this.curves.length = 0
        }
        )),
        i.getset(h, "wrapMode", (function() {
            return this._wrapMode
        }
        ), (function(t) {
            this._wrapMode = t,
            this.time = 0,
            t & o.Loop ? this.repeatCount = 1 / 0 : this.repeatCount = 1
        }
        )),
        i.getset(h, "repeatCount", (function() {
            return this._repeatCount
        }
        ), (function(t) {
            this._repeatCount = t;
            var e = this._wrapMode & o.ShouldWrap
              , i = (this.wrapMode & o.Reverse) === o.Reverse;
            this._process = t !== 1 / 0 || e || i ? c : u
        }
        )),
        i.getset(h, "delay", (function() {
            return this._delay
        }
        ), (function(t) {
            this._delayTime = this._delay = t
        }
        )),
        cc.AnimationState = e.exports = l
    }
    ), {
        "./playable": 18,
        "./types": 19
    }],
    14: [(function(t, e) {
        "use strict";
        var i = Math.cos
          , n = Math.acos
          , r = Math.max
          , s = 2 * Math.PI
          , a = Math.sqrt;
        function o(t) {
            return t < 0 ? -Math.pow(-t, 1 / 3) : Math.pow(t, 1 / 3)
        }
        function l(t, e) {
            var l, h, c, u, _ = e - 0, f = e - t[0], d = 3 * _, p = 3 * f, m = 3 * (e - t[2]), y = 1 / (-_ + p - m + (e - 1)), v = (d - 6 * f + m) * y, g = v * (1 / 3), A = (-d + p) * y, x = 1 / 3 * (3 * A - v * v), b = x * (1 / 3), C = (2 * v * v * v - 9 * v * A + _ * y * 27) / 27, T = C / 2, S = T * T + b * b * b;
            if (S < 0) {
                var w = 1 / 3 * -x
                  , E = a(w * w * w)
                  , M = -C / (2 * E)
                  , D = n(M < -1 ? -1 : M > 1 ? 1 : M)
                  , B = 2 * o(E);
                return h = B * i(D * (1 / 3)) - g,
                c = B * i((D + s) * (1 / 3)) - g,
                u = B * i((D + 2 * s) * (1 / 3)) - g,
                0 <= h && h <= 1 ? 0 <= c && c <= 1 ? 0 <= u && u <= 1 ? r(h, c, u) : r(h, c) : 0 <= u && u <= 1 ? r(h, u) : h : 0 <= c && c <= 1 ? 0 <= u && u <= 1 ? r(c, u) : c : u
            }
            if (0 === S)
                return c = -(l = T < 0 ? o(-T) : -o(T)) - g,
                0 <= (h = 2 * l - g) && h <= 1 ? 0 <= c && c <= 1 ? r(h, c) : h : c;
            var I = a(S);
            return (l = o(-T + I)) - o(T + I) - g
        }
        e.exports = {
            bezier: function(t, e, i, n, r) {
                var s = 1 - r;
                return s * (s * (t + (3 * e - t) * r) + 3 * i * r * r) + n * r * r * r
            },
            bezierByTime: function(t, e) {
                var i = l(t, e)
                  , n = t[1];
                return ((1 - i) * (n + (t[3] - n) * i) * 3 + i * i) * i
            }
        }
    }
    ), {}],
    15: [(function(t, e) {
        "use strict";
        var i = {
            constant: function() {
                return 0
            },
            linear: function(t) {
                return t
            },
            quadIn: function(t) {
                return t * t
            },
            quadOut: function(t) {
                return t * (2 - t)
            },
            quadInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
            },
            cubicIn: function(t) {
                return t * t * t
            },
            cubicOut: function(t) {
                return --t * t * t + 1
            },
            cubicInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
            },
            quartIn: function(t) {
                return t * t * t * t
            },
            quartOut: function(t) {
                return 1 - --t * t * t * t
            },
            quartInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
            },
            quintIn: function(t) {
                return t * t * t * t * t
            },
            quintOut: function(t) {
                return --t * t * t * t * t + 1
            },
            quintInOut: function(t) {
                return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
            },
            sineIn: function(t) {
                return 1 - Math.cos(t * Math.PI / 2)
            },
            sineOut: function(t) {
                return Math.sin(t * Math.PI / 2)
            },
            sineInOut: function(t) {
                return .5 * (1 - Math.cos(Math.PI * t))
            },
            expoIn: function(t) {
                return 0 === t ? 0 : Math.pow(1024, t - 1)
            },
            expoOut: function(t) {
                return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
            },
            expoInOut: function(t) {
                return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (2 - Math.pow(2, -10 * (t - 1)))
            },
            circIn: function(t) {
                return 1 - Math.sqrt(1 - t * t)
            },
            circOut: function(t) {
                return Math.sqrt(1 - --t * t)
            },
            circInOut: function(t) {
                return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
            },
            elasticIn: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1,
                e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI),
                -i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / .4))
            },
            elasticOut: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1,
                e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI),
                i * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / .4) + 1)
            },
            elasticInOut: function(t) {
                var e, i = .1;
                return 0 === t ? 0 : 1 === t ? 1 : (!i || i < 1 ? (i = 1,
                e = .1) : e = .4 * Math.asin(1 / i) / (2 * Math.PI),
                (t *= 2) < 1 ? i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / .4) * -.5 : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / .4) * .5 + 1)
            },
            backIn: function(t) {
                var e = 1.70158;
                return t * t * ((e + 1) * t - e)
            },
            backOut: function(t) {
                var e = 1.70158;
                return --t * t * ((e + 1) * t + e) + 1
            },
            backInOut: function(t) {
                var e = 2.5949095;
                return (t *= 2) < 1 ? t * t * ((e + 1) * t - e) * .5 : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
            },
            bounceIn: function(t) {
                return 1 - i.bounceOut(1 - t)
            },
            bounceOut: function(t) {
                return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
            },
            bounceInOut: function(t) {
                return t < .5 ? .5 * i.bounceIn(2 * t) : .5 * i.bounceOut(2 * t - 1) + .5
            },
            smooth: function(t) {
                return t <= 0 ? 0 : t >= 1 ? 1 : t * t * (3 - 2 * t)
            },
            fade: function(t) {
                return t <= 0 ? 0 : t >= 1 ? 1 : t * t * t * (t * (6 * t - 15) + 10)
            }
        };
        function n(t, e) {
            return function(i) {
                return i < .5 ? e(2 * i) / 2 : t(2 * i - 1) / 2 + .5
            }
        }
        i.quadOutIn = n(i.quadIn, i.quadOut),
        i.cubicOutIn = n(i.cubicIn, i.cubicOut),
        i.quartOutIn = n(i.quartIn, i.quartOut),
        i.quintOutIn = n(i.quintIn, i.quintOut),
        i.sineOutIn = n(i.sineIn, i.sineOut),
        i.expoOutIn = n(i.expoIn, i.expoOut),
        i.circOutIn = n(i.circIn, i.circOut),
        i.backOutIn = n(i.backIn, i.backOut),
        i.bounceIn = function(t) {
            return 1 - i.bounceOut(1 - t)
        }
        ,
        i.bounceInOut = function(t) {
            return t < .5 ? .5 * i.bounceIn(2 * t) : .5 * i.bounceOut(2 * t - 1) + .5
        }
        ,
        i.bounceOutIn = n(i.bounceIn, i.bounceOut),
        cc.easing = e.exports = i
    }
    ), {}],
    16: [(function(t) {
        "use strict";
        t("./bezier"),
        t("./easing"),
        t("./types"),
        t("./motion-path-helper"),
        t("./animation-curves"),
        t("./animation-clip"),
        t("./animation-manager"),
        t("./animation-state"),
        t("./animation-animator")
    }
    ), {
        "./animation-animator": 9,
        "./animation-clip": 10,
        "./animation-curves": 11,
        "./animation-manager": 12,
        "./animation-state": 13,
        "./bezier": 14,
        "./easing": 15,
        "./motion-path-helper": 17,
        "./types": 19
    }],
    17: [(function(t, e) {
        "use strict";
        var i = t("./animation-curves").DynamicAnimCurve
          , n = t("./animation-curves").computeRatioByType
          , r = t("./bezier").bezier
          , s = t("../core/utils/binary-search").binarySearchEpsilon
          , a = cc.v2;
        function o(t) {
            this.points = t || [],
            this.beziers = [],
            this.ratios = [],
            this.progresses = [],
            this.length = 0,
            this.computeBeziers()
        }
        function l() {
            this.start = a(),
            this.end = a(),
            this.startCtrlPoint = a(),
            this.endCtrlPoint = a()
        }
        function h(t) {
            if (!Array.isArray(t))
                return !1;
            for (var e = 0, i = t.length; e < i; e++) {
                var n = t[e];
                if (!Array.isArray(n) || 6 !== n.length)
                    return !1
            }
            return !0
        }
        o.prototype.computeBeziers = function() {
            var t;
            this.beziers.length = 0,
            this.ratios.length = 0,
            this.progresses.length = 0,
            this.length = 0;
            for (var e = 1; e < this.points.length; e++) {
                var i = this.points[e - 1]
                  , n = this.points[e];
                (t = new l).start = i.pos,
                t.startCtrlPoint = i.out,
                t.end = n.pos,
                t.endCtrlPoint = n.in,
                this.beziers.push(t),
                this.length += t.getLength()
            }
            var r = 0;
            for (e = 0; e < this.beziers.length; e++)
                t = this.beziers[e],
                this.ratios[e] = t.getLength() / this.length,
                this.progresses[e] = r += this.ratios[e];
            return this.beziers
        }
        ,
        l.prototype.getPointAt = function(t) {
            var e = this.getUtoTmapping(t);
            return this.getPoint(e)
        }
        ,
        l.prototype.getPoint = function(t) {
            var e = r(this.start.x, this.startCtrlPoint.x, this.endCtrlPoint.x, this.end.x, t)
              , i = r(this.start.y, this.startCtrlPoint.y, this.endCtrlPoint.y, this.end.y, t);
            return new a(e,i)
        }
        ,
        l.prototype.getLength = function() {
            var t = this.getLengths();
            return t[t.length - 1]
        }
        ,
        l.prototype.getLengths = function(t) {
            if (t || (t = this.__arcLengthDivisions ? this.__arcLengthDivisions : 200),
            this.cacheArcLengths && this.cacheArcLengths.length === t + 1)
                return this.cacheArcLengths;
            var e, i, n = [], r = this.getPoint(0), s = a(), o = 0;
            for (n.push(0),
            i = 1; i <= t; i++)
                e = this.getPoint(i / t),
                s.x = r.x - e.x,
                s.y = r.y - e.y,
                o += s.mag(),
                n.push(o),
                r = e;
            return this.cacheArcLengths = n,
            n
        }
        ,
        l.prototype.getUtoTmapping = function(t, e) {
            var i, n = this.getLengths(), r = 0, s = n.length;
            i = e || t * n[s - 1];
            for (var a, o = 0, l = s - 1; o <= l; )
                if ((a = n[r = Math.floor(o + (l - o) / 2)] - i) < 0)
                    o = r + 1;
                else {
                    if (!(a > 0)) {
                        l = r;
                        break
                    }
                    l = r - 1
                }
            if (n[r = l] === i)
                return r / (s - 1);
            var h = n[r];
            return (r + (i - h) / (n[r + 1] - h)) / (s - 1)
        }
        ,
        e.exports = {
            sampleMotionPaths: function(t, e, r, l, c) {
                function u(t) {
                    return t instanceof cc.Vec2 ? {
                        in: t,
                        pos: t,
                        out: t
                    } : Array.isArray(t) && 6 === t.length ? {
                        in: a(t[2], t[3]),
                        pos: a(t[0], t[1]),
                        out: a(t[4], t[5])
                    } : {
                        in: cc.Vec2.ZERO,
                        pos: cc.Vec2.ZERO,
                        out: cc.Vec2.ZERO
                    }
                }
                var _ = e.values = e.values.map((function(t) {
                    return Array.isArray(t) && (t = 2 === t.length ? cc.v2(t[0], t[1]) : cc.v3(t[0], t[1], t[2])),
                    t
                }
                ));
                if (0 !== t.length && 0 !== _.length) {
                    for (var f = !1, d = 0; d < t.length; d++) {
                        var p = t[d];
                        if (p && !h(p) && (cc.errorID(3904, c ? c.name : "", "position", d),
                        p = null),
                        p && p.length > 0) {
                            f = !0;
                            break
                        }
                    }
                    if (f && 1 !== _.length) {
                        for (var m = e.types, y = e.ratios, v = e.values = [], g = e.types = [], A = e.ratios = [], x = 0, b = i.Linear, C = 0, T = t.length; C < T - 1; C++) {
                            var S, w = t[C], E = y[C], M = y[C + 1] - E, D = _[C], B = _[C + 1], I = m[C], P = [], R = x / M, O = 1 / (M * r * l);
                            if (w && w.length > 0) {
                                var L = [];
                                L.push(u(D));
                                for (var F = 0, V = w.length; F < V; F++) {
                                    var N = u(w[F]);
                                    L.push(N)
                                }
                                L.push(u(B));
                                var k = new o(L);
                                k.computeBeziers();
                                for (var G = k.progresses; 1 - R > 1e-6; ) {
                                    var U, z, H, W;
                                    if ((S = n(S = R, I)) < 0)
                                        W = (0 - S) * (z = k.beziers[0]).getLength(),
                                        H = z.start.sub(z.endCtrlPoint).normalize(),
                                        U = z.start.add(H.mul(W));
                                    else if (S > 1)
                                        W = (S - 1) * (z = k.beziers[k.beziers.length - 1]).getLength(),
                                        H = z.end.sub(z.startCtrlPoint).normalize(),
                                        U = z.end.add(H.mul(W));
                                    else {
                                        var j = s(G, S);
                                        j < 0 && (j = ~j),
                                        S -= j > 0 ? G[j - 1] : 0,
                                        S /= k.ratios[j],
                                        U = k.beziers[j].getPointAt(S)
                                    }
                                    P.push(U),
                                    R += O
                                }
                            } else
                                for (; 1 - R > 1e-6; )
                                    S = n(S = R, I),
                                    P.push(D.lerp(B, S)),
                                    R += O;
                            for (b = "constant" === I ? I : i.Linear,
                            F = 0,
                            V = P.length; F < V; F++) {
                                var X = E + x + O * F * M;
                                Y(P[F], b, X)
                            }
                            x = Math.abs(R - 1) > 1e-6 ? (R - 1) * M : 0
                        }
                        y[y.length - 1] !== A[A.length - 1] && Y(_[_.length - 1], b, y[y.length - 1])
                    }
                }
                function Y(t, e, i) {
                    v.push(t),
                    g.push(e),
                    A.push(i)
                }
            },
            Curve: o,
            Bezier: l
        }
    }
    ), {
        "../core/utils/binary-search": 260,
        "./animation-curves": 11,
        "./bezier": 14
    }],
    18: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = t("../core/CCDebug");
        function r() {
            this._isPlaying = !1,
            this._isPaused = !1,
            this._stepOnce = !1
        }
        var s = r.prototype;
        i.get(s, "isPlaying", (function() {
            return this._isPlaying
        }
        ), !0),
        i.get(s, "isPaused", (function() {
            return this._isPaused
        }
        ), !0);
        var a = function() {};
        s.onPlay = a,
        s.onPause = a,
        s.onResume = a,
        s.onStop = a,
        s.onError = a,
        s.play = function() {
            this._isPlaying ? this._isPaused ? (this._isPaused = !1,
            this.onResume()) : this.onError(n.getError(3912)) : (this._isPlaying = !0,
            this.onPlay())
        }
        ,
        s.stop = function() {
            this._isPlaying && (this._isPlaying = !1,
            this.onStop(),
            this._isPaused = !1)
        }
        ,
        s.pause = function() {
            this._isPlaying && !this._isPaused && (this._isPaused = !0,
            this.onPause())
        }
        ,
        s.resume = function() {
            this._isPlaying && this._isPaused && (this._isPaused = !1,
            this.onResume())
        }
        ,
        s.step = function() {
            this.pause(),
            this._stepOnce = !0,
            this._isPlaying || this.play()
        }
        ,
        e.exports = r
    }
    ), {
        "../core/CCDebug": 26
    }],
    19: [(function(t, e) {
        "use strict";
        var i = {
            Loop: 2,
            ShouldWrap: 4,
            PingPong: 22,
            Reverse: 36
        }
          , n = cc.Enum({
            Default: 0,
            Normal: 1,
            Reverse: i.Reverse,
            Loop: i.Loop,
            LoopReverse: i.Loop | i.Reverse,
            PingPong: i.PingPong,
            PingPongReverse: i.PingPong | i.Reverse
        });
        function r(t) {
            t ? this.set(t) : (this.ratio = 0,
            this.time = 0,
            this.direction = 1,
            this.stopped = !0,
            this.iterations = 0,
            this.frameIndex = void 0)
        }
        cc.WrapMode = n,
        r.prototype.set = function(t) {
            this.ratio = t.ratio,
            this.time = t.time,
            this.direction = t.direction,
            this.stopped = t.stopped,
            this.iterations = t.iterations,
            this.frameIndex = t.frameIndex
        }
        ,
        e.exports = {
            WrapModeMask: i,
            WrapMode: n,
            WrappedInfo: r
        }
    }
    ), {}],
    20: [(function(t, e) {
        "use strict";
        var i, n, r = t("../core/event/event-target"), s = t("../core/platform/CCSys"), a = t("../core/assets/CCAudioClip").LoadMode, o = !1, l = [], h = function t(e) {
            r.call(this),
            this._shouldRecycleOnEnded = !1,
            this._src = e,
            this._element = null,
            this.id = 0,
            this._state = t.State.INITIALZING;
            var i = this;
            this._onended = function() {
                i._state = t.State.STOPPED,
                i.emit("ended")
            }
            ,
            this._onendedSecond = function() {
                i._unbindEnded(i._onendedSecond),
                i._bindEnded()
            }
        };
        cc.js.extend(h, r),
        h.State = {
            ERROR: -1,
            INITIALZING: 0,
            PLAYING: 1,
            PAUSED: 2,
            STOPPED: 3
        },
        (i = h.prototype)._bindEnded = function(t) {
            if (!(t = t || this._onended)._binded) {
                t._binded = !0;
                var e = this._element;
                this._src && e instanceof HTMLAudioElement ? e.addEventListener("ended", t) : e.onended = t
            }
        }
        ,
        i._unbindEnded = function(t) {
            if ((t = t || this._onended)._binded) {
                t._binded = !1;
                var e = this._element;
                e instanceof HTMLAudioElement ? e.removeEventListener("ended", t) : e && (e.onended = null)
            }
        }
        ,
        i._onLoaded = function() {
            this._createElement(),
            this._state = h.State.INITIALZING,
            this.setVolume(1),
            this.setLoop(!1)
        }
        ,
        i._createElement = function() {
            var t = this._src._nativeAsset;
            t instanceof HTMLAudioElement ? (this._element || (this._element = document.createElement("audio")),
            this._element.src = t.src) : this._element = new c(t,this)
        }
        ,
        i.play = function() {
            var t = this;
            this._src && this._src._ensureLoaded((function() {
                t._state = h.State.PLAYING,
                t._bindEnded();
                var e = t._element.play();
                window.Promise && e instanceof Promise && e.catch((function() {}
                )),
                t._touchToPlay()
            }
            ))
        }
        ,
        i._touchToPlay = function() {
            if (this._src && this._src.loadMode === a.DOM_AUDIO && this._element.paused && l.push({
                instance: this,
                offset: 0,
                audio: this._element
            }),
            !o) {
                o = !0;
                var t = "ontouchend"in window ? "touchend" : "mousedown";
                cc.game.canvas.addEventListener(t, (function() {
                    for (var t; t = l.pop(); )
                        t.audio.play(t.offset)
                }
                ))
            }
        }
        ,
        i.destroy = function() {
            this._element = null
        }
        ,
        i.pause = function() {
            if (this.getState() === h.State.PLAYING) {
                var t = this;
                this._src && this._src._ensureLoaded((function() {
                    t._unbindEnded(),
                    t._element.pause(),
                    t._state = h.State.PAUSED
                }
                ))
            }
        }
        ,
        i.resume = function() {
            if (this.getState() === h.State.PAUSED) {
                var t = this;
                this._src && this._src._ensureLoaded((function() {
                    t._bindEnded(),
                    t._element.play(),
                    t._state = h.State.PLAYING
                }
                ))
            }
        }
        ,
        i.stop = function() {
            var t = this;
            this._src && this._src._ensureLoaded((function() {
                t._element.pause(),
                t._element.currentTime = 0;
                for (var e = 0; e < l.length; e++)
                    if (l[e].instance === t) {
                        l.splice(e, 1);
                        break
                    }
                t._unbindEnded(),
                t.emit("stop"),
                t._state = h.State.STOPPED
            }
            ))
        }
        ,
        i.setLoop = function(t) {
            var e = this;
            this._src && this._src._ensureLoaded((function() {
                e._element.loop = t
            }
            ))
        }
        ,
        i.getLoop = function() {
            return !!this._element && this._element.loop
        }
        ,
        i.setVolume = function(t) {
            var e = this;
            this._src && this._src._ensureLoaded((function() {
                e._element.volume = t
            }
            ))
        }
        ,
        i.getVolume = function() {
            return this._element ? this._element.volume : 1
        }
        ,
        i.setCurrentTime = function(t) {
            var e = this;
            this._src && this._src._ensureLoaded((function() {
                e._unbindEnded(),
                e._bindEnded(e._onendedSecond),
                e._element.currentTime = t
            }
            ))
        }
        ,
        i.getCurrentTime = function() {
            return this._element ? this._element.currentTime : 0
        }
        ,
        i.getDuration = function() {
            return this._src ? this._src.duration : 0
        }
        ,
        i.getState = function(t) {
            return void 0 === t && (t = !0),
            t && this._forceUpdatingState(),
            this._state
        }
        ,
        i._forceUpdatingState = function() {
            var t = this._element;
            t && (h.State.PLAYING === this._state && t.paused ? this._state = h.State.STOPPED : h.State.STOPPED !== this._state || t.paused || (this._state = h.State.PLAYING))
        }
        ,
        Object.defineProperty(i, "src", {
            get: function() {
                return this._src
            },
            set: function(t) {
                if (this._unbindEnded(),
                t) {
                    if (t !== this._src)
                        if (this._src = t,
                        t.loaded)
                            this._onLoaded();
                        else {
                            var e = this;
                            t.once("load", (function() {
                                t === e._src && e._onLoaded()
                            }
                            ))
                        }
                } else
                    this._src = null,
                    this._element instanceof c ? this._element = null : this._element && (this._element.src = ""),
                    this._state = h.State.INITIALZING;
                return t
            },
            enumerable: !0,
            configurable: !0
        }),
        Object.defineProperty(i, "paused", {
            get: function() {
                return !this._element || this._element.paused
            },
            enumerable: !0,
            configurable: !0
        }),
        n = cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE || cc.sys.browserType === cc.sys.BROWSER_TYPE_BAIDU || cc.sys.browserType === cc.sys.BROWSER_TYPE_UC ? .01 : 0;
        var c = function(t, e) {
            this._audio = e,
            this._context = s.__audioSupport.context,
            this._buffer = t,
            this._gainObj = this._context.createGain(),
            this.volume = 1,
            this._gainObj.connect(this._context.destination),
            this._loop = !1,
            this._startTime = -1,
            this._currentSource = null,
            this.playedLength = 0,
            this._currentTimer = null,
            this._endCallback = function() {
                this.onended && this.onended(this)
            }
            .bind(this)
        };
        (function(t) {
            t.play = function(t) {
                this._currentSource && !this.paused && (this._currentSource.onended = null,
                this._currentSource.stop(0),
                this.playedLength = 0);
                var e = this._context.createBufferSource();
                e.buffer = this._buffer,
                e.connect(this._gainObj),
                e.loop = this._loop,
                this._startTime = this._context.currentTime,
                (t = t || this.playedLength) && (this._startTime -= t);
                var i, n = this._buffer.duration, r = t;
                if (this._loop ? e.start ? e.start(0, r) : e.notoGrainOn ? e.noteGrainOn(0, r) : e.noteOn(0, r) : (i = n - t,
                e.start ? e.start(0, r, i) : e.noteGrainOn ? e.noteGrainOn(0, r, i) : e.noteOn(0, r, i)),
                this._currentSource = e,
                e.onended = this._endCallback,
                (!e.context.state || "suspended" === e.context.state) && 0 === this._context.currentTime) {
                    var s = this;
                    clearTimeout(this._currentTimer),
                    this._currentTimer = setTimeout((function() {
                        0 === s._context.currentTime && l.push({
                            instance: s._audio,
                            offset: t,
                            audio: s
                        })
                    }
                    ), 10)
                }
                var a = cc.sys;
                a.os === a.OS_IOS && a.isBrowser && a.isMobile && ("suspended" === e.context.state && 0 !== this._context.currentTime || "interrupted" === e.context.state) && e.context.resume()
            }
            ,
            t.pause = function() {
                if (clearTimeout(this._currentTimer),
                !this.paused) {
                    this.playedLength = this._context.currentTime - this._startTime,
                    this.playedLength %= this._buffer.duration;
                    var t = this._currentSource;
                    t && (t.onended && (t.onended._binded = !1,
                    t.onended = null),
                    t.stop(0)),
                    this._currentSource = null,
                    this._startTime = -1
                }
            }
            ,
            Object.defineProperty(t, "paused", {
                get: function() {
                    return (!this._currentSource || !this._currentSource.loop) && (-1 === this._startTime || this._context.currentTime - this._startTime > this._buffer.duration)
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(t, "loop", {
                get: function() {
                    return this._loop
                },
                set: function(t) {
                    return this._currentSource && (this._currentSource.loop = t),
                    this._loop = t
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(t, "volume", {
                get: function() {
                    return this._volume
                },
                set: function(t) {
                    if (this._volume = t,
                    this._gainObj.gain.setTargetAtTime)
                        try {
                            this._gainObj.gain.setTargetAtTime(t, this._context.currentTime, n)
                        } catch (e) {
                            this._gainObj.gain.setTargetAtTime(t, this._context.currentTime, .01)
                        }
                    else
                        this._gainObj.gain.value = t;
                    s.os === s.OS_IOS && !this.paused && this._currentSource && (this._currentSource.onended = null,
                    this.pause(),
                    this.play())
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(t, "currentTime", {
                get: function() {
                    return this.paused ? this.playedLength : (this.playedLength = this._context.currentTime - this._startTime,
                    this.playedLength %= this._buffer.duration,
                    this.playedLength)
                },
                set: function(t) {
                    return this.paused ? this.playedLength = t : (this.pause(),
                    this.playedLength = t,
                    this.play()),
                    t
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(t, "duration", {
                get: function() {
                    return this._buffer.duration
                },
                enumerable: !0,
                configurable: !0
            })
        }
        )(c.prototype),
        e.exports = cc._Audio = h
    }
    ), {
        "../core/assets/CCAudioClip": 63,
        "../core/event/event-target": 140,
        "../core/platform/CCSys": 202
    }],
    21: [(function(t, e) {
        "use strict";
        var i = t("./CCAudio")
          , n = t("../core/assets/CCAudioClip")
          , r = cc.js
          , s = 0
          , a = r.createMap(!0)
          , o = {}
          , l = []
          , h = function(t) {
            t._shouldRecycleOnEnded && (t._finishCallback = null,
            t.off("ended"),
            t.off("stop"),
            t.src = null,
            l.includes(t) || (l.length < 32 ? l.push(t) : t.destroy()),
            t._shouldRecycleOnEnded = !1)
        }
          , c = function(t) {
            var e = s++
              , n = o[t];
            if (n || (n = o[t] = []),
            f._maxAudioInstance <= n.length) {
                var r = n.shift();
                u(r).stop()
            }
            var c = l.pop() || new i
              , _ = function() {
                if (u(this.id)) {
                    delete a[this.id];
                    var t = n.indexOf(this.id);
                    cc.js.array.fastRemoveAt(n, t)
                }
                h(this)
            };
            return c.on("ended", (function() {
                this._finishCallback && this._finishCallback(),
                this.getLoop() || _.call(this)
            }
            ), c),
            c.on("stop", _, c),
            c.id = e,
            a[e] = c,
            n.push(e),
            c
        }
          , u = function(t) {
            return a[t]
        }
          , _ = function(t) {
            return void 0 === t ? t = 1 : "string" == typeof t && (t = Number.parseFloat(t)),
            t
        }
          , f = {
            AudioState: i.State,
            _maxAudioInstance: 24,
            _id2audio: a,
            play: function(t, e, i) {
                if (!(t instanceof n))
                    return cc.error("Wrong type of AudioClip.");
                var r = t.nativeUrl
                  , s = c(r);
                return s.src = t,
                t._ensureLoaded(),
                s._shouldRecycleOnEnded = !0,
                s.setLoop(e || !1),
                i = _(i),
                s.setVolume(i),
                s.play(),
                s.id
            },
            setLoop: function(t, e) {
                var i = u(t);
                i && i.setLoop && i.setLoop(e)
            },
            isLoop: function(t) {
                var e = u(t);
                return !(!e || !e.getLoop) && e.getLoop()
            },
            setVolume: function(t, e) {
                var i = u(t);
                i && i.setVolume(e)
            },
            getVolume: function(t) {
                var e = u(t);
                return e ? e.getVolume() : 1
            },
            setCurrentTime: function(t, e) {
                var i = u(t);
                return !!i && (i.setCurrentTime(e),
                !0)
            },
            getCurrentTime: function(t) {
                var e = u(t);
                return e ? e.getCurrentTime() : 0
            },
            getDuration: function(t) {
                var e = u(t);
                return e ? e.getDuration() : 0
            },
            getState: function(t) {
                var e = u(t);
                return e ? e.getState() : this.AudioState.ERROR
            },
            setFinishCallback: function(t, e) {
                var i = u(t);
                i && (i._finishCallback = e)
            },
            pause: function(t) {
                var e = u(t);
                return !!e && (e.pause(),
                !0)
            },
            _pauseIDCache: [],
            pauseAll: function() {
                for (var t in a) {
                    var e = a[t];
                    e.getState() === i.State.PLAYING && (this._pauseIDCache.push(t),
                    e.pause())
                }
            },
            resume: function(t) {
                var e = u(t);
                e && e.resume()
            },
            resumeAll: function() {
                for (var t = 0; t < this._pauseIDCache.length; ++t) {
                    var e = this._pauseIDCache[t]
                      , i = u(e);
                    i && i.resume()
                }
                this._pauseIDCache.length = 0
            },
            stop: function(t) {
                var e = u(t);
                return !!e && (e.stop(),
                !0)
            },
            stopAll: function() {
                for (var t in a) {
                    var e = a[t];
                    e && e.stop()
                }
            },
            setMaxAudioInstance: function() {},
            getMaxAudioInstance: function() {
                return this._maxAudioInstance
            },
            uncache: function(t) {
                var e = t;
                if ("string" == typeof t)
                    cc.warnID(8401, "cc.audioEngine", "cc.AudioClip", "AudioClip", "cc.AudioClip", "audio"),
                    e = t;
                else {
                    if (!t)
                        return;
                    e = t.nativeUrl
                }
                var i = o[e];
                if (i)
                    for (; i.length > 0; ) {
                        var n = i.pop()
                          , r = a[n];
                        r && (r.stop(),
                        delete a[n])
                    }
            },
            uncacheAll: function() {
                var t;
                for (var e in this.stopAll(),
                a)
                    (t = a[e]) && t.destroy();
                for (; t = l.pop(); )
                    t.destroy();
                a = r.createMap(!0),
                o = {}
            },
            _breakCache: null,
            _break: function() {
                for (var t in this._breakCache = [],
                a) {
                    var e = a[t];
                    e.getState() === i.State.PLAYING && (this._breakCache.push(t),
                    e.pause())
                }
            },
            _restore: function() {
                if (this._breakCache) {
                    for (; this._breakCache.length > 0; ) {
                        var t = this._breakCache.pop()
                          , e = u(t);
                        e && e.resume && e.resume()
                    }
                    this._breakCache = null
                }
            },
            _music: {
                id: -1,
                loop: !1,
                volume: 1
            },
            _effect: {
                volume: 1,
                pauseCache: []
            },
            playMusic: function(t, e) {
                var i = this._music;
                return this.stop(i.id),
                i.id = this.play(t, e, i.volume),
                i.loop = e,
                i.id
            },
            stopMusic: function() {
                this.stop(this._music.id)
            },
            pauseMusic: function() {
                return this.pause(this._music.id),
                this._music.id
            },
            resumeMusic: function() {
                return this.resume(this._music.id),
                this._music.id
            },
            getMusicVolume: function() {
                return this._music.volume
            },
            setMusicVolume: function(t) {
                t = _(t);
                var e = this._music;
                return e.volume = t,
                this.setVolume(e.id, e.volume),
                e.volume
            },
            isMusicPlaying: function() {
                return this.getState(this._music.id) === this.AudioState.PLAYING
            },
            playEffect: function(t, e) {
                return this.play(t, e || !1, this._effect.volume)
            },
            setEffectsVolume: function(t) {
                t = _(t);
                var e = this._music.id;
                for (var i in this._effect.volume = t,
                a) {
                    var n = a[i];
                    n && n.id !== e && f.setVolume(i, t)
                }
            },
            getEffectsVolume: function() {
                return this._effect.volume
            },
            pauseEffect: function(t) {
                return this.pause(t)
            },
            pauseAllEffects: function() {
                var t = this._music.id
                  , e = this._effect;
                for (var i in e.pauseCache.length = 0,
                a) {
                    var n = a[i];
                    n && n.id !== t && n.getState() === this.AudioState.PLAYING && (e.pauseCache.push(i),
                    n.pause())
                }
            },
            resumeEffect: function(t) {
                this.resume(t)
            },
            resumeAllEffects: function() {
                for (var t = this._effect.pauseCache, e = 0; e < t.length; ++e) {
                    var i = t[e]
                      , n = a[i];
                    n && n.resume()
                }
            },
            stopEffect: function(t) {
                return this.stop(t)
            },
            stopAllEffects: function() {
                var t = this._music.id;
                for (var e in a) {
                    var i = a[e];
                    i && i.id !== t && i.getState() === f.AudioState.PLAYING && i.stop()
                }
            }
        };
        e.exports = cc.audioEngine = f
    }
    ), {
        "../core/assets/CCAudioClip": 63,
        "./CCAudio": 20
    }],
    22: [(function(t, e) {
        "use strict";
        var i = {
            name: "Jacob__Codec"
        };
        i.Base64 = t("./base64"),
        i.GZip = t("./gzip"),
        i.unzip = function() {
            return i.GZip.gunzip.apply(i.GZip, arguments)
        }
        ,
        i.unzipBase64 = function() {
            var t = i.Base64.decode.apply(i.Base64, arguments);
            try {
                return i.GZip.gunzip.call(i.GZip, t)
            } catch (e) {
                return t.slice(7)
            }
        }
        ,
        i.unzipBase64AsArray = function(t, e) {
            e = e || 1;
            var i, n, r, s = this.unzipBase64(t), a = [];
            for (i = 0,
            r = s.length / e; i < r; i++)
                for (a[i] = 0,
                n = e - 1; n >= 0; --n)
                    a[i] += s.charCodeAt(i * e + n) << 8 * n;
            return a
        }
        ,
        i.unzipAsArray = function(t, e) {
            e = e || 1;
            var i, n, r, s = this.unzip(t), a = [];
            for (i = 0,
            r = s.length / e; i < r; i++)
                for (a[i] = 0,
                n = e - 1; n >= 0; --n)
                    a[i] += s.charCodeAt(i * e + n) << 8 * n;
            return a
        }
        ,
        cc.codec = e.exports = i
    }
    ), {
        "./base64": 23,
        "./gzip": 24
    }],
    23: [(function(t, e) {
        "use strict";
        var i = t("../core/utils/misc").BASE64_VALUES
          , n = {
            name: "Jacob__Codec__Base64",
            decode: function(t) {
                var e, n, r, s, a, o, l = [], h = 0;
                for (t = t.replace(/[^A-Za-z0-9\+\/\=]/g, ""); h < t.length; )
                    e = i[t.charCodeAt(h++)] << 2 | (s = i[t.charCodeAt(h++)]) >> 4,
                    n = (15 & s) << 4 | (a = i[t.charCodeAt(h++)]) >> 2,
                    r = (3 & a) << 6 | (o = i[t.charCodeAt(h++)]),
                    l.push(String.fromCharCode(e)),
                    64 !== a && l.push(String.fromCharCode(n)),
                    64 !== o && l.push(String.fromCharCode(r));
                return l.join("")
            },
            decodeAsArray: function(t, e) {
                var i, n, r, s = this.decode(t), a = [];
                for (i = 0,
                r = s.length / e; i < r; i++)
                    for (a[i] = 0,
                    n = e - 1; n >= 0; --n)
                        a[i] += s.charCodeAt(i * e + n) << 8 * n;
                return a
            }
        };
        e.exports = n
    }
    ), {
        "../core/utils/misc": 267
    }],
    24: [(function(t, e) {
        "use strict";
        var i = function(t) {
            this.data = t,
            this.debug = !1,
            this.gpflags = void 0,
            this.files = 0,
            this.unzipped = [],
            this.buf32k = new Array(32768),
            this.bIdx = 0,
            this.modeZIP = !1,
            this.bytepos = 0,
            this.bb = 1,
            this.bits = 0,
            this.nameBuf = [],
            this.fileout = void 0,
            this.literalTree = new Array(i.LITERALS),
            this.distanceTree = new Array(32),
            this.treepos = 0,
            this.Places = null,
            this.len = 0,
            this.fpos = new Array(17),
            this.fpos[0] = 0,
            this.flens = void 0,
            this.fmax = void 0
        };
        i.gunzip = function(t) {
            return t.constructor === Array || (t.constructor,
            String),
            new i(t).gunzip()[0][0]
        }
        ,
        i.HufNode = function() {
            this.b0 = 0,
            this.b1 = 0,
            this.jump = null,
            this.jumppos = -1
        }
        ,
        i.LITERALS = 288,
        i.NAMEMAX = 256,
        i.bitReverse = [0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, 4, 132, 68, 196, 36, 164, 100, 228, 20, 148, 84, 212, 52, 180, 116, 244, 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 3, 131, 67, 195, 35, 163, 99, 227, 19, 147, 83, 211, 51, 179, 115, 243, 11, 139, 75, 203, 43, 171, 107, 235, 27, 155, 91, 219, 59, 187, 123, 251, 7, 135, 71, 199, 39, 167, 103, 231, 23, 151, 87, 215, 55, 183, 119, 247, 15, 143, 79, 207, 47, 175, 111, 239, 31, 159, 95, 223, 63, 191, 127, 255],
        i.cplens = [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],
        i.cplext = [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],
        i.cpdist = [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],
        i.cpdext = [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],
        i.border = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
        i.prototype.gunzip = function() {
            return this.outputArr = [],
            this.nextFile(),
            this.unzipped
        }
        ,
        i.prototype.readByte = function() {
            return this.bits += 8,
            this.bytepos < this.data.length ? this.data.charCodeAt(this.bytepos++) : -1
        }
        ,
        i.prototype.byteAlign = function() {
            this.bb = 1
        }
        ,
        i.prototype.readBit = function() {
            var t;
            return this.bits++,
            t = 1 & this.bb,
            this.bb >>= 1,
            0 === this.bb && (this.bb = this.readByte(),
            t = 1 & this.bb,
            this.bb = this.bb >> 1 | 128),
            t
        }
        ,
        i.prototype.readBits = function(t) {
            for (var e = 0, n = t; n--; )
                e = e << 1 | this.readBit();
            return t && (e = i.bitReverse[e] >> 8 - t),
            e
        }
        ,
        i.prototype.flushBuffer = function() {
            this.bIdx = 0
        }
        ,
        i.prototype.addBuffer = function(t) {
            this.buf32k[this.bIdx++] = t,
            this.outputArr.push(String.fromCharCode(t)),
            32768 === this.bIdx && (this.bIdx = 0)
        }
        ,
        i.prototype.IsPat = function() {
            for (; ; ) {
                if (this.fpos[this.len] >= this.fmax)
                    return -1;
                if (this.flens[this.fpos[this.len]] === this.len)
                    return this.fpos[this.len]++;
                this.fpos[this.len]++
            }
        }
        ,
        i.prototype.Rec = function() {
            var t, e = this.Places[this.treepos];
            if (17 === this.len)
                return -1;
            if (this.treepos++,
            this.len++,
            (t = this.IsPat()) >= 0)
                e.b0 = t;
            else if (e.b0 = 32768,
            this.Rec())
                return -1;
            if ((t = this.IsPat()) >= 0)
                e.b1 = t,
                e.jump = null;
            else if (e.b1 = 32768,
            e.jump = this.Places[this.treepos],
            e.jumppos = this.treepos,
            this.Rec())
                return -1;
            return this.len--,
            0
        }
        ,
        i.prototype.CreateTree = function(t, e, i) {
            var n;
            for (this.Places = t,
            this.treepos = 0,
            this.flens = i,
            this.fmax = e,
            n = 0; n < 17; n++)
                this.fpos[n] = 0;
            return this.len = 0,
            this.Rec() ? -1 : 0
        }
        ,
        i.prototype.DecodeValue = function(t) {
            for (var e, i, n = 0, r = t[n]; ; )
                if (this.readBit()) {
                    if (!(32768 & r.b1))
                        return r.b1;
                    for (r = r.jump,
                    e = t.length,
                    i = 0; i < e; i++)
                        if (t[i] === r) {
                            n = i;
                            break
                        }
                } else {
                    if (!(32768 & r.b0))
                        return r.b0;
                    r = t[++n]
                }
            return -1
        }
        ,
        i.prototype.DeflateLoop = function() {
            var t, e, n;
            do {
                var r, s;
                if (t = this.readBit(),
                0 === (e = this.readBits(2)))
                    for (this.byteAlign(),
                    r = this.readByte(),
                    r |= this.readByte() << 8,
                    s = this.readByte(),
                    65535 & (r ^ ~(s |= this.readByte() << 8)) && document.write("BlockLen checksum mismatch\n"); r--; )
                        a = this.readByte(),
                        this.addBuffer(a);
                else if (1 === e)
                    for (; ; )
                        if ((o = i.bitReverse[this.readBits(7)] >> 1) > 23 ? (o = o << 1 | this.readBit()) > 199 ? o = (o -= 128) << 1 | this.readBit() : (o -= 48) > 143 && (o += 136) : o += 256,
                        o < 256)
                            this.addBuffer(o);
                        else {
                            if (256 === o)
                                break;
                            for (o -= 257,
                            p = this.readBits(i.cplext[o]) + i.cplens[o],
                            o = i.bitReverse[this.readBits(5)] >> 3,
                            i.cpdext[o] > 8 ? (m = this.readBits(8),
                            m |= this.readBits(i.cpdext[o] - 8) << 8) : m = this.readBits(i.cpdext[o]),
                            m += i.cpdist[o],
                            o = 0; o < p; o++) {
                                var a = this.buf32k[this.bIdx - m & 32767];
                                this.addBuffer(a)
                            }
                        }
                else if (2 === e) {
                    var o, l, h, c, u, _ = new Array(320);
                    for (h = 257 + this.readBits(5),
                    c = 1 + this.readBits(5),
                    u = 4 + this.readBits(4),
                    o = 0; o < 19; o++)
                        _[o] = 0;
                    for (o = 0; o < u; o++)
                        _[i.border[o]] = this.readBits(3);
                    for (p = this.distanceTree.length,
                    n = 0; n < p; n++)
                        this.distanceTree[n] = new i.HufNode;
                    if (this.CreateTree(this.distanceTree, 19, _, 0))
                        return this.flushBuffer(),
                        1;
                    for (l = h + c,
                    n = 0; n < l; )
                        if ((o = this.DecodeValue(this.distanceTree)) < 16)
                            _[n++] = o;
                        else if (16 === o) {
                            var f;
                            if (n + (o = 3 + this.readBits(2)) > l)
                                return this.flushBuffer(),
                                1;
                            for (f = n ? _[n - 1] : 0; o--; )
                                _[n++] = f
                        } else {
                            if (n + (o = 17 === o ? 3 + this.readBits(3) : 11 + this.readBits(7)) > l)
                                return this.flushBuffer(),
                                1;
                            for (; o--; )
                                _[n++] = 0
                        }
                    for (p = this.literalTree.length,
                    n = 0; n < p; n++)
                        this.literalTree[n] = new i.HufNode;
                    if (this.CreateTree(this.literalTree, h, _, 0))
                        return this.flushBuffer(),
                        1;
                    for (p = this.literalTree.length,
                    n = 0; n < p; n++)
                        this.distanceTree[n] = new i.HufNode;
                    var d = new Array;
                    for (n = h; n < _.length; n++)
                        d[n - h] = _[n];
                    if (this.CreateTree(this.distanceTree, c, d, 0))
                        return this.flushBuffer(),
                        1;
                    for (; ; )
                        if ((o = this.DecodeValue(this.literalTree)) >= 256) {
                            var p, m;
                            if (0 == (o -= 256))
                                break;
                            for (o--,
                            p = this.readBits(i.cplext[o]) + i.cplens[o],
                            o = this.DecodeValue(this.distanceTree),
                            i.cpdext[o] > 8 ? (m = this.readBits(8),
                            m |= this.readBits(i.cpdext[o] - 8) << 8) : m = this.readBits(i.cpdext[o]),
                            m += i.cpdist[o]; p--; )
                                a = this.buf32k[this.bIdx - m & 32767],
                                this.addBuffer(a)
                        } else
                            this.addBuffer(o)
                }
            } while (!t);return this.flushBuffer(),
            this.byteAlign(),
            0
        }
        ,
        i.prototype.unzipFile = function(t) {
            var e;
            for (this.gunzip(),
            e = 0; e < this.unzipped.length; e++)
                if (this.unzipped[e][1] === t)
                    return this.unzipped[e][0]
        }
        ,
        i.prototype.nextFile = function() {
            this.outputArr = [],
            this.modeZIP = !1;
            var t = [];
            if (t[0] = this.readByte(),
            t[1] = this.readByte(),
            120 === t[0] && 218 === t[1] && (this.DeflateLoop(),
            this.unzipped[this.files] = [this.outputArr.join(""), "geonext.gxt"],
            this.files++),
            31 === t[0] && 139 === t[1] && (this.skipdir(),
            this.unzipped[this.files] = [this.outputArr.join(""), "file"],
            this.files++),
            80 === t[0] && 75 === t[1] && (this.modeZIP = !0,
            t[2] = this.readByte(),
            t[3] = this.readByte(),
            3 === t[2] && 4 === t[3])) {
                t[0] = this.readByte(),
                t[1] = this.readByte(),
                this.gpflags = this.readByte(),
                this.gpflags |= this.readByte() << 8;
                var e = this.readByte();
                e |= this.readByte() << 8,
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte(),
                this.readByte();
                var n = this.readByte();
                n |= this.readByte() << 8;
                var r = this.readByte();
                for (r |= this.readByte() << 8,
                a = 0,
                this.nameBuf = []; n--; ) {
                    var s = this.readByte();
                    "/" === s | ":" === s ? a = 0 : a < i.NAMEMAX - 1 && (this.nameBuf[a++] = String.fromCharCode(s))
                }
                this.fileout || (this.fileout = this.nameBuf);
                for (var a = 0; a < r; )
                    s = this.readByte(),
                    a++;
                8 === e && (this.DeflateLoop(),
                this.unzipped[this.files] = [this.outputArr.join(""), this.nameBuf.join("")],
                this.files++),
                this.skipdir()
            }
        }
        ,
        i.prototype.skipdir = function() {
            var t, e, n = [];
            if (8 & this.gpflags && (n[0] = this.readByte(),
            n[1] = this.readByte(),
            n[2] = this.readByte(),
            n[3] = this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte()),
            this.modeZIP && this.nextFile(),
            n[0] = this.readByte(),
            8 !== n[0])
                return 0;
            if (this.gpflags = this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            4 & this.gpflags)
                for (n[0] = this.readByte(),
                n[2] = this.readByte(),
                this.len = n[0] + 256 * n[1],
                t = 0; t < this.len; t++)
                    this.readByte();
            if (8 & this.gpflags)
                for (t = 0,
                this.nameBuf = []; e = this.readByte(); )
                    "7" !== e && ":" !== e || (t = 0),
                    t < i.NAMEMAX - 1 && (this.nameBuf[t++] = e);
            if (16 & this.gpflags)
                for (; e = this.readByte(); )
                    ;
            2 & this.gpflags && (this.readByte(),
            this.readByte()),
            this.DeflateLoop(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.readByte(),
            this.modeZIP && this.nextFile()
        }
        ,
        e.exports = i
    }
    ), {}],
    25: [(function(t, e) {
        "use strict";
        (function() {
            function t(t) {
                throw t
            }
            var e = void 0
              , i = !0
              , n = this;
            function r(t, i) {
                var r, s = t.split("."), a = n;
                !(s[0]in a) && a.execScript && a.execScript("var " + s[0]);
                for (; s.length && (r = s.shift()); )
                    s.length || i === e ? a = a[r] ? a[r] : a[r] = {} : a[r] = i
            }
            var s = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array;
            function a(t) {
                if ("string" == typeof t) {
                    var e, i, n = t.split("");
                    for (e = 0,
                    i = n.length; e < i; e++)
                        n[e] = (255 & n[e].charCodeAt(0)) >>> 0;
                    t = n
                }
                for (var r, s = 1, a = 0, o = t.length, l = 0; 0 < o; ) {
                    o -= r = 1024 < o ? 1024 : o;
                    do {
                        a += s += t[l++]
                    } while (--r);s %= 65521,
                    a %= 65521
                }
                return (a << 16 | s) >>> 0
            }
            function o(e, i) {
                this.index = "number" == typeof i ? i : 0,
                this.i = 0,
                this.buffer = e instanceof (s ? Uint8Array : Array) ? e : new (s ? Uint8Array : Array)(32768),
                2 * this.buffer.length <= this.index && t(Error("invalid index")),
                this.buffer.length <= this.index && this.f()
            }
            o.prototype.f = function() {
                var t, e = this.buffer, i = e.length, n = new (s ? Uint8Array : Array)(i << 1);
                if (s)
                    n.set(e);
                else
                    for (t = 0; t < i; ++t)
                        n[t] = e[t];
                return this.buffer = n
            }
            ,
            o.prototype.d = function(t, e, i) {
                var n, r = this.buffer, s = this.index, a = this.i, o = r[s];
                if (i && 1 < e && (t = 8 < e ? (f[255 & t] << 24 | f[t >>> 8 & 255] << 16 | f[t >>> 16 & 255] << 8 | f[t >>> 24 & 255]) >> 32 - e : f[t] >> 8 - e),
                8 > e + a)
                    o = o << e | t,
                    a += e;
                else
                    for (n = 0; n < e; ++n)
                        o = o << 1 | t >> e - n - 1 & 1,
                        8 == ++a && (a = 0,
                        r[s++] = f[o],
                        o = 0,
                        s === r.length && (r = this.f()));
                r[s] = o,
                this.buffer = r,
                this.i = a,
                this.index = s
            }
            ,
            o.prototype.finish = function() {
                var t, e = this.buffer, i = this.index;
                return 0 < this.i && (e[i] <<= 8 - this.i,
                e[i] = f[e[i]],
                i++),
                s ? t = e.subarray(0, i) : (e.length = i,
                t = e),
                t
            }
            ;
            var l, h = new (s ? Uint8Array : Array)(256);
            for (l = 0; 256 > l; ++l) {
                for (var c = _ = l, u = 7, _ = _ >>> 1; _; _ >>>= 1)
                    c <<= 1,
                    c |= 1 & _,
                    --u;
                h[l] = (c << u & 255) >>> 0
            }
            var f = h;
            function d(t) {
                this.buffer = new (s ? Uint16Array : Array)(2 * t),
                this.length = 0
            }
            function p(t) {
                var e, i, n, r, a, o, l, h, c, u = t.length, _ = 0, f = Number.POSITIVE_INFINITY;
                for (h = 0; h < u; ++h)
                    t[h] > _ && (_ = t[h]),
                    t[h] < f && (f = t[h]);
                for (e = 1 << _,
                i = new (s ? Uint32Array : Array)(e),
                n = 1,
                r = 0,
                a = 2; n <= _; ) {
                    for (h = 0; h < u; ++h)
                        if (t[h] === n) {
                            for (o = 0,
                            l = r,
                            c = 0; c < n; ++c)
                                o = o << 1 | 1 & l,
                                l >>= 1;
                            for (c = o; c < e; c += a)
                                i[c] = n << 16 | h;
                            ++r
                        }
                    ++n,
                    r <<= 1,
                    a <<= 1
                }
                return [i, _, f]
            }
            function m(t, e) {
                this.h = v,
                this.w = 0,
                this.input = t,
                this.b = 0,
                e && (e.lazy && (this.w = e.lazy),
                "number" == typeof e.compressionType && (this.h = e.compressionType),
                e.outputBuffer && (this.a = s && e.outputBuffer instanceof Array ? new Uint8Array(e.outputBuffer) : e.outputBuffer),
                "number" == typeof e.outputIndex && (this.b = e.outputIndex)),
                this.a || (this.a = new (s ? Uint8Array : Array)(32768))
            }
            s && new Uint32Array([0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117]),
            d.prototype.getParent = function(t) {
                return 2 * ((t - 2) / 4 | 0)
            }
            ,
            d.prototype.push = function(t, e) {
                var i, n, r, s = this.buffer;
                for (i = this.length,
                s[this.length++] = e,
                s[this.length++] = t; 0 < i && (n = this.getParent(i),
                s[i] > s[n]); )
                    r = s[i],
                    s[i] = s[n],
                    s[n] = r,
                    r = s[i + 1],
                    s[i + 1] = s[n + 1],
                    s[n + 1] = r,
                    i = n;
                return this.length
            }
            ,
            d.prototype.pop = function() {
                var t, e, i, n, r, s = this.buffer;
                for (e = s[0],
                t = s[1],
                this.length -= 2,
                s[0] = s[this.length],
                s[1] = s[this.length + 1],
                r = 0; !((n = 2 * r + 2) >= this.length) && (n + 2 < this.length && s[n + 2] > s[n] && (n += 2),
                s[n] > s[r]); )
                    i = s[r],
                    s[r] = s[n],
                    s[n] = i,
                    i = s[r + 1],
                    s[r + 1] = s[n + 1],
                    s[n + 1] = i,
                    r = n;
                return {
                    index: t,
                    value: e,
                    length: this.length
                }
            }
            ;
            var y, v = 2, g = {
                NONE: 0,
                r: 1,
                j: v,
                N: 3
            }, A = [];
            for (y = 0; 288 > y; y++)
                switch (i) {
                case 143 >= y:
                    A.push([y + 48, 8]);
                    break;
                case 255 >= y:
                    A.push([y - 144 + 400, 9]);
                    break;
                case 279 >= y:
                    A.push([y - 256 + 0, 7]);
                    break;
                case 287 >= y:
                    A.push([y - 280 + 192, 8]);
                    break;
                default:
                    t("invalid literal: " + y)
                }
            function x(t, e) {
                this.length = t,
                this.G = e
            }
            function b() {
                var e = C;
                switch (i) {
                case 3 === e:
                    return [257, e - 3, 0];
                case 4 === e:
                    return [258, e - 4, 0];
                case 5 === e:
                    return [259, e - 5, 0];
                case 6 === e:
                    return [260, e - 6, 0];
                case 7 === e:
                    return [261, e - 7, 0];
                case 8 === e:
                    return [262, e - 8, 0];
                case 9 === e:
                    return [263, e - 9, 0];
                case 10 === e:
                    return [264, e - 10, 0];
                case 12 >= e:
                    return [265, e - 11, 1];
                case 14 >= e:
                    return [266, e - 13, 1];
                case 16 >= e:
                    return [267, e - 15, 1];
                case 18 >= e:
                    return [268, e - 17, 1];
                case 22 >= e:
                    return [269, e - 19, 2];
                case 26 >= e:
                    return [270, e - 23, 2];
                case 30 >= e:
                    return [271, e - 27, 2];
                case 34 >= e:
                    return [272, e - 31, 2];
                case 42 >= e:
                    return [273, e - 35, 3];
                case 50 >= e:
                    return [274, e - 43, 3];
                case 58 >= e:
                    return [275, e - 51, 3];
                case 66 >= e:
                    return [276, e - 59, 3];
                case 82 >= e:
                    return [277, e - 67, 4];
                case 98 >= e:
                    return [278, e - 83, 4];
                case 114 >= e:
                    return [279, e - 99, 4];
                case 130 >= e:
                    return [280, e - 115, 4];
                case 162 >= e:
                    return [281, e - 131, 5];
                case 194 >= e:
                    return [282, e - 163, 5];
                case 226 >= e:
                    return [283, e - 195, 5];
                case 257 >= e:
                    return [284, e - 227, 5];
                case 258 === e:
                    return [285, e - 258, 0];
                default:
                    t("invalid length: " + e)
                }
            }
            m.prototype.n = function() {
                var n, r, a, l, h = this.input;
                switch (this.h) {
                case 0:
                    for (a = 0,
                    l = h.length; a < l; ) {
                        var c, u, _, f = r = s ? h.subarray(a, a + 65535) : h.slice(a, a + 65535), d = (a += r.length) === l, p = e, m = e, y = this.a, g = this.b;
                        if (s) {
                            for (y = new Uint8Array(this.a.buffer); y.length <= g + f.length + 5; )
                                y = new Uint8Array(y.length << 1);
                            y.set(this.a)
                        }
                        if (c = d ? 1 : 0,
                        y[g++] = 0 | c,
                        _ = 65536 + ~(u = f.length) & 65535,
                        y[g++] = 255 & u,
                        y[g++] = u >>> 8 & 255,
                        y[g++] = 255 & _,
                        y[g++] = _ >>> 8 & 255,
                        s)
                            y.set(f, g),
                            g += f.length,
                            y = y.subarray(0, g);
                        else {
                            for (p = 0,
                            m = f.length; p < m; ++p)
                                y[g++] = f[p];
                            y.length = g
                        }
                        this.b = g,
                        this.a = y
                    }
                    break;
                case 1:
                    var x = new o(new Uint8Array(this.a.buffer),this.b);
                    x.d(1, 1, i),
                    x.d(1, 2, i);
                    var b, C, T, S = E(this, h);
                    for (b = 0,
                    C = S.length; b < C; b++)
                        if (T = S[b],
                        o.prototype.d.apply(x, A[T]),
                        256 < T)
                            x.d(S[++b], S[++b], i),
                            x.d(S[++b], 5),
                            x.d(S[++b], S[++b], i);
                        else if (256 === T)
                            break;
                    this.a = x.finish(),
                    this.b = this.a.length;
                    break;
                case v:
                    var w, B, I, P, R, O, L, F, V, N, k, G, U, z, H, W = new o(new Uint8Array(this.a),this.b), j = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], X = Array(19);
                    for (w = v,
                    W.d(1, 1, i),
                    W.d(w, 2, i),
                    B = E(this, h),
                    L = D(O = M(this.L, 15)),
                    V = D(F = M(this.K, 7)),
                    I = 286; 257 < I && 0 === O[I - 1]; I--)
                        ;
                    for (P = 30; 1 < P && 0 === F[P - 1]; P--)
                        ;
                    var Y, q, J, Z, K, Q, $ = I, tt = P, et = new (s ? Uint32Array : Array)($ + tt), it = new (s ? Uint32Array : Array)(316), nt = new (s ? Uint8Array : Array)(19);
                    for (Y = q = 0; Y < $; Y++)
                        et[q++] = O[Y];
                    for (Y = 0; Y < tt; Y++)
                        et[q++] = F[Y];
                    if (!s)
                        for (Y = 0,
                        Z = nt.length; Y < Z; ++Y)
                            nt[Y] = 0;
                    for (Y = K = 0,
                    Z = et.length; Y < Z; Y += q) {
                        for (q = 1; Y + q < Z && et[Y + q] === et[Y]; ++q)
                            ;
                        if (J = q,
                        0 === et[Y])
                            if (3 > J)
                                for (; 0 < J--; )
                                    it[K++] = 0,
                                    nt[0]++;
                            else
                                for (; 0 < J; )
                                    (Q = 138 > J ? J : 138) > J - 3 && Q < J && (Q = J - 3),
                                    10 >= Q ? (it[K++] = 17,
                                    it[K++] = Q - 3,
                                    nt[17]++) : (it[K++] = 18,
                                    it[K++] = Q - 11,
                                    nt[18]++),
                                    J -= Q;
                        else if (it[K++] = et[Y],
                        nt[et[Y]]++,
                        3 > --J)
                            for (; 0 < J--; )
                                it[K++] = et[Y],
                                nt[et[Y]]++;
                        else
                            for (; 0 < J; )
                                (Q = 6 > J ? J : 6) > J - 3 && Q < J && (Q = J - 3),
                                it[K++] = 16,
                                it[K++] = Q - 3,
                                nt[16]++,
                                J -= Q
                    }
                    for (n = s ? it.subarray(0, K) : it.slice(0, K),
                    N = M(nt, 7),
                    z = 0; 19 > z; z++)
                        X[z] = N[j[z]];
                    for (R = 19; 4 < R && 0 === X[R - 1]; R--)
                        ;
                    for (k = D(N),
                    W.d(I - 257, 5, i),
                    W.d(P - 1, 5, i),
                    W.d(R - 4, 4, i),
                    z = 0; z < R; z++)
                        W.d(X[z], 3, i);
                    for (z = 0,
                    H = n.length; z < H; z++)
                        if (G = n[z],
                        W.d(k[G], N[G], i),
                        16 <= G) {
                            switch (z++,
                            G) {
                            case 16:
                                U = 2;
                                break;
                            case 17:
                                U = 3;
                                break;
                            case 18:
                                U = 7;
                                break;
                            default:
                                t("invalid code: " + G)
                            }
                            W.d(n[z], U, i)
                        }
                    var rt, st, at, ot, lt, ht, ct, ut, _t = [L, O], ft = [V, F];
                    for (lt = _t[0],
                    ht = _t[1],
                    ct = ft[0],
                    ut = ft[1],
                    rt = 0,
                    st = B.length; rt < st; ++rt)
                        if (at = B[rt],
                        W.d(lt[at], ht[at], i),
                        256 < at)
                            W.d(B[++rt], B[++rt], i),
                            ot = B[++rt],
                            W.d(ct[ot], ut[ot], i),
                            W.d(B[++rt], B[++rt], i);
                        else if (256 === at)
                            break;
                    this.a = W.finish(),
                    this.b = this.a.length;
                    break;
                default:
                    t("invalid compression type")
                }
                return this.a
            }
            ;
            var C, T, S = [];
            for (C = 3; 258 >= C; C++)
                T = b(),
                S[C] = T[2] << 24 | T[1] << 16 | T[0];
            var w = s ? new Uint32Array(S) : S;
            function E(n, r) {
                function a(e, n) {
                    var r, s, a, o, l = e.G, h = [], c = 0;
                    switch (r = w[e.length],
                    h[c++] = 65535 & r,
                    h[c++] = r >> 16 & 255,
                    h[c++] = r >> 24,
                    i) {
                    case 1 === l:
                        s = [0, l - 1, 0];
                        break;
                    case 2 === l:
                        s = [1, l - 2, 0];
                        break;
                    case 3 === l:
                        s = [2, l - 3, 0];
                        break;
                    case 4 === l:
                        s = [3, l - 4, 0];
                        break;
                    case 6 >= l:
                        s = [4, l - 5, 1];
                        break;
                    case 8 >= l:
                        s = [5, l - 7, 1];
                        break;
                    case 12 >= l:
                        s = [6, l - 9, 2];
                        break;
                    case 16 >= l:
                        s = [7, l - 13, 2];
                        break;
                    case 24 >= l:
                        s = [8, l - 17, 3];
                        break;
                    case 32 >= l:
                        s = [9, l - 25, 3];
                        break;
                    case 48 >= l:
                        s = [10, l - 33, 4];
                        break;
                    case 64 >= l:
                        s = [11, l - 49, 4];
                        break;
                    case 96 >= l:
                        s = [12, l - 65, 5];
                        break;
                    case 128 >= l:
                        s = [13, l - 97, 5];
                        break;
                    case 192 >= l:
                        s = [14, l - 129, 6];
                        break;
                    case 256 >= l:
                        s = [15, l - 193, 6];
                        break;
                    case 384 >= l:
                        s = [16, l - 257, 7];
                        break;
                    case 512 >= l:
                        s = [17, l - 385, 7];
                        break;
                    case 768 >= l:
                        s = [18, l - 513, 8];
                        break;
                    case 1024 >= l:
                        s = [19, l - 769, 8];
                        break;
                    case 1536 >= l:
                        s = [20, l - 1025, 9];
                        break;
                    case 2048 >= l:
                        s = [21, l - 1537, 9];
                        break;
                    case 3072 >= l:
                        s = [22, l - 2049, 10];
                        break;
                    case 4096 >= l:
                        s = [23, l - 3073, 10];
                        break;
                    case 6144 >= l:
                        s = [24, l - 4097, 11];
                        break;
                    case 8192 >= l:
                        s = [25, l - 6145, 11];
                        break;
                    case 12288 >= l:
                        s = [26, l - 8193, 12];
                        break;
                    case 16384 >= l:
                        s = [27, l - 12289, 12];
                        break;
                    case 24576 >= l:
                        s = [28, l - 16385, 13];
                        break;
                    case 32768 >= l:
                        s = [29, l - 24577, 13];
                        break;
                    default:
                        t("invalid distance")
                    }
                    for (r = s,
                    h[c++] = r[0],
                    h[c++] = r[1],
                    h[c++] = r[2],
                    a = 0,
                    o = h.length; a < o; ++a)
                        y[v++] = h[a];
                    A[h[0]]++,
                    b[h[3]]++,
                    g = e.length + n - 1,
                    d = null
                }
                var o, l, h, c, u, _, f, d, p, m = {}, y = s ? new Uint16Array(2 * r.length) : [], v = 0, g = 0, A = new (s ? Uint32Array : Array)(286), b = new (s ? Uint32Array : Array)(30), C = n.w;
                if (!s) {
                    for (h = 0; 285 >= h; )
                        A[h++] = 0;
                    for (h = 0; 29 >= h; )
                        b[h++] = 0
                }
                for (A[256] = 1,
                o = 0,
                l = r.length; o < l; ++o) {
                    for (h = u = 0,
                    c = 3; h < c && o + h !== l; ++h)
                        u = u << 8 | r[o + h];
                    if (m[u] === e && (m[u] = []),
                    _ = m[u],
                    !(0 < g--)) {
                        for (; 0 < _.length && 32768 < o - _[0]; )
                            _.shift();
                        if (o + 3 >= l) {
                            for (d && a(d, -1),
                            h = 0,
                            c = l - o; h < c; ++h)
                                p = r[o + h],
                                y[v++] = p,
                                ++A[p];
                            break
                        }
                        if (0 < _.length) {
                            var T = e
                              , S = e
                              , E = 0
                              , M = e
                              , D = e
                              , B = e
                              , I = r.length
                              , P = (D = 0,
                            _.length);
                            t: for (; D < P; D++) {
                                if (T = _[P - D - 1],
                                M = 3,
                                3 < E) {
                                    for (B = E; 3 < B; B--)
                                        if (r[T + B - 1] !== r[o + B - 1])
                                            continue t;
                                    M = E
                                }
                                for (; 258 > M && o + M < I && r[T + M] === r[o + M]; )
                                    ++M;
                                if (M > E && (S = T,
                                E = M),
                                258 === M)
                                    break
                            }
                            f = new x(E,o - S),
                            d ? d.length < f.length ? (p = r[o - 1],
                            y[v++] = p,
                            ++A[p],
                            a(f, 0)) : a(d, -1) : f.length < C ? d = f : a(f, 0)
                        } else
                            d ? a(d, -1) : (p = r[o],
                            y[v++] = p,
                            ++A[p])
                    }
                    _.push(o)
                }
                return y[v++] = 256,
                A[256]++,
                n.L = A,
                n.K = b,
                s ? y.subarray(0, v) : y
            }
            function M(t, e) {
                function i(t) {
                    var e = C[t][T[t]];
                    e === v ? (i(t + 1),
                    i(t + 1)) : --x[e],
                    ++T[t]
                }
                var n, r, a, o, l, h = t.length, c = new d(572), u = new (s ? Uint8Array : Array)(h);
                if (!s)
                    for (o = 0; o < h; o++)
                        u[o] = 0;
                for (o = 0; o < h; ++o)
                    0 < t[o] && c.push(o, t[o]);
                if (n = Array(c.length / 2),
                r = new (s ? Uint32Array : Array)(c.length / 2),
                1 === n.length)
                    return u[c.pop().index] = 1,
                    u;
                for (o = 0,
                l = c.length / 2; o < l; ++o)
                    n[o] = c.pop(),
                    r[o] = n[o].value;
                var _, f, p, m, y, v = r.length, g = new (s ? Uint16Array : Array)(e), A = new (s ? Uint8Array : Array)(e), x = new (s ? Uint8Array : Array)(v), b = Array(e), C = Array(e), T = Array(e), S = (1 << e) - v, w = 1 << e - 1;
                for (g[e - 1] = v,
                f = 0; f < e; ++f)
                    S < w ? A[f] = 0 : (A[f] = 1,
                    S -= w),
                    S <<= 1,
                    g[e - 2 - f] = (g[e - 1 - f] / 2 | 0) + v;
                for (g[0] = A[0],
                b[0] = Array(g[0]),
                C[0] = Array(g[0]),
                f = 1; f < e; ++f)
                    g[f] > 2 * g[f - 1] + A[f] && (g[f] = 2 * g[f - 1] + A[f]),
                    b[f] = Array(g[f]),
                    C[f] = Array(g[f]);
                for (_ = 0; _ < v; ++_)
                    x[_] = e;
                for (p = 0; p < g[e - 1]; ++p)
                    b[e - 1][p] = r[p],
                    C[e - 1][p] = p;
                for (_ = 0; _ < e; ++_)
                    T[_] = 0;
                for (1 === A[e - 1] && (--x[0],
                ++T[e - 1]),
                f = e - 2; 0 <= f; --f) {
                    for (m = _ = 0,
                    y = T[f + 1],
                    p = 0; p < g[f]; p++)
                        (m = b[f + 1][y] + b[f + 1][y + 1]) > r[_] ? (b[f][p] = m,
                        C[f][p] = v,
                        y += 2) : (b[f][p] = r[_],
                        C[f][p] = _,
                        ++_);
                    T[f] = 0,
                    1 === A[f] && i(f)
                }
                for (a = x,
                o = 0,
                l = n.length; o < l; ++o)
                    u[n[o].index] = a[o];
                return u
            }
            function D(e) {
                var i, n, r, a, o = new (s ? Uint16Array : Array)(e.length), l = [], h = [], c = 0;
                for (i = 0,
                n = e.length; i < n; i++)
                    l[e[i]] = 1 + (0 | l[e[i]]);
                for (i = 1,
                n = 16; i <= n; i++)
                    h[i] = c,
                    (c += 0 | l[i]) > 1 << i && t("overcommitted"),
                    c <<= 1;
                for (65536 > c && t("undercommitted"),
                i = 0,
                n = e.length; i < n; i++)
                    for (c = h[e[i]],
                    h[e[i]] += 1,
                    r = o[i] = 0,
                    a = e[i]; r < a; r++)
                        o[i] = o[i] << 1 | 1 & c,
                        c >>>= 1;
                return o
            }
            function B(t, e) {
                this.input = t,
                this.a = new (s ? Uint8Array : Array)(32768),
                this.h = I.j;
                var i, n = {};
                for (i in !e && (e = {}) || "number" != typeof e.compressionType || (this.h = e.compressionType),
                e)
                    n[i] = e[i];
                n.outputBuffer = this.a,
                this.z = new m(this.input,n)
            }
            var I = g;
            function P(e, i) {
                switch (this.k = [],
                this.l = 32768,
                this.e = this.g = this.c = this.q = 0,
                this.input = s ? new Uint8Array(e) : e,
                this.s = !1,
                this.m = O,
                this.B = !1,
                !i && (i = {}) || (i.index && (this.c = i.index),
                i.bufferSize && (this.l = i.bufferSize),
                i.bufferType && (this.m = i.bufferType),
                i.resize && (this.B = i.resize)),
                this.m) {
                case R:
                    this.b = 32768,
                    this.a = new (s ? Uint8Array : Array)(32768 + this.l + 258);
                    break;
                case O:
                    this.b = 0,
                    this.a = new (s ? Uint8Array : Array)(this.l),
                    this.f = this.J,
                    this.t = this.H,
                    this.o = this.I;
                    break;
                default:
                    t(Error("invalid inflate mode"))
                }
            }
            B.prototype.n = function() {
                var e, i, n, r, o, l, h, c = 0;
                switch (h = this.a,
                e = ct) {
                case ct:
                    i = Math.LOG2E * Math.log(32768) - 8;
                    break;
                default:
                    t(Error("invalid compression method"))
                }
                switch (n = i << 4 | e,
                h[c++] = n,
                e) {
                case ct:
                    switch (this.h) {
                    case I.NONE:
                        o = 0;
                        break;
                    case I.r:
                        o = 1;
                        break;
                    case I.j:
                        o = 2;
                        break;
                    default:
                        t(Error("unsupported compression type"))
                    }
                    break;
                default:
                    t(Error("invalid compression method"))
                }
                return r = o << 6 | 0,
                h[c++] = r | 31 - (256 * n + r) % 31,
                l = a(this.input),
                this.z.b = c,
                c = (h = this.z.n()).length,
                s && ((h = new Uint8Array(h.buffer)).length <= c + 4 && (this.a = new Uint8Array(h.length + 4),
                this.a.set(h),
                h = this.a),
                h = h.subarray(0, c + 4)),
                h[c++] = l >> 24 & 255,
                h[c++] = l >> 16 & 255,
                h[c++] = l >> 8 & 255,
                h[c++] = 255 & l,
                h
            }
            ,
            r("Zlib.Deflate", B),
            r("Zlib.Deflate.compress", (function(t, e) {
                return new B(t,e).n()
            }
            )),
            r("Zlib.Deflate.CompressionType", I),
            r("Zlib.Deflate.CompressionType.NONE", I.NONE),
            r("Zlib.Deflate.CompressionType.FIXED", I.r),
            r("Zlib.Deflate.CompressionType.DYNAMIC", I.j);
            var R = 0
              , O = 1
              , L = {
                D: R,
                C: O
            };
            P.prototype.p = function() {
                for (; !this.s; ) {
                    var n = tt(this, 3);
                    switch (1 & n && (this.s = i),
                    n >>>= 1) {
                    case 0:
                        var r = this.input
                          , a = this.c
                          , o = this.a
                          , l = this.b
                          , h = e
                          , c = e
                          , u = e
                          , _ = o.length
                          , f = e;
                        switch (this.e = this.g = 0,
                        (h = r[a++]) === e && t(Error("invalid uncompressed block header: LEN (first byte)")),
                        c = h,
                        (h = r[a++]) === e && t(Error("invalid uncompressed block header: LEN (second byte)")),
                        c |= h << 8,
                        (h = r[a++]) === e && t(Error("invalid uncompressed block header: NLEN (first byte)")),
                        u = h,
                        (h = r[a++]) === e && t(Error("invalid uncompressed block header: NLEN (second byte)")),
                        c === ~(u |= h << 8) && t(Error("invalid uncompressed block header: length verify")),
                        a + c > r.length && t(Error("input buffer is broken")),
                        this.m) {
                        case R:
                            for (; l + c > o.length; ) {
                                if (c -= f = _ - l,
                                s)
                                    o.set(r.subarray(a, a + f), l),
                                    l += f,
                                    a += f;
                                else
                                    for (; f--; )
                                        o[l++] = r[a++];
                                this.b = l,
                                o = this.f(),
                                l = this.b
                            }
                            break;
                        case O:
                            for (; l + c > o.length; )
                                o = this.f({
                                    v: 2
                                });
                            break;
                        default:
                            t(Error("invalid inflate mode"))
                        }
                        if (s)
                            o.set(r.subarray(a, a + c), l),
                            l += c,
                            a += c;
                        else
                            for (; c--; )
                                o[l++] = r[a++];
                        this.c = a,
                        this.b = l,
                        this.a = o;
                        break;
                    case 1:
                        this.o(K, $);
                        break;
                    case 2:
                        it(this);
                        break;
                    default:
                        t(Error("unknown BTYPE: " + n))
                    }
                }
                return this.t()
            }
            ;
            var F, V, N = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], k = s ? new Uint16Array(N) : N, G = [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, 258, 258], U = s ? new Uint16Array(G) : G, z = [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, 0, 0], H = s ? new Uint8Array(z) : z, W = [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], j = s ? new Uint16Array(W) : W, X = [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], Y = s ? new Uint8Array(X) : X, q = new (s ? Uint8Array : Array)(288);
            for (F = 0,
            V = q.length; F < V; ++F)
                q[F] = 143 >= F ? 8 : 255 >= F ? 9 : 279 >= F ? 7 : 8;
            var J, Z, K = p(q), Q = new (s ? Uint8Array : Array)(30);
            for (J = 0,
            Z = Q.length; J < Z; ++J)
                Q[J] = 5;
            var $ = p(Q);
            function tt(i, n) {
                for (var r, s = i.g, a = i.e, o = i.input, l = i.c; a < n; )
                    (r = o[l++]) === e && t(Error("input buffer is broken")),
                    s |= r << a,
                    a += 8;
                return r = s & (1 << n) - 1,
                i.g = s >>> n,
                i.e = a - n,
                i.c = l,
                r
            }
            function et(i, n) {
                for (var r, s, a, o = i.g, l = i.e, h = i.input, c = i.c, u = n[0], _ = n[1]; l < _; )
                    (r = h[c++]) === e && t(Error("input buffer is broken")),
                    o |= r << l,
                    l += 8;
                return a = (s = u[o & (1 << _) - 1]) >>> 16,
                i.g = o >> a,
                i.e = l - a,
                i.c = c,
                65535 & s
            }
            function it(t) {
                function e(t, e, i) {
                    var n, r, s, a;
                    for (a = 0; a < t; )
                        switch (n = et(this, e)) {
                        case 16:
                            for (s = 3 + tt(this, 2); s--; )
                                i[a++] = r;
                            break;
                        case 17:
                            for (s = 3 + tt(this, 3); s--; )
                                i[a++] = 0;
                            r = 0;
                            break;
                        case 18:
                            for (s = 11 + tt(this, 7); s--; )
                                i[a++] = 0;
                            r = 0;
                            break;
                        default:
                            r = i[a++] = n
                        }
                    return i
                }
                var i, n, r, a, o = tt(t, 5) + 257, l = tt(t, 5) + 1, h = tt(t, 4) + 4, c = new (s ? Uint8Array : Array)(k.length);
                for (a = 0; a < h; ++a)
                    c[k[a]] = tt(t, 3);
                i = p(c),
                n = new (s ? Uint8Array : Array)(o),
                r = new (s ? Uint8Array : Array)(l),
                t.o(p(e.call(t, o, i, n)), p(e.call(t, l, i, r)))
            }
            function nt(e, i) {
                var n, r;
                switch (this.input = e,
                this.c = 0,
                !i && (i = {}) || (i.index && (this.c = i.index),
                i.verify && (this.M = i.verify)),
                n = e[this.c++],
                r = e[this.c++],
                15 & n) {
                case ct:
                    this.method = ct;
                    break;
                default:
                    t(Error("unsupported compression method"))
                }
                0 != ((n << 8) + r) % 31 && t(Error("invalid fcheck flag:" + ((n << 8) + r) % 31)),
                32 & r && t(Error("fdict flag is not supported")),
                this.A = new P(e,{
                    index: this.c,
                    bufferSize: i.bufferSize,
                    bufferType: i.bufferType,
                    resize: i.resize
                })
            }
            P.prototype.o = function(t, e) {
                var i = this.a
                  , n = this.b;
                this.u = t;
                for (var r, s, a, o, l = i.length - 258; 256 !== (r = et(this, t)); )
                    if (256 > r)
                        n >= l && (this.b = n,
                        i = this.f(),
                        n = this.b),
                        i[n++] = r;
                    else
                        for (o = U[s = r - 257],
                        0 < H[s] && (o += tt(this, H[s])),
                        r = et(this, e),
                        a = j[r],
                        0 < Y[r] && (a += tt(this, Y[r])),
                        n >= l && (this.b = n,
                        i = this.f(),
                        n = this.b); o--; )
                            i[n] = i[n++ - a];
                for (; 8 <= this.e; )
                    this.e -= 8,
                    this.c--;
                this.b = n
            }
            ,
            P.prototype.I = function(t, e) {
                var i = this.a
                  , n = this.b;
                this.u = t;
                for (var r, s, a, o, l = i.length; 256 !== (r = et(this, t)); )
                    if (256 > r)
                        n >= l && (l = (i = this.f()).length),
                        i[n++] = r;
                    else
                        for (o = U[s = r - 257],
                        0 < H[s] && (o += tt(this, H[s])),
                        r = et(this, e),
                        a = j[r],
                        0 < Y[r] && (a += tt(this, Y[r])),
                        n + o > l && (l = (i = this.f()).length); o--; )
                            i[n] = i[n++ - a];
                for (; 8 <= this.e; )
                    this.e -= 8,
                    this.c--;
                this.b = n
            }
            ,
            P.prototype.f = function() {
                var t, e, i = new (s ? Uint8Array : Array)(this.b - 32768), n = this.b - 32768, r = this.a;
                if (s)
                    i.set(r.subarray(32768, i.length));
                else
                    for (t = 0,
                    e = i.length; t < e; ++t)
                        i[t] = r[t + 32768];
                if (this.k.push(i),
                this.q += i.length,
                s)
                    r.set(r.subarray(n, n + 32768));
                else
                    for (t = 0; 32768 > t; ++t)
                        r[t] = r[n + t];
                return this.b = 32768,
                r
            }
            ,
            P.prototype.J = function(t) {
                var e, i, n, r = this.input.length / this.c + 1 | 0, a = this.input, o = this.a;
                return t && ("number" == typeof t.v && (r = t.v),
                "number" == typeof t.F && (r += t.F)),
                i = 2 > r ? (n = (a.length - this.c) / this.u[2] / 2 * 258 | 0) < o.length ? o.length + n : o.length << 1 : o.length * r,
                s ? (e = new Uint8Array(i)).set(o) : e = o,
                this.a = e
            }
            ,
            P.prototype.t = function() {
                var t, e, i, n, r, a = 0, o = this.a, l = this.k, h = new (s ? Uint8Array : Array)(this.q + (this.b - 32768));
                if (0 === l.length)
                    return s ? this.a.subarray(32768, this.b) : this.a.slice(32768, this.b);
                for (e = 0,
                i = l.length; e < i; ++e)
                    for (n = 0,
                    r = (t = l[e]).length; n < r; ++n)
                        h[a++] = t[n];
                for (e = 32768,
                i = this.b; e < i; ++e)
                    h[a++] = o[e];
                return this.k = [],
                this.buffer = h
            }
            ,
            P.prototype.H = function() {
                var t, e = this.b;
                return s ? this.B ? (t = new Uint8Array(e)).set(this.a.subarray(0, e)) : t = this.a.subarray(0, e) : (this.a.length > e && (this.a.length = e),
                t = this.a),
                this.buffer = t
            }
            ,
            nt.prototype.p = function() {
                var e, i = this.input;
                return e = this.A.p(),
                this.c = this.A.c,
                this.M && (i[this.c++] << 24 | i[this.c++] << 16 | i[this.c++] << 8 | i[this.c++]) >>> 0 !== a(e) && t(Error("invalid adler-32 checksum")),
                e
            }
            ,
            r("Zlib.Inflate", nt),
            r("Zlib.Inflate.BufferType", L),
            L.ADAPTIVE = L.C,
            L.BLOCK = L.D,
            r("Zlib.Inflate.prototype.decompress", nt.prototype.p),
            s && new Uint16Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]),
            s && new Uint16Array([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, 258, 258]),
            s && new Uint8Array([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, 0, 0]),
            s && new Uint16Array([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]),
            s && new Uint8Array([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]);
            var rt, st, at = new (s ? Uint8Array : Array)(288);
            for (rt = 0,
            st = at.length; rt < st; ++rt)
                at[rt] = 143 >= rt ? 8 : 255 >= rt ? 9 : 279 >= rt ? 7 : 8;
            p(at);
            var ot, lt, ht = new (s ? Uint8Array : Array)(30);
            for (ot = 0,
            lt = ht.length; ot < lt; ++ot)
                ht[ot] = 5;
            p(ht);
            var ct = 8
        }
        ).call(window);
        var i = window.Zlib;
        i.Deflate = i.Deflate,
        i.Deflate.compress = i.Deflate.compress,
        i.Inflate = i.Inflate,
        i.Inflate.BufferType = i.Inflate.BufferType,
        i.Inflate.prototype.decompress = i.Inflate.prototype.decompress,
        e.exports = i
    }
    ), {}],
    26: [(function(t, e) {
        "use strict";
        var i, n = t("./platform/utils"), r = (t("../../DebugInfos"),
        "https://github.com/cocos-creator/engine/blob/master/EngineErrorMap.md");
        function s(t) {
            return function() {
                var e = arguments[0]
                  , i = t + " " + e + ", please go to " + r + "#" + e + " to see details.";
                if (1 === arguments.length)
                    return i;
                if (2 === arguments.length)
                    return i + " Arguments: " + arguments[1];
                var n = cc.js.shiftArguments.apply(null, arguments);
                return i + " Arguments: " + n.join(", ")
            }
        }
        cc.log = cc.warn = cc.error = cc.assert = console.log.bind ? console.log.bind(console) : console.log,
        cc._throw = function(t) {
            n.callInNextTick((function() {
                throw t
            }
            ))
        }
        ;
        var a = s("Log");
        cc.logID = function() {
            cc.log(a.apply(null, arguments))
        }
        ;
        var o = s("Warning");
        cc.warnID = function() {
            cc.warn(o.apply(null, arguments))
        }
        ;
        var l = s("Error");
        cc.errorID = function() {
            cc.error(l.apply(null, arguments))
        }
        ;
        var h = s("Assert");
        cc.assertID = function(t) {
            t || cc.assert(!1, h.apply(null, cc.js.shiftArguments.apply(null, arguments)))
        }
        ;
        var c = cc.Enum({
            NONE: 0,
            INFO: 1,
            WARN: 2,
            ERROR: 3,
            INFO_FOR_WEB_PAGE: 4,
            WARN_FOR_WEB_PAGE: 5,
            ERROR_FOR_WEB_PAGE: 6
        });
        e.exports = cc.debug = {
            DebugMode: c,
            _resetDebugSetting: function(t) {
                if (cc.log = cc.warn = cc.error = cc.assert = function() {}
                ,
                t !== c.NONE) {
                    if (t > c.ERROR) {
                        var e = function(t) {
                            if (cc.game.canvas) {
                                if (!i) {
                                    var e = document.createElement("Div");
                                    e.setAttribute("id", "logInfoDiv"),
                                    e.setAttribute("width", "200"),
                                    e.setAttribute("height", cc.game.canvas.height);
                                    var n = e.style;
                                    n.zIndex = "99999",
                                    n.position = "absolute",
                                    n.top = n.left = "0",
                                    (i = document.createElement("textarea")).setAttribute("rows", "20"),
                                    i.setAttribute("cols", "30"),
                                    i.setAttribute("disabled", "true");
                                    var r = i.style;
                                    r.backgroundColor = "transparent",
                                    r.borderBottom = "1px solid #cccccc",
                                    r.borderTopWidth = r.borderLeftWidth = r.borderRightWidth = "0px",
                                    r.borderTopStyle = r.borderLeftStyle = r.borderRightStyle = "none",
                                    r.padding = "0px",
                                    r.margin = 0,
                                    e.appendChild(i),
                                    cc.game.canvas.parentNode.appendChild(e)
                                }
                                i.value = i.value + t + "\r\n",
                                i.scrollTop = i.scrollHeight
                            }
                        };
                        cc.error = function() {
                            e("ERROR :  " + cc.js.formatStr.apply(null, arguments))
                        }
                        ,
                        cc.assert = function(t, i) {
                            !t && i && (i = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments)),
                            e("ASSERT: " + i))
                        }
                        ,
                        t !== c.ERROR_FOR_WEB_PAGE && (cc.warn = function() {
                            e("WARN :  " + cc.js.formatStr.apply(null, arguments))
                        }
                        ),
                        t === c.INFO_FOR_WEB_PAGE && (cc.log = function() {
                            e(cc.js.formatStr.apply(null, arguments))
                        }
                        )
                    } else
                        console && console.log.apply && (console.error || (console.error = console.log),
                        console.warn || (console.warn = console.log),
                        console.error.bind ? cc.error = console.error.bind(console) : cc.error = function() {
                            return console.error.apply(console, arguments)
                        }
                        ,
                        cc.assert = function(t, e) {
                            if (!t)
                                throw e && (e = cc.js.formatStr.apply(null, cc.js.shiftArguments.apply(null, arguments))),
                                new Error(e)
                        }
                        );
                    t !== c.ERROR && (console.warn.bind ? cc.warn = console.warn.bind(console) : cc.warn = function() {
                        return console.warn.apply(console, arguments)
                    }
                    ),
                    t === c.INFO && (console.log.bind ? cc.log = console.log.bind(console) : cc.log = function() {
                        return console.log.apply(console, arguments)
                    }
                    )
                }
            },
            getError: s("ERROR"),
            isDisplayStats: function() {
                return !!cc.profiler && cc.profiler.isShowingStats()
            },
            setDisplayStats: function(t) {
                cc.profiler && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS && (t ? cc.profiler.showStats() : cc.profiler.hideStats(),
                cc.game.config.showFPS = !!t)
            }
        }
    }
    ), {
        "../../DebugInfos": void 0,
        "./platform/utils": 217
    }],
    27: [(function(t, e) {
        "use strict";
        var i = t("./event/event-target")
          , n = t("./component-scheduler")
          , r = t("./node-activator")
          , s = t("./platform/CCObject")
          , a = t("./CCGame")
          , o = t("./renderer")
          , l = t("./event-manager")
          , h = t("./CCScheduler");
        cc.Director = function() {
            i.call(this),
            this._paused = !1,
            this._purgeDirectorInNextLoop = !1,
            this._winSizeInPoints = null,
            this._scene = null,
            this._loadingScene = "",
            this._totalFrames = 0,
            this._lastUpdate = 0,
            this._deltaTime = 0,
            this._startTime = 0,
            this._maxParticleDeltaTime = 0,
            this._scheduler = null,
            this._compScheduler = null,
            this._nodeActivator = null,
            this._actionManager = null;
            var t = this;
            a.on(a.EVENT_SHOW, (function() {
                t._lastUpdate = performance.now()
            }
            )),
            a.once(a.EVENT_ENGINE_INITED, this.init, this)
        }
        ,
        cc.Director.prototype = {
            constructor: cc.Director,
            init: function() {
                return this._totalFrames = 0,
                this._lastUpdate = performance.now(),
                this._startTime = this._lastUpdate,
                this._paused = !1,
                this._purgeDirectorInNextLoop = !1,
                this._winSizeInPoints = cc.size(0, 0),
                this._scheduler = new h,
                cc.ActionManager ? (this._actionManager = new cc.ActionManager,
                this._scheduler.scheduleUpdate(this._actionManager, h.PRIORITY_SYSTEM, !1)) : this._actionManager = null,
                this.sharedInit(),
                !0
            },
            sharedInit: function() {
                this._compScheduler = new n,
                this._nodeActivator = new r,
                l && l.setEnabled(!0),
                cc.AnimationManager ? (this._animationManager = new cc.AnimationManager,
                this._scheduler.scheduleUpdate(this._animationManager, h.PRIORITY_SYSTEM, !1)) : this._animationManager = null,
                cc.CollisionManager ? (this._collisionManager = new cc.CollisionManager,
                this._scheduler.scheduleUpdate(this._collisionManager, h.PRIORITY_SYSTEM, !1)) : this._collisionManager = null,
                cc.PhysicsManager ? (this._physicsManager = new cc.PhysicsManager,
                this._scheduler.scheduleUpdate(this._physicsManager, h.PRIORITY_SYSTEM, !1)) : this._physicsManager = null,
                cc.Physics3DManager,
                this._physics3DManager = null,
                cc._widgetManager && cc._widgetManager.init(this)
            },
            calculateDeltaTime: function(t) {
                t || (t = performance.now()),
                this._deltaTime = t > this._lastUpdate ? (t - this._lastUpdate) / 1e3 : 0,
                this._lastUpdate = t
            },
            convertToGL: function(t) {
                var e = a.container
                  , i = cc.view
                  , n = e.getBoundingClientRect()
                  , r = n.left + window.pageXOffset - e.clientLeft
                  , s = n.top + window.pageYOffset - e.clientTop
                  , o = i._devicePixelRatio * (t.x - r)
                  , l = i._devicePixelRatio * (s + n.height - t.y);
                return i._isRotated ? cc.v2(i._viewportRect.width - l, o) : cc.v2(o, l)
            },
            convertToUI: function(t) {
                var e = a.container
                  , i = cc.view
                  , n = e.getBoundingClientRect()
                  , r = n.left + window.pageXOffset - e.clientLeft
                  , s = n.top + window.pageYOffset - e.clientTop
                  , o = cc.v2(0, 0);
                return i._isRotated ? (o.x = r + t.y / i._devicePixelRatio,
                o.y = s + n.height - (i._viewportRect.width - t.x) / i._devicePixelRatio) : (o.x = r + t.x * i._devicePixelRatio,
                o.y = s + n.height - t.y * i._devicePixelRatio),
                o
            },
            end: function() {
                this._purgeDirectorInNextLoop = !0
            },
            getWinSize: function() {
                return cc.size(cc.winSize)
            },
            getWinSizeInPixels: function() {
                return cc.size(cc.winSize)
            },
            pause: function() {
                this._paused || (this._paused = !0)
            },
            purgeCachedData: function() {
                cc.assetManager.releaseAll()
            },
            purgeDirector: function() {
                this._scheduler.unscheduleAll(),
                this._compScheduler.unscheduleAll(),
                this._nodeActivator.reset(),
                l && l.setEnabled(!1),
                cc.isValid(this._scene) && this._scene.destroy(),
                this._scene = null,
                cc.renderer.clear(),
                cc.assetManager.builtins.clear(),
                cc.game.pause(),
                cc.assetManager.releaseAll()
            },
            reset: function() {
                this.purgeDirector(),
                l && l.setEnabled(!0),
                this._actionManager && this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, !1),
                this._animationManager && this._scheduler.scheduleUpdate(this._animationManager, cc.Scheduler.PRIORITY_SYSTEM, !1),
                this._collisionManager && this._scheduler.scheduleUpdate(this._collisionManager, cc.Scheduler.PRIORITY_SYSTEM, !1),
                this._physicsManager && this._scheduler.scheduleUpdate(this._physicsManager, cc.Scheduler.PRIORITY_SYSTEM, !1),
                cc.game.resume()
            },
            runSceneImmediate: function(t, e, i) {
                cc.assertID(t instanceof cc.Scene || t instanceof cc.SceneAsset, 1216),
                t instanceof cc.SceneAsset && (t = t.scene),
                t._load();
                for (var n = Object.keys(a._persistRootNodes).map((function(t) {
                    return a._persistRootNodes[t]
                }
                )), r = 0; r < n.length; r++) {
                    var o = n[r]
                      , l = t.getChildByUuid(o.uuid);
                    if (l) {
                        var h = l.getSiblingIndex();
                        l._destroyImmediate(),
                        t.insertChild(o, h)
                    } else
                        o.parent = t
                }
                var c = this._scene;
                cc.assetManager._releaseManager._autoRelease(c, t, a._persistRootNodes),
                cc.isValid(c) && c.destroy(),
                this._scene = null,
                s._deferredDestroy(),
                e && e(),
                this.emit(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, t),
                this._scene = t,
                t._activate(),
                cc.game.resume(),
                i && i(null, t),
                this.emit(cc.Director.EVENT_AFTER_SCENE_LAUNCH, t)
            },
            runScene: function(t, e, i) {
                cc.assertID(t, 1205),
                cc.assertID(t instanceof cc.Scene || t instanceof cc.SceneAsset, 1216),
                t instanceof cc.SceneAsset && (t = t.scene),
                t._load(),
                this.once(cc.Director.EVENT_AFTER_DRAW, (function() {
                    this.runSceneImmediate(t, e, i)
                }
                ), this)
            },
            loadScene: function(t, e, i) {
                if (this._loadingScene)
                    return cc.warnID(1208, t, this._loadingScene),
                    !1;
                var n = cc.assetManager.bundles.find((function(e) {
                    return e.getSceneInfo(t)
                }
                ));
                if (n) {
                    this.emit(cc.Director.EVENT_BEFORE_SCENE_LOADING, t),
                    this._loadingScene = t;
                    var r = this;
                    return console.time("LoadScene " + t),
                    n.loadScene(t, (function(n, s) {
                        console.timeEnd("LoadScene " + t),
                        r._loadingScene = "",
                        n ? (n = "Failed to load scene: " + n,
                        cc.error(n),
                        e && e(n)) : r.runSceneImmediate(s, i, e)
                    }
                    )),
                    !0
                }
                return cc.errorID(1209, t),
                !1
            },
            preloadScene: function(t, e, i) {
                var n = cc.assetManager.bundles.find((function(e) {
                    return e.getSceneInfo(t)
                }
                ));
                if (!n)
                    return cc.errorID(1209, t),
                    null;
                n.preloadScene(t, null, e, i)
            },
            resume: function() {
                this._paused && (this._lastUpdate = performance.now(),
                this._lastUpdate || cc.logID(1200),
                this._paused = !1,
                this._deltaTime = 0)
            },
            setDepthTest: function(t) {
                cc.Camera.main && (cc.Camera.main.depth = !!t)
            },
            setClearColor: function(t) {
                cc.Camera.main && (cc.Camera.main.backgroundColor = t)
            },
            getRunningScene: function() {
                return this._scene
            },
            getScene: function() {
                return this._scene
            },
            getAnimationInterval: function() {
                return 1e3 / a.getFrameRate()
            },
            setAnimationInterval: function(t) {
                a.setFrameRate(Math.round(1e3 / t))
            },
            getDeltaTime: function() {
                return this._deltaTime
            },
            getTotalTime: function() {
                return performance.now() - this._startTime
            },
            getTotalFrames: function() {
                return this._totalFrames
            },
            isPaused: function() {
                return this._paused
            },
            getScheduler: function() {
                return this._scheduler
            },
            setScheduler: function(t) {
                this._scheduler !== t && (this._scheduler = t)
            },
            getActionManager: function() {
                return this._actionManager
            },
            setActionManager: function(t) {
                this._actionManager !== t && (this._actionManager && this._scheduler.unscheduleUpdate(this._actionManager),
                this._actionManager = t,
                this._scheduler.scheduleUpdate(this._actionManager, cc.Scheduler.PRIORITY_SYSTEM, !1))
            },
            getAnimationManager: function() {
                return this._animationManager
            },
            getCollisionManager: function() {
                return this._collisionManager
            },
            getPhysicsManager: function() {
                return this._physicsManager
            },
            getPhysics3DManager: function() {
                return this._physics3DManager
            },
            startAnimation: function() {
                cc.game.resume()
            },
            stopAnimation: function() {
                cc.game.pause()
            },
            _resetDeltaTime: function() {
                this._lastUpdate = performance.now(),
                this._deltaTime = 0
            },
            mainLoop: function(t) {
                this._purgeDirectorInNextLoop ? (this._purgeDirectorInNextLoop = !1,
                this.purgeDirector()) : (this.calculateDeltaTime(t),
                this._paused || (this.emit(cc.Director.EVENT_BEFORE_UPDATE),
                this._compScheduler.startPhase(),
                this._compScheduler.updatePhase(this._deltaTime),
                this._scheduler.update(this._deltaTime),
                this._compScheduler.lateUpdatePhase(this._deltaTime),
                this.emit(cc.Director.EVENT_AFTER_UPDATE),
                s._deferredDestroy()),
                this.emit(cc.Director.EVENT_BEFORE_DRAW),
                o.render(this._scene, this._deltaTime),
                this.emit(cc.Director.EVENT_AFTER_DRAW),
                l.frameUpdateListeners(),
                this._totalFrames++)
            },
            __fastOn: function(t, e, i) {
                this.on(t, e, i)
            },
            __fastOff: function(t, e, i) {
                this.off(t, e, i)
            }
        },
        cc.js.addon(cc.Director.prototype, i.prototype),
        cc.Director.EVENT_PROJECTION_CHANGED = "director_projection_changed",
        cc.Director.EVENT_BEFORE_SCENE_LOADING = "director_before_scene_loading",
        cc.Director.EVENT_BEFORE_SCENE_LAUNCH = "director_before_scene_launch",
        cc.Director.EVENT_AFTER_SCENE_LAUNCH = "director_after_scene_launch",
        cc.Director.EVENT_BEFORE_UPDATE = "director_before_update",
        cc.Director.EVENT_AFTER_UPDATE = "director_after_update",
        cc.Director.EVENT_BEFORE_VISIT = "director_before_draw",
        cc.Director.EVENT_AFTER_VISIT = "director_before_draw",
        cc.Director.EVENT_BEFORE_DRAW = "director_before_draw",
        cc.Director.EVENT_AFTER_DRAW = "director_after_draw",
        cc.Director.PROJECTION_2D = 0,
        cc.Director.PROJECTION_3D = 1,
        cc.Director.PROJECTION_CUSTOM = 3,
        cc.Director.PROJECTION_DEFAULT = cc.Director.PROJECTION_2D,
        cc.Director.EVENT_BEFORE_PHYSICS = "director_before_physics",
        cc.Director.EVENT_AFTER_PHYSICS = "director_after_physics",
        cc.director = new cc.Director,
        e.exports = cc.director
    }
    ), {
        "./CCGame": 28,
        "./CCScheduler": 32,
        "./component-scheduler": 99,
        "./event-manager": 138,
        "./event/event-target": 140,
        "./node-activator": 166,
        "./platform/CCObject": 199,
        "./renderer": 224
    }],
    28: [(function(t, e) {
        "use strict";
        var i = t("./event/event-target");
        t("../audio/CCAudioEngine");
        var n = t("./CCDebug")
          , r = t("./renderer/index.js")
          , s = t("../core/renderer/utils/dynamic-atlas/manager")
          , a = {
            EVENT_HIDE: "game_on_hide",
            EVENT_SHOW: "game_on_show",
            EVENT_RESTART: "game_on_restart",
            EVENT_GAME_INITED: "game_inited",
            EVENT_ENGINE_INITED: "engine_inited",
            EVENT_RENDERER_INITED: "engine_inited",
            RENDER_TYPE_CANVAS: 0,
            RENDER_TYPE_WEBGL: 1,
            RENDER_TYPE_OPENGL: 2,
            _persistRootNodes: {},
            _paused: !0,
            _configLoaded: !1,
            _isCloning: !1,
            _prepared: !1,
            _rendererInitialized: !1,
            _renderContext: null,
            _intervalId: null,
            _lastTime: null,
            _frameTime: null,
            frame: null,
            container: null,
            canvas: null,
            renderType: -1,
            config: null,
            onStart: null,
            setFrameRate: function(t) {
                this.config.frameRate = t,
                this._intervalId && window.cancelAnimFrame(this._intervalId),
                this._intervalId = 0,
                this._paused = !0,
                this._setAnimFrame(),
                this._runMainLoop()
            },
            getFrameRate: function() {
                return this.config.frameRate
            },
            step: function() {
                cc.director.mainLoop()
            },
            pause: function() {
                this._paused || (this._paused = !0,
                cc.audioEngine && cc.audioEngine._break(),
                this._intervalId && window.cancelAnimFrame(this._intervalId),
                this._intervalId = 0)
            },
            resume: function() {
                this._paused && (this._paused = !1,
                cc.audioEngine && cc.audioEngine._restore(),
                cc.director._resetDeltaTime(),
                this._runMainLoop())
            },
            isPaused: function() {
                return this._paused
            },
            restart: function() {
                cc.director.once(cc.Director.EVENT_AFTER_DRAW, (function() {
                    for (var t in a._persistRootNodes)
                        a.removePersistRootNode(a._persistRootNodes[t]);
                    cc.director.getScene().destroy(),
                    cc.Object._deferredDestroy(),
                    cc.audioEngine && cc.audioEngine.uncacheAll(),
                    cc.director.reset(),
                    a.pause(),
                    cc.assetManager.builtins.init((function() {
                        a.onStart(),
                        a.emit(a.EVENT_RESTART)
                    }
                    ))
                }
                ))
            },
            end: function() {
                close()
            },
            _initEngine: function() {
                this._rendererInitialized || (this._initRenderer(),
                this._initEvents(),
                this.emit(this.EVENT_ENGINE_INITED))
            },
            _loadPreviewScript: function(t) {
                t()
            },
            _prepareFinished: function(t) {
                var e = this;
                this._initEngine(),
                this._setAnimFrame(),
                cc.assetManager.builtins.init((function() {
                    console.log("Cocos Creator v" + cc.ENGINE_VERSION),
                    e._prepared = !0,
                    e._runMainLoop(),
                    e.emit(e.EVENT_GAME_INITED),
                    t && t()
                }
                ))
            },
            eventTargetOn: i.prototype.on,
            eventTargetOnce: i.prototype.once,
            on: function(t, e, i, n) {
                this._prepared && t === this.EVENT_ENGINE_INITED || !this._paused && t === this.EVENT_GAME_INITED ? e.call(i) : this.eventTargetOn(t, e, i, n)
            },
            once: function(t, e, i) {
                this._prepared && t === this.EVENT_ENGINE_INITED || !this._paused && t === this.EVENT_GAME_INITED ? e.call(i) : this.eventTargetOnce(t, e, i)
            },
            prepare: function(t) {
                var e = this;
                this._prepared ? t && t() : this._loadPreviewScript((function() {
                    e._prepareFinished(t)
                }
                ))
            },
            run: function(t, e) {
                this._initConfig(t),
                this.onStart = e,
                this.prepare(a.onStart && a.onStart.bind(a))
            },
            addPersistRootNode: function(t) {
                if (cc.Node.isNode(t) && t.uuid) {
                    var e = t.uuid;
                    if (!this._persistRootNodes[e]) {
                        var i = cc.director._scene;
                        if (cc.isValid(i))
                            if (t.parent) {
                                if (!(t.parent instanceof cc.Scene))
                                    return void cc.warnID(3801);
                                if (t.parent !== i)
                                    return void cc.warnID(3802)
                            } else
                                t.parent = i;
                        this._persistRootNodes[e] = t,
                        t._persistNode = !0,
                        cc.assetManager._releaseManager._addPersistNodeRef(t)
                    }
                } else
                    cc.warnID(3800)
            },
            removePersistRootNode: function(t) {
                var e = t.uuid || "";
                t === this._persistRootNodes[e] && (delete this._persistRootNodes[e],
                t._persistNode = !1,
                cc.assetManager._releaseManager._removePersistNodeRef(t))
            },
            isPersistRootNode: function(t) {
                return t._persistNode
            },
            _setAnimFrame: function() {
                this._lastTime = performance.now();
                var t = a.config.frameRate;
                this._frameTime = 1e3 / t,
                cc.director._maxParticleDeltaTime = this._frameTime / 1e3 * 2;
                var e = window.requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame;
                60 !== t && 30 !== t ? (window.requestAnimFrame = e ? this._stTimeWithRAF : this._stTime,
                window.cancelAnimFrame = this._ctTime) : (window.requestAnimFrame = e || this._stTime,
                window.cancelAnimFrame = window.cancelAnimationFrame || window.cancelRequestAnimationFrame || window.msCancelRequestAnimationFrame || window.mozCancelRequestAnimationFrame || window.oCancelRequestAnimationFrame || window.webkitCancelRequestAnimationFrame || window.msCancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.oCancelAnimationFrame || this._ctTime)
            },
            _stTimeWithRAF: function(t) {
                var e = performance.now()
                  , i = Math.max(0, a._frameTime - (e - a._lastTime))
                  , n = window.setTimeout((function() {
                    window.requestAnimationFrame(t)
                }
                ), i);
                return a._lastTime = e + i,
                n
            },
            _stTime: function(t) {
                var e = performance.now()
                  , i = Math.max(0, a._frameTime - (e - a._lastTime))
                  , n = window.setTimeout((function() {
                    t()
                }
                ), i);
                return a._lastTime = e + i,
                n
            },
            _ctTime: function(t) {
                window.clearTimeout(t)
            },
            _runMainLoop: function() {
                if (this._prepared) {
                    var t, e = this, i = e.config, r = cc.director, s = !0, a = i.frameRate;
                    n.setDisplayStats(i.showFPS),
                    t = function(i) {
                        if (!e._paused) {
                            if (e._intervalId = window.requestAnimFrame(t),
                            30 === a && (s = !s))
                                return;
                            r.mainLoop(i)
                        }
                    }
                    ,
                    e._intervalId = window.requestAnimFrame(t),
                    e._paused = !1
                }
            },
            _initConfig: function(t) {
                "number" != typeof t.debugMode && (t.debugMode = 0),
                t.exposeClassName = !!t.exposeClassName,
                "number" != typeof t.frameRate && (t.frameRate = 60);
                var e = t.renderMode;
                ("number" != typeof e || e > 2 || e < 0) && (t.renderMode = 0),
                "boolean" != typeof t.registerSystemEvent && (t.registerSystemEvent = !0),
                t.showFPS = 1 !== e && !!t.showFPS,
                this.collisionMatrix = t.collisionMatrix || [],
                this.groupList = t.groupList || [],
                n._resetDebugSetting(t.debugMode),
                this.config = t,
                this._configLoaded = !0
            },
            _determineRenderType: function() {
                var t = this.config
                  , e = parseInt(t.renderMode) || 0;
                this.renderType = this.RENDER_TYPE_CANVAS;
                var i = !1;
                if (0 === e ? cc.sys.capabilities.opengl ? (this.renderType = this.RENDER_TYPE_WEBGL,
                i = !0) : cc.sys.capabilities.canvas && (this.renderType = this.RENDER_TYPE_CANVAS,
                i = !0) : 1 === e && cc.sys.capabilities.canvas ? (this.renderType = this.RENDER_TYPE_CANVAS,
                i = !0) : 2 === e && cc.sys.capabilities.opengl && (this.renderType = this.RENDER_TYPE_WEBGL,
                i = !0),
                !i)
                    throw new Error(n.getError(3820, e))
            },
            _initRenderer: function() {
                if (!this._rendererInitialized) {
                    var t, e, i, n, a = this.config.id, o = a instanceof HTMLElement ? a : document.querySelector(a) || document.querySelector("#" + a);
                    if ("CANVAS" === o.tagName ? (t = o.width,
                    e = o.height,
                    this.canvas = i = o,
                    this.container = n = document.createElement("DIV"),
                    i.parentNode && i.parentNode.insertBefore(n, i)) : ("DIV" !== o.tagName && cc.warnID(3819),
                    t = o.clientWidth,
                    e = o.clientHeight,
                    this.canvas = i = document.createElement("CANVAS"),
                    this.container = n = document.createElement("DIV"),
                    o.appendChild(n)),
                    n.setAttribute("id", "Cocos2dGameContainer"),
                    n.appendChild(i),
                    this.frame = n.parentNode === document.body ? document.documentElement : n.parentNode,
                    (function(t) {
                        (" " + t.className + " ").indexOf(" gameCanvas ") > -1 || (t.className && (t.className += " "),
                        t.className += "gameCanvas")
                    }
                    )(i),
                    i.setAttribute("width", t || 480),
                    i.setAttribute("height", e || 320),
                    i.setAttribute("tabindex", 99),
                    this._determineRenderType(),
                    this.renderType === this.RENDER_TYPE_WEBGL) {
                        var l = {
                            stencil: !0,
                            antialias: cc.macro.ENABLE_WEBGL_ANTIALIAS,
                            alpha: cc.macro.ENABLE_TRANSPARENT_CANVAS
                        };
                        r.initWebGL(i, l),
                        this._renderContext = r.device._gl,
                        !cc.macro.CLEANUP_IMAGE_CACHE && s && (s.enabled = !0)
                    }
                    this._renderContext || (this.renderType = this.RENDER_TYPE_CANVAS,
                    r.initCanvas(i),
                    this._renderContext = r.device._ctx),
                    this.canvas.oncontextmenu = function() {
                        if (!cc._isContextMenuEnable)
                            return !1
                    }
                    ,
                    this._rendererInitialized = !0
                }
            },
            _initEvents: function() {
                var t, e = window;
                this.config.registerSystemEvent && cc.internal.inputManager.registerSystemEvent(this.canvas),
                void 0 !== document.hidden ? t = "hidden" : void 0 !== document.mozHidden ? t = "mozHidden" : void 0 !== document.msHidden ? t = "msHidden" : void 0 !== document.webkitHidden && (t = "webkitHidden");
                var i = !1;
                function n() {
                    i || (i = !0,
                    a.emit(a.EVENT_HIDE))
                }
                function r(t, e, n, r, s) {
                    i && (i = !1,
                    a.emit(a.EVENT_SHOW, t, e, n, r, s))
                }
                if (t)
                    for (var s = ["visibilitychange", "mozvisibilitychange", "msvisibilitychange", "webkitvisibilitychange", "qbrowserVisibilityChange"], o = 0; o < s.length; o++)
                        document.addEventListener(s[o], (function(e) {
                            var i = document[t];
                            (i = i || e.hidden) ? n() : r()
                        }
                        ));
                else
                    e.addEventListener("blur", n),
                    e.addEventListener("focus", r);
                navigator.userAgent.indexOf("MicroMessenger") > -1 && (e.onfocus = r),
                "onpageshow"in window && "onpagehide"in window && (e.addEventListener("pagehide", n),
                e.addEventListener("pageshow", r),
                document.addEventListener("pagehide", n),
                document.addEventListener("pageshow", r)),
                this.on(a.EVENT_HIDE, (function() {
                    a.pause()
                }
                )),
                this.on(a.EVENT_SHOW, (function() {
                    a.resume()
                }
                ))
            }
        };
        i.call(a),
        cc.js.addon(a, i.prototype),
        cc.game = e.exports = a
    }
    ), {
        "../audio/CCAudioEngine": 21,
        "../core/renderer/utils/dynamic-atlas/manager": 227,
        "./CCDebug": 26,
        "./event/event-target": 140,
        "./renderer/index.js": 224
    }],
    29: [(function(t, e) {
        "use strict";
        var i = t("./value-types")
          , n = t("./utils/base-node")
          , r = t("./utils/prefab-helper")
          , s = t("./utils/trans-pool").NodeMemPool
          , a = t("./utils/affine-transform")
          , o = t("./event-manager")
          , l = t("./platform/CCMacro")
          , h = t("./platform/js")
          , c = (t("./event/event"),
        t("./event/event-target"))
          , u = t("./renderer/render-flow")
          , _ = cc.Object.Flags.Destroying
          , f = Math.PI / 180
          , d = !!cc.ActionManager
          , p = function() {}
          , m = new i.Vec3
          , y = new i.Quat
          , v = new i.Vec3
          , g = new i.Vec3
          , A = new i.Quat
          , x = new i.Quat
          , b = new i.Vec3
          , C = new i.Vec3
          , T = new i.Vec3
          , S = new i.Vec3
          , w = new i.Vec3
          , E = new i.Quat
          , M = new i.Quat
          , D = new i.Vec3
          , B = new i.Quat
          , I = new i.Vec3
          , P = new i.Quat
          , R = new i.Vec3
          , O = new i.Vec3
          , L = new i.Quat
          , F = new i.Quat
          , V = (new i.Quat,
        cc.mat4())
          , N = new i.Vec3
          , k = new Array(16);
        k.length = 0;
        var G = cc.Enum({
            DEBUG: 31
        })
          , U = cc.Enum({
            POSITION: 1,
            SCALE: 2,
            ROTATION: 4,
            SKEW: 8,
            TRS: 7,
            RS: 6,
            TRSS: 15,
            PHYSICS_POSITION: 16,
            PHYSICS_SCALE: 32,
            PHYSICS_ROTATION: 64,
            PHYSICS_TRS: 112,
            PHYSICS_RS: 96,
            ALL_POSITION: 17,
            ALL_SCALE: 34,
            ALL_ROTATION: 68,
            ALL_TRS: 119,
            ALL: 65535
        })
          , z = cc.Enum({
            TOUCH_START: "touchstart",
            TOUCH_MOVE: "touchmove",
            TOUCH_END: "touchend",
            TOUCH_CANCEL: "touchcancel",
            MOUSE_DOWN: "mousedown",
            MOUSE_MOVE: "mousemove",
            MOUSE_ENTER: "mouseenter",
            MOUSE_LEAVE: "mouseleave",
            MOUSE_UP: "mouseup",
            MOUSE_WHEEL: "mousewheel",
            POSITION_CHANGED: "position-changed",
            ROTATION_CHANGED: "rotation-changed",
            SCALE_CHANGED: "scale-changed",
            SIZE_CHANGED: "size-changed",
            ANCHOR_CHANGED: "anchor-changed",
            COLOR_CHANGED: "color-changed",
            CHILD_ADDED: "child-added",
            CHILD_REMOVED: "child-removed",
            CHILD_REORDER: "child-reorder",
            GROUP_CHANGED: "group-changed",
            SIBLING_ORDER_CHANGED: "sibling-order-changed"
        })
          , H = [z.TOUCH_START, z.TOUCH_MOVE, z.TOUCH_END, z.TOUCH_CANCEL]
          , W = [z.MOUSE_DOWN, z.MOUSE_ENTER, z.MOUSE_MOVE, z.MOUSE_LEAVE, z.MOUSE_UP, z.MOUSE_WHEEL]
          , j = !0
          , X = function(t) {
            if (0 !== t) {
                j && cc.warn("`cc.Node.skewX/Y` is deprecated since v2.2.1, please use 3D node instead.", ""),
                j = !1
            }
        }
          , Y = null
          , q = function(t, e) {
            var i = t.getLocation()
              , n = this.owner;
            return !!n._hitTest(i, this) && (e.type = z.TOUCH_START,
            e.touch = t,
            e.bubbles = !0,
            n.dispatchEvent(e),
            !0)
        }
          , J = function(t, e) {
            var i = this.owner;
            e.type = z.TOUCH_MOVE,
            e.touch = t,
            e.bubbles = !0,
            i.dispatchEvent(e)
        }
          , Z = function(t, e) {
            var i = t.getLocation()
              , n = this.owner;
            n._hitTest(i, this) ? e.type = z.TOUCH_END : e.type = z.TOUCH_CANCEL,
            e.touch = t,
            e.bubbles = !0,
            n.dispatchEvent(e)
        }
          , K = function(t, e) {
            t.getLocation();
            var i = this.owner;
            e.type = z.TOUCH_CANCEL,
            e.touch = t,
            e.bubbles = !0,
            i.dispatchEvent(e)
        }
          , Q = function(t) {
            var e = t.getLocation()
              , i = this.owner;
            i._hitTest(e, this) && (t.type = z.MOUSE_DOWN,
            t.bubbles = !0,
            i.dispatchEvent(t))
        }
          , $ = function(t) {
            var e = t.getLocation()
              , i = this.owner;
            if (i._hitTest(e, this))
                this._previousIn || (Y && Y._mouseListener && (t.type = z.MOUSE_LEAVE,
                Y.dispatchEvent(t),
                Y._mouseListener._previousIn = !1),
                Y = this.owner,
                t.type = z.MOUSE_ENTER,
                i.dispatchEvent(t),
                this._previousIn = !0),
                t.type = z.MOUSE_MOVE,
                t.bubbles = !0,
                i.dispatchEvent(t);
            else {
                if (!this._previousIn)
                    return;
                t.type = z.MOUSE_LEAVE,
                i.dispatchEvent(t),
                this._previousIn = !1,
                Y = null
            }
            t.stopPropagation()
        }
          , tt = function(t) {
            var e = t.getLocation()
              , i = this.owner;
            i._hitTest(e, this) && (t.type = z.MOUSE_UP,
            t.bubbles = !0,
            i.dispatchEvent(t),
            t.stopPropagation())
        }
          , et = function(t) {
            var e = t.getLocation()
              , i = this.owner;
            i._hitTest(e, this) && (t.type = z.MOUSE_WHEEL,
            t.bubbles = !0,
            i.dispatchEvent(t),
            t.stopPropagation())
        };
        function it(t, e) {
            if (e) {
                for (var i = 0, n = null, r = t; r && cc.Node.isNode(r); r = r._parent,
                ++i)
                    if (r.getComponent(e)) {
                        var s = {
                            index: i,
                            node: r
                        };
                        n ? n.push(s) : n = [s]
                    }
                return n
            }
            return null
        }
        function nt(t, e) {
            if (!(t._objFlags & _)) {
                if (t._bubblingListeners)
                    for (var i = 0, n = e.length; i < n; ++i)
                        if (t._bubblingListeners.hasEventListener(e[i]))
                            return !0;
                if (t._capturingListeners)
                    for (var r = 0, s = e.length; r < s; ++r)
                        if (t._capturingListeners.hasEventListener(e[r]))
                            return !0;
                return !1
            }
            return !0
        }
        function rt(t, e) {
            var i, n;
            for (e.target = t,
            k.length = 0,
            t._getCapturingTargets(e.type, k),
            e.eventPhase = 1,
            n = k.length - 1; n >= 0; --n)
                if ((i = k[n])._capturingListeners && (e.currentTarget = i,
                i._capturingListeners.emit(e.type, e, k),
                e._propagationStopped))
                    return void (k.length = 0);
            if (k.length = 0,
            e.eventPhase = 2,
            e.currentTarget = t,
            t._capturingListeners && t._capturingListeners.emit(e.type, e),
            !e._propagationImmediateStopped && t._bubblingListeners && t._bubblingListeners.emit(e.type, e),
            !e._propagationStopped && e.bubbles)
                for (t._getBubblingTargets(e.type, k),
                e.eventPhase = 3,
                n = 0; n < k.length; ++n)
                    if ((i = k[n])._bubblingListeners && (e.currentTarget = i,
                    i._bubblingListeners.emit(e.type, e),
                    e._propagationStopped))
                        return void (k.length = 0);
            k.length = 0
        }
        function st(t) {
            var e = t.groupIndex;
            return 0 === e && t.parent && (e = st(t.parent)),
            e
        }
        function at(t) {
            var e = st(t);
            t._cullingMask = 1 << e;
            for (var i = 0; i < t._children.length; i++)
                at(t._children[i])
        }
        function ot() {
            if (this._localMatDirty & U.TRSS) {
                var t = this._matrix
                  , e = t.m;
                if (i.Trs.toMat4(t, this._trs),
                this._skewX || this._skewY) {
                    var n = e[0]
                      , r = e[1]
                      , s = e[4]
                      , a = e[5]
                      , o = Math.tan(this._skewX * f)
                      , l = Math.tan(this._skewY * f);
                    o === 1 / 0 && (o = 99999999),
                    l === 1 / 0 && (l = 99999999),
                    e[0] = n + s * l,
                    e[1] = r + a * l,
                    e[4] = s + n * o,
                    e[5] = a + r * o
                }
                this._localMatDirty &= ~U.TRSS,
                this._worldMatDirty = !0
            }
        }
        function lt() {
            var t = this._localMatDirty;
            if (t & U.TRSS) {
                var e = this._matrix.m
                  , i = this._trs;
                if (t & (U.RS | U.SKEW)) {
                    var n = -this._eulerAngles.z
                      , r = this._skewX || this._skewY
                      , s = i[7]
                      , a = i[8];
                    if (n || r) {
                        var o = 1
                          , l = 0
                          , h = 0
                          , c = 1;
                        if (n) {
                            var u = n * f;
                            h = Math.sin(u),
                            o = c = Math.cos(u),
                            l = -h
                        }
                        if (e[0] = o *= s,
                        e[1] = l *= s,
                        e[4] = h *= a,
                        e[5] = c *= a,
                        r) {
                            var _ = e[0]
                              , d = e[1]
                              , p = e[4]
                              , m = e[5]
                              , y = Math.tan(this._skewX * f)
                              , v = Math.tan(this._skewY * f);
                            y === 1 / 0 && (y = 99999999),
                            v === 1 / 0 && (v = 99999999),
                            e[0] = _ + p * v,
                            e[1] = d + m * v,
                            e[4] = p + _ * y,
                            e[5] = m + d * y
                        }
                    } else
                        e[0] = s,
                        e[1] = 0,
                        e[4] = 0,
                        e[5] = a
                }
                e[12] = i[0],
                e[13] = i[1],
                this._localMatDirty &= ~U.TRSS,
                this._worldMatDirty = !0
            }
        }
        function ht() {
            if (this._localMatDirty & U.TRSS && this._updateLocalMatrix(),
            this._parent) {
                var t = this._parent._worldMatrix;
                i.Mat4.mul(this._worldMatrix, t, this._matrix)
            } else
                i.Mat4.copy(this._worldMatrix, this._matrix);
            this._worldMatDirty = !1
        }
        function ct() {
            this._localMatDirty & U.TRSS && this._updateLocalMatrix();
            var t = this._parent;
            t ? this._mulMat(this._worldMatrix, t._worldMatrix, this._matrix) : i.Mat4.copy(this._worldMatrix, this._matrix),
            this._worldMatDirty = !1
        }
        function ut(t, e, i) {
            var n = e.m
              , r = i.m
              , s = t.m
              , a = n[0]
              , o = n[1]
              , l = n[4]
              , h = n[5]
              , c = n[12]
              , u = n[13]
              , _ = r[0]
              , f = r[1]
              , d = r[4]
              , p = r[5]
              , m = r[12]
              , y = r[13];
            0 !== o || 0 !== l ? (s[0] = _ * a + f * l,
            s[1] = _ * o + f * h,
            s[4] = d * a + p * l,
            s[5] = d * o + p * h,
            s[12] = a * m + l * y + c,
            s[13] = o * m + h * y + u) : (s[0] = _ * a,
            s[1] = f * h,
            s[4] = d * a,
            s[5] = p * h,
            s[12] = a * m + c,
            s[13] = h * y + u)
        }
        var _t = i.Mat4.mul
          , ft = {
            name: "cc.Node",
            extends: n,
            properties: {
                _opacity: 255,
                _color: cc.Color.WHITE,
                _contentSize: cc.Size,
                _anchorPoint: cc.v2(.5, .5),
                _position: void 0,
                _scale: void 0,
                _trs: null,
                _eulerAngles: cc.Vec3,
                _skewX: 0,
                _skewY: 0,
                _zIndex: {
                    default: void 0,
                    type: cc.Integer
                },
                _localZOrder: {
                    default: 0,
                    serializable: !1
                },
                _is3DNode: !1,
                _groupIndex: {
                    default: 0,
                    formerlySerializedAs: "groupIndex"
                },
                groupIndex: {
                    get: function() {
                        return this._groupIndex
                    },
                    set: function(t) {
                        this._groupIndex = t,
                        at(this),
                        this.emit(z.GROUP_CHANGED, this)
                    }
                },
                group: {
                    get: function() {
                        return cc.game.groupList[this.groupIndex] || ""
                    },
                    set: function(t) {
                        this.groupIndex = cc.game.groupList.indexOf(t)
                    }
                },
                x: {
                    get: function() {
                        return this._trs[0]
                    },
                    set: function(t) {
                        var e = this._trs;
                        t !== e[0] && (e[0] = t,
                        this.setLocalDirty(U.ALL_POSITION),
                        1 & this._eventMask && this.emit(z.POSITION_CHANGED))
                    }
                },
                y: {
                    get: function() {
                        return this._trs[1]
                    },
                    set: function(t) {
                        var e = this._trs;
                        t !== e[1] && (e[1] = t,
                        this.setLocalDirty(U.ALL_POSITION),
                        1 & this._eventMask && this.emit(z.POSITION_CHANGED))
                    }
                },
                z: {
                    get: function() {
                        return this._trs[2]
                    },
                    set: function(t) {
                        var e = this._trs;
                        t !== e[2] && (e[2] = t,
                        this.setLocalDirty(U.ALL_POSITION),
                        this._renderFlag |= u.FLAG_WORLD_TRANSFORM,
                        1 & this._eventMask && this.emit(z.POSITION_CHANGED))
                    }
                },
                rotation: {
                    get: function() {
                        return -this.angle
                    },
                    set: function(t) {
                        this.angle = -t
                    }
                },
                angle: {
                    get: function() {
                        return this._eulerAngles.z
                    },
                    set: function(t) {
                        i.Vec3.set(this._eulerAngles, 0, 0, t),
                        i.Trs.fromAngleZ(this._trs, t),
                        this.setLocalDirty(U.ALL_ROTATION),
                        4 & this._eventMask && this.emit(z.ROTATION_CHANGED)
                    }
                },
                rotationX: {
                    get: function() {
                        return this._eulerAngles.x
                    },
                    set: function(t) {
                        this._eulerAngles.x !== t && (this._eulerAngles.x = t,
                        this._eulerAngles.x === this._eulerAngles.y ? i.Trs.fromAngleZ(this._trs, -t) : i.Trs.fromEulerNumber(this._trs, t, this._eulerAngles.y, 0),
                        this.setLocalDirty(U.ALL_ROTATION),
                        4 & this._eventMask && this.emit(z.ROTATION_CHANGED))
                    }
                },
                rotationY: {
                    get: function() {
                        return this._eulerAngles.y
                    },
                    set: function(t) {
                        this._eulerAngles.y !== t && (this._eulerAngles.y = t,
                        this._eulerAngles.x === this._eulerAngles.y ? i.Trs.fromAngleZ(this._trs, -t) : i.Trs.fromEulerNumber(this._trs, this._eulerAngles.x, t, 0),
                        this.setLocalDirty(U.ALL_ROTATION),
                        4 & this._eventMask && this.emit(z.ROTATION_CHANGED))
                    }
                },
                eulerAngles: {
                    get: function() {
                        return i.Trs.toEuler(this._eulerAngles, this._trs)
                    },
                    set: function(t) {
                        i.Trs.fromEuler(this._trs, t),
                        this.setLocalDirty(U.ALL_ROTATION),
                        this._renderFlag |= u.FLAG_TRANSFORM,
                        4 & this._eventMask && this.emit(z.ROTATION_CHANGED)
                    }
                },
                quat: {
                    get: function() {
                        var t = this._trs;
                        return new i.Quat(t[3],t[4],t[5],t[6])
                    },
                    set: function(t) {
                        this.setRotation(t)
                    }
                },
                scale: {
                    get: function() {
                        return this._trs[7]
                    },
                    set: function(t) {
                        this.setScale(t)
                    }
                },
                scaleX: {
                    get: function() {
                        return this._trs[7]
                    },
                    set: function(t) {
                        this._trs[7] !== t && (this._trs[7] = t,
                        this.setLocalDirty(U.ALL_SCALE),
                        2 & this._eventMask && this.emit(z.SCALE_CHANGED))
                    }
                },
                scaleY: {
                    get: function() {
                        return this._trs[8]
                    },
                    set: function(t) {
                        this._trs[8] !== t && (this._trs[8] = t,
                        this.setLocalDirty(U.ALL_SCALE),
                        2 & this._eventMask && this.emit(z.SCALE_CHANGED))
                    }
                },
                scaleZ: {
                    get: function() {
                        return this._trs[9]
                    },
                    set: function(t) {
                        this._trs[9] !== t && (this._trs[9] = t,
                        this.setLocalDirty(U.ALL_SCALE),
                        this._renderFlag |= u.FLAG_TRANSFORM,
                        2 & this._eventMask && this.emit(z.SCALE_CHANGED))
                    }
                },
                skewX: {
                    get: function() {
                        return this._skewX
                    },
                    set: function(t) {
                        X(t),
                        this._skewX = t,
                        this.setLocalDirty(U.SKEW)
                    }
                },
                skewY: {
                    get: function() {
                        return this._skewY
                    },
                    set: function(t) {
                        X(t),
                        this._skewY = t,
                        this.setLocalDirty(U.SKEW)
                    }
                },
                opacity: {
                    get: function() {
                        return this._opacity
                    },
                    set: function(t) {
                        t = cc.misc.clampf(t, 0, 255),
                        this._opacity !== t && (this._opacity = t,
                        this._renderFlag |= u.FLAG_OPACITY_COLOR)
                    },
                    range: [0, 255]
                },
                color: {
                    get: function() {
                        return this._color.clone()
                    },
                    set: function(t) {
                        this._color.equals(t) || (this._color.set(t),
                        this._renderFlag |= u.FLAG_COLOR,
                        32 & this._eventMask && this.emit(z.COLOR_CHANGED, t))
                    }
                },
                anchorX: {
                    get: function() {
                        return this._anchorPoint.x
                    },
                    set: function(t) {
                        var e = this._anchorPoint;
                        e.x !== t && (e.x = t,
                        16 & this._eventMask && this.emit(z.ANCHOR_CHANGED))
                    }
                },
                anchorY: {
                    get: function() {
                        return this._anchorPoint.y
                    },
                    set: function(t) {
                        var e = this._anchorPoint;
                        e.y !== t && (e.y = t,
                        16 & this._eventMask && this.emit(z.ANCHOR_CHANGED))
                    }
                },
                width: {
                    get: function() {
                        return this._contentSize.width
                    },
                    set: function(t) {
                        t !== this._contentSize.width && (this._contentSize.width = t,
                        8 & this._eventMask && this.emit(z.SIZE_CHANGED))
                    }
                },
                height: {
                    get: function() {
                        return this._contentSize.height
                    },
                    set: function(t) {
                        t !== this._contentSize.height && (this._contentSize.height = t,
                        8 & this._eventMask && this.emit(z.SIZE_CHANGED))
                    }
                },
                zIndex: {
                    get: function() {
                        return this._localZOrder >> 16
                    },
                    set: function(t) {
                        t > l.MAX_ZINDEX ? (cc.warnID(1636),
                        t = l.MAX_ZINDEX) : t < l.MIN_ZINDEX && (cc.warnID(1637),
                        t = l.MIN_ZINDEX),
                        this.zIndex !== t && (this._localZOrder = 65535 & this._localZOrder | t << 16,
                        this.emit(z.SIBLING_ORDER_CHANGED),
                        this._onSiblingIndexChanged())
                    }
                },
                is3DNode: {
                    get: function() {
                        return this._is3DNode
                    },
                    set: function(t) {
                        this._is3DNode = t,
                        this._update3DFunction()
                    }
                },
                up: {
                    get: function() {
                        return i.Vec3.transformQuat(I, i.Vec3.UP, this.getWorldRotation(P)).clone()
                    }
                },
                right: {
                    get: function() {
                        return i.Vec3.transformQuat(I, i.Vec3.RIGHT, this.getWorldRotation(P)).clone()
                    }
                },
                forward: {
                    get: function() {
                        return i.Vec3.transformQuat(I, i.Vec3.FORWARD, this.getWorldRotation(P)).clone()
                    }
                }
            },
            ctor: function() {
                this._reorderChildDirty = !1,
                this._widget = null,
                this._renderComponent = null,
                this._capturingListeners = null,
                this._bubblingListeners = null,
                this._touchListener = null,
                this._mouseListener = null,
                this._initDataFromPool(),
                this._eventMask = 0,
                this._cullingMask = 1,
                this._childArrivalOrder = 1,
                this._renderFlag = u.FLAG_TRANSFORM | u.FLAG_OPACITY_COLOR
            },
            statics: {
                EventType: z,
                _LocalDirtyFlag: U,
                isNode: function(t) {
                    return t instanceof dt && (t.constructor === dt || !(t instanceof cc.Scene))
                },
                BuiltinGroupIndex: G
            },
            _onSiblingIndexChanged: function() {
                this._parent && this._parent._delaySort()
            },
            _onPreDestroy: function() {
                this._onPreDestroyBase(),
                d && cc.director.getActionManager().removeAllActionsFromTarget(this),
                Y === this && (Y = null),
                this._bubblingListeners && this._bubblingListeners.clear(),
                this._capturingListeners && this._capturingListeners.clear(),
                (this._touchListener || this._mouseListener) && (o.removeListeners(this),
                this._touchListener && (this._touchListener.owner = null,
                this._touchListener.mask = null,
                this._touchListener = null),
                this._mouseListener && (this._mouseListener.owner = null,
                this._mouseListener.mask = null,
                this._mouseListener = null)),
                this._backDataIntoPool(),
                this._reorderChildDirty && cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this)
            },
            _onPostActivated: function(t) {
                var e = d ? cc.director.getActionManager() : null;
                t ? (this._renderFlag |= u.FLAG_WORLD_TRANSFORM,
                e && e.resumeTarget(this),
                o.resumeTarget(this),
                this._checkListenerMask()) : (e && e.pauseTarget(this),
                o.pauseTarget(this))
            },
            _onHierarchyChanged: function(t) {
                this._updateOrderOfArrival(),
                at(this),
                this._parent && this._parent._delaySort(),
                this._renderFlag |= u.FLAG_WORLD_TRANSFORM,
                this._onHierarchyChangedBase(t),
                cc._widgetManager && (cc._widgetManager._nodesOrderDirty = !0),
                t && this._activeInHierarchy && this._checkListenerMask()
            },
            _update3DFunction: function() {
                this._is3DNode ? (this._updateLocalMatrix = ot,
                this._calculWorldMatrix = ht,
                this._mulMat = _t) : (this._updateLocalMatrix = lt,
                this._calculWorldMatrix = ct,
                this._mulMat = ut),
                this._renderComponent && this._renderComponent._on3DNodeChanged && this._renderComponent._on3DNodeChanged(),
                this._renderFlag |= u.FLAG_TRANSFORM,
                this._localMatDirty = U.ALL
            },
            _initDataFromPool: function() {
                this._spaceInfo || (this._spaceInfo = s.pop());
                var t = this._spaceInfo;
                this._matrix = cc.mat4(t.localMat),
                i.Mat4.identity(this._matrix),
                this._worldMatrix = cc.mat4(t.worldMat),
                i.Mat4.identity(this._worldMatrix),
                this._localMatDirty = U.ALL,
                this._worldMatDirty = !0;
                var e = this._trs = t.trs;
                e[0] = 0,
                e[1] = 0,
                e[2] = 0,
                e[3] = 0,
                e[4] = 0,
                e[5] = 0,
                e[6] = 1,
                e[7] = 1,
                e[8] = 1,
                e[9] = 1
            },
            _backDataIntoPool: function() {
                s.push(this._spaceInfo),
                this._matrix = null,
                this._worldMatrix = null,
                this._trs = null,
                this._spaceInfo = null
            },
            _toEuler: function() {
                if (this.is3DNode)
                    i.Trs.toEuler(this._eulerAngles, this._trs);
                else {
                    var t = Math.asin(this._trs[5]) / f * 2;
                    i.Vec3.set(this._eulerAngles, 0, 0, t)
                }
            },
            _fromEuler: function() {
                this.is3DNode ? i.Trs.fromEuler(this._trs, this._eulerAngles) : i.Trs.fromAngleZ(this._trs, this._eulerAngles.z)
            },
            _initProperties: function() {
                this._is3DNode && this._update3DFunction();
                var t = this._trs;
                if (t) {
                    var e = t;
                    t = this._trs = this._spaceInfo.trs,
                    11 === e.length ? t.set(e.subarray(1)) : t.set(e)
                } else
                    t = this._trs = this._spaceInfo.trs;
                this._fromEuler()
            },
            _onBatchCreated: function(t) {
                this._initProperties(),
                this._cullingMask = 1 << st(this),
                this._activeInHierarchy || (d && cc.director.getActionManager().pauseTarget(this),
                o.pauseTarget(this));
                for (var e = this._children, i = 0, n = e.length; i < n; i++) {
                    var s = e[i];
                    if (!t) {
                        var a = s._prefab;
                        a && a.sync && a.root === s && r.syncWithPrefab(s),
                        s._updateOrderOfArrival()
                    }
                    s._onBatchCreated(t)
                }
                e.length > 0 && (this._renderFlag |= u.FLAG_CHILDREN)
            },
            _checkListenerMask: function() {
                if (this._touchListener) {
                    var t = this._touchListener.mask = it(this, cc.Mask);
                    this._mouseListener && (this._mouseListener.mask = t)
                } else
                    this._mouseListener && (this._mouseListener.mask = it(this, cc.Mask))
            },
            _checknSetupSysEvent: function(t) {
                var e = !1
                  , i = !1;
                return -1 !== H.indexOf(t) ? (this._touchListener || (this._touchListener = cc.EventListener.create({
                    event: cc.EventListener.TOUCH_ONE_BY_ONE,
                    swallowTouches: !0,
                    owner: this,
                    mask: it(this, cc.Mask),
                    onTouchBegan: q,
                    onTouchMoved: J,
                    onTouchEnded: Z,
                    onTouchCancelled: K
                }),
                o.addListener(this._touchListener, this),
                e = !0),
                i = !0) : -1 !== W.indexOf(t) && (this._mouseListener || (this._mouseListener = cc.EventListener.create({
                    event: cc.EventListener.MOUSE,
                    _previousIn: !1,
                    owner: this,
                    mask: it(this, cc.Mask),
                    onMouseDown: Q,
                    onMouseMove: $,
                    onMouseUp: tt,
                    onMouseScroll: et
                }),
                o.addListener(this._mouseListener, this),
                e = !0),
                i = !0),
                e && !this._activeInHierarchy && cc.director.getScheduler().schedule((function() {
                    this._activeInHierarchy || o.pauseTarget(this)
                }
                ), this, 0, 0, 0, !1),
                i
            },
            on: function(t, e, i, n) {
                if (this._checknSetupSysEvent(t))
                    return this._onDispatch(t, e, i, n);
                switch (t) {
                case z.POSITION_CHANGED:
                    this._eventMask |= 1;
                    break;
                case z.SCALE_CHANGED:
                    this._eventMask |= 2;
                    break;
                case z.ROTATION_CHANGED:
                    this._eventMask |= 4;
                    break;
                case z.SIZE_CHANGED:
                    this._eventMask |= 8;
                    break;
                case z.ANCHOR_CHANGED:
                    this._eventMask |= 16;
                    break;
                case z.COLOR_CHANGED:
                    this._eventMask |= 32
                }
                return this._bubblingListeners || (this._bubblingListeners = new c),
                this._bubblingListeners.on(t, e, i)
            },
            once: function(t, e, i, n) {
                var r = this
                  , s = null;
                (s = this._checknSetupSysEvent(t) && n ? this._capturingListeners = this._capturingListeners || new c : this._bubblingListeners = this._bubblingListeners || new c).once(t, e, i),
                s.once(t, (function() {
                    r.off(t, e, i)
                }
                ), void 0)
            },
            _onDispatch: function(t, e, i, n) {
                if ("boolean" == typeof i ? (n = i,
                i = void 0) : n = !!n,
                e) {
                    var r = null;
                    return (r = n ? this._capturingListeners = this._capturingListeners || new c : this._bubblingListeners = this._bubblingListeners || new c).hasEventListener(t, e, i) || (r.on(t, e, i),
                    i && i.__eventTargets && i.__eventTargets.push(this)),
                    e
                }
                cc.errorID(6800)
            },
            off: function(t, e, i, n) {
                var r = -1 !== H.indexOf(t)
                  , s = !r && -1 !== W.indexOf(t);
                if (r || s)
                    this._offDispatch(t, e, i, n),
                    r ? this._touchListener && !nt(this, H) && (o.removeListener(this._touchListener),
                    this._touchListener = null) : s && this._mouseListener && !nt(this, W) && (o.removeListener(this._mouseListener),
                    this._mouseListener = null);
                else if (this._bubblingListeners && (this._bubblingListeners.off(t, e, i),
                !this._bubblingListeners.hasEventListener(t)))
                    switch (t) {
                    case z.POSITION_CHANGED:
                        this._eventMask &= -2;
                        break;
                    case z.SCALE_CHANGED:
                        this._eventMask &= -3;
                        break;
                    case z.ROTATION_CHANGED:
                        this._eventMask &= -5;
                        break;
                    case z.SIZE_CHANGED:
                        this._eventMask &= -9;
                        break;
                    case z.ANCHOR_CHANGED:
                        this._eventMask &= -17;
                        break;
                    case z.COLOR_CHANGED:
                        this._eventMask &= -33
                    }
            },
            _offDispatch: function(t, e, i, n) {
                if ("boolean" == typeof i ? (n = i,
                i = void 0) : n = !!n,
                e) {
                    var r = n ? this._capturingListeners : this._bubblingListeners;
                    r && (r.off(t, e, i),
                    i && i.__eventTargets && h.array.fastRemove(i.__eventTargets, this))
                } else
                    this._capturingListeners && this._capturingListeners.removeAll(t),
                    this._bubblingListeners && this._bubblingListeners.removeAll(t)
            },
            targetOff: function(t) {
                var e = this._bubblingListeners;
                e && (e.targetOff(t),
                1 & this._eventMask && !e.hasEventListener(z.POSITION_CHANGED) && (this._eventMask &= -2),
                2 & this._eventMask && !e.hasEventListener(z.SCALE_CHANGED) && (this._eventMask &= -3),
                4 & this._eventMask && !e.hasEventListener(z.ROTATION_CHANGED) && (this._eventMask &= -5),
                8 & this._eventMask && !e.hasEventListener(z.SIZE_CHANGED) && (this._eventMask &= -9),
                16 & this._eventMask && !e.hasEventListener(z.ANCHOR_CHANGED) && (this._eventMask &= -17),
                32 & this._eventMask && !e.hasEventListener(z.COLOR_CHANGED) && (this._eventMask &= -33)),
                this._capturingListeners && this._capturingListeners.targetOff(t),
                t && t.__eventTargets && h.array.fastRemove(t.__eventTargets, this),
                this._touchListener && !nt(this, H) && (o.removeListener(this._touchListener),
                this._touchListener = null),
                this._mouseListener && !nt(this, W) && (o.removeListener(this._mouseListener),
                this._mouseListener = null)
            },
            hasEventListener: function(t) {
                var e = !1;
                return this._bubblingListeners && (e = this._bubblingListeners.hasEventListener(t)),
                !e && this._capturingListeners && (e = this._capturingListeners.hasEventListener(t)),
                e
            },
            emit: function(t, e, i, n, r, s) {
                this._bubblingListeners && this._bubblingListeners.emit(t, e, i, n, r, s)
            },
            dispatchEvent: function(t) {
                rt(this, t),
                k.length = 0
            },
            pauseSystemEvents: function(t) {
                o.pauseTarget(this, t)
            },
            resumeSystemEvents: function(t) {
                o.resumeTarget(this, t)
            },
            _hitTest: function(t, e) {
                var n = this._contentSize.width
                  , r = this._contentSize.height
                  , s = R
                  , a = O
                  , o = cc.Camera.findCamera(this);
                if (o ? o.getScreenToWorldPoint(t, s) : s.set(t),
                this._updateWorldMatrix(),
                !i.Mat4.invert(V, this._worldMatrix))
                    return !1;
                i.Vec2.transformMat4(a, s, V),
                a.x += this._anchorPoint.x * n,
                a.y += this._anchorPoint.y * r;
                var l = !1;
                if (a.x >= 0 && a.y >= 0 && a.x <= n && a.y <= r && (l = !0,
                e && e.mask))
                    for (var h = e.mask, c = this, u = h ? h.length : 0, _ = 0, f = 0; c && f < u; ++_,
                    c = c.parent) {
                        var d = h[f];
                        if (_ === d.index) {
                            if (c !== d.node) {
                                h.length = f;
                                break
                            }
                            var p = c.getComponent(cc.Mask);
                            if (p && p._enabled && !p._hitTest(s)) {
                                l = !1;
                                break
                            }
                            f++
                        } else if (_ > d.index) {
                            h.length = f;
                            break
                        }
                    }
                return l
            },
            _getCapturingTargets: function(t, e) {
                for (var i = this.parent; i; )
                    i._capturingListeners && i._capturingListeners.hasEventListener(t) && e.push(i),
                    i = i.parent
            },
            _getBubblingTargets: function(t, e) {
                for (var i = this.parent; i; )
                    i._bubblingListeners && i._bubblingListeners.hasEventListener(t) && e.push(i),
                    i = i.parent
            },
            runAction: d ? function(t) {
                if (this.active) {
                    cc.assertID(t, 1618);
                    var e = cc.director.getActionManager();
                    return e._suppressDeprecation || (e._suppressDeprecation = !0,
                    cc.warnID(1639)),
                    e.addAction(t, this, !1),
                    t
                }
            }
            : p,
            pauseAllActions: d ? function() {
                cc.director.getActionManager().pauseTarget(this)
            }
            : p,
            resumeAllActions: d ? function() {
                cc.director.getActionManager().resumeTarget(this)
            }
            : p,
            stopAllActions: d ? function() {
                cc.director.getActionManager().removeAllActionsFromTarget(this)
            }
            : p,
            stopAction: d ? function(t) {
                cc.director.getActionManager().removeAction(t)
            }
            : p,
            stopActionByTag: d ? function(t) {
                t !== cc.Action.TAG_INVALID ? cc.director.getActionManager().removeActionByTag(t, this) : cc.logID(1612)
            }
            : p,
            getActionByTag: d ? function(t) {
                return t === cc.Action.TAG_INVALID ? (cc.logID(1613),
                null) : cc.director.getActionManager().getActionByTag(t, this)
            }
            : function() {
                return null
            }
            ,
            getNumberOfRunningActions: d ? function() {
                return cc.director.getActionManager().getNumberOfRunningActionsInTarget(this)
            }
            : function() {
                return 0
            }
            ,
            getPosition: function(t) {
                return t = t || new i.Vec3,
                i.Trs.toPosition(t, this._trs)
            },
            setPosition: function(t, e, i) {
                var n;
                void 0 === e ? (n = t.x,
                e = t.y,
                i = t.z) : n = t;
                var r = this._trs;
                void 0 === i && (i = r[2]),
                (r[0] !== n || r[1] !== e || r[2] !== i) && (r[0] = n,
                r[1] = e,
                r[2] = i,
                this.setLocalDirty(U.ALL_POSITION),
                this._renderFlag |= u.FLAG_WORLD_TRANSFORM,
                1 & this._eventMask && this.emit(z.POSITION_CHANGED))
            },
            getScale: function(t) {
                return void 0 !== t ? i.Trs.toScale(t, this._trs) : (cc.errorID(1400, "cc.Node.getScale", "cc.Node.scale or cc.Node.getScale(cc.Vec3)"),
                this._trs[7])
            },
            setScale: function(t, e, i) {
                var n;
                t && "number" != typeof t ? (n = t.x,
                e = t.y,
                i = t.z) : void 0 !== t && void 0 === e ? (n = t,
                e = t,
                i = t) : n = t;
                var r = this._trs;
                void 0 === i && (i = r[9]),
                r[7] === n && r[8] === e && r[9] === i || (r[7] = n,
                r[8] = e,
                r[9] = i,
                this.setLocalDirty(U.ALL_SCALE),
                this._renderFlag |= u.FLAG_TRANSFORM,
                2 & this._eventMask && this.emit(z.SCALE_CHANGED))
            },
            getRotation: function(t) {
                return t instanceof i.Quat ? i.Trs.toRotation(t, this._trs) : -this.angle
            },
            setRotation: function(t, e, i, n) {
                if ("number" == typeof t && void 0 === e)
                    this.angle = -t;
                else {
                    var r = t;
                    void 0 === e && (r = t.x,
                    e = t.y,
                    i = t.z,
                    n = t.w);
                    var s = this._trs;
                    s[3] === r && s[4] === e && s[5] === i && s[6] === n || (s[3] = r,
                    s[4] = e,
                    s[5] = i,
                    s[6] = n,
                    this.setLocalDirty(U.ALL_ROTATION),
                    4 & this._eventMask && this.emit(z.ROTATION_CHANGED))
                }
            },
            getContentSize: function() {
                return cc.size(this._contentSize.width, this._contentSize.height)
            },
            setContentSize: function(t, e) {
                var i = this._contentSize;
                if (void 0 === e) {
                    if (t.width === i.width && t.height === i.height)
                        return;
                    i.width = t.width,
                    i.height = t.height
                } else {
                    if (t === i.width && e === i.height)
                        return;
                    i.width = t,
                    i.height = e
                }
                8 & this._eventMask && this.emit(z.SIZE_CHANGED)
            },
            getAnchorPoint: function() {
                return cc.v2(this._anchorPoint)
            },
            setAnchorPoint: function(t, e) {
                var i = this._anchorPoint;
                if (void 0 === e) {
                    if (t.x === i.x && t.y === i.y)
                        return;
                    i.x = t.x,
                    i.y = t.y
                } else {
                    if (t === i.x && e === i.y)
                        return;
                    i.x = t,
                    i.y = e
                }
                this.setLocalDirty(U.ALL_POSITION),
                16 & this._eventMask && this.emit(z.ANCHOR_CHANGED)
            },
            _invTransformPoint: function(t, e) {
                this._parent ? this._parent._invTransformPoint(t, e) : i.Vec3.copy(t, e);
                var n = this._trs;
                return i.Trs.toPosition(v, n),
                i.Vec3.sub(t, t, v),
                i.Trs.toRotation(A, n),
                i.Quat.conjugate(x, A),
                i.Vec3.transformQuat(t, t, x),
                i.Trs.toScale(v, n),
                i.Vec3.inverseSafe(g, v),
                i.Vec3.mul(t, t, g),
                t
            },
            getWorldPosition: function(t) {
                i.Trs.toPosition(t, this._trs);
                for (var e, n = this._parent; n; )
                    e = n._trs,
                    i.Trs.toScale(m, e),
                    i.Vec3.mul(t, t, m),
                    i.Trs.toRotation(y, e),
                    i.Vec3.transformQuat(t, t, y),
                    i.Trs.toPosition(m, e),
                    i.Vec3.add(t, t, m),
                    n = n._parent;
                return t
            },
            setWorldPosition: function(t) {
                var e = this._trs;
                this._parent ? this._parent._invTransformPoint(b, t) : i.Vec3.copy(b, t),
                i.Trs.fromPosition(e, b),
                this.setLocalDirty(U.ALL_POSITION),
                1 & this._eventMask && this.emit(z.POSITION_CHANGED)
            },
            getWorldRotation: function(t) {
                i.Trs.toRotation(L, this._trs),
                i.Quat.copy(t, L);
                for (var e = this._parent; e; )
                    i.Trs.toRotation(L, e._trs),
                    i.Quat.mul(t, L, t),
                    e = e._parent;
                return t
            },
            setWorldRotation: function(t) {
                this._parent ? (this._parent.getWorldRotation(F),
                i.Quat.conjugate(F, F),
                i.Quat.mul(F, F, t)) : i.Quat.copy(F, t),
                i.Trs.fromRotation(this._trs, F),
                this.setLocalDirty(U.ALL_ROTATION)
            },
            getWorldScale: function(t) {
                i.Trs.toScale(C, this._trs),
                i.Vec3.copy(t, C);
                for (var e = this._parent; e; )
                    i.Trs.toScale(C, e._trs),
                    i.Vec3.mul(t, t, C),
                    e = e._parent;
                return t
            },
            setWorldScale: function(t) {
                this._parent ? (this._parent.getWorldScale(T),
                i.Vec3.div(T, t, T)) : i.Vec3.copy(T, t),
                i.Trs.fromScale(this._trs, T),
                this.setLocalDirty(U.ALL_SCALE)
            },
            getWorldRT: function(t) {
                var e = S
                  , n = E
                  , r = this._trs;
                i.Trs.toPosition(e, r),
                i.Trs.toRotation(n, r);
                for (var s = this._parent; s; )
                    r = s._trs,
                    i.Trs.toScale(w, r),
                    i.Vec3.mul(e, e, w),
                    i.Trs.toRotation(M, r),
                    i.Vec3.transformQuat(e, e, M),
                    i.Trs.toPosition(w, r),
                    i.Vec3.add(e, e, w),
                    i.Quat.mul(n, M, n),
                    s = s._parent;
                return i.Mat4.fromRT(t, n, e),
                t
            },
            lookAt: function(t, e) {
                this.getWorldPosition(D),
                i.Vec3.sub(D, D, t),
                i.Vec3.normalize(D, D),
                i.Quat.fromViewUp(B, D, e),
                this.setWorldRotation(B)
            },
            _updateLocalMatrix: lt,
            _calculWorldMatrix: function() {
                this._localMatDirty & U.TRSS && this._updateLocalMatrix();
                var t = this._parent;
                t ? this._mulMat(this._worldMatrix, t._worldMatrix, this._matrix) : i.Mat4.copy(this._worldMatrix, this._matrix),
                this._worldMatDirty = !1
            },
            _mulMat: ut,
            _updateWorldMatrix: function() {
                if (this._parent && this._parent._updateWorldMatrix(),
                this._worldMatDirty) {
                    this._calculWorldMatrix();
                    for (var t = this._children, e = 0, i = t.length; e < i; e++)
                        t[e]._worldMatDirty = !0
                }
            },
            setLocalDirty: function(t) {
                this._localMatDirty |= t,
                this._worldMatDirty = !0,
                t === U.ALL_POSITION || t === U.POSITION ? this._renderFlag |= u.FLAG_WORLD_TRANSFORM : this._renderFlag |= u.FLAG_TRANSFORM
            },
            setWorldDirty: function() {
                this._worldMatDirty = !0
            },
            getLocalMatrix: function(t) {
                return this._updateLocalMatrix(),
                i.Mat4.copy(t, this._matrix)
            },
            getWorldMatrix: function(t) {
                return this._updateWorldMatrix(),
                i.Mat4.copy(t, this._worldMatrix)
            },
            convertToNodeSpaceAR: function(t, e) {
                return this._updateWorldMatrix(),
                i.Mat4.invert(V, this._worldMatrix),
                t instanceof cc.Vec2 ? (e = e || new cc.Vec2,
                i.Vec2.transformMat4(e, t, V)) : (e = e || new cc.Vec3,
                i.Vec3.transformMat4(e, t, V))
            },
            convertToWorldSpaceAR: function(t, e) {
                return this._updateWorldMatrix(),
                t instanceof cc.Vec2 ? (e = e || new cc.Vec2,
                i.Vec2.transformMat4(e, t, this._worldMatrix)) : (e = e || new cc.Vec3,
                i.Vec3.transformMat4(e, t, this._worldMatrix))
            },
            convertToNodeSpace: function(t) {
                this._updateWorldMatrix(),
                i.Mat4.invert(V, this._worldMatrix);
                var e = new cc.Vec2;
                return i.Vec2.transformMat4(e, t, V),
                e.x += this._anchorPoint.x * this._contentSize.width,
                e.y += this._anchorPoint.y * this._contentSize.height,
                e
            },
            convertToWorldSpace: function(t) {
                this._updateWorldMatrix();
                var e = new cc.Vec2(t.x - this._anchorPoint.x * this._contentSize.width,t.y - this._anchorPoint.y * this._contentSize.height);
                return i.Vec2.transformMat4(e, e, this._worldMatrix)
            },
            getNodeToParentTransform: function(t) {
                t || (t = a.identity()),
                this._updateLocalMatrix();
                var e = this._contentSize;
                return N.x = -this._anchorPoint.x * e.width,
                N.y = -this._anchorPoint.y * e.height,
                i.Mat4.copy(V, this._matrix),
                i.Mat4.transform(V, V, N),
                a.fromMat4(t, V)
            },
            getNodeToParentTransformAR: function(t) {
                return t || (t = a.identity()),
                this._updateLocalMatrix(),
                a.fromMat4(t, this._matrix)
            },
            getNodeToWorldTransform: function(t) {
                t || (t = a.identity()),
                this._updateWorldMatrix();
                var e = this._contentSize;
                return N.x = -this._anchorPoint.x * e.width,
                N.y = -this._anchorPoint.y * e.height,
                i.Mat4.copy(V, this._worldMatrix),
                i.Mat4.transform(V, V, N),
                a.fromMat4(t, V)
            },
            getNodeToWorldTransformAR: function(t) {
                return t || (t = a.identity()),
                this._updateWorldMatrix(),
                a.fromMat4(t, this._worldMatrix)
            },
            getParentToNodeTransform: function(t) {
                return t || (t = a.identity()),
                this._updateLocalMatrix(),
                i.Mat4.invert(V, this._matrix),
                a.fromMat4(t, V)
            },
            getWorldToNodeTransform: function(t) {
                return t || (t = a.identity()),
                this._updateWorldMatrix(),
                i.Mat4.invert(V, this._worldMatrix),
                a.fromMat4(t, V)
            },
            convertTouchToNodeSpace: function(t) {
                return this.convertToNodeSpace(t.getLocation())
            },
            convertTouchToNodeSpaceAR: function(t) {
                return this.convertToNodeSpaceAR(t.getLocation())
            },
            getBoundingBox: function() {
                this._updateLocalMatrix();
                var t = this._contentSize.width
                  , e = this._contentSize.height
                  , i = cc.rect(-this._anchorPoint.x * t, -this._anchorPoint.y * e, t, e);
                return i.transformMat4(i, this._matrix)
            },
            getBoundingBoxToWorld: function() {
                return this._parent ? (this._parent._updateWorldMatrix(),
                this._getBoundingBoxTo()) : this.getBoundingBox()
            },
            _getBoundingBoxTo: function() {
                var t = this._contentSize.width
                  , e = this._contentSize.height
                  , i = cc.rect(-this._anchorPoint.x * t, -this._anchorPoint.y * e, t, e);
                if (this._calculWorldMatrix(),
                i.transformMat4(i, this._worldMatrix),
                !this._children)
                    return i;
                for (var n = this._children, r = 0; r < n.length; r++) {
                    var s = n[r];
                    if (s && s.active) {
                        var a = s._getBoundingBoxTo();
                        a && i.union(i, a)
                    }
                }
                return i
            },
            _updateOrderOfArrival: function() {
                var t = this._parent ? ++this._parent._childArrivalOrder : 0;
                this._localZOrder = 4294901760 & this._localZOrder | t,
                this.emit(z.SIBLING_ORDER_CHANGED)
            },
            addChild: function(t, e, i) {
                cc.assertID(t, 1606),
                cc.assertID(null === t._parent, 1605),
                t.parent = this,
                void 0 !== e && (t.zIndex = e),
                void 0 !== i && (t.name = i)
            },
            cleanup: function() {
                d && cc.director.getActionManager().removeAllActionsFromTarget(this),
                o.removeListeners(this);
                var t, e, i = this._children.length;
                for (t = 0; t < i; ++t)
                    (e = this._children[t]) && e.cleanup()
            },
            sortAllChildren: function() {
                if (this._reorderChildDirty) {
                    this._reorderChildDirty = !1;
                    var t = this._children;
                    this._childArrivalOrder = 1;
                    for (var e = 0, i = t.length; e < i; e++)
                        t[e]._updateOrderOfArrival();
                    if (o._setDirtyForNode(this),
                    t.length > 1) {
                        for (var n, r, s = 1, a = t.length; s < a; s++) {
                            n = t[s];
                            for (var l = s; l > 0 && (r = t[l - 1])._localZOrder > n._localZOrder; l--)
                                t[l] = r;
                            t[l] = n
                        }
                        this.emit(z.CHILD_REORDER, this)
                    }
                    cc.director.__fastOff(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this)
                }
            },
            _delaySort: function() {
                this._reorderChildDirty || (this._reorderChildDirty = !0,
                cc.director.__fastOn(cc.Director.EVENT_AFTER_UPDATE, this.sortAllChildren, this))
            },
            _restoreProperties: !1,
            onRestore: !1
        }
          , dt = cc.Class(ft)
          , pt = dt.prototype;
        h.getset(pt, "position", pt.getPosition, pt.setPosition, !1, !0),
        cc.Node = e.exports = dt
    }
    ), {
        "./event-manager": 138,
        "./event/event": 141,
        "./event/event-target": 140,
        "./platform/CCMacro": 198,
        "./platform/js": 214,
        "./renderer/render-flow": 225,
        "./utils/affine-transform": 258,
        "./utils/base-node": 259,
        "./utils/prefab-helper": 270,
        "./utils/trans-pool": 276,
        "./value-types": 282
    }],
    30: [(function(t, e) {
        "use strict";
        var i = t("./CCNode")
          , n = t("./renderer/render-flow")
          , r = (cc.Object.Flags.HideInHierarchy,
        i._LocalDirtyFlag)
          , s = cc.Class({
            name: "cc.PrivateNode",
            extends: i,
            properties: {
                x: {
                    get: function() {
                        return this._originPos.x
                    },
                    set: function(t) {
                        var e = this._originPos;
                        t !== e.x && (e.x = t,
                        this._posDirty(!0))
                    },
                    override: !0
                },
                y: {
                    get: function() {
                        return this._originPos.y
                    },
                    set: function(t) {
                        var e = this._originPos;
                        t !== e.y && (e.y = t,
                        this._posDirty(!0))
                    },
                    override: !0
                },
                zIndex: {
                    get: function() {
                        return cc.macro.MIN_ZINDEX
                    },
                    set: function() {},
                    override: !0
                },
                showInEditor: {
                    default: !1,
                    editorOnly: !0,
                    override: !0
                }
            },
            ctor: function() {
                this._localZOrder = cc.macro.MIN_ZINDEX << 16,
                this._originPos = cc.v2()
            },
            _posDirty: function(t) {
                this.setLocalDirty(r.POSITION),
                this._renderFlag |= n.FLAG_TRANSFORM,
                !0 === t && 1 & this._eventMask && this.emit(i.EventType.POSITION_CHANGED)
            },
            _updateLocalMatrix: function() {
                if (this._localMatDirty) {
                    var t = this.parent;
                    t && (this._trs[0] = this._originPos.x - (t._anchorPoint.x - .5) * t._contentSize.width,
                    this._trs[1] = this._originPos.y - (t._anchorPoint.y - .5) * t._contentSize.height),
                    this._super()
                }
            },
            getPosition: function() {
                return new cc.Vec2(this._originPos)
            },
            setPosition: function(t, e) {
                void 0 === e && (e = (t = t.x).y);
                var i = this._originPos;
                i.x === t && i.y === e || (i.x = t,
                i.y = e,
                this._posDirty(!0))
            },
            setParent: function(t) {
                var e = this._parent;
                this._super(t),
                e !== t && (e && e.off(i.EventType.ANCHOR_CHANGED, this._posDirty, this),
                t && t.on(i.EventType.ANCHOR_CHANGED, this._posDirty, this))
            },
            _updateOrderOfArrival: function() {}
        })
          , a = s.prototype;
        cc.js.getset(a, "parent", a.getParent, a.setParent),
        cc.js.getset(a, "position", a.getPosition, a.setPosition),
        cc.PrivateNode = e.exports = s
    }
    ), {
        "./CCNode": 29,
        "./renderer/render-flow": 225
    }],
    31: [(function(t, e) {
        "use strict";
        cc.Scene = cc.Class({
            name: "cc.Scene",
            extends: t("./CCNode"),
            properties: {
                _is3DNode: {
                    default: !0,
                    override: !0
                },
                autoReleaseAssets: !1
            },
            ctor: function() {
                this._anchorPoint.x = 0,
                this._anchorPoint.y = 0,
                this._activeInHierarchy = !1,
                this._inited = !cc.game._isCloning,
                this.dependAssets = null
            },
            destroy: function() {
                if (cc.Object.prototype.destroy.call(this))
                    for (var t = this._children, e = 0; e < t.length; ++e)
                        t[e].active = !1;
                this._active = !1,
                this._activeInHierarchy = !1
            },
            _onHierarchyChanged: function() {},
            _instantiate: null,
            _load: function() {
                this._inited || (this._onBatchCreated(!1),
                this._inited = !0)
            },
            _activate: function(t) {
                t = !1 !== t,
                cc.director._nodeActivator.activateNode(this, t)
            }
        }),
        e.exports = cc.Scene
    }
    ), {
        "./CCNode": 29
    }],
    32: [(function(t, e) {
        "use strict";
        var i = t("./platform/js")
          , n = new (t("./platform/id-generater"))("Scheduler")
          , r = function(t, e, i, n) {
            this.target = t,
            this.priority = e,
            this.paused = i,
            this.markedForDeletion = n
        }
          , s = [];
        r.get = function(t, e, i, n) {
            var a = s.pop();
            return a ? (a.target = t,
            a.priority = e,
            a.paused = i,
            a.markedForDeletion = n) : a = new r(t,e,i,n),
            a
        }
        ,
        r.put = function(t) {
            s.length < 20 && (t.target = null,
            s.push(t))
        }
        ;
        var a = function(t, e, i, n) {
            this.list = t,
            this.entry = e,
            this.target = i,
            this.callback = n
        }
          , o = [];
        a.get = function(t, e, i, n) {
            var r = o.pop();
            return r ? (r.list = t,
            r.entry = e,
            r.target = i,
            r.callback = n) : r = new a(t,e,i,n),
            r
        }
        ,
        a.put = function(t) {
            o.length < 20 && (t.list = t.entry = t.target = t.callback = null,
            o.push(t))
        }
        ;
        var l = function(t, e, i, n, r, s) {
            var a = this;
            a.timers = t,
            a.target = e,
            a.timerIndex = i,
            a.currentTimer = n,
            a.currentTimerSalvaged = r,
            a.paused = s
        }
          , h = [];
        function c() {
            this._lock = !1,
            this._scheduler = null,
            this._elapsed = -1,
            this._runForever = !1,
            this._useDelay = !1,
            this._timesExecuted = 0,
            this._repeat = 0,
            this._delay = 0,
            this._interval = 0,
            this._target = null,
            this._callback = null
        }
        l.get = function(t, e, i, n, r, s) {
            var a = h.pop();
            return a ? (a.timers = t,
            a.target = e,
            a.timerIndex = i,
            a.currentTimer = n,
            a.currentTimerSalvaged = r,
            a.paused = s) : a = new l(t,e,i,n,r,s),
            a
        }
        ,
        l.put = function(t) {
            h.length < 20 && (t.timers = t.target = t.currentTimer = null,
            h.push(t))
        }
        ;
        var u = c.prototype;
        u.initWithCallback = function(t, e, i, n, r, s) {
            return this._lock = !1,
            this._scheduler = t,
            this._target = i,
            this._callback = e,
            this._elapsed = -1,
            this._interval = n,
            this._delay = s,
            this._useDelay = this._delay > 0,
            this._repeat = r,
            this._runForever = this._repeat === cc.macro.REPEAT_FOREVER,
            !0
        }
        ,
        u.getInterval = function() {
            return this._interval
        }
        ,
        u.setInterval = function(t) {
            this._interval = t
        }
        ,
        u.update = function(t) {
            -1 === this._elapsed ? (this._elapsed = 0,
            this._timesExecuted = 0) : (this._elapsed += t,
            this._runForever && !this._useDelay ? this._elapsed >= this._interval && (this.trigger(),
            this._elapsed = 0) : (this._useDelay ? this._elapsed >= this._delay && (this.trigger(),
            this._elapsed -= this._delay,
            this._timesExecuted += 1,
            this._useDelay = !1) : this._elapsed >= this._interval && (this.trigger(),
            this._elapsed = 0,
            this._timesExecuted += 1),
            this._callback && !this._runForever && this._timesExecuted > this._repeat && this.cancel()))
        }
        ,
        u.getCallback = function() {
            return this._callback
        }
        ,
        u.trigger = function() {
            this._target && this._callback && (this._lock = !0,
            this._callback.call(this._target, this._elapsed),
            this._lock = !1)
        }
        ,
        u.cancel = function() {
            this._scheduler.unschedule(this._callback, this._target)
        }
        ;
        var _ = [];
        c.get = function() {
            return _.pop() || new c
        }
        ,
        c.put = function(t) {
            _.length < 20 && !t._lock && (t._scheduler = t._target = t._callback = null,
            _.push(t))
        }
        ,
        cc.Scheduler = function() {
            this._timeScale = 1,
            this._updatesNegList = [],
            this._updates0List = [],
            this._updatesPosList = [],
            this._hashForUpdates = i.createMap(!0),
            this._hashForTimers = i.createMap(!0),
            this._currentTarget = null,
            this._currentTargetSalvaged = !1,
            this._updateHashLocked = !1,
            this._arrayForTimers = []
        }
        ,
        cc.Scheduler.prototype = {
            constructor: cc.Scheduler,
            _removeHashElement: function(t) {
                delete this._hashForTimers[t.target._id];
                for (var e = this._arrayForTimers, i = 0, n = e.length; i < n; i++)
                    if (e[i] === t) {
                        e.splice(i, 1);
                        break
                    }
                l.put(t)
            },
            _removeUpdateFromHash: function(t) {
                var e = t.target._id
                  , i = this._hashForUpdates[e];
                if (i) {
                    for (var n = i.list, s = i.entry, o = 0, l = n.length; o < l; o++)
                        if (n[o] === s) {
                            n.splice(o, 1);
                            break
                        }
                    delete this._hashForUpdates[e],
                    r.put(s),
                    a.put(i)
                }
            },
            _priorityIn: function(t, e, i) {
                for (var n = 0; n < t.length; n++)
                    if (i < t[n].priority)
                        return void t.splice(n, 0, e);
                t.push(e)
            },
            _appendIn: function(t, e) {
                t.push(e)
            },
            enableForTarget: function(t) {
                t._id || (t.__instanceId ? cc.warnID(1513) : t._id = n.getNewId())
            },
            setTimeScale: function(t) {
                this._timeScale = t
            },
            getTimeScale: function() {
                return this._timeScale
            },
            update: function(t) {
                var e, i, n, r;
                for (this._updateHashLocked = !0,
                1 !== this._timeScale && (t *= this._timeScale),
                e = 0,
                n = (i = this._updatesNegList).length; e < n; e++)
                    (r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                for (e = 0,
                n = (i = this._updates0List).length; e < n; e++)
                    (r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                for (e = 0,
                n = (i = this._updatesPosList).length; e < n; e++)
                    (r = i[e]).paused || r.markedForDeletion || r.target.update(t);
                var s, a = this._arrayForTimers;
                for (e = 0; e < a.length; e++) {
                    if (s = a[e],
                    this._currentTarget = s,
                    this._currentTargetSalvaged = !1,
                    !s.paused)
                        for (s.timerIndex = 0; s.timerIndex < s.timers.length; ++s.timerIndex)
                            s.currentTimer = s.timers[s.timerIndex],
                            s.currentTimerSalvaged = !1,
                            s.currentTimer.update(t),
                            s.currentTimer = null;
                    this._currentTargetSalvaged && 0 === this._currentTarget.timers.length && (this._removeHashElement(this._currentTarget),
                    --e)
                }
                for (e = 0,
                i = this._updatesNegList; e < i.length; )
                    (r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                for (e = 0,
                i = this._updates0List; e < i.length; )
                    (r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                for (e = 0,
                i = this._updatesPosList; e < i.length; )
                    (r = i[e]).markedForDeletion ? this._removeUpdateFromHash(r) : e++;
                this._updateHashLocked = !1,
                this._currentTarget = null
            },
            schedule: function(t, e, i, n, r, s) {
                if ("function" != typeof t) {
                    var a = t;
                    t = e,
                    e = a
                }
                4 !== arguments.length && 5 !== arguments.length || (s = !!n,
                n = cc.macro.REPEAT_FOREVER,
                r = 0),
                cc.assertID(e, 1502);
                var o = e._id;
                o || (e.__instanceId ? (cc.warnID(1513),
                o = e._id = e.__instanceId) : cc.errorID(1510));
                var h, u, _ = this._hashForTimers[o];
                if (_ ? _.paused !== s && cc.warnID(1511) : (_ = l.get(null, e, 0, null, null, s),
                this._arrayForTimers.push(_),
                this._hashForTimers[o] = _),
                null == _.timers)
                    _.timers = [];
                else
                    for (u = 0; u < _.timers.length; ++u)
                        if ((h = _.timers[u]) && t === h._callback)
                            return cc.logID(1507, h.getInterval(), i),
                            void (h._interval = i);
                (h = c.get()).initWithCallback(this, t, e, i, n, r),
                _.timers.push(h),
                this._currentTarget === _ && this._currentTargetSalvaged && (this._currentTargetSalvaged = !1)
            },
            scheduleUpdate: function(t, e, i) {
                var n = t._id;
                n || (t.__instanceId ? (cc.warnID(1513),
                n = t._id = t.__instanceId) : cc.errorID(1510));
                var s = this._hashForUpdates[n];
                if (s && s.entry) {
                    if (s.entry.priority === e)
                        return s.entry.markedForDeletion = !1,
                        void (s.entry.paused = i);
                    if (this._updateHashLocked)
                        return cc.logID(1506),
                        s.entry.markedForDeletion = !1,
                        void (s.entry.paused = i);
                    this.unscheduleUpdate(t)
                }
                var o, l = r.get(t, e, i, !1);
                0 === e ? (o = this._updates0List,
                this._appendIn(o, l)) : (o = e < 0 ? this._updatesNegList : this._updatesPosList,
                this._priorityIn(o, l, e)),
                this._hashForUpdates[n] = a.get(o, l, t, null)
            },
            unschedule: function(t, e) {
                if (e && t) {
                    var i = e._id;
                    i || (e.__instanceId ? (cc.warnID(1513),
                    i = e._id = e.__instanceId) : cc.errorID(1510));
                    var n = this._hashForTimers[i];
                    if (n)
                        for (var r = n.timers, s = 0, a = r.length; s < a; s++) {
                            var o = r[s];
                            if (t === o._callback)
                                return o !== n.currentTimer || n.currentTimerSalvaged || (n.currentTimerSalvaged = !0),
                                r.splice(s, 1),
                                c.put(o),
                                n.timerIndex >= s && n.timerIndex--,
                                void (0 === r.length && (this._currentTarget === n ? this._currentTargetSalvaged = !0 : this._removeHashElement(n)))
                        }
                }
            },
            unscheduleUpdate: function(t) {
                if (t) {
                    var e = t._id;
                    e || (t.__instanceId ? (cc.warnID(1513),
                    e = t._id = t.__instanceId) : cc.errorID(1510));
                    var i = this._hashForUpdates[e];
                    i && (this._updateHashLocked ? i.entry.markedForDeletion = !0 : this._removeUpdateFromHash(i.entry))
                }
            },
            unscheduleAllForTarget: function(t) {
                if (t) {
                    var e = t._id;
                    e || (t.__instanceId ? (cc.warnID(1513),
                    e = t._id = t.__instanceId) : cc.errorID(1510));
                    var i = this._hashForTimers[e];
                    if (i) {
                        var n = i.timers;
                        n.indexOf(i.currentTimer) > -1 && !i.currentTimerSalvaged && (i.currentTimerSalvaged = !0);
                        for (var r = 0, s = n.length; r < s; r++)
                            c.put(n[r]);
                        n.length = 0,
                        this._currentTarget === i ? this._currentTargetSalvaged = !0 : this._removeHashElement(i)
                    }
                    this.unscheduleUpdate(t)
                }
            },
            unscheduleAll: function() {
                this.unscheduleAllWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM)
            },
            unscheduleAllWithMinPriority: function(t) {
                var e, i, n, r = this._arrayForTimers;
                for (e = r.length - 1; e >= 0; e--)
                    i = r[e],
                    this.unscheduleAllForTarget(i.target);
                var s = 0;
                if (t < 0)
                    for (e = 0; e < this._updatesNegList.length; )
                        s = this._updatesNegList.length,
                        (n = this._updatesNegList[e]) && n.priority >= t && this.unscheduleUpdate(n.target),
                        s == this._updatesNegList.length && e++;
                if (t <= 0)
                    for (e = 0; e < this._updates0List.length; )
                        s = this._updates0List.length,
                        (n = this._updates0List[e]) && this.unscheduleUpdate(n.target),
                        s == this._updates0List.length && e++;
                for (e = 0; e < this._updatesPosList.length; )
                    s = this._updatesPosList.length,
                    (n = this._updatesPosList[e]) && n.priority >= t && this.unscheduleUpdate(n.target),
                    s == this._updatesPosList.length && e++
            },
            isScheduled: function(t, e) {
                cc.assertID(t, 1508),
                cc.assertID(e, 1509);
                var i = e._id;
                i || (e.__instanceId ? (cc.warnID(1513),
                i = e._id = e.__instanceId) : cc.errorID(1510));
                var n = this._hashForTimers[i];
                if (!n)
                    return !1;
                if (null == n.timers)
                    return !1;
                for (var r = n.timers, s = 0; s < r.length; ++s)
                    if (t === r[s]._callback)
                        return !0;
                return !1
            },
            pauseAllTargets: function() {
                return this.pauseAllTargetsWithMinPriority(cc.Scheduler.PRIORITY_SYSTEM)
            },
            pauseAllTargetsWithMinPriority: function(t) {
                var e, i, n, r, s = [], a = this._arrayForTimers;
                for (i = 0,
                n = a.length; i < n; i++)
                    (e = a[i]) && (e.paused = !0,
                    s.push(e.target));
                if (t < 0)
                    for (i = 0; i < this._updatesNegList.length; i++)
                        (r = this._updatesNegList[i]) && r.priority >= t && (r.paused = !0,
                        s.push(r.target));
                if (t <= 0)
                    for (i = 0; i < this._updates0List.length; i++)
                        (r = this._updates0List[i]) && (r.paused = !0,
                        s.push(r.target));
                for (i = 0; i < this._updatesPosList.length; i++)
                    (r = this._updatesPosList[i]) && r.priority >= t && (r.paused = !0,
                    s.push(r.target));
                return s
            },
            resumeTargets: function(t) {
                if (t)
                    for (var e = 0; e < t.length; e++)
                        this.resumeTarget(t[e])
            },
            pauseTarget: function(t) {
                cc.assertID(t, 1503);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513),
                e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                i && (i.paused = !0);
                var n = this._hashForUpdates[e];
                n && (n.entry.paused = !0)
            },
            resumeTarget: function(t) {
                cc.assertID(t, 1504);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513),
                e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                i && (i.paused = !1);
                var n = this._hashForUpdates[e];
                n && (n.entry.paused = !1)
            },
            isTargetPaused: function(t) {
                cc.assertID(t, 1505);
                var e = t._id;
                e || (t.__instanceId ? (cc.warnID(1513),
                e = t._id = t.__instanceId) : cc.errorID(1510));
                var i = this._hashForTimers[e];
                if (i)
                    return i.paused;
                var n = this._hashForUpdates[e];
                return !!n && n.entry.paused
            }
        },
        cc.Scheduler.PRIORITY_SYSTEM = 1 << 31,
        cc.Scheduler.PRIORITY_NON_SYSTEM = cc.Scheduler.PRIORITY_SYSTEM + 1,
        e.exports = cc.Scheduler
    }
    ), {
        "./platform/id-generater": 210,
        "./platform/js": 214
    }],
    33: [(function(t, e) {
        "use strict";
        var i = t("./preprocess")
          , n = t("./fetch")
          , r = t("./cache")
          , s = t("./helper")
          , a = t("./releaseManager")
          , o = t("./depend-util")
          , l = t("./load")
          , h = t("./pipeline")
          , c = t("./task")
          , u = t("./request-item")
          , _ = t("./downloader")
          , f = t("./parser")
          , d = t("./pack-manager")
          , p = t("./bundle")
          , m = t("./builtins")
          , y = t("./factory")
          , v = t("./urlTransformer")
          , g = v.parse
          , A = v.combine
          , x = t("./utilities")
          , b = x.parseParameters
          , C = x.asyncify
          , T = t("./shared")
          , S = T.assets
          , w = T.files
          , E = T.parsed
          , M = T.pipeline
          , D = T.transformPipeline
          , B = T.fetchPipeline
          , I = T.RequestType
          , P = T.bundles
          , R = T.BuiltinBundleName;
        function O() {
            this._preprocessPipe = i,
            this._fetchPipe = n,
            this._loadPipe = l,
            this.pipeline = M.append(i).append(l),
            this.fetchPipeline = B.append(i).append(n),
            this.transformPipeline = D.append(g).append(A),
            this.bundles = P,
            this.assets = S,
            this._files = w,
            this._parsed = E,
            this.generalImportBase = "",
            this.generalNativeBase = "",
            this.dependUtil = o,
            this._releaseManager = a,
            this.cacheAsset = !0,
            this.force = !1,
            this.utils = s,
            this.downloader = _,
            this.parser = f,
            this.builtins = m,
            this.packManager = d,
            this.factory = y,
            this.cacheManager = null,
            this.presets = {
                default: {
                    priority: 0
                },
                preload: {
                    maxConcurrency: 2,
                    maxRequestsPerFrame: 2,
                    priority: -1
                },
                scene: {
                    maxConcurrency: 8,
                    maxRequestsPerFrame: 8,
                    priority: 1
                },
                bundle: {
                    maxConcurrency: 8,
                    maxRequestsPerFrame: 8,
                    priority: 2
                },
                remote: {
                    maxRetryCount: 4
                },
                script: {
                    maxConcurrency: 1024,
                    maxRequestsPerFrame: 1024,
                    priority: 2
                }
            }
        }
        O.Pipeline = h,
        O.Task = c,
        O.Cache = r,
        O.RequestItem = u,
        O.Bundle = p,
        O.BuiltinBundleName = R,
        O.prototype = {
            constructor: O,
            get main() {
                return P.get(R.MAIN)
            },
            get resources() {
                return P.get(R.RESOURCES)
            },
            get internal() {
                return P.get(R.INTERNAL)
            },
            init: function(t) {
                t = t || Object.create(null),
                this._files.clear(),
                this._parsed.clear(),
                this._releaseManager.init(),
                this.assets.clear(),
                this.bundles.clear(),
                this.packManager.init(),
                this.downloader.init(t.bundleVers, t.server),
                this.parser.init(),
                this.dependUtil.init(),
                this.generalImportBase = t.importBase,
                this.generalNativeBase = t.nativeBase
            },
            getBundle: function(t) {
                return P.get(t)
            },
            removeBundle: function(t) {
                t._destroy(),
                P.remove(t.name)
            },
            loadAny: function(t, e, i, n) {
                var r = b(e, i, n);
                e = r.options,
                i = r.onProgress,
                n = r.onComplete,
                e.preset = e.preset || "default",
                t = Array.isArray(t) ? t.concat() : t;
                var s = new c({
                    input: t,
                    onProgress: i,
                    onComplete: C(n),
                    options: e
                });
                M.async(s)
            },
            preloadAny: function(t, e, i, n) {
                var r = b(e, i, n);
                e = r.options,
                i = r.onProgress,
                n = r.onComplete,
                e.preset = e.preset || "preload",
                t = Array.isArray(t) ? t.concat() : t;
                var s = new c({
                    input: t,
                    onProgress: i,
                    onComplete: C(n),
                    options: e
                });
                B.async(s)
            },
            postLoadNative: function(t, e, i) {
                if (!(t instanceof cc.Asset))
                    throw new Error("input is not asset");
                var n = b(e, void 0, i);
                if (e = n.options,
                i = n.onComplete,
                !t._native || t._nativeAsset)
                    return C(i)(null);
                var r = o.getNativeDep(t._uuid);
                if (r) {
                    if (!P.has(r.bundle)) {
                        var s = P.find((function(e) {
                            return e.getAssetInfo(t._uuid)
                        }
                        ));
                        s && (r.bundle = s.name)
                    }
                    this.loadAny(r, e, (function(e, n) {
                        e ? cc.error(e.message, e.stack) : t.isValid && !t._nativeAsset && (t._nativeAsset = n),
                        i && i(e)
                    }
                    ))
                }
            },
            loadRemote: function(t, e, i) {
                var n = b(e, void 0, i);
                if (e = n.options,
                i = n.onComplete,
                this.assets.has(t))
                    return C(i)(null, this.assets.get(t));
                e.__isNative__ = !0,
                e.preset = e.preset || "remote",
                this.loadAny({
                    url: t
                }, e, null, (function(n, r) {
                    n ? (cc.error(n.message, n.stack),
                    i && i(n, null)) : y.create(t, r, e.ext || cc.path.extname(t), e, (function(t, e) {
                        i && i(t, e)
                    }
                    ))
                }
                ))
            },
            loadScript: function(t, e, i) {
                var n = b(e, void 0, i);
                e = n.options,
                i = n.onComplete,
                e.__requestType__ = I.URL,
                e.preset = e.preset || "script",
                this.loadAny(t, e, i)
            },
            loadBundle: function(t, e, i) {
                var n = b(e, void 0, i)
                  , r = (e = n.options,
                i = n.onComplete,
                cc.path.basename(t));
                if (this.bundles.has(r))
                    return C(i)(null, this.getBundle(r));
                e.preset = e.preset || "bundle",
                e.ext = "bundle",
                this.loadRemote(t, e, i)
            },
            releaseAsset: function(t) {
                a.tryRelease(t, !0)
            },
            releaseUnusedAssets: function() {
                S.forEach((function(t) {
                    a.tryRelease(t)
                }
                ))
            },
            releaseAll: function() {
                S.forEach((function(t) {
                    a.tryRelease(t, !0)
                }
                ))
            },
            _transform: function(t, e) {
                var i = c.create({
                    input: t,
                    options: e
                })
                  , n = [];
                try {
                    for (var r = D.sync(i), s = 0, a = r.length; s < a; s++) {
                        var o = r[s]
                          , l = o.url;
                        o.recycle(),
                        n.push(l)
                    }
                } catch (h) {
                    for (s = 0,
                    a = i.output.length; s < a; s++)
                        i.output[s].recycle();
                    cc.error(h.message, h.stack)
                }
                return i.recycle(),
                n.length > 1 ? n : n[0]
            }
        },
        cc.AssetManager = O,
        cc.assetManager = new O,
        Object.defineProperty(cc, "resources", {
            get: function() {
                return P.get(R.RESOURCES)
            }
        }),
        e.exports = cc.assetManager
    }
    ), {
        "./builtins": 34,
        "./bundle": 35,
        "./cache": 36,
        "./depend-util": 38,
        "./downloader": 45,
        "./factory": 46,
        "./fetch": 47,
        "./helper": 49,
        "./load": 51,
        "./pack-manager": 52,
        "./parser": 53,
        "./pipeline": 54,
        "./preprocess": 55,
        "./releaseManager": 56,
        "./request-item": 57,
        "./shared": 58,
        "./task": 59,
        "./urlTransformer": 60,
        "./utilities": 61
    }],
    34: [(function(t, e) {
        "use strict";
        var i = t("./cache")
          , n = t("./releaseManager")
          , r = t("./shared").BuiltinBundleName
          , s = {
            _assets: new i({
                material: new i,
                effect: new i
            }),
            _loadBuiltins: function(t, e) {
                var i = t + "s"
                  , n = this._assets.get(t);
                return cc.assetManager.internal.loadDir(i, null, null, (function(t, i) {
                    if (t)
                        cc.error(t.message, t.stack);
                    else
                        for (var r = 0; r < i.length; r++) {
                            var s = i[r];
                            n.add(s.name, s.addRef())
                        }
                    e()
                }
                ))
            },
            init: function(t) {
                var e = this;
                if (this.clear(),
                cc.game.renderType === cc.game.RENDER_TYPE_CANVAS || !cc.assetManager.bundles.has(r.INTERNAL))
                    return t && t();
                this._loadBuiltins("effect", (function() {
                    e._loadBuiltins("material", t)
                }
                ))
            },
            getBuiltin: function(t, e) {
                return 0 === arguments.length ? this._assets : 1 === arguments.length ? this._assets.get(t) : this._assets.get(t).get(e)
            },
            clear: function() {
                this._assets.forEach((function(t) {
                    t.forEach((function(t) {
                        n.tryRelease(t, !0)
                    }
                    )),
                    t.clear()
                }
                ))
            }
        };
        e.exports = s
    }
    ), {
        "./cache": 36,
        "./releaseManager": 56,
        "./shared": 58
    }],
    35: [(function(t, e) {
        "use strict";
        var i = t("./config")
          , n = t("./releaseManager")
          , r = t("./utilities")
          , s = r.parseParameters
          , a = r.parseLoadResArgs
          , o = t("./shared")
          , l = o.RequestType
          , h = o.assets
          , c = o.bundles;
        function u() {
            this._config = new i
        }
        u.prototype = {
            constructor: u,
            get name() {
                return this._config.name
            },
            get deps() {
                return this._config.deps
            },
            get base() {
                return this._config.base
            },
            getInfoWithPath: function(t, e) {
                return this._config.getInfoWithPath(t, e)
            },
            getDirWithPath: function(t, e, i) {
                return this._config.getDirWithPath(t, e, i)
            },
            getAssetInfo: function(t) {
                return this._config.getAssetInfo(t)
            },
            getSceneInfo: function(t) {
                return this._config.getSceneInfo(t)
            },
            init: function(t) {
                this._config.init(t),
                c.add(t.name, this)
            },
            load: function(t, e, i, n) {
                var r = a(e, i, n);
                e = r.type,
                i = r.onProgress,
                n = r.onComplete,
                cc.assetManager.loadAny(t, {
                    __requestType__: l.PATH,
                    type: e,
                    bundle: this.name,
                    __outputAsArray__: Array.isArray(t)
                }, i, n)
            },
            preload: function(t, e, i, n) {
                var r = a(e, i, n);
                e = r.type,
                i = r.onProgress,
                n = r.onComplete,
                cc.assetManager.preloadAny(t, {
                    __requestType__: l.PATH,
                    type: e,
                    bundle: this.name
                }, i, n)
            },
            loadDir: function(t, e, i, n) {
                var r = a(e, i, n);
                e = r.type,
                i = r.onProgress,
                n = r.onComplete,
                cc.assetManager.loadAny(t, {
                    __requestType__: l.DIR,
                    type: e,
                    bundle: this.name,
                    __outputAsArray__: !0
                }, i, n)
            },
            preloadDir: function(t, e, i, n) {
                var r = a(e, i, n);
                e = r.type,
                i = r.onProgress,
                n = r.onComplete,
                cc.assetManager.preloadAny(t, {
                    __requestType__: l.DIR,
                    type: e,
                    bundle: this.name
                }, i, n)
            },
            loadScene: function(t, e, i, n) {
                var r = s(e, i, n);
                e = r.options,
                i = r.onProgress,
                n = r.onComplete,
                e.preset = e.preset || "scene",
                e.bundle = this.name,
                cc.assetManager.loadAny({
                    scene: t
                }, e, i, (function(t, e) {
                    if (t)
                        cc.error(t.message, t.stack),
                        n && n(t);
                    else if (e instanceof cc.SceneAsset) {
                        var i = e.scene;
                        i._id = e._uuid,
                        i._name = e._name,
                        n && n(null, e)
                    } else
                        n && n(new Error("The asset " + e._uuid + " is not a scene"))
                }
                ))
            },
            preloadScene: function(t, e, i, n) {
                var r = s(e, i, n);
                e = r.options,
                i = r.onProgress,
                n = r.onComplete,
                e.bundle = this.name,
                cc.assetManager.preloadAny({
                    scene: t
                }, e, i, (function(e) {
                    e && cc.errorID(1210, t, e.message),
                    n && n(e)
                }
                ))
            },
            get: function(t, e) {
                var i = this.getInfoWithPath(t, e);
                return h.get(i && i.uuid)
            },
            release: function(t, e) {
                n.tryRelease(this.get(t, e), !0)
            },
            releaseUnusedAssets: function() {
                var t = this;
                h.forEach((function(e) {
                    var i = t.getAssetInfo(e._uuid);
                    i && !i.redirect && n.tryRelease(e)
                }
                ))
            },
            releaseAll: function() {
                var t = this;
                h.forEach((function(e) {
                    var i = t.getAssetInfo(e._uuid);
                    i && !i.redirect && n.tryRelease(e, !0)
                }
                ))
            },
            _destroy: function() {
                this._config.destroy()
            }
        },
        e.exports = u
    }
    ), {
        "./config": 37,
        "./releaseManager": 56,
        "./shared": 58,
        "./utilities": 61
    }],
    36: [(function(t, e) {
        "use strict";
        var i = t("../platform/js");
        function n(t) {
            t ? (this._map = t,
            this._count = Object.keys(t).length) : (this._map = i.createMap(!0),
            this._count = 0)
        }
        n.prototype = {
            constructor: n,
            add: function(t, e) {
                return t in this._map || this._count++,
                this._map[t] = e
            },
            get: function(t) {
                return this._map[t]
            },
            has: function(t) {
                return t in this._map
            },
            remove: function(t) {
                var e = this._map[t];
                return t in this._map && (delete this._map[t],
                this._count--),
                e
            },
            clear: function() {
                0 !== this._count && (this._map = i.createMap(!0),
                this._count = 0)
            },
            forEach: function(t) {
                for (var e in this._map)
                    t(this._map[e], e)
            },
            find: function(t) {
                for (var e in this._map)
                    if (t(this._map[e], e))
                        return this._map[e];
                return null
            },
            get count() {
                return this._count
            },
            destroy: function() {
                this._map = null
            }
        },
        e.exports = n
    }
    ), {
        "../platform/js": 214
    }],
    37: [(function(t, e) {
        "use strict";
        var i = t("../platform/js")
          , n = t("./cache")
          , r = t("./helper").normalize
          , s = t("./utilities").processOptions;
        function a() {
            this.name = "",
            this.base = "",
            this.importBase = "",
            this.nativeBase = "",
            this.deps = null,
            this.assetInfos = new n,
            this.scenes = new n,
            this.paths = new n
        }
        a.prototype = {
            constructor: a,
            init: function(t) {
                s(t),
                this.importBase = t.importBase || "",
                this.nativeBase = t.nativeBase || "",
                this.base = t.base || "",
                this.name = t.name || "",
                this.deps = t.deps || [],
                this._initUuid(t.uuids),
                this._initPath(t.paths),
                this._initScene(t.scenes),
                this._initPackage(t.packs),
                this._initVersion(t.versions),
                this._initRedirect(t.redirect)
            },
            _initUuid: function(t) {
                if (t) {
                    this.assetInfos.clear();
                    for (var e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        this.assetInfos.add(n, {
                            uuid: n
                        })
                    }
                }
            },
            _initPath: function(t) {
                if (t) {
                    var e = this.paths;
                    for (var n in e.clear(),
                    t) {
                        var r = t[n]
                          , s = r[0]
                          , a = r[1]
                          , o = 3 === r.length
                          , l = this.assetInfos.get(n);
                        l.path = s,
                        l.ctor = i._getClassById(a),
                        e.has(s) ? o ? e.get(s).push(l) : e.get(s).splice(0, 0, l) : e.add(s, [l])
                    }
                }
            },
            _initScene: function(t) {
                if (t) {
                    var e = this.scenes;
                    e.clear();
                    var i = this.assetInfos;
                    for (var n in t) {
                        var r = t[n]
                          , s = i.get(r);
                        s.url = n,
                        e.add(n, s)
                    }
                }
            },
            _initPackage: function(t) {
                if (t) {
                    var e = this.assetInfos;
                    for (var i in t) {
                        var n = t[i]
                          , r = {
                            uuid: i,
                            packs: n,
                            ext: ".json"
                        };
                        e.add(i, r);
                        for (var s = 0, a = n.length; s < a; s++) {
                            var o = n[s]
                              , l = e.get(o)
                              , h = l.packs;
                            h ? 1 === a ? h.splice(0, 0, r) : h.push(r) : l.packs = [r]
                        }
                    }
                }
            },
            _initVersion: function(t) {
                if (t) {
                    var e = this.assetInfos
                      , i = t.import;
                    if (i)
                        for (var n = 0, r = i.length; n < r; n += 2) {
                            var s = i[n];
                            e.get(s).ver = i[n + 1]
                        }
                    if (i = t.native)
                        for (n = 0,
                        r = i.length; n < r; n += 2)
                            s = i[n],
                            e.get(s).nativeVer = i[n + 1]
                }
            },
            _initRedirect: function(t) {
                if (t)
                    for (var e = this.assetInfos, i = 0, n = t.length; i < n; i += 2) {
                        var r = t[i];
                        e.get(r).redirect = t[i + 1]
                    }
            },
            getInfoWithPath: function(t, e) {
                if (!t)
                    return null;
                t = r(t);
                var n = this.paths.get(t);
                if (n) {
                    if (!e)
                        return n[0];
                    for (var s = 0, a = n.length; s < a; s++) {
                        var o = n[s];
                        if (i.isChildClassOf(o.ctor, e))
                            return o
                    }
                }
                return null
            },
            getDirWithPath: function(t, e, n) {
                "/" === (t = r(t))[t.length - 1] && (t = t.slice(0, -1));
                var s = n || [];
                function a(t, e) {
                    return !(t.length > e.length) || 47 === t.charCodeAt(e.length)
                }
                return this.paths.forEach((function(n, r) {
                    if (r.startsWith(t) && a(r, t) || !t)
                        for (var o = 0, l = n.length; o < l; o++) {
                            var h = n[o];
                            e && !i.isChildClassOf(h.ctor, e) || s.push(h)
                        }
                }
                )),
                s
            },
            getAssetInfo: function(t) {
                return this.assetInfos.get(t)
            },
            getSceneInfo: function(t) {
                return t.endsWith(".fire") || (t += ".fire"),
                "/" === t[0] || t.startsWith("db://") || (t = "/" + t),
                this.scenes.find((function(e, i) {
                    return i.endsWith(t)
                }
                ))
            },
            destroy: function() {
                this.paths.destroy(),
                this.scenes.destroy(),
                this.assetInfos.destroy()
            }
        },
        e.exports = a
    }
    ), {
        "../platform/js": 214,
        "./cache": 36,
        "./helper": 49,
        "./utilities": 61
    }],
    38: [(function(t, e) {
        "use strict";
        var i = (function(t) {
            if (t && t.__esModule)
                return t;
            if (null === t || "object" != typeof t && "function" != typeof t)
                return {
                    default: t
                };
            var e = n();
            if (e && e.has(t))
                return e.get(t);
            var i = {}
              , r = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var s in t)
                if (Object.prototype.hasOwnProperty.call(t, s)) {
                    var a = r ? Object.getOwnPropertyDescriptor(t, s) : null;
                    a && (a.get || a.set) ? Object.defineProperty(i, s, a) : i[s] = t[s]
                }
            return i.default = t,
            e && e.set(t, i),
            i
        }
        )(t("../platform/deserialize-compiled"));
        function n() {
            if ("function" != typeof WeakMap)
                return null;
            var t = new WeakMap;
            return n = function() {
                return t
            }
            ,
            t
        }
        var r = t("./cache")
          , s = t("./deserialize")
          , a = t("./shared")
          , o = a.files
          , l = a.parsed
          , h = {
            _depends: new r,
            init: function() {
                this._depends.clear()
            },
            getNativeDep: function(t) {
                var e = this._depends.get(t);
                return e ? e.nativeDep && Object.assign({}, e.nativeDep) : null
            },
            getDeps: function(t) {
                return this._depends.has(t) ? this._depends.get(t).deps : []
            },
            getDepsRecursively: function(t) {
                var e = Object.create(null)
                  , i = [];
                return this._descend(t, e, i),
                i
            },
            _descend: function(t, e, i) {
                for (var n = this.getDeps(t), r = 0; r < n.length; r++) {
                    var s = n[r];
                    e[s] || (e[s] = !0,
                    i.push(s),
                    this._descend(s, e, i))
                }
            },
            remove: function(t) {
                this._depends.remove(t)
            },
            parse: function(t, e) {
                var n = null;
                if (Array.isArray(e) || e.__type__) {
                    if (n = this._depends.get(t))
                        return n;
                    if (Array.isArray(e) && !(0,
                    i.hasNativeDep)(e))
                        n = {
                            deps: this._parseDepsFromJson(e)
                        };
                    else
                        try {
                            var r = s(e);
                            (n = this._parseDepsFromAsset(r)).nativeDep && (n.nativeDep.uuid = t),
                            l.add(t + "@import", r)
                        } catch (a) {
                            o.remove(t + "@import"),
                            n = {
                                deps: []
                            }
                        }
                } else {
                    if ((n = this._depends.get(t)) && n.parsedFromExistAsset)
                        return n;
                    n = this._parseDepsFromAsset(e)
                }
                return this._depends.add(t, n),
                n
            },
            _parseDepsFromAsset: function(t) {
                for (var e = {
                    deps: [],
                    parsedFromExistAsset: !0,
                    preventPreloadNativeObject: t.constructor.preventPreloadNativeObject,
                    preventDeferredLoadDependents: t.constructor.preventDeferredLoadDependents
                }, i = t.__depends__, n = 0, r = i.length; n < r; n++) {
                    var s = i[n].uuid;
                    e.deps.push(s)
                }
                return t.__nativeDepend__ && (e.nativeDep = t._nativeDep),
                e
            },
            _parseDepsFromJson: function(t) {
                var e = (0,
                i.getDependUuidList)(t);
                return e.forEach((function(t, i) {
                    return e[i] = cc.assetManager.utils.decodeUuid(t)
                }
                )),
                e
            }
        };
        e.exports = h
    }
    ), {
        "../platform/deserialize-compiled": 208,
        "./cache": 36,
        "./deserialize": 40,
        "./shared": 58
    }],
    39: [(function(t) {
        "use strict";
        var e = t("../platform/js");
        t("../CCDirector");
        var i = t("./utilities")
          , n = t("./depend-util")
          , r = t("./releaseManager")
          , s = t("./downloader")
          , a = t("./factory")
          , o = t("./helper")
          , l = [".png", ".jpg", ".bmp", ".jpeg", ".gif", ".ico", ".tiff", ".webp", ".image", ".pvr", ".pkm"]
          , h = [".mp3", ".ogg", ".wav", ".m4a"];
        function c() {
            return !0
        }
        var u = {
            transformURL: function(t) {
                var e = o.getUuidFromURL(t);
                if (!e)
                    return t;
                var i = cc.assetManager.bundles.find((function(t) {
                    return !!t.getAssetInfo(e)
                }
                ));
                if (!i)
                    return t;
                var n, r = i.getAssetInfo(e);
                if (!(n = t.startsWith(i.base + i._config.nativeBase) ? r.nativeVer || "" : r.ver || "") || -1 !== t.indexOf(n))
                    return t;
                var s = !1;
                if (".ttf" === cc.path.extname(t) && (s = !0),
                s) {
                    var a = cc.path.dirname(t)
                      , l = cc.path.basename(t);
                    t = a + "." + n + "/" + l
                } else
                    t = t.replace(/.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/, (function(t) {
                        return t + "." + n
                    }
                    ));
                return t
            }
        }
          , _ = {
            onProgress: null,
            _autoReleaseSetting: Object.create(null),
            get _cache() {
                return cc.assetManager.assets._map
            },
            load: function(t, e, i) {
                void 0 === i && void 0 !== e && (i = e,
                e = null),
                t = Array.isArray(t) ? t : [t];
                for (var n = 0; n < t.length; n++) {
                    var r = t[n];
                    "string" == typeof r ? t[n] = {
                        url: r,
                        __isNative__: !0
                    } : (r.type && (r.ext = "." + r.type,
                    r.type = void 0),
                    r.url && (r.__isNative__ = !0))
                }
                var s = []
                  , o = [];
                cc.assetManager.loadAny(t, null, (function(t, i, n) {
                    n.content && (l.includes(n.ext) ? s.push(n.content) : h.includes(n.ext) && o.push(n.content)),
                    e && e(t, i, n)
                }
                ), (function(e, n) {
                    var r = null;
                    if (!e) {
                        n = Array.isArray(n) ? n : [n];
                        for (var l = 0; l < n.length; l++) {
                            var h = n[l];
                            if (!(h instanceof cc.Asset)) {
                                var u = h
                                  , _ = t[l].url;
                                s.includes(u) ? a.create(_, h, ".png", null, (function(t, e) {
                                    u = n[l] = e
                                }
                                )) : o.includes(u) && a.create(_, h, ".mp3", null, (function(t, e) {
                                    u = n[l] = e
                                }
                                )),
                                cc.assetManager.assets.add(_, u)
                            }
                        }
                        if (n.length > 1) {
                            var f = Object.create(null);
                            n.forEach((function(t) {
                                f[t._uuid] = t
                            }
                            )),
                            r = {
                                isCompleted: c,
                                _map: f
                            }
                        } else
                            r = n[0]
                    }
                    i && i(e, r)
                }
                ))
            },
            getXMLHttpRequest: function() {
                return new XMLHttpRequest
            },
            _parseLoadResArgs: i.parseLoadResArgs,
            getItem: function(t) {
                return cc.assetManager.assets.has(t) ? {
                    content: cc.assetManager.assets.get(t)
                } : null
            },
            loadRes: function(t, e, i, n) {
                var r = this._parseLoadResArgs(e, i, n)
                  , s = (e = r.type,
                r.onProgress)
                  , a = r.onComplete
                  , o = cc.path.extname(t);
                o && (t = t.slice(0, -o.length)),
                cc.resources.load(t, e, s, a)
            },
            loadResArray: function(t, e, i, n) {
                var r = this._parseLoadResArgs(e, i, n)
                  , s = (e = r.type,
                r.onProgress)
                  , a = r.onComplete;
                t.forEach((function(e, i) {
                    var n = cc.path.extname(e);
                    n && (t[i] = e.slice(0, -n.length))
                }
                )),
                cc.resources.load(t, e, s, a)
            },
            loadResDir: function(t, e, i, n) {
                var r = this._parseLoadResArgs(e, i, n)
                  , s = (e = r.type,
                r.onProgress)
                  , a = r.onComplete;
                cc.resources.loadDir(t, e, s, (function(i, n) {
                    var r = [];
                    i || (r = cc.resources.getDirWithPath(t, e).map((function(t) {
                        return t.path
                    }
                    ))),
                    a && a(i, n, r)
                }
                ))
            },
            getRes: function(t, e) {
                return cc.assetManager.assets.has(t) ? cc.assetManager.assets.get(t) : cc.resources.get(t, e)
            },
            getResCount: function() {
                return cc.assetManager.assets.count
            },
            getDependsRecursively: function(t) {
                return t ? n.getDepsRecursively("string" == typeof t ? t : t._uuid).concat([t._uuid]) : []
            },
            get assetLoader() {},
            get md5Pipe() {
                return u
            },
            get downloader() {
                return cc.assetManager.downloader
            },
            get loader() {
                return cc.assetManager.parser
            },
            addDownloadHandlers: function(t) {
                var e = Object.create(null);
                for (var i in t) {
                    var n = t[i];
                    e["." + i] = function(t, e, i) {
                        n({
                            url: t
                        }, i)
                    }
                }
                cc.assetManager.downloader.register(e)
            },
            addLoadHandlers: function(t) {
                var e = Object.create(null);
                for (var i in t) {
                    var n = t[i];
                    e["." + i] = function(t, e, i) {
                        n({
                            content: t
                        }, i)
                    }
                }
                cc.assetManager.parser.register(e)
            },
            flowInDeps: function() {},
            release: function(t) {
                if (Array.isArray(t))
                    for (var e = 0; e < t.length; e++) {
                        var i = t[e];
                        "string" == typeof i && (i = cc.assetManager.assets.get(i)),
                        cc.assetManager.builtins._assets.find((function(t) {
                            return t.find((function(t) {
                                return t === i
                            }
                            ))
                        }
                        )) || cc.assetManager.releaseAsset(i)
                    }
                else if (t) {
                    if ("string" == typeof t && (t = cc.assetManager.assets.get(t)),
                    cc.assetManager.builtins._assets.find((function(e) {
                        return e.find((function(e) {
                            return e === t
                        }
                        ))
                    }
                    )))
                        return;
                    cc.assetManager.releaseAsset(t)
                }
            },
            releaseAsset: function(t) {
                cc.assetManager.releaseAsset(t)
            },
            releaseRes: function(t, e) {
                cc.resources.release(t, e)
            },
            releaseResDir: function() {},
            releaseAll: function() {
                cc.assetManager.releaseAll(),
                cc.assetManager.assets.clear()
            },
            removeItem: function(t) {
                cc.assetManager.assets.remove(t)
            },
            setAutoRelease: function(t, e) {
                "object" == typeof t && (t = t._uuid),
                this._autoReleaseSetting[t] = !!e
            },
            setAutoReleaseRecursively: function(t, e) {
                "object" == typeof t && (t = t._uuid),
                e = !!e,
                this._autoReleaseSetting[t] = e;
                for (var i = n.getDepsRecursively(t), r = 0; r < i.length; r++) {
                    var s = i[r];
                    this._autoReleaseSetting[s] = e
                }
            },
            isAutoRelease: function(t) {
                return "object" == typeof t && (t = t._uuid),
                !!this._autoReleaseSetting[t]
            }
        };
        s.loadSubpackage = function(t, e) {
            cc.assetManager.loadBundle(t, null, e)
        }
        ;
        var f = {
            init: function(t) {
                t.importBase = t.libraryPath,
                t.nativeBase = t.rawAssetsBase,
                cc.assetManager.init(t),
                t.rawAssets && (new cc.AssetManager.Bundle).init({
                    name: cc.AssetManager.BuiltinBundleName.RESOURCES,
                    importBase: t.importBase,
                    nativeBase: t.nativeBase,
                    paths: t.rawAssets.assets,
                    uuids: Object.keys(t.rawAssets.assets)
                })
            },
            loadAsset: function(t, e) {
                cc.assetManager.loadAny(t, e)
            },
            getLibUrlNoExt: function() {},
            queryAssetInfo: function() {}
        };
        cc.url = {
            normalize: function(t) {
                return cc.warnID(1400, "cc.url.normalize", "cc.assetManager.utils.normalize"),
                cc.assetManager.utils.normalize(t)
            },
            raw: function(t) {
                return cc.warnID(1400, "cc.url.raw", "cc.resources.load"),
                t.startsWith("resources/") ? cc.assetManager._transform({
                    path: cc.path.changeExtname(t.substr(10)),
                    bundle: cc.AssetManager.BuiltinBundleName.RESOURCES,
                    __isNative__: !0,
                    ext: cc.path.extname(t)
                }) : ""
            }
        },
        Object.defineProperties(cc, {
            loader: {
                get: function() {
                    return _
                }
            },
            AssetLibrary: {
                get: function() {
                    return f
                }
            },
            LoadingItems: {
                get: function() {
                    return cc.warnID(1400, "cc.LoadingItems", "cc.AssetManager.Task"),
                    cc.AssetManager.Task
                }
            },
            Pipeline: {
                get: function() {
                    return cc.warnID(1400, "cc.Pipeline", "cc.AssetManager.Pipeline"),
                    cc.AssetManager.Pipeline
                }
            }
        }),
        e.obsolete(cc, "cc.RawAsset", "cc.Asset"),
        e.obsolete(cc.Asset.prototype, "cc.Asset.url", "nativeUrl"),
        Object.defineProperties(cc.macro, {
            DOWNLOAD_MAX_CONCURRENT: {
                get: function() {
                    return cc.assetManager.downloader.maxConcurrency
                },
                set: function(t) {
                    cc.assetManager.downloader.maxConcurrency = t
                }
            }
        }),
        Object.assign(cc.director, {
            _getSceneUuid: function(t) {
                cc.assetManager.main.getSceneInfo(t)
            }
        }),
        Object.defineProperties(cc.game, {
            _sceneInfos: {
                get: function() {
                    var t = [];
                    return cc.assetManager.main._config.scenes.forEach((function(e) {
                        t.push(e)
                    }
                    )),
                    t
                }
            }
        });
        var d = i.parseParameters;
        i.parseParameters = function(t, e, i) {
            var n = d(t, e, i);
            return n.onProgress = n.onProgress || _.onProgress,
            n
        }
        ;
        var p = r._autoRelease;
        r._autoRelease = function() {
            p.apply(this, arguments);
            for (var t = _._autoReleaseSetting, e = Object.keys(t), i = 0; i < e.length; i++) {
                var n = e[i];
                if (!0 === t[n]) {
                    var s = cc.assetManager.assets.get(n);
                    s && r.tryRelease(s)
                }
            }
        }
    }
    ), {
        "../CCDirector": 27,
        "../platform/js": 214,
        "./depend-util": 38,
        "./downloader": 45,
        "./factory": 46,
        "./helper": 49,
        "./releaseManager": 56,
        "./utilities": 61
    }],
    40: [(function(t, e) {
        "use strict";
        var i = t("./helper");
        t("../platform/deserialize"),
        e.exports = function(t, e) {
            var n;
            n = cc._MissingScript.safeFindClass;
            var r, s = null, a = (s = cc.deserialize.Details.pool).get();
            try {
                r = cc.deserialize(t, a, {
                    classFinder: n,
                    customEnv: e
                })
            } catch (f) {
                throw s.put(a),
                f
            }
            for (var o = a.uuidList, l = a.uuidObjList, h = a.uuidPropList, c = [], u = 0; u < o.length; u++) {
                var _ = o[u];
                c[u] = {
                    uuid: i.decodeUuid(_),
                    owner: l[u],
                    prop: h[u]
                }
            }
            return r.__depends__ = c,
            r._native && (r.__nativeDepend__ = !0),
            s.put(a),
            r
        }
    }
    ), {
        "../platform/deserialize": 209,
        "../platform/deserialize-compiled": 208,
        "../platform/deserialize-editor": void 0,
        "./helper": 49
    }],
    41: [(function(t, e) {
        "use strict";
        var i = cc.sys.__audioSupport
          , n = t("./utilities").parseParameters;
        e.exports = function(t, e, r) {
            var s = n(e, void 0, r)
              , a = (e = s.options,
            r = s.onComplete,
            document.createElement("audio"));
            a.src = t;
            var o = function() {
                clearTimeout(l),
                a.removeEventListener("canplaythrough", h, !1),
                a.removeEventListener("error", c, !1),
                i.USE_LOADER_EVENT && a.removeEventListener(i.USE_LOADER_EVENT, h, !1)
            }
              , l = setTimeout((function() {
                0 === a.readyState ? c() : h()
            }
            ), 8e3)
              , h = function() {
                o(),
                r && r(null, a)
            }
              , c = function() {
                o();
                var e = "load audio failure - " + t;
                cc.log(e),
                r && r(new Error(e))
            };
            return a.addEventListener("canplaythrough", h, !1),
            a.addEventListener("error", c, !1),
            i.USE_LOADER_EVENT && a.addEventListener(i.USE_LOADER_EVENT, h, !1),
            a
        }
    }
    ), {
        "./utilities": 61
    }],
    42: [(function(t, e) {
        "use strict";
        var i = t("./utilities").parseParameters;
        e.exports = function(t, e, n) {
            var r = i(e, void 0, n)
              , s = (e = r.options,
            n = r.onComplete,
            new Image);
            function a() {
                s.removeEventListener("load", a),
                s.removeEventListener("error", o),
                n && n(null, s)
            }
            function o() {
                s.removeEventListener("load", a),
                s.removeEventListener("error", o),
                n && n(new Error(cc.debug.getError(4930, t)))
            }
            return "file:" !== window.location.protocol && (s.crossOrigin = "anonymous"),
            s.addEventListener("load", a),
            s.addEventListener("error", o),
            s.src = t,
            s
        }
    }
    ), {
        "./utilities": 61
    }],
    43: [(function(t, e) {
        "use strict";
        var i = t("./utilities").parseParameters;
        e.exports = function(t, e, n, r) {
            var s = i(e, n, r)
              , a = (e = s.options,
            n = s.onProgress,
            r = s.onComplete,
            new XMLHttpRequest)
              , o = "download failed: " + t + ", status: ";
            if (a.open("GET", t, !0),
            void 0 !== e.responseType && (a.responseType = e.responseType),
            void 0 !== e.withCredentials && (a.withCredentials = e.withCredentials),
            void 0 !== e.mimeType && a.overrideMimeType && a.overrideMimeType(e.mimeType),
            void 0 !== e.timeout && (a.timeout = e.timeout),
            e.header)
                for (var l in e.header)
                    a.setRequestHeader(l, e.header[l]);
            return a.onload = function() {
                200 === a.status || 0 === a.status ? r && r(null, a.response) : r && r(new Error(o + a.status + "(no response)"))
            }
            ,
            n && (a.onprogress = function(t) {
                t.lengthComputable && n(t.loaded, t.total)
            }
            ),
            a.onerror = function() {
                r && r(new Error(o + a.status + "(error)"))
            }
            ,
            a.ontimeout = function() {
                r && r(new Error(o + a.status + "(time out)"))
            }
            ,
            a.onabort = function() {
                r && r(new Error(o + a.status + "(abort)"))
            }
            ,
            a.send(null),
            a
        }
    }
    ), {
        "./utilities": 61
    }],
    44: [(function(t, e) {
        "use strict";
        var i = t("./utilities").parseParameters
          , n = {};
        e.exports = function(t, e, r) {
            var s = i(e, void 0, r);
            if (e = s.options,
            r = s.onComplete,
            n[t])
                return r && r(null);
            var a = document
              , o = document.createElement("script");
            function l() {
                o.parentNode.removeChild(o),
                o.removeEventListener("load", l, !1),
                o.removeEventListener("error", h, !1),
                n[t] = !0,
                r && r(null)
            }
            function h() {
                o.parentNode.removeChild(o),
                o.removeEventListener("load", l, !1),
                o.removeEventListener("error", h, !1),
                r && r(new Error(cc.debug.getError(4928, t)))
            }
            "file:" !== window.location.protocol && (o.crossOrigin = "anonymous"),
            o.async = e.async,
            o.src = t,
            o.addEventListener("load", l, !1),
            o.addEventListener("error", h, !1),
            a.body.appendChild(o)
        }
    }
    ), {
        "./utilities": 61
    }],
    45: [(function(t, e) {
        "use strict";
        var i = t("../platform/js")
          , n = t("../CCDebug")
          , r = t("./font-loader").loadFont
          , s = t("../platform/utils").callInNextTick
          , a = t("./download-dom-image")
          , o = t("./download-dom-audio")
          , l = t("./download-file")
          , h = t("./download-script.js")
          , c = t("./cache")
          , u = t("./shared").files
          , _ = t("../platform/CCSys")
          , f = _.__audioSupport
          , d = _.capabilities
          , p = t("./utilities")
          , m = p.urlAppendTimestamp
          , y = p.retry
          , v = /^(?:\w+:\/\/|\.+\/).+/
          , g = function(t, e, i) {
            e.audioLoadMode !== cc.AudioClip.LoadMode.DOM_AUDIO ? C(t, e, i) : o(t, e, i)
        }
          , A = (g = 0 === (f.format || []).length ? function(t, e, i) {
            i(new Error(n.getError(4927)))
        }
        : f.WEB_AUDIO ? g : o,
        function() {
            var t = d.imageBitmap && cc.macro.ALLOW_IMAGE_BITMAP ? x : a;
            t.apply(this, arguments)
        }
        )
          , x = function(t, e, i) {
            e.responseType = "blob",
            l(t, e, e.onFileProgress, i)
        }
          , b = function(t, e, i) {
            e.responseType = "json",
            l(t, e, e.onFileProgress, (function(t, e) {
                if (!t && "string" == typeof e)
                    try {
                        e = JSON.parse(e)
                    } catch (n) {
                        t = n
                    }
                i && i(t, e)
            }
            ))
        }
          , C = function(t, e, i) {
            e.responseType = "arraybuffer",
            l(t, e, e.onFileProgress, i)
        }
          , T = function(t, e, i) {
            e.responseType = "text",
            l(t, e, e.onFileProgress, i)
        }
          , S = function(t, e, i) {
            i(null, t)
        }
          , w = new c
          , E = []
          , M = !1
          , D = 0
          , B = 0
          , I = -1
          , P = !1
          , R = function() {
            var t = Date.now()
              , e = cc.director._deltaTime > L._maxInterval ? L._maxInterval : cc.director._deltaTime;
            t - I > 1e3 * e && (B = 0,
            I = t)
        }
          , O = function t(e, i) {
            for (P = !1,
            R(); E.length > 0 && D < e && B < i; ) {
                M && (E.sort((function(t, e) {
                    return t.priority - e.priority
                }
                )),
                M = !1);
                var n = E.pop();
                if (!n)
                    break;
                D++,
                B++,
                n.invoke()
            }
            E.length > 0 && D < e && (s(t, e, i),
            P = !0)
        }
          , L = {
            _remoteServerAddress: "",
            _maxInterval: 1 / 30,
            get remoteServerAddress() {
                return this._remoteServerAddress
            },
            maxConcurrency: 6,
            maxRequestsPerFrame: 6,
            maxRetryCount: 3,
            appendTimeStamp: !1,
            limited: !0,
            retryInterval: 2e3,
            bundleVers: null,
            downloadDomImage: a,
            downloadDomAudio: o,
            downloadFile: l,
            downloadScript: h,
            init: function(t, e) {
                w.clear(),
                E.length = 0,
                this._remoteServerAddress = e || "",
                this.bundleVers = t || Object.create(null)
            },
            register: function(t, e) {
                "object" == typeof t ? i.mixin(F, t) : F[t] = e
            },
            download: function(t, e, i, n, r) {
                var a, o, l = F[i] || F.default, h = this;
                if (a = u.get(t))
                    r(null, a);
                else if (o = w.get(t)) {
                    o.push(r);
                    for (var c = 0, _ = E.length; c < _; c++) {
                        var f = E[c];
                        if (f.id === t) {
                            var d = n.priority || 0;
                            return void (f.priority < d && (f.priority = d,
                            M = !0))
                        }
                    }
                } else {
                    var p = void 0 !== n.maxRetryCount ? n.maxRetryCount : this.maxRetryCount
                      , v = void 0 !== n.maxConcurrency ? n.maxConcurrency : this.maxConcurrency
                      , g = void 0 !== n.maxRequestsPerFrame ? n.maxRequestsPerFrame : this.maxRequestsPerFrame;
                    y((function(i, a) {
                        if (0 === i && w.add(t, [r]),
                        !h.limited)
                            return l(m(e), n, a);
                        function o() {
                            l(m(e), n, (function() {
                                D--,
                                !P && E.length > 0 && (s(O, v, g),
                                P = !0),
                                a.apply(this, arguments)
                            }
                            ))
                        }
                        R(),
                        D < v && B < g ? (o(),
                        D++,
                        B++) : (E.push({
                            id: t,
                            priority: n.priority || 0,
                            invoke: o
                        }),
                        M = !0,
                        !P && D < v && (s(O, v, g),
                        P = !0))
                    }
                    ), p, this.retryInterval, (function(e, i) {
                        e || u.add(t, i);
                        for (var n = w.remove(t), r = 0, s = n.length; r < s; r++)
                            n[r](e, i)
                    }
                    ))
                }
            }
        }
          , F = {
            ".png": A,
            ".jpg": A,
            ".bmp": A,
            ".jpeg": A,
            ".gif": A,
            ".ico": A,
            ".tiff": A,
            ".webp": A,
            ".image": A,
            ".pvr": C,
            ".pkm": C,
            ".mp3": g,
            ".ogg": g,
            ".wav": g,
            ".m4a": g,
            ".txt": T,
            ".xml": T,
            ".vsh": T,
            ".fsh": T,
            ".atlas": T,
            ".tmx": T,
            ".tsx": T,
            ".json": b,
            ".ExportJson": b,
            ".plist": T,
            ".fnt": T,
            ".font": r,
            ".eot": r,
            ".ttf": r,
            ".woff": r,
            ".svg": r,
            ".ttc": r,
            ".mp4": S,
            ".avi": S,
            ".mov": S,
            ".mpg": S,
            ".mpeg": S,
            ".rm": S,
            ".rmvb": S,
            ".binary": C,
            ".bin": C,
            ".dbbin": C,
            ".skel": C,
            ".js": h,
            bundle: function(t, e, i) {
                var n = cc.path.basename(t)
                  , r = t;
                v.test(r) || (r = "assets/" + n);
                var s = e.version || L.bundleVers[n]
                  , a = 0
                  , o = null
                  , l = null;
                b(r + "/config." + (s ? s + "." : "") + "json", e, (function(t, e) {
                    t && (l = t),
                    (o = e) && (o.base = r + "/"),
                    2 == ++a && i(l, o)
                }
                )),
                h(r + "/index." + (s ? s + "." : "") + "js", e, (function(t) {
                    t && (l = t),
                    2 == ++a && i(l, o)
                }
                ))
            },
            default: T
        };
        L._downloaders = F,
        e.exports = L
    }
    ), {
        "../CCDebug": 26,
        "../platform/CCSys": 202,
        "../platform/js": 214,
        "../platform/utils": 217,
        "./cache": 36,
        "./download-dom-audio": 41,
        "./download-dom-image": 42,
        "./download-file": 43,
        "./download-script.js": 44,
        "./font-loader": 48,
        "./shared": 58,
        "./utilities": 61
    }],
    46: [(function(t, e) {
        "use strict";
        var i = t("./bundle")
          , n = t("./cache")
          , r = t("./shared")
          , s = r.assets
          , a = r.bundles
          , o = new n;
        function l(t, e, i, n) {
            var r = null
              , s = null;
            try {
                (r = new cc.Texture2D)._nativeUrl = t,
                r._nativeAsset = e
            } catch (a) {
                s = a
            }
            n && n(s, r)
        }
        function h(t, e, i, n) {
            var r = new cc.AudioClip;
            r._nativeUrl = t,
            r._nativeAsset = e,
            r.duration = e.duration,
            n && n(null, r)
        }
        function c(t, e, i, n) {
            var r = new cc.JsonAsset;
            r.json = e,
            n && n(null, r)
        }
        function u(t, e, i, n) {
            var r = new cc.TextAsset;
            r.text = e,
            n && n(null, r)
        }
        function _(t, e, i, n) {
            var r = new cc.TTFFont;
            r._nativeUrl = t,
            r._nativeAsset = e,
            n && n(null, r)
        }
        function f(t, e, i, n) {
            var r = new cc.BufferAsset;
            r._nativeUrl = t,
            r._nativeAsset = e,
            n && n(null, r)
        }
        var d = {
            register: function(t, e) {
                "object" == typeof t ? cc.js.mixin(p, t) : p[t] = e
            },
            create: function(t, e, i, n, r) {
                var a, l, h = p[i] || p.default;
                (a = s.get(t)) ? r(null, a) : (l = o.get(t)) ? l.push(r) : (o.add(t, [r]),
                h(t, e, n, (function(e, i) {
                    !e && i instanceof cc.Asset && (i._uuid = t,
                    s.add(t, i));
                    for (var n = o.remove(t), r = 0, a = n.length; r < a; r++)
                        n[r](e, i)
                }
                )))
            }
        }
          , p = {
            ".png": l,
            ".jpg": l,
            ".bmp": l,
            ".jpeg": l,
            ".gif": l,
            ".ico": l,
            ".tiff": l,
            ".webp": l,
            ".image": l,
            ".pvr": l,
            ".pkm": l,
            ".mp3": h,
            ".ogg": h,
            ".wav": h,
            ".m4a": h,
            ".txt": u,
            ".xml": u,
            ".vsh": u,
            ".fsh": u,
            ".atlas": u,
            ".tmx": u,
            ".tsx": u,
            ".fnt": u,
            ".json": c,
            ".ExportJson": c,
            ".font": _,
            ".eot": _,
            ".ttf": _,
            ".woff": _,
            ".svg": _,
            ".ttc": _,
            ".binary": f,
            ".bin": f,
            ".dbbin": f,
            ".skel": f,
            bundle: function(t, e, n, r) {
                var s = a.get(e.name);
                s || (s = new i,
                e.base = e.base || t + "/",
                s.init(e)),
                r && r(null, s)
            },
            default: function(t, e, i, n) {
                var r = new cc.Asset;
                r._nativeUrl = t,
                r._nativeAsset = e,
                n && n(null, r)
            }
        };
        e.exports = d
    }
    ), {
        "./bundle": 35,
        "./cache": 36,
        "./shared": 58
    }],
    47: [(function(t, e) {
        "use strict";
        var i = t("./pack-manager")
          , n = t("./task")
          , r = t("./utilities")
          , s = r.getDepends
          , a = r.clear
          , o = r.forEach
          , l = t("./shared")
          , h = l.assets
          , c = l.fetchPipeline;
        function u(t) {
            for (var e = t.output, i = 0, n = e.length; i < n; i++)
                e[i].content && e[i].content.decRef(!1)
        }
        function _(t, e, i, n, r, a, o) {
            var l = e.options.__exclude__
              , h = e.progress;
            t.content = i,
            t.file = n,
            e.output.push(t),
            r && (l[t.uuid] = !0,
            s(t.uuid, n || i, l, a, !0, !1, t.config),
            h.total = o + a.length),
            h.canInvoke && e.dispatch("progress", ++h.finish, h.total, t)
        }
        e.exports = function(t, e) {
            var r = !1;
            t.progress || (t.progress = {
                finish: 0,
                total: t.input.length,
                canInvoke: !0
            },
            r = !0);
            var s = t.options
              , l = []
              , f = t.progress
              , d = f.total;
            s.__exclude__ = s.__exclude__ || Object.create(null),
            t.output = [],
            o(t.input, (function(n, s) {
                if (!n.isNative && h.has(n.uuid)) {
                    var a = h.get(n.uuid);
                    return a.addRef(),
                    _(n, t, a, null, a.__asyncLoadAssets__, l, d),
                    s()
                }
                i.load(n, t.options, (function(i, a) {
                    i ? t.isFinish || (!cc.assetManager.force || r ? (cc.error(i.message, i.stack),
                    f.canInvoke = !1,
                    e(i)) : _(n, t, null, null, !1, l, d)) : t.isFinish || _(n, t, null, a, !n.isNative, l, d),
                    s()
                }
                ))
            }
            ), (function() {
                if (t.isFinish)
                    return a(t, !0),
                    t.dispatch("error");
                if (l.length > 0) {
                    var i = n.create({
                        name: t.name + " dependencies",
                        input: l,
                        progress: f,
                        options: s,
                        onProgress: t.onProgress,
                        onError: n.prototype.recycle,
                        onComplete: function(n) {
                            n || (t.output.push.apply(t.output, this.output),
                            i.recycle()),
                            r && u(t),
                            e(n)
                        }
                    });
                    c.async(i)
                } else
                    r && u(t),
                    e()
            }
            ))
        }
    }
    ), {
        "./pack-manager": 52,
        "./shared": 58,
        "./task": 59,
        "./utilities": 61
    }],
    48: [(function(t, e) {
        "use strict";
        var i, n = t("../utils/text-utils"), r = null, s = "BES bswy:->@123\u4e01\u3041\u1101", a = Object.create(null), o = -1, l = [], h = 3e3, c = (i = void 0,
        function() {
            if (void 0 === i)
                if (window.FontFace) {
                    var t = /Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent)
                      , e = /OS X.*Version\/10\..*Safari/.exec(window.navigator.userAgent) && /Apple/.exec(window.navigator.vendor);
                    i = t ? parseInt(t[1], 10) > 42 : !e
                } else
                    i = !1;
            return i
        }
        );
        function u() {
            for (var t = !0, e = Date.now(), i = l.length - 1; i >= 0; i--) {
                var a = l[i]
                  , c = a.fontFamilyName;
                if (e - a.startTime > h)
                    cc.warnID(4933, c),
                    a.onComplete(null, c),
                    l.splice(i, 1);
                else {
                    var u = a.refWidth
                      , _ = "40px " + c;
                    r.font = _,
                    u !== n.safeMeasureText(r, s, _) ? (l.splice(i, 1),
                    a.onComplete(null, c)) : t = !1
                }
            }
            t && (clearInterval(o),
            o = -1)
        }
        var _ = {
            loadFont: function(t, e, i) {
                var f = _._getFontFamily(t);
                if (a[f])
                    return i(null, f);
                if (!r) {
                    var d = document.createElement("canvas");
                    d.width = 100,
                    d.height = 100,
                    r = d.getContext("2d")
                }
                var p = "40px " + f;
                r.font = p;
                var m = n.safeMeasureText(r, s, p)
                  , y = document.createElement("style");
                y.type = "text/css";
                var v = "";
                isNaN(f - 0) ? v += "@font-face { font-family:" + f + "; src:" : v += "@font-face { font-family:'" + f + "'; src:",
                v += "url('" + t + "');",
                y.textContent = v + "}",
                document.body.appendChild(y);
                var g, A, x, b, C, T, S = document.createElement("div"), w = S.style;
                if (w.fontFamily = f,
                S.innerHTML = ".",
                w.position = "absolute",
                w.left = "-100px",
                w.top = "-100px",
                document.body.appendChild(S),
                c())
                    g = Date.now(),
                    A = f,
                    x = i,
                    b = new Promise(function(t, e) {
                        (function i() {
                            Date.now() - g >= h ? e() : document.fonts.load("40px " + A).then((function(e) {
                                e.length >= 1 ? t() : setTimeout(i, 100)
                            }
                            ), (function() {
                                e()
                            }
                            ))
                        }
                        )()
                    }
                    ),
                    C = null,
                    T = new Promise(function(t, e) {
                        C = setTimeout(e, h)
                    }
                    ),
                    Promise.race([T, b]).then((function() {
                        C && (clearTimeout(C),
                        C = null),
                        x(null, A)
                    }
                    ), (function() {
                        cc.warnID(4933, A),
                        x(null, A)
                    }
                    ));
                else {
                    var E = {
                        fontFamilyName: f,
                        refWidth: m,
                        onComplete: i,
                        startTime: Date.now()
                    };
                    l.push(E),
                    -1 === o && (o = setInterval(u, 100))
                }
                a[f] = y
            },
            _getFontFamily: function(t) {
                var e = t.lastIndexOf(".ttf");
                if (-1 === e)
                    return t;
                var i, n = t.lastIndexOf("/");
                return -1 !== (i = -1 === n ? t.substring(0, e) + "_LABEL" : t.substring(n + 1, e) + "_LABEL").indexOf(" ") && (i = '"' + i + '"'),
                i
            }
        };
        e.exports = _
    }
    ), {
        "../utils/text-utils": 274
    }],
    49: [(function(t, e) {
        "use strict";
        var i, n = t("./shared").bundles, r = {
            decodeUuid: t("../utils/decode-uuid"),
            getUuidFromURL: (i = /.*[/\\][0-9a-fA-F]{2}[/\\]([0-9a-fA-F-]{8,})/,
            function(t) {
                var e = t.match(i);
                return e ? e[1] : ""
            }
            ),
            getUrlWithUuid: function(t, e) {
                (e = e || Object.create(null)).__isNative__ = e.isNative,
                e.ext = e.nativeExt;
                var i = n.find((function(e) {
                    return e.getAssetInfo(t)
                }
                ));
                return i && (e.bundle = i.name),
                cc.assetManager._transform(t, e)
            },
            isScene: function(t) {
                return t && (t.constructor === cc.SceneAsset || t instanceof cc.Scene)
            },
            normalize: function(t) {
                return t && (46 === t.charCodeAt(0) && 47 === t.charCodeAt(1) ? t = t.slice(2) : 47 === t.charCodeAt(0) && (t = t.slice(1))),
                t
            }
        };
        e.exports = r
    }
    ), {
        "../utils/decode-uuid": 262,
        "./shared": 58
    }],
    50: [(function(t) {
        "use strict";
        t("./deprecated"),
        t("./CCAssetManager")
    }
    ), {
        "./CCAssetManager": 33,
        "./deprecated": 39
    }],
    51: [(function(t, e) {
        "use strict";
        var i = t("./pack-manager")
          , n = t("./pipeline")
          , r = t("./parser")
          , s = t("./utilities")
          , a = s.getDepends
          , o = s.cache
          , l = s.gatherAsset
          , h = s.setProperties
          , c = s.forEach
          , u = s.clear
          , _ = s.checkCircleReference
          , f = t("./shared")
          , d = f.assets
          , p = f.files
          , m = f.parsed
          , y = f.pipeline
          , v = t("./task")
          , g = new n("loadOneAsset",[function(t, e) {
            var n = t.output = t.input
              , r = n.options
              , s = n.isNative
              , a = n.uuid
              , o = n.file
              , l = r.reload;
            if (o || !l && !s && d.has(a))
                return e();
            i.load(n, t.options, (function(t, i) {
                n.file = i,
                e(t)
            }
            ))
        }
        , function(t, e) {
            var i = t.output = t.input
              , n = t.progress
              , s = t.options.__exclude__
              , a = i.id
              , o = i.file
              , l = i.options;
            if (i.isNative)
                r.parse(a, o, i.ext, l, (function(r, s) {
                    if (r)
                        return e(r);
                    i.content = s,
                    n.canInvoke && t.dispatch("progress", ++n.finish, n.total, i),
                    p.remove(a),
                    m.remove(a),
                    e()
                }
                ));
            else {
                var h = i.uuid;
                if (h in s) {
                    var c = s[h]
                      , u = c.finish
                      , f = c.content
                      , y = c.err
                      , v = c.callbacks;
                    n.canInvoke && t.dispatch("progress", ++n.finish, n.total, i),
                    u || _(h, h, s) ? (f && f.addRef && f.addRef(),
                    i.content = f,
                    e(y)) : v.push({
                        done: e,
                        item: i
                    })
                } else if (!l.reload && d.has(h)) {
                    var g = d.get(h);
                    l.__asyncLoadAssets__ || !g.__asyncLoadAssets__ ? (i.content = g.addRef(),
                    n.canInvoke && t.dispatch("progress", ++n.finish, n.total, i),
                    e()) : A(t, g, e, !1)
                } else
                    r.parse(a, o, "import", l, (function(i, n) {
                        if (i)
                            return e(i);
                        n._uuid = h,
                        A(t, n, e, !0)
                    }
                    ))
            }
        }
        ]);
        function A(t, e, i, n) {
            var r = t.input
              , s = t.progress
              , l = r.uuid
              , c = r.id
              , u = r.options
              , _ = r.config
              , f = u.__asyncLoadAssets__
              , d = u.cacheAsset
              , g = [];
            e.addRef && e.addRef(),
            a(l, e, Object.create(null), g, !1, f, _),
            s.canInvoke && t.dispatch("progress", ++s.finish, s.total += g.length, r);
            var A = t.options.__exclude__[l] = {
                content: e,
                finish: !1,
                callbacks: [{
                    done: i,
                    item: r
                }]
            }
              , x = v.create({
                input: g,
                options: t.options,
                onProgress: t.onProgress,
                onError: v.prototype.recycle,
                progress: s,
                onComplete: function(t) {
                    if (e.decRef && e.decRef(!1),
                    e.__asyncLoadAssets__ = f,
                    A.finish = !0,
                    A.err = t,
                    !t) {
                        for (var i = Array.isArray(x.output) ? x.output : [x.output], r = Object.create(null), s = 0, a = i.length; s < a; s++) {
                            var u = i[s];
                            u && (r[u instanceof cc.Asset ? u._uuid + "@import" : l + "@native"] = u)
                        }
                        if (n) {
                            if (!h(l, e, r) && !e.__onLoadInvoked__)
                                try {
                                    e.onLoad && e.onLoad(),
                                    e.__onLoadInvoked__ = !0
                                } catch (b) {
                                    cc.error(b.message, b.stack)
                                }
                            p.remove(c),
                            m.remove(c),
                            o(l, e, void 0 !== d ? d : cc.assetManager.cacheAsset)
                        } else if (e.__nativeDepend__ && !e._nativeAsset && !h(l, e, r) && !e.__onLoadInvoked__)
                            try {
                                e.onLoad && e.onLoad(),
                                e.__onLoadInvoked__ = !0
                            } catch (b) {
                                cc.error(b.message, b.stack)
                            }
                        x.recycle()
                    }
                    for (var _ = A.callbacks, y = 0, v = _.length; y < v; y++) {
                        var g = _[y];
                        e.addRef && e.addRef(),
                        g.item.content = e,
                        g.done(t)
                    }
                    _.length = 0
                }
            });
            y.async(x)
        }
        e.exports = function(t, e) {
            var i = !1;
            t.progress || (t.progress = {
                finish: 0,
                total: t.input.length,
                canInvoke: !0
            },
            i = !0);
            var n = t.options
              , r = t.progress;
            n.__exclude__ = n.__exclude__ || Object.create(null),
            t.output = [],
            c(t.input, (function(s, a) {
                var o = v.create({
                    input: s,
                    onProgress: t.onProgress,
                    options: n,
                    progress: r,
                    onComplete: function(n, s) {
                        n && !t.isFinish && (!cc.assetManager.force || i ? (cc.error(n.message, n.stack),
                        r.canInvoke = !1,
                        e(n)) : r.canInvoke && t.dispatch("progress", ++r.finish, r.total, s)),
                        t.output.push(s),
                        o.recycle(),
                        a()
                    }
                });
                g.async(o)
            }
            ), (function() {
                if (n.__exclude__ = null,
                t.isFinish)
                    return u(t, !0),
                    t.dispatch("error");
                l(t),
                u(t, !0),
                e()
            }
            ))
        }
    }
    ), {
        "./pack-manager": 52,
        "./parser": 53,
        "./pipeline": 54,
        "./shared": 58,
        "./task": 59,
        "./utilities": 61
    }],
    52: [(function(t, e) {
        "use strict";
        var i = t("../platform/deserialize-compiled")
          , n = t("./downloader")
          , r = t("./cache")
          , s = t("../platform/js")
          , a = t("./shared").files
          , o = new r;
        function l(t) {
            return o.has(t.uuid)
        }
        var h = {
            unpackJson: function(t, e, n, r) {
                var a = s.createMap(!0)
                  , o = null;
                if (Array.isArray(e)) {
                    (e = (0,
                    i.unpackJSONs)(e)).length !== t.length && cc.errorID(4915);
                    for (var l = 0; l < t.length; l++)
                        a[t[l] + "@import"] = e[l]
                } else {
                    var h = s._getClassId(cc.Texture2D);
                    if (e.type === h) {
                        if (e.data) {
                            var c = e.data.split("|");
                            c.length !== t.length && cc.errorID(4915);
                            for (var u = 0; u < t.length; u++)
                                a[t[u] + "@import"] = (0,
                                i.packCustomObjData)(h, c[u], !0)
                        }
                    } else
                        o = new Error("unmatched type pack!"),
                        a = null
                }
                r && r(o, a)
            },
            init: function() {
                o.clear()
            },
            register: function(t, e) {
                "object" == typeof t ? s.mixin(c, t) : c[t] = e
            },
            unpack: function(t, e, i, n, r) {
                e ? (0,
                c[i])(t, e, n, r) : r && r(new Error("package data is wrong!"))
            },
            load: function(t, e, i) {
                if (t.isNative || !t.info || !t.info.packs)
                    return n.download(t.id, t.url, t.ext, t.options, i);
                if (a.has(t.id))
                    return i(null, a.get(t.id));
                var r = t.info.packs
                  , s = r.find(l);
                if (s)
                    return o.get(s.uuid).push({
                        onComplete: i,
                        id: t.id
                    });
                s = r[0],
                o.add(s.uuid, [{
                    onComplete: i,
                    id: t.id
                }]);
                var c = cc.assetManager._transform(s.uuid, {
                    ext: s.ext,
                    bundle: t.config.name
                });
                n.download(s.uuid, c, s.ext, t.options, (function(e, i) {
                    a.remove(s.uuid),
                    e && cc.error(e.message, e.stack),
                    h.unpack(s.packs, i, s.ext, t.options, (function(t, e) {
                        if (!t)
                            for (var i in e)
                                a.add(i, e[i]);
                        for (var n = o.remove(s.uuid), r = 0, l = n.length; r < l; r++) {
                            var h = n[r];
                            if (t)
                                h.onComplete(t);
                            else {
                                var c = e[h.id];
                                c ? h.onComplete(null, c) : h.onComplete(new Error("can not retrieve data from package"))
                            }
                        }
                    }
                    ))
                }
                ))
            }
        }
          , c = {
            ".json": h.unpackJson
        };
        e.exports = h
    }
    ), {
        "../platform/deserialize-compiled": 208,
        "../platform/js": 214,
        "./cache": 36,
        "./downloader": 45,
        "./shared": 58
    }],
    53: [(function(t, e) {
        "use strict";
        var i = t("../platform/CCSAXParser").plistParser
          , n = t("../platform/js")
          , r = t("./deserialize")
          , s = t("./cache")
          , a = t("./helper").isScene
          , o = t("./shared")
          , l = o.parsed
          , h = o.files
          , c = t("../platform/CCSys")
          , u = c.__audioSupport
          , _ = c.capabilities
          , f = new s
          , d = {
            parseImage: function(t, e, i) {
                if (_.imageBitmap && t instanceof Blob) {
                    var n = {};
                    n.imageOrientation = e.__flipY__ ? "flipY" : "none",
                    n.premultiplyAlpha = e.__premultiplyAlpha__ ? "premultiply" : "none",
                    createImageBitmap(t, n).then((function(t) {
                        t.flipY = !!e.__flipY__,
                        t.premultiplyAlpha = !!e.__premultiplyAlpha__,
                        i && i(null, t)
                    }
                    ), (function(t) {
                        i && i(t, null)
                    }
                    ))
                } else
                    i && i(null, t)
            },
            parseAudio: function(t, e, i) {
                t instanceof ArrayBuffer ? u.context.decodeAudioData(t, (function(t) {
                    i && i(null, t)
                }
                ), (function(t) {
                    i && i(t, null)
                }
                )) : i && i(null, t)
            },
            parsePVRTex: function(t, e, i) {
                var n = null
                  , r = null;
                try {
                    var s = t instanceof ArrayBuffer ? t : t.buffer
                      , a = new Int32Array(s,0,13);
                    if (55727696 != a[0])
                        throw new Error("Invalid magic number in PVR header");
                    var o = a[7]
                      , l = a[6]
                      , h = a[12] + 52;
                    r = {
                        _data: new Uint8Array(s,h),
                        _compressed: !0,
                        width: o,
                        height: l
                    }
                } catch (c) {
                    n = c
                }
                i && i(n, r)
            },
            parsePKMTex: (function() {
                function t(t, e) {
                    return t[e] << 8 | t[e + 1]
                }
                return function(e, i, n) {
                    var r = null
                      , s = null;
                    try {
                        var a = e instanceof ArrayBuffer ? e : e.buffer
                          , o = new Uint8Array(a)
                          , l = t(o, 6);
                        if (0 !== l && 1 !== l && 3 !== l)
                            return new Error("Invalid magic number in ETC header");
                        var h = t(o, 12)
                          , c = t(o, 14);
                        t(o, 8),
                        t(o, 10),
                        s = {
                            _data: new Uint8Array(a,16),
                            _compressed: !0,
                            width: h,
                            height: c
                        }
                    } catch (u) {
                        r = u
                    }
                    n && n(r, s)
                }
            }
            )(),
            parsePlist: function(t, e, n) {
                var r = null
                  , s = i.parse(t);
                s || (r = new Error("parse failed")),
                n && n(r, s)
            },
            parseImport: function(t, e, i) {
                if (!t)
                    return i && i(new Error("Json is empty"));
                var n, s = null;
                try {
                    n = r(t, e)
                } catch (a) {
                    s = a
                }
                i && i(s, n)
            },
            init: function() {
                f.clear()
            },
            register: function(t, e) {
                "object" == typeof t ? n.mixin(p, t) : p[t] = e
            },
            parse: function(t, e, i, n, r) {
                var s, o, c;
                (s = l.get(t)) ? r(null, s) : (o = f.get(t)) ? o.push(r) : (c = p[i]) ? (f.add(t, [r]),
                c(e, n, (function(e, i) {
                    e ? h.remove(t) : a(i) || l.add(t, i);
                    for (var n = f.remove(t), r = 0, s = n.length; r < s; r++)
                        n[r](e, i)
                }
                ))) : r(null, e)
            }
        }
          , p = {
            ".png": d.parseImage,
            ".jpg": d.parseImage,
            ".bmp": d.parseImage,
            ".jpeg": d.parseImage,
            ".gif": d.parseImage,
            ".ico": d.parseImage,
            ".tiff": d.parseImage,
            ".webp": d.parseImage,
            ".image": d.parseImage,
            ".pvr": d.parsePVRTex,
            ".pkm": d.parsePKMTex,
            ".mp3": d.parseAudio,
            ".ogg": d.parseAudio,
            ".wav": d.parseAudio,
            ".m4a": d.parseAudio,
            ".plist": d.parsePlist,
            import: d.parseImport
        };
        e.exports = d
    }
    ), {
        "../platform/CCSAXParser": 200,
        "../platform/CCSys": 202,
        "../platform/js": 214,
        "./cache": 36,
        "./deserialize": 40,
        "./helper": 49,
        "./shared": 58
    }],
    54: [(function(t, e) {
        "use strict";
        var i = t("./task")
          , n = 0;
        function r(t, e) {
            if (Array.isArray(e)) {
                this.id = n++,
                this.name = t,
                this.pipes = [];
                for (var i = 0, r = e.length; i < r; i++)
                    "function" == typeof e[i] && this.pipes.push(e[i])
            } else
                cc.warn("funcs must be an array")
        }
        r.prototype = {
            constructor: r,
            insert: function(t, e) {
                if (!("function" != typeof t || e > this.pipes.length))
                    return this.pipes.splice(e, 0, t),
                    this;
                cc.warnID(4921)
            },
            append: function(t) {
                if ("function" == typeof t)
                    return this.pipes.push(t),
                    this
            },
            remove: function(t) {
                if ("number" == typeof t)
                    return this.pipes.splice(t, 1),
                    this
            },
            sync: function(t) {
                var e = this.pipes;
                if (t instanceof i && 0 !== e.length) {
                    null != t.output && (t.input = t.output,
                    t.output = null),
                    t._isFinish = !1;
                    for (var n = 0, r = e.length; n < r; ) {
                        var s = (0,
                        e[n])(t);
                        if (s)
                            return t._isFinish = !0,
                            s;
                        ++n !== r && (t.input = t.output,
                        t.output = null)
                    }
                    return t._isFinish = !0,
                    t.output
                }
            },
            async: function(t) {
                var e = this.pipes;
                t instanceof i && 0 !== e.length && (null != t.output && (t.input = t.output,
                t.output = null),
                t._isFinish = !1,
                this._flow(0, t))
            },
            _flow: function(t, e) {
                var i = this;
                (0,
                this.pipes[t])(e, (function(n) {
                    n ? (e._isFinish = !0,
                    e.onComplete && e.onComplete(n)) : ++t < i.pipes.length ? (e.input = e.output,
                    e.output = null,
                    i._flow(t, e)) : (e._isFinish = !0,
                    e.onComplete && e.onComplete(n, e.output))
                }
                ))
            }
        },
        e.exports = r
    }
    ), {
        "./task": 59
    }],
    55: [(function(t, e) {
        "use strict";
        var i = t("./task")
          , n = t("./shared")
          , r = n.transformPipeline
          , s = n.RequestType;
        e.exports = function(t, e) {
            var n = t.options
              , a = Object.create(null)
              , o = Object.create(null);
            for (var l in n)
                switch (l) {
                case s.PATH:
                case s.UUID:
                case s.DIR:
                case s.SCENE:
                case s.URL:
                    break;
                case "__requestType__":
                case "__isNative__":
                case "ext":
                case "type":
                case "__nativeName__":
                case "audioLoadMode":
                case "bundle":
                    a[l] = n[l];
                    break;
                case "__exclude__":
                case "__outputAsArray__":
                    o[l] = n[l];
                    break;
                default:
                    a[l] = n[l],
                    o[l] = n[l]
                }
            t.options = o;
            var h = i.create({
                input: t.input,
                options: a
            })
              , c = null;
            try {
                t.output = t.source = r.sync(h)
            } catch (f) {
                c = f;
                for (var u = 0, _ = h.output.length; u < _; u++)
                    h.output[u].recycle()
            }
            h.recycle(),
            e(c)
        }
    }
    ), {
        "./shared": 58,
        "./task": 59
    }],
    56: [(function(t, e) {
        "use strict";
        var i = t("./depend-util")
          , n = t("./cache");
        t("../assets/CCAsset");
        var r = t("./shared").assets
          , s = t("../platform/utils").callInNextTick;
        function a(t, e) {
            t._uuid && e.push(t._uuid)
        }
        function o(t, e) {
            for (var i = Object.getOwnPropertyNames(t), n = 0; n < i.length; n++) {
                var r = i[n];
                if ("node" !== r && "__eventTargets" !== r) {
                    var s = t[r];
                    if ("object" == typeof s && s)
                        if (Array.isArray(s))
                            for (var o = 0; o < s.length; o++) {
                                var l = s[o];
                                l instanceof cc.Asset && a(l, e)
                            }
                        else if (s.constructor && s.constructor !== Object)
                            s instanceof cc.Asset && a(s, e);
                        else
                            for (var h = Object.getOwnPropertyNames(s), c = 0; c < h.length; c++) {
                                var u = s[h[c]];
                                u instanceof cc.Asset && a(u, e)
                            }
                }
            }
        }
        var l = [];
        function h(t, e) {
            for (var i = 0; i < t._components.length; i++)
                o(t._components[i], e);
            for (var n = 0; n < t._children.length; n++)
                h(t._children[n], e)
        }
        function c(t, e, n, s) {
            n.push(t._uuid);
            for (var a = i.getDeps(t._uuid), o = 0, l = a.length; o < l; o++) {
                var h = r.get(a[o]);
                if (h) {
                    var u = h._uuid;
                    if (u in e ? e[u] += s : e[u] = h.refCount + s,
                    n.includes(u))
                        continue;
                    c(h, e, n, s)
                }
            }
        }
        function u(t) {
            var e = Object.create(null);
            if (e[t._uuid] = t.refCount,
            c(t, e, l, -1),
            l.length = 0,
            0 !== e[t._uuid])
                return e[t._uuid];
            for (var i in e)
                0 !== e[i] && c(r.get(i), e, l, 1);
            return l.length = 0,
            e[t._uuid]
        }
        var _ = new n
          , f = new n
          , d = !1;
        function p() {
            d = !1,
            f.forEach((function(t) {
                m._free(t)
            }
            )),
            f.clear()
        }
        var m = {
            init: function() {
                _.clear(),
                f.clear()
            },
            _addPersistNodeRef: function(t) {
                var e = [];
                h(t, e);
                for (var i = 0, n = e.length; i < n; i++) {
                    var s = r.get(e[i]);
                    s && s.addRef()
                }
                _.add(t.uuid, e)
            },
            _removePersistNodeRef: function(t) {
                if (_.has(t.uuid)) {
                    for (var e = _.get(t.uuid), i = 0, n = e.length; i < n; i++) {
                        var s = r.get(e[i]);
                        s && s.decRef()
                    }
                    _.remove(t.uuid)
                }
            },
            _autoRelease: function(t, e, n) {
                if (t) {
                    for (var s = i.getDeps(t._id), a = 0, o = s.length; a < o; a++) {
                        var l = r.get(s[a]);
                        l && l.decRef(t.autoReleaseAssets)
                    }
                    var h = i._depends.get(t._id);
                    if (h && h.persistDeps)
                        for (var c = h.persistDeps, u = 0, f = c.length; u < f; u++) {
                            var d = r.get(c[u]);
                            d && d.decRef(t.autoReleaseAssets)
                        }
                    t._id !== e._id && i.remove(t._id)
                }
                var p = i._depends.get(e._id);
                for (var m in p && (p.persistDeps = []),
                n) {
                    for (var y = n[m], v = _.get(y.uuid), g = 0, A = v.length; g < A; g++) {
                        var x = r.get(v[g]);
                        x && x.addRef()
                    }
                    p && p.persistDeps.push.apply(p.persistDeps, v)
                }
            },
            _free: function(t, e) {
                if (f.remove(t._uuid),
                cc.isValid(t, !0) && !(!e && t.refCount > 0 && u(t) > 0)) {
                    r.remove(t._uuid);
                    for (var n = i.getDeps(t._uuid), s = 0, a = n.length; s < a; s++) {
                        var o = r.get(n[s]);
                        o && (o.decRef(!1),
                        m._free(o, !1))
                    }
                    t.destroy(),
                    i.remove(t._uuid)
                }
            },
            tryRelease: function(t, e) {
                t instanceof cc.Asset && (e ? m._free(t, e) : (f.add(t._uuid, t),
                d || (d = !0,
                s(p))))
            }
        };
        e.exports = m
    }
    ), {
        "../assets/CCAsset": 62,
        "../platform/utils": 217,
        "./cache": 36,
        "./depend-util": 38,
        "./shared": 58
    }],
    57: [(function(t, e) {
        "use strict";
        var i = [];
        function n() {
            this._id = "",
            this.uuid = "",
            this.url = "",
            this.ext = ".json",
            this.content = null,
            this.file = null,
            this.info = null,
            this.config = null,
            this.isNative = !1,
            this.options = Object.create(null)
        }
        n.prototype = {
            constructor: n,
            get id() {
                return this._id || (this._id = this.uuid + "@" + (this.isNative ? "native" : "import")),
                this._id
            },
            recycle: function() {
                500 !== i.length && (this._id = "",
                this.uuid = "",
                this.url = "",
                this.ext = ".json",
                this.content = null,
                this.file = null,
                this.info = null,
                this.config = null,
                this.isNative = !1,
                this.options = Object.create(null),
                i.push(this))
            }
        },
        n.create = function() {
            return 0 !== i.length ? i.pop() : new n
        }
        ,
        e.exports = n
    }
    ), {}],
    58: [(function(t, e) {
        "use strict";
        var i = t("./cache")
          , n = t("./pipeline")
          , r = new i
          , s = new i
          , a = new i
          , o = new i
          , l = new n("normal load",[])
          , h = new n("fetch",[])
          , c = new n("transform url",[]);
        e.exports = {
            assets: r,
            files: s,
            parsed: a,
            pipeline: l,
            fetchPipeline: h,
            transformPipeline: c,
            RequestType: {
                UUID: "uuid",
                PATH: "path",
                DIR: "dir",
                URL: "url",
                SCENE: "scene"
            },
            bundles: o,
            BuiltinBundleName: {
                RESOURCES: "resources",
                INTERNAL: "internal",
                MAIN: "main",
                START_SCENE: "start-scene"
            }
        }
    }
    ), {
        "./cache": 36,
        "./pipeline": 54
    }],
    59: [(function(t, e) {
        "use strict";
        var i = 0
          , n = [];
        function r(t) {
            this.id = i++,
            this._isFinish = !0,
            this.onComplete = null,
            this.onProgress = null,
            this.onError = null,
            this.source = null,
            this.output = null,
            this.input = null,
            this.progress = null,
            this.options = null,
            this.set(t)
        }
        r.prototype = {
            constructor: r,
            set: function(t) {
                t = t || Object.create(null),
                this.onComplete = t.onComplete,
                this.onProgress = t.onProgress,
                this.onError = t.onError,
                this.source = this.input = t.input,
                this.output = null,
                this.progress = t.progress,
                this.options = t.options || Object.create(null)
            },
            dispatch: function(t, e, i, n, r) {
                switch (t) {
                case "complete":
                    this.onComplete && this.onComplete(e, i, n, r);
                    break;
                case "progress":
                    this.onProgress && this.onProgress(e, i, n, r);
                    break;
                case "error":
                    this.onError && this.onError(e, i, n, r);
                    break;
                default:
                    var s = "on" + t[0].toUpperCase() + t.substr(1);
                    "function" == typeof this[s] && this[s](e, i, n, r)
                }
            },
            recycle: function() {
                500 !== n.length && (this.onComplete = null,
                this.onProgress = null,
                this.onError = null,
                this.source = this.output = this.input = null,
                this.progress = null,
                this.options = null,
                n.push(this))
            },
            get isFinish() {
                return this._isFinish
            }
        },
        r.create = function(t) {
            var e = null;
            return 0 !== n.length ? (e = n.pop()).set(t) : e = new r(t),
            e
        }
        ,
        e.exports = r
    }
    ), {}],
    60: [(function(t, e) {
        "use strict";
        var i = t("./helper").decodeUuid
          , n = t("./request-item")
          , r = t("./shared")
          , s = r.RequestType
          , a = r.bundles;
        e.exports = {
            parse: function(t) {
                var e = t.input
                  , r = t.options;
                e = Array.isArray(e) ? e : [e],
                t.output = [];
                for (var o = 0; o < e.length; o++) {
                    var l = e[o]
                      , h = n.create();
                    if ("string" == typeof l && ((l = Object.create(null))[r.__requestType__ || s.UUID] = e[o]),
                    "object" == typeof l)
                        for (var c in cc.js.addon(l, r),
                        l.preset && cc.js.addon(l, cc.assetManager.presets[l.preset]),
                        l) {
                            switch (c) {
                            case s.UUID:
                                var u = h.uuid = i(l.uuid);
                                if (a.has(l.bundle)) {
                                    if ((p = (m = a.get(l.bundle)._config).getAssetInfo(u)) && p.redirect) {
                                        if (!a.has(p.redirect))
                                            throw new Error("Please load bundle " + p.redirect + " first");
                                        p = (m = a.get(p.redirect)._config).getAssetInfo(u)
                                    }
                                    h.config = m,
                                    h.info = p
                                }
                                h.ext = l.ext || ".json";
                                break;
                            case "__requestType__":
                            case "ext":
                            case "bundle":
                            case "preset":
                            case "type":
                                break;
                            case s.DIR:
                                if (a.has(l.bundle)) {
                                    var _ = [];
                                    a.get(l.bundle)._config.getDirWithPath(l.dir, l.type, _);
                                    for (var f = 0, d = _.length; f < d; f++) {
                                        var p = _[f];
                                        e.push({
                                            uuid: p.uuid,
                                            __isNative__: !1,
                                            ext: ".json",
                                            bundle: l.bundle
                                        })
                                    }
                                }
                                h.recycle(),
                                h = null;
                                break;
                            case s.PATH:
                                if (a.has(l.bundle)) {
                                    if ((p = (m = a.get(l.bundle)._config).getInfoWithPath(l.path, l.type)) && p.redirect) {
                                        if (!a.has(p.redirect))
                                            throw new Error("you need to load bundle " + p.redirect + " first");
                                        p = (m = a.get(p.redirect)._config).getAssetInfo(p.uuid)
                                    }
                                    if (!p)
                                        throw h.recycle(),
                                        new Error("Bundle " + l.bundle + " doesn't contain " + l.path);
                                    h.config = m,
                                    h.uuid = p.uuid,
                                    h.info = p
                                }
                                h.ext = l.ext || ".json";
                                break;
                            case s.SCENE:
                                if (a.has(l.bundle)) {
                                    var m;
                                    if ((p = (m = a.get(l.bundle)._config).getSceneInfo(l.scene)) && p.redirect) {
                                        if (!a.has(p.redirect))
                                            throw new Error("you need to load bundle " + p.redirect + " first");
                                        p = (m = a.get(p.redirect)._config).getAssetInfo(p.uuid)
                                    }
                                    if (!p)
                                        throw h.recycle(),
                                        new Error("Bundle " + m.name + " doesn't contain scene " + l.scene);
                                    h.config = m,
                                    h.uuid = p.uuid,
                                    h.info = p
                                }
                                break;
                            case "__isNative__":
                                h.isNative = l.__isNative__;
                                break;
                            case s.URL:
                                h.url = l.url,
                                h.uuid = l.uuid || l.url,
                                h.ext = l.ext || cc.path.extname(l.url),
                                h.isNative = void 0 === l.__isNative__ || l.__isNative__;
                                break;
                            default:
                                h.options[c] = l[c]
                            }
                            if (!h)
                                break
                        }
                    if (h && (t.output.push(h),
                    !h.uuid && !h.url))
                        throw new Error("Can not parse this input:" + JSON.stringify(l))
                }
                return null
            },
            combine: function(t) {
                for (var e = t.output = t.input, i = 0; i < e.length; i++) {
                    var n = e[i];
                    if (!n.url) {
                        var r, s, a = n.config;
                        s = n.isNative ? a && a.nativeBase ? a.base + a.nativeBase : cc.assetManager.generalNativeBase : a && a.importBase ? a.base + a.importBase : cc.assetManager.generalImportBase;
                        var o = n.uuid
                          , l = "";
                        n.info && (l = n.isNative ? n.info.nativeVer ? "." + n.info.nativeVer : "" : n.info.ver ? "." + n.info.ver : ""),
                        r = ".ttf" === n.ext ? s + "/" + o.slice(0, 2) + "/" + o + l + "/" + n.options.__nativeName__ : s + "/" + o.slice(0, 2) + "/" + o + l + n.ext,
                        n.url = r
                    }
                }
                return null
            }
        }
    }
    ), {
        "./helper": 49,
        "./request-item": 57,
        "./shared": 58
    }],
    61: [(function(t, e) {
        "use strict";
        var i = t("./depend-util")
          , n = t("./helper")
          , r = n.isScene
          , s = n.decodeUuid
          , a = t("./shared").assets
          , o = t("../platform/utils").callInNextTick;
        t("../assets/CCAsset");
        var l = {
            processOptions: function(t) {
                var e = t.uuids
                  , i = t.paths
                  , n = t.types
                  , r = t.deps
                  , a = t.paths = Object.create(null);
                if (!1 === t.debug) {
                    for (var o = 0, l = e.length; o < l; o++)
                        e[o] = s(e[o]);
                    for (var h in i) {
                        var c = i[h]
                          , u = c[1];
                        c[1] = n[u]
                    }
                } else {
                    for (var _ = Object.create(null), f = 0, d = e.length; f < d; f++) {
                        var p = e[f];
                        e[f] = _[p] = s(p)
                    }
                    e = _
                }
                for (var m in i) {
                    var y = i[m];
                    a[e[m]] = y
                }
                var v = t.scenes;
                for (var g in v) {
                    var A = v[g];
                    v[g] = e[A]
                }
                var x = t.packs;
                for (var b in x)
                    for (var C = x[b], T = 0; T < C.length; ++T)
                        C[T] = e[C[T]];
                var S = t.versions;
                if (S)
                    for (var w in S)
                        for (var E = S[w], M = 0; M < E.length; M += 2) {
                            var D = E[M];
                            E[M] = e[D] || D
                        }
                var B = t.redirect;
                if (B)
                    for (var I = 0; I < B.length; I += 2)
                        B[I] = e[B[I]],
                        B[I + 1] = r[B[I + 1]]
            },
            clear: function(t, e) {
                for (var i = 0, n = t.input.length; i < n; i++) {
                    var r = t.input[i];
                    e && !r.isNative && r.content && r.content.decRef && r.content.decRef(!1),
                    r.recycle()
                }
                t.input = null
            },
            urlAppendTimestamp: function(t) {
                return cc.assetManager.downloader.appendTimeStamp && "string" == typeof t ? /\?/.test(t) ? t + "&_t=" + (new Date - 0) : t + "?_t=" + (new Date - 0) : t
            },
            retry: function(t, e, i, n, r) {
                t(r = r || 0, (function(s, a) {
                    r++,
                    !s || r > e ? n && n(s, a) : setTimeout((function() {
                        l.retry(t, e, i, n, r)
                    }
                    ), i)
                }
                ))
            },
            getDepends: function(t, e, n, r, s, a, o) {
                try {
                    var l = i.parse(t, e)
                      , h = !0;
                    if (e instanceof cc.Asset && (!e.__nativeDepend__ || e._nativeAsset) && (h = !1),
                    s) {
                        for (var c = 0, u = l.deps.length; c < u; c++) {
                            var _ = l.deps[c];
                            _ in n || (n[_] = !0,
                            r.push({
                                uuid: _,
                                bundle: o && o.name
                            }))
                        }
                        h && l.nativeDep && (o && (l.nativeDep.bundle = o.name),
                        r.push(Object.assign({}, l.nativeDep)))
                    } else {
                        a = !!e.asyncLoadAssets || a && !l.preventDeferredLoadDependents;
                        for (var f = 0, d = l.deps.length; f < d; f++) {
                            var p = l.deps[f];
                            p in n || (n[p] = !0,
                            r.push({
                                uuid: p,
                                __asyncLoadAssets__: a,
                                bundle: o && o.name
                            }))
                        }
                        h && !a && !l.preventPreloadNativeObject && l.nativeDep && (o && (l.nativeDep.bundle = o.name),
                        r.push(Object.assign({}, l.nativeDep)))
                    }
                } catch (m) {
                    cc.error(m.message, m.stack)
                }
            },
            cache: function(t, e, i) {
                e && (!r(e) && i && a.add(t, e))
            },
            setProperties: function(t, e, i) {
                var n = !1
                  , r = e.__depends__;
                if (r) {
                    for (var s = 0, a = r.length; s < a; s++) {
                        var o = r[s]
                          , l = i[o.uuid + "@import"];
                        l ? o.owner[o.prop] = l.addRef() : (cc.error("The asset " + o.uuid + " is missing!"),
                        n = !0)
                    }
                    e.__depends__ = void 0
                }
                return e.__nativeDepend__ && (e._nativeAsset || (i[t + "@native"] ? e._nativeAsset = i[t + "@native"] : n = !0),
                e.__nativeDepend__ = void 0),
                n
            },
            gatherAsset: function(t) {
                var e = t.source;
                if (t.options.__outputAsArray__ || 1 !== e.length)
                    for (var i = t.output = [], n = 0, r = e.length; n < r; n++)
                        i.push(e[n].content);
                else
                    t.output = e[0].content
            },
            forEach: function(t, e, i) {
                var n = 0
                  , r = [];
                0 === t.length && i && i(r);
                for (var s = 0, a = t.length; s < a; s++)
                    e(t[s], (function(t) {
                        t && r.push(t),
                        ++n === a && i && i(r)
                    }
                    ))
            },
            parseParameters: function(t, e, i) {
                if (void 0 === i) {
                    var n = "function" == typeof t;
                    e ? (i = e,
                    n || (e = null)) : void 0 === e && n && (i = t,
                    t = null,
                    e = null),
                    void 0 !== e && n && (e = t,
                    t = null)
                }
                return {
                    options: t = t || Object.create(null),
                    onProgress: e,
                    onComplete: i
                }
            },
            parseLoadResArgs: function(t, e, i) {
                if (void 0 === i) {
                    var n = cc.js.isChildClassOf(t, cc.Asset);
                    e ? (i = e,
                    n && (e = null)) : void 0 !== e || n || (i = t,
                    e = null,
                    t = null),
                    void 0 === e || n || (e = t,
                    t = null)
                }
                return {
                    type: t,
                    onProgress: e,
                    onComplete: i
                }
            },
            checkCircleReference: function(t, e, n, r) {
                if (r || (r = Object.create(null)),
                !n[e] || r[e])
                    return !1;
                r[e] = !0;
                var s = !1
                  , a = i.getDeps(e);
                if (a)
                    for (var o = 0, h = a.length; o < h; o++) {
                        var c = a[o];
                        if (c === t || l.checkCircleReference(t, c, n, r)) {
                            s = !0;
                            break
                        }
                    }
                return s
            },
            asyncify: function(t) {
                return function(e, i) {
                    if (t) {
                        var n = [];
                        Array.isArray(i) ? i.forEach((function(t) {
                            return t instanceof cc.Asset && n.push(t.addRef())
                        }
                        )) : i instanceof cc.Asset && n.push(i.addRef()),
                        o((function() {
                            n.forEach((function(t) {
                                return t.decRef(!1)
                            }
                            )),
                            t(e, i)
                        }
                        ))
                    }
                }
            }
        };
        e.exports = l
    }
    ), {
        "../assets/CCAsset": 62,
        "../platform/utils": 217,
        "./depend-util": 38,
        "./helper": 49,
        "./shared": 58
    }],
    62: [(function(t, e) {
        "use strict";
        var i = t("../platform/CCObject");
        cc.Asset = cc.Class({
            name: "cc.Asset",
            extends: i,
            ctor: function() {
                Object.defineProperty(this, "_uuid", {
                    value: "",
                    writable: !0
                }),
                this.loaded = !0,
                this._nativeUrl = "",
                this._ref = 0
            },
            properties: {
                nativeUrl: {
                    get: function() {
                        if (!this._nativeUrl && this._native) {
                            var t = this._native;
                            if (47 === t.charCodeAt(0))
                                return t.slice(1);
                            46 === t.charCodeAt(0) ? this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {
                                nativeExt: t,
                                isNative: !0
                            }) : this._nativeUrl = cc.assetManager.utils.getUrlWithUuid(this._uuid, {
                                __nativeName__: t,
                                nativeExt: cc.path.extname(t),
                                isNative: !0
                            })
                        }
                        return this._nativeUrl
                    },
                    visible: !1
                },
                refCount: {
                    get: function() {
                        return this._ref
                    }
                },
                _native: "",
                _nativeAsset: {
                    get: function() {
                        return this._$nativeAsset
                    },
                    set: function(t) {
                        this._$nativeAsset = t
                    }
                },
                _nativeDep: {
                    get: function() {
                        if (this._native)
                            return {
                                __isNative__: !0,
                                uuid: this._uuid,
                                ext: this._native
                            }
                    }
                }
            },
            statics: {
                deserialize: !1,
                preventDeferredLoadDependents: !1,
                preventPreloadNativeObject: !1
            },
            toString: function() {
                return this.nativeUrl
            },
            serialize: !1,
            createNode: null,
            _setRawAsset: function(t, e) {
                this._native = !1 !== e ? t || void 0 : "/" + t
            },
            addRef: function() {
                return this._ref++,
                this
            },
            decRef: function(t) {
                return this._ref > 0 && this._ref--,
                !1 !== t && cc.assetManager._releaseManager.tryRelease(this),
                this
            }
        }),
        e.exports = cc.Asset
    }
    ), {
        "../platform/CCObject": 199
    }],
    63: [(function(t, e) {
        "use strict";
        var i = t("./CCAsset")
          , n = t("../event/event-target")
          , r = cc.Enum({
            WEB_AUDIO: 0,
            DOM_AUDIO: 1
        })
          , s = cc.Class({
            name: "cc.AudioClip",
            extends: i,
            mixins: [n],
            ctor: function() {
                this._loading = !1,
                this.loaded = !1,
                this._audio = null
            },
            properties: {
                duration: 0,
                loadMode: {
                    default: r.WEB_AUDIO,
                    type: r
                },
                _nativeAsset: {
                    get: function() {
                        return this._audio
                    },
                    set: function(t) {
                        t instanceof cc.AudioClip ? this._audio = t._nativeAsset : this._audio = t,
                        this._audio && (this.loaded = !0,
                        this.emit("load"))
                    },
                    override: !0
                },
                _nativeDep: {
                    get: function() {
                        return {
                            uuid: this._uuid,
                            audioLoadMode: this.loadMode,
                            ext: cc.path.extname(this._native),
                            __isNative__: !0
                        }
                    },
                    override: !0
                }
            },
            statics: {
                LoadMode: r,
                _loadByUrl: function(t, e) {
                    var i = cc.assetManager.assets.get(t);
                    i ? e(null, i) : cc.assetManager.loadRemote(t, (function(t, i) {
                        if (t)
                            return e(t);
                        e(null, i)
                    }
                    ))
                }
            },
            _ensureLoaded: function(t) {
                if (this.loaded)
                    return t && t();
                if (t && this.once("load", t),
                !this._loading) {
                    this._loading = !0;
                    var e = this;
                    cc.assetManager.postLoadNative(this, (function() {
                        e._loading = !1
                    }
                    ))
                }
            },
            destroy: function() {
                cc.audioEngine.uncache(this),
                this._super()
            }
        });
        cc.AudioClip = s,
        e.exports = s
    }
    ), {
        "../event/event-target": 140,
        "./CCAsset": 62
    }],
    64: [(function(t, e) {
        "use strict";
        var i = function() {
            this.u = 0,
            this.v = 0,
            this.w = 0,
            this.h = 0,
            this.offsetX = 0,
            this.offsetY = 0,
            this.textureID = 0,
            this.valid = !1,
            this.xAdvance = 0
        }
          , n = function(t) {
            this._letterDefinitions = {},
            this._texture = t
        };
        n.prototype = {
            constructor: n,
            addLetterDefinitions: function(t, e) {
                this._letterDefinitions[t] = e
            },
            cloneLetterDefinition: function() {
                var t = {};
                for (var e in this._letterDefinitions) {
                    var n = new i;
                    cc.js.mixin(n, this._letterDefinitions[e]),
                    t[e] = n
                }
                return t
            },
            getTexture: function() {
                return this._texture
            },
            getLetter: function(t) {
                return this._letterDefinitions[t]
            },
            getLetterDefinitionForChar: function(t) {
                var e = t.charCodeAt(0);
                return this._letterDefinitions.hasOwnProperty(e) ? this._letterDefinitions[e] : null
            },
            clear: function() {
                this._letterDefinitions = {}
            }
        };
        var r = cc.Class({
            name: "cc.BitmapFont",
            extends: cc.Font,
            properties: {
                fntDataStr: {
                    default: ""
                },
                spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame
                },
                fontSize: {
                    default: -1
                },
                _fntConfig: null,
                _fontDefDictionary: null
            },
            onLoad: function() {
                var t = this.spriteFrame;
                this._fontDefDictionary || (this._fontDefDictionary = new n,
                t && (this._fontDefDictionary._texture = t._texture));
                var e = this._fntConfig;
                if (e) {
                    var r = e.fontDefDictionary;
                    for (var s in r) {
                        var a = new i
                          , o = r[s].rect;
                        a.offsetX = r[s].xOffset,
                        a.offsetY = r[s].yOffset,
                        a.w = o.width,
                        a.h = o.height,
                        a.u = o.x,
                        a.v = o.y,
                        a.textureID = 0,
                        a.valid = !0,
                        a.xAdvance = r[s].xAdvance,
                        this._fontDefDictionary.addLetterDefinitions(s, a)
                    }
                }
            }
        });
        cc.BitmapFont = r,
        cc.BitmapFont.FontLetterDefinition = i,
        cc.BitmapFont.FontAtlas = n,
        e.exports = r
    }
    ), {}],
    65: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.BufferAsset",
            extends: cc.Asset,
            ctor: function() {
                this._buffer = null
            },
            properties: {
                _nativeAsset: {
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = t.buffer || t
                    },
                    override: !0
                },
                buffer: function() {
                    return this._buffer
                }
            }
        });
        cc.BufferAsset = e.exports = i
    }
    ), {}],
    66: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.Font",
            extends: cc.Asset
        });
        cc.Font = e.exports = i
    }
    ), {}],
    67: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.JsonAsset",
            extends: cc.Asset,
            properties: {
                json: null
            }
        });
        e.exports = cc.JsonAsset = i
    }
    ), {}],
    68: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.LabelAtlas",
            extends: cc.BitmapFont,
            onLoad: function() {
                this.spriteFrame ? this._fntConfig ? this._super() : cc.warnID(9101, this.name) : cc.warnID(9100, this.name)
            }
        });
        cc.LabelAtlas = i,
        e.exports = i
    }
    ), {}],
    69: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            AUTO: 0,
            SINGLE_INSTANCE: 1,
            MULTI_INSTANCE: 2
        })
          , n = cc.Class({
            name: "cc.Prefab",
            extends: cc.Asset,
            ctor: function() {
                this._createFunction = null,
                this._instantiatedTimes = 0
            },
            properties: {
                data: null,
                optimizationPolicy: i.AUTO,
                asyncLoadAssets: !1,
                readonly: {
                    default: !1,
                    editorOnly: !0
                }
            },
            statics: {
                OptimizationPolicy: i,
                OptimizationPolicyThreshold: 3
            },
            createNode: !1,
            compileCreateFunction: function() {
                var e = t("../platform/instantiate-jit");
                this._createFunction = e.compile(this.data)
            },
            _doInstantiate: function(t) {
                return this.data._prefab || cc.warnID(3700),
                this._createFunction || this.compileCreateFunction(),
                this._createFunction(t)
            },
            _instantiate: function() {
                var t;
                return this.optimizationPolicy !== i.SINGLE_INSTANCE && (this.optimizationPolicy === i.MULTI_INSTANCE || this._instantiatedTimes + 1 >= n.OptimizationPolicyThreshold) ? (t = this._doInstantiate(),
                this.data._instantiate(t)) : t = this.data._instantiate(),
                ++this._instantiatedTimes,
                t
            },
            destroy: function() {
                this.data && this.data.destroy(),
                this._super()
            }
        });
        cc.Prefab = e.exports = n,
        cc.js.obsolete(cc, "cc._Prefab", "Prefab")
    }
    ), {
        "../platform/instantiate-jit": 212
    }],
    70: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../renderer/gfx")) && i.__esModule ? i : {
            default: i
        }, r = t("../renderer"), s = t("./CCTexture2D"), a = cc.Enum({
            RB_FMT_D24S8: n.default.RB_FMT_D24S8,
            RB_FMT_S8: n.default.RB_FMT_S8,
            RB_FMT_D16: n.default.RB_FMT_D16
        }), o = cc.Class({
            name: "cc.RenderTexture",
            extends: s,
            statics: {
                DepthStencilFormat: a
            },
            ctor: function() {
                this._framebuffer = null
            },
            initWithSize: function(t, e, i) {
                this.width = Math.floor(t || cc.visibleRect.width),
                this.height = Math.floor(e || cc.visibleRect.height),
                this._resetUnderlyingMipmaps();
                var s, a = {
                    colors: [this._texture]
                };
                this._depthStencilBuffer && this._depthStencilBuffer.destroy(),
                i && (s = new n.default.RenderBuffer(r.device,i,t,e),
                i === n.default.RB_FMT_D24S8 ? a.depthStencil = s : i === n.default.RB_FMT_S8 ? a.stencil = s : i === n.default.RB_FMT_D16 && (a.depth = s)),
                this._depthStencilBuffer = s,
                this._framebuffer && this._framebuffer.destroy(),
                this._framebuffer = new n.default.FrameBuffer(r.device,t,e,a),
                this._packable = !1,
                this.loaded = !0,
                this.emit("load")
            },
            updateSize: function(t, e) {
                this.width = Math.floor(t || cc.visibleRect.width),
                this.height = Math.floor(e || cc.visibleRect.height),
                this._resetUnderlyingMipmaps();
                var i = this._depthStencilBuffer;
                i && i.update(this.width, this.height),
                this._framebuffer._width = t,
                this._framebuffer._height = e
            },
            drawTextureAt: function(t, e, i) {
                t._image && 0 !== t._image.width && this._texture.updateSubImage({
                    x: e,
                    y: i,
                    image: t._image,
                    width: t.width,
                    height: t.height,
                    level: 0,
                    flipY: !1,
                    premultiplyAlpha: t._premultiplyAlpha
                })
            },
            readPixels: function(t, e, i, n, r) {
                if (!this._framebuffer || !this._texture)
                    return t;
                e = e || 0,
                i = i || 0;
                var s = n || this.width
                  , a = r || this.height;
                t = t || new Uint8Array(s * a * 4);
                var o = cc.game._renderContext
                  , l = o.getParameter(o.FRAMEBUFFER_BINDING);
                return o.bindFramebuffer(o.FRAMEBUFFER, this._framebuffer.getHandle()),
                o.readPixels(e, i, s, a, o.RGBA, o.UNSIGNED_BYTE, t),
                o.bindFramebuffer(o.FRAMEBUFFER, l),
                t
            },
            destroy: function() {
                this._super(),
                this._framebuffer && (this._framebuffer.destroy(),
                this._framebuffer = null)
            }
        });
        cc.RenderTexture = e.exports = o
    }
    ), {
        "../../renderer/gfx": 315,
        "../renderer": 224,
        "./CCTexture2D": 77
    }],
    71: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.SceneAsset",
            extends: cc.Asset,
            properties: {
                scene: null,
                asyncLoadAssets: void 0
            }
        });
        cc.SceneAsset = i,
        e.exports = i
    }
    ), {}],
    72: [(function() {
        "use strict";
        var t = cc.Class({
            name: "cc.Script",
            extends: cc.Asset
        });
        cc._Script = t;
        var e = cc.Class({
            name: "cc.JavaScript",
            extends: t
        });
        cc._JavaScript = e;
        var i = cc.Class({
            name: "cc.TypeScript",
            extends: t
        });
        cc._TypeScript = i
    }
    ), {}],
    73: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.SpriteAtlas",
            extends: cc.Asset,
            properties: {
                _spriteFrames: {
                    default: {}
                }
            },
            getTexture: function() {
                var t = Object.keys(this._spriteFrames);
                if (t.length > 0) {
                    var e = this._spriteFrames[t[0]];
                    return e ? e.getTexture() : null
                }
                return null
            },
            getSpriteFrame: function(t) {
                var e = this._spriteFrames[t];
                return e ? (e.name || (e.name = t),
                e) : null
            },
            getSpriteFrames: function() {
                var t = []
                  , e = this._spriteFrames;
                for (var i in e)
                    t.push(this.getSpriteFrame(i));
                return t
            }
        });
        cc.SpriteAtlas = i,
        e.exports = i
    }
    ), {}],
    74: [(function(t, e) {
        "use strict";
        var i = t("../event/event-target")
          , n = [{
            u: 0,
            v: 0
        }, {
            u: 0,
            v: 0
        }, {
            u: 0,
            v: 0
        }, {
            u: 0,
            v: 0
        }]
          , r = cc.Class({
            name: "cc.SpriteFrame",
            extends: t("../assets/CCAsset"),
            mixins: [i],
            properties: {
                _textureSetter: {
                    set: function(t) {
                        t && this._texture !== t && this._refreshTexture(t)
                    }
                },
                insetTop: {
                    get: function() {
                        return this._capInsets[1]
                    },
                    set: function(t) {
                        this._capInsets[1] = t,
                        this._texture && this._calculateSlicedUV()
                    }
                },
                insetBottom: {
                    get: function() {
                        return this._capInsets[3]
                    },
                    set: function(t) {
                        this._capInsets[3] = t,
                        this._texture && this._calculateSlicedUV()
                    }
                },
                insetLeft: {
                    get: function() {
                        return this._capInsets[0]
                    },
                    set: function(t) {
                        this._capInsets[0] = t,
                        this._texture && this._calculateSlicedUV()
                    }
                },
                insetRight: {
                    get: function() {
                        return this._capInsets[2]
                    },
                    set: function(t) {
                        this._capInsets[2] = t,
                        this._texture && this._calculateSlicedUV()
                    }
                }
            },
            ctor: function() {
                i.call(this);
                var t = arguments[0]
                  , e = arguments[1]
                  , n = arguments[2]
                  , r = arguments[3]
                  , s = arguments[4];
                this._rect = null,
                this.uv = [],
                this._texture = null,
                this._original = null,
                this._offset = null,
                this._originalSize = null,
                this._rotated = !1,
                this._flipX = !1,
                this._flipY = !1,
                this.vertices = null,
                this._capInsets = [0, 0, 0, 0],
                this.uvSliced = [],
                void 0 !== t && this.setTexture(t, e, n, r, s)
            },
            textureLoaded: function() {
                return this._texture && this._texture.loaded
            },
            onTextureLoaded: function(t, e) {
                return this.textureLoaded() ? (t.call(e),
                !0) : (this.once("load", t, e),
                this.ensureLoadTexture(),
                !1)
            },
            isRotated: function() {
                return this._rotated
            },
            setRotated: function(t) {
                this._rotated = t,
                this._texture && this._calculateUV()
            },
            isFlipX: function() {
                return this._flipX
            },
            isFlipY: function() {
                return this._flipY
            },
            setFlipX: function(t) {
                this._flipX = t,
                this._texture && this._calculateUV()
            },
            setFlipY: function(t) {
                this._flipY = t,
                this._texture && this._calculateUV()
            },
            getRect: function() {
                return cc.rect(this._rect)
            },
            setRect: function(t) {
                this._rect = t,
                this._texture && this._calculateUV()
            },
            getOriginalSize: function() {
                return cc.size(this._originalSize)
            },
            setOriginalSize: function(t) {
                this._originalSize ? (this._originalSize.width = t.width,
                this._originalSize.height = t.height) : this._originalSize = cc.size(t)
            },
            getTexture: function() {
                return this._texture
            },
            _textureLoadedCallback: function() {
                var t = this._texture;
                if (t) {
                    var e = t.width
                      , i = t.height;
                    this._rect ? this._checkRect(this._texture) : this._rect = cc.rect(0, 0, e, i),
                    this._originalSize || this.setOriginalSize(cc.size(e, i)),
                    this._offset || this.setOffset(cc.v2(0, 0)),
                    this._calculateUV(),
                    this.emit("load")
                }
            },
            _refreshTexture: function(t) {
                this._texture = t,
                t.loaded ? this._textureLoadedCallback() : t.once("load", this._textureLoadedCallback, this)
            },
            getOffset: function() {
                return cc.v2(this._offset)
            },
            setOffset: function(t) {
                this._offset = cc.v2(t)
            },
            clone: function() {
                return new r(this._texture,this.getRect(),this._rotated,this.getOffset(),this.getOriginalSize())
            },
            setTexture: function(t, e, i, n, r) {
                if (1 !== arguments.length || t !== this._texture) {
                    if (this._rect = e || null,
                    n ? this.setOffset(n) : this._offset = null,
                    r ? this.setOriginalSize(r) : this._originalSize = null,
                    this._rotated = i || !1,
                    "string" != typeof t)
                        return t instanceof cc.Texture2D && this._refreshTexture(t),
                        !0;
                    cc.errorID(3401)
                }
            },
            ensureLoadTexture: function() {
                this._texture && (this._texture.loaded || (this._refreshTexture(this._texture),
                cc.assetManager.postLoadNative(this._texture)))
            },
            _checkRect: function(t) {
                var e = this._rect
                  , i = e.x
                  , n = e.y;
                this._rotated ? (i += e.height,
                n += e.width) : (i += e.width,
                n += e.height),
                i > t.width && cc.errorID(3300, t.nativeUrl + "/" + this.name, i, t.width),
                n > t.height && cc.errorID(3400, t.nativeUrl + "/" + this.name, n, t.height)
            },
            _flipXY: function(t) {
                if (this._flipX) {
                    var e = t[0];
                    t[0] = t[1],
                    t[1] = e,
                    e = t[2],
                    t[2] = t[3],
                    t[3] = e
                }
                if (this._flipY) {
                    var i = t[0];
                    t[0] = t[2],
                    t[2] = i,
                    i = t[1],
                    t[1] = t[3],
                    t[3] = i
                }
            },
            _calculateSlicedUV: function() {
                var t = this._rect
                  , e = this._texture.width
                  , i = this._texture.height
                  , r = this._capInsets[0]
                  , s = this._capInsets[2]
                  , a = t.width - r - s
                  , o = this._capInsets[1]
                  , l = this._capInsets[3]
                  , h = t.height - o - l
                  , c = this.uvSliced;
                if (c.length = 0,
                this._rotated) {
                    n[0].u = t.x / e,
                    n[1].u = (t.x + l) / e,
                    n[2].u = (t.x + l + h) / e,
                    n[3].u = (t.x + t.height) / e,
                    n[3].v = t.y / i,
                    n[2].v = (t.y + r) / i,
                    n[1].v = (t.y + r + a) / i,
                    n[0].v = (t.y + t.width) / i,
                    this._flipXY(n);
                    for (var u = 0; u < 4; ++u)
                        for (var _ = n[u], f = 0; f < 4; ++f) {
                            var d = n[3 - f];
                            c.push({
                                u: _.u,
                                v: d.v
                            })
                        }
                } else {
                    n[0].u = t.x / e,
                    n[1].u = (t.x + r) / e,
                    n[2].u = (t.x + r + a) / e,
                    n[3].u = (t.x + t.width) / e,
                    n[3].v = t.y / i,
                    n[2].v = (t.y + o) / i,
                    n[1].v = (t.y + o + h) / i,
                    n[0].v = (t.y + t.height) / i,
                    this._flipXY(n);
                    for (var p = 0; p < 4; ++p)
                        for (var m = n[p], y = 0; y < 4; ++y) {
                            var v = n[y];
                            c.push({
                                u: v.u,
                                v: m.v
                            })
                        }
                }
            },
            _setDynamicAtlasFrame: function(t) {
                t && (this._original = {
                    _texture: this._texture,
                    _x: this._rect.x,
                    _y: this._rect.y
                },
                this._texture = t.texture,
                this._rect.x = t.x,
                this._rect.y = t.y,
                this._calculateUV())
            },
            _resetDynamicAtlasFrame: function() {
                this._original && (this._rect.x = this._original._x,
                this._rect.y = this._original._y,
                this._texture = this._original._texture,
                this._original = null,
                this._calculateUV())
            },
            _calculateUV: function() {
                var t = this._rect
                  , e = this._texture
                  , i = this.uv
                  , n = e.width
                  , r = e.height;
                if (this._rotated) {
                    var s = 0 === n ? 0 : t.x / n
                      , a = 0 === n ? 0 : (t.x + t.height) / n
                      , o = 0 === r ? 0 : (t.y + t.width) / r
                      , l = 0 === r ? 0 : t.y / r;
                    i[0] = s,
                    i[1] = l,
                    i[2] = s,
                    i[3] = o,
                    i[4] = a,
                    i[5] = l,
                    i[6] = a,
                    i[7] = o
                } else {
                    var h = 0 === n ? 0 : t.x / n
                      , c = 0 === n ? 0 : (t.x + t.width) / n
                      , u = 0 === r ? 0 : (t.y + t.height) / r
                      , _ = 0 === r ? 0 : t.y / r;
                    i[0] = h,
                    i[1] = u,
                    i[2] = c,
                    i[3] = u,
                    i[4] = h,
                    i[5] = _,
                    i[6] = c,
                    i[7] = _
                }
                if (this._flipX) {
                    var f = i[0];
                    i[0] = i[2],
                    i[2] = f,
                    f = i[1],
                    i[1] = i[3],
                    i[3] = f,
                    f = i[4],
                    i[4] = i[6],
                    i[6] = f,
                    f = i[5],
                    i[5] = i[7],
                    i[7] = f
                }
                if (this._flipY) {
                    var d = i[0];
                    i[0] = i[4],
                    i[4] = d,
                    d = i[1],
                    i[1] = i[5],
                    i[5] = d,
                    d = i[2],
                    i[2] = i[6],
                    i[6] = d,
                    d = i[3],
                    i[3] = i[7],
                    i[7] = d
                }
                var p = this.vertices;
                if (p) {
                    p.nu.length = 0,
                    p.nv.length = 0;
                    for (var m = 0; m < p.u.length; m++)
                        p.nu[m] = p.u[m] / n,
                        p.nv[m] = p.v[m] / r
                }
                this._calculateSlicedUV()
            },
            _serialize: !1,
            _deserialize: function(t) {
                var e = t.rect;
                e && (this._rect = new cc.Rect(e[0],e[1],e[2],e[3])),
                t.offset && this.setOffset(new cc.Vec2(t.offset[0],t.offset[1])),
                t.originalSize && this.setOriginalSize(new cc.Size(t.originalSize[0],t.originalSize[1])),
                this._rotated = 1 === t.rotated,
                this._name = t.name;
                var i = t.capInsets;
                i && (this._capInsets[0] = i[0],
                this._capInsets[1] = i[1],
                this._capInsets[2] = i[2],
                this._capInsets[3] = i[3]),
                this.vertices = t.vertices,
                this.vertices && (this.vertices.nu = [],
                this.vertices.nv = [])
            }
        })
          , s = r.prototype;
        s.copyWithZone = s.clone,
        s.copy = s.clone,
        s.initWithTexture = s.setTexture,
        cc.SpriteFrame = r,
        e.exports = r
    }
    ), {
        "../assets/CCAsset": 62,
        "../event/event-target": 140
    }],
    75: [(function(t, e) {
        "use strict";
        var i = t("./CCFont")
          , n = cc.Class({
            name: "cc.TTFFont",
            extends: i,
            properties: {
                _fontFamily: null,
                _nativeAsset: {
                    type: cc.String,
                    get: function() {
                        return this._fontFamily
                    },
                    set: function(t) {
                        this._fontFamily = t || "Arial"
                    },
                    override: !0
                },
                _nativeDep: {
                    get: function() {
                        return {
                            uuid: this._uuid,
                            __nativeName__: this._native,
                            ext: cc.path.extname(this._native),
                            __isNative__: !0
                        }
                    },
                    override: !0
                }
            }
        });
        cc.TTFFont = e.exports = n
    }
    ), {
        "./CCFont": 66
    }],
    76: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.TextAsset",
            extends: cc.Asset,
            properties: {
                text: ""
            },
            toString: function() {
                return this.text
            }
        });
        e.exports = cc.TextAsset = i
    }
    ), {}],
    77: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../renderer/gfx")) && i.__esModule ? i : {
            default: i
        }, r = t("../event/event-target"), s = t("../renderer");
        t("../platform/CCClass");
        var a = new (t("../platform/id-generater"))("Tex")
          , o = 1024
          , l = cc.Enum({
            RGB565: n.default.TEXTURE_FMT_R5_G6_B5,
            RGB5A1: n.default.TEXTURE_FMT_R5_G5_B5_A1,
            RGBA4444: n.default.TEXTURE_FMT_R4_G4_B4_A4,
            RGB888: n.default.TEXTURE_FMT_RGB8,
            RGBA8888: n.default.TEXTURE_FMT_RGBA8,
            RGBA32F: n.default.TEXTURE_FMT_RGBA32F,
            A8: n.default.TEXTURE_FMT_A8,
            I8: n.default.TEXTURE_FMT_L8,
            AI8: n.default.TEXTURE_FMT_L8_A8,
            RGB_PVRTC_2BPPV1: n.default.TEXTURE_FMT_RGB_PVRTC_2BPPV1,
            RGBA_PVRTC_2BPPV1: n.default.TEXTURE_FMT_RGBA_PVRTC_2BPPV1,
            RGB_A_PVRTC_2BPPV1: o++,
            RGB_PVRTC_4BPPV1: n.default.TEXTURE_FMT_RGB_PVRTC_4BPPV1,
            RGBA_PVRTC_4BPPV1: n.default.TEXTURE_FMT_RGBA_PVRTC_4BPPV1,
            RGB_A_PVRTC_4BPPV1: o++,
            RGB_ETC1: n.default.TEXTURE_FMT_RGB_ETC1,
            RGBA_ETC1: o++,
            RGB_ETC2: n.default.TEXTURE_FMT_RGB_ETC2,
            RGBA_ETC2: n.default.TEXTURE_FMT_RGBA_ETC2
        })
          , h = cc.Enum({
            REPEAT: 10497,
            CLAMP_TO_EDGE: 33071,
            MIRRORED_REPEAT: 33648
        })
          , c = cc.Enum({
            LINEAR: 9729,
            NEAREST: 9728
        })
          , u = {
            9728: 0,
            9729: 1
        }
          , _ = []
          , f = {
            width: void 0,
            height: void 0,
            minFilter: void 0,
            magFilter: void 0,
            wrapS: void 0,
            wrapT: void 0,
            format: void 0,
            genMipmaps: void 0,
            images: void 0,
            image: void 0,
            flipY: void 0,
            premultiplyAlpha: void 0
        };
        function d() {
            for (var t in f)
                f[t] = void 0;
            return _.length = 0,
            f.images = _,
            f
        }
        var p = cc.Class({
            name: "cc.Texture2D",
            extends: t("../assets/CCAsset"),
            mixins: [r],
            properties: {
                _nativeAsset: {
                    get: function() {
                        return this._image
                    },
                    set: function(t) {
                        t._compressed && t._data ? this.initWithData(t._data, this._format, t.width, t.height) : this.initWithElement(t)
                    },
                    override: !0
                },
                _format: l.RGBA8888,
                _premultiplyAlpha: !1,
                _flipY: !1,
                _minFilter: c.LINEAR,
                _magFilter: c.LINEAR,
                _mipFilter: c.LINEAR,
                _wrapS: h.CLAMP_TO_EDGE,
                _wrapT: h.CLAMP_TO_EDGE,
                _isAlphaAtlas: !1,
                _genMipmaps: !1,
                genMipmaps: {
                    get: function() {
                        return this._genMipmaps
                    },
                    set: function(t) {
                        if (this._genMipmaps !== t) {
                            var e = d();
                            e.genMipmaps = t,
                            this.update(e)
                        }
                    }
                },
                _packable: !0,
                packable: {
                    get: function() {
                        return this._packable
                    },
                    set: function(t) {
                        this._packable = t
                    }
                },
                _nativeDep: {
                    get: function() {
                        return {
                            __isNative__: !0,
                            uuid: this._uuid,
                            ext: this._native,
                            __flipY__: this._flipY,
                            __premultiplyAlpha__: this._premultiplyAlpha
                        }
                    },
                    override: !0
                }
            },
            statics: {
                PixelFormat: l,
                WrapMode: h,
                Filter: c,
                _FilterIndex: u,
                extnames: [".png", ".jpg", ".jpeg", ".bmp", ".webp", ".pvr", ".pkm"],
                _parseExt: function(t, e) {
                    for (var i = cc.renderer.device, n = t.split("_"), r = "", s = "", a = 999, o = e, h = cc.macro.SUPPORT_TEXTURE_FORMATS, c = 0; c < n.length; c++) {
                        var u = n[c].split("@")
                          , _ = u[0];
                        _ = p.extnames[_.charCodeAt(0) - 48] || _;
                        var f = h.indexOf(_);
                        if (-1 !== f && f < a) {
                            var d = u[1] ? parseInt(u[1]) : e;
                            if (".pvr" === _ && !i.ext("WEBGL_compressed_texture_pvrtc"))
                                continue;
                            if (!(d !== l.RGB_ETC1 && d !== l.RGBA_ETC1 || i.ext("WEBGL_compressed_texture_etc1")))
                                continue;
                            if (!(d !== l.RGB_ETC2 && d !== l.RGBA_ETC2 || i.ext("WEBGL_compressed_texture_etc")))
                                continue;
                            if (".webp" === _ && !cc.sys.capabilities.webp)
                                continue;
                            a = f,
                            s = _,
                            o = d
                        } else
                            r || (r = _)
                    }
                    return {
                        bestExt: s,
                        bestFormat: o,
                        defaultExt: r
                    }
                }
            },
            ctor: function() {
                this._id = a.getNewId(),
                this.loaded = !1,
                this.width = 0,
                this.height = 0,
                this._hashDirty = !0,
                this._hash = 0,
                this._texture = null
            },
            getImpl: function() {
                return this._texture || (this._texture = new s.Texture2D(s.device,{})),
                this._texture
            },
            getId: function() {
                return this._id
            },
            toString: function() {
                return this.nativeUrl || ""
            },
            update: function(t) {
                if (t) {
                    var e = !1;
                    void 0 !== t.width && (this.width = t.width),
                    void 0 !== t.height && (this.height = t.height),
                    void 0 !== t.minFilter && (this._minFilter = t.minFilter,
                    t.minFilter = u[t.minFilter]),
                    void 0 !== t.magFilter && (this._magFilter = t.magFilter,
                    t.magFilter = u[t.magFilter]),
                    void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter,
                    t.mipFilter = u[t.mipFilter]),
                    void 0 !== t.wrapS && (this._wrapS = t.wrapS),
                    void 0 !== t.wrapT && (this._wrapT = t.wrapT),
                    void 0 !== t.format && (this._format = t.format),
                    void 0 !== t.flipY && (this._flipY = t.flipY,
                    e = !0),
                    void 0 !== t.premultiplyAlpha && (this._premultiplyAlpha = t.premultiplyAlpha,
                    e = !0),
                    void 0 !== t.genMipmaps && (this._genMipmaps = t.genMipmaps),
                    cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap ? this._checkImageBitmap(this._upload.bind(this, t, e)) : this._upload(t, e)
                }
            },
            _upload: function(t, e) {
                e && this._image && (t.image = this._image),
                t.images && t.images.length > 0 ? this._image = t.images[0] : void 0 !== t.image && (this._image = t.image,
                t.images || (_.length = 0,
                t.images = _),
                t.images.push(t.image)),
                this._texture && this._texture.update(t),
                this._hashDirty = !0
            },
            initWithElement: function(t) {
                if (t)
                    if (this._image = t,
                    t.complete || t instanceof HTMLCanvasElement)
                        this.handleLoadedTexture();
                    else if (cc.sys.capabilities.imageBitmap && t instanceof ImageBitmap)
                        this._checkImageBitmap(this.handleLoadedTexture.bind(this));
                    else {
                        var e = this;
                        t.addEventListener("load", (function() {
                            e.handleLoadedTexture()
                        }
                        )),
                        t.addEventListener("error", (function(t) {
                            cc.warnID(3119, t.message)
                        }
                        ))
                    }
            },
            initWithData: function(t, e, i, n) {
                var r = d();
                return r.image = t,
                r.images = [r.image],
                r.genMipmaps = this._genMipmaps,
                r.premultiplyAlpha = this._premultiplyAlpha,
                r.flipY = this._flipY,
                r.minFilter = u[this._minFilter],
                r.magFilter = u[this._magFilter],
                r.wrapS = this._wrapS,
                r.wrapT = this._wrapT,
                r.format = this._getGFXPixelFormat(e),
                r.width = i,
                r.height = n,
                this._texture ? this._texture.update(r) : this._texture = new s.Texture2D(s.device,r),
                this.width = i,
                this.height = n,
                this._updateFormat(),
                this._checkPackable(),
                this.loaded = !0,
                this.emit("load"),
                !0
            },
            getHtmlElementObj: function() {
                return this._image
            },
            destroy: function() {
                cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close(),
                this._packable && cc.dynamicAtlasManager && cc.dynamicAtlasManager.deleteAtlasTexture(this),
                this._image = null,
                this._texture && this._texture.destroy(),
                this._super()
            },
            getPixelFormat: function() {
                return this._format
            },
            hasPremultipliedAlpha: function() {
                return this._premultiplyAlpha || !1
            },
            isAlphaAtlas: function() {
                return this._isAlphaAtlas
            },
            handleLoadedTexture: function() {
                if (this._image && this._image.width && this._image.height) {
                    this.width = this._image.width,
                    this.height = this._image.height;
                    var t = d();
                    t.image = this._image,
                    t.images = [t.image],
                    t.width = this.width,
                    t.height = this.height,
                    t.genMipmaps = this._genMipmaps,
                    t.format = this._getGFXPixelFormat(this._format),
                    t.premultiplyAlpha = this._premultiplyAlpha,
                    t.flipY = this._flipY,
                    t.minFilter = u[this._minFilter],
                    t.magFilter = u[this._magFilter],
                    t.wrapS = this._wrapS,
                    t.wrapT = this._wrapT,
                    this._texture ? this._texture.update(t) : this._texture = new s.Texture2D(s.device,t),
                    this._updateFormat(),
                    this._checkPackable(),
                    this.loaded = !0,
                    this.emit("load"),
                    cc.macro.CLEANUP_IMAGE_CACHE && (this._image instanceof HTMLImageElement ? this._clearImage() : cc.sys.capabilities.imageBitmap && this._image instanceof ImageBitmap && this._image.close && this._image.close())
                }
            },
            description: function() {
                return "<cc.Texture2D | Name = " + this.nativeUrl + " | Dimensions = " + this.width + " x " + this.height + ">"
            },
            releaseTexture: function() {
                this._image = null,
                this._texture && this._texture.destroy()
            },
            setWrapMode: function(t, e) {
                if (this._wrapS !== t || this._wrapT !== e) {
                    var i = d();
                    i.wrapS = t,
                    i.wrapT = e,
                    this.update(i)
                }
            },
            setFilters: function(t, e) {
                if (this._minFilter !== t || this._magFilter !== e) {
                    var i = d();
                    i.minFilter = t,
                    i.magFilter = e,
                    this.update(i)
                }
            },
            setFlipY: function(t) {
                if (this._flipY !== t) {
                    var e = d();
                    e.flipY = t,
                    e.premultiplyAlpha = this._premultiplyAlpha,
                    this.update(e)
                }
            },
            setPremultiplyAlpha: function(t) {
                if (this._premultiplyAlpha !== t) {
                    var e = d();
                    e.flipY = this._flipY,
                    e.premultiplyAlpha = t,
                    this.update(e)
                }
            },
            _updateFormat: function() {
                this._isAlphaAtlas = this._format === l.RGBA_ETC1 || this._format === l.RGB_A_PVRTC_4BPPV1 || this._format === l.RGB_A_PVRTC_2BPPV1
            },
            _checkPackable: function() {
                var t = cc.dynamicAtlasManager;
                if (t)
                    if (this._isCompressed())
                        this._packable = !1;
                    else {
                        var e = this.width
                          , i = this.height;
                        !this._image || e > t.maxFrameSize || i > t.maxFrameSize || this._getHash() !== t.Atlas.DEFAULT_HASH ? this._packable = !1 : this._image && this._image instanceof HTMLCanvasElement && (this._packable = !0)
                    }
            },
            _getOpts: function() {
                var t = d();
                return t.width = this.width,
                t.height = this.height,
                t.genMipmaps = this._genMipmaps,
                t.format = this._format,
                t.premultiplyAlpha = this._premultiplyAlpha,
                t.anisotropy = this._anisotropy,
                t.flipY = this._flipY,
                t.minFilter = u[this._minFilter],
                t.magFilter = u[this._magFilter],
                t.mipFilter = u[this._mipFilter],
                t.wrapS = this._wrapS,
                t.wrapT = this._wrapT,
                t
            },
            _getGFXPixelFormat: function(t) {
                return t === l.RGBA_ETC1 ? t = l.RGB_ETC1 : t === l.RGB_A_PVRTC_4BPPV1 ? t = l.RGB_PVRTC_4BPPV1 : t === l.RGB_A_PVRTC_2BPPV1 && (t = l.RGB_PVRTC_2BPPV1),
                t
            },
            _resetUnderlyingMipmaps: function(t) {
                var e = this._getOpts();
                e.images = t || [null],
                this._texture ? this._texture.update(e) : this._texture = new s.Texture2D(s.device,e)
            },
            _serialize: !1,
            _deserialize: function(t) {
                var e = t.split(",")
                  , i = e[0];
                if (i) {
                    var n = p._parseExt(i, this._format);
                    if (n.bestExt)
                        this._setRawAsset(n.bestExt),
                        this._format = n.bestFormat;
                    else {
                        if (!n.defaultExt)
                            throw new Error(cc.debug.getError(3121));
                        this._setRawAsset(n.defaultExt),
                        cc.warnID(3120, n.defaultExt, n.defaultExt)
                    }
                }
                8 === e.length && (this._minFilter = parseInt(e[1]),
                this._magFilter = parseInt(e[2]),
                this._wrapS = parseInt(e[3]),
                this._wrapT = parseInt(e[4]),
                this._premultiplyAlpha = 49 === e[5].charCodeAt(0),
                this._genMipmaps = 49 === e[6].charCodeAt(0),
                this._packable = 49 === e[7].charCodeAt(0))
            },
            _getHash: function() {
                if (!this._hashDirty)
                    return this._hash;
                var t = this._genMipmaps ? 1 : 0
                  , e = this._premultiplyAlpha ? 1 : 0
                  , i = this._flipY ? 1 : 0
                  , n = this._minFilter === c.LINEAR ? 1 : 2
                  , r = this._magFilter === c.LINEAR ? 1 : 2
                  , s = this._wrapS === h.REPEAT ? 1 : this._wrapS === h.CLAMP_TO_EDGE ? 2 : 3
                  , a = this._wrapT === h.REPEAT ? 1 : this._wrapT === h.CLAMP_TO_EDGE ? 2 : 3
                  , o = this._format;
                return this._image,
                this._hash = Number("" + n + r + o + s + a + t + e + i),
                this._hashDirty = !1,
                this._hash
            },
            _isCompressed: function() {
                return this._format < l.A8 || this._format > l.RGBA32F
            },
            _clearImage: function() {
                this._image.src = ""
            },
            _checkImageBitmap: function(t) {
                var e = this
                  , i = this._image
                  , n = this._flipY
                  , r = this._premultiplyAlpha;
                this._flipY !== i.flipY || this._premultiplyAlpha !== i.premultiplyAlpha ? createImageBitmap(i, {
                    imageOrientation: n !== i.flipY ? "flipY" : "none",
                    premultiplyAlpha: r ? "premultiply" : "none"
                }).then((function(s) {
                    i.close && i.close(),
                    s.flipY = n,
                    s.premultiplyAlpha = r,
                    e._image = s,
                    t()
                }
                ), (function(t) {
                    cc.error(t.message)
                }
                )) : t()
            }
        });
        cc.Texture2D = e.exports = p
    }
    ), {
        "../../renderer/gfx": 315,
        "../assets/CCAsset": 62,
        "../event/event-target": 140,
        "../platform/CCClass": 193,
        "../platform/id-generater": 210,
        "../renderer": 224
    }],
    78: [(function(t) {
        "use strict";
        t("./CCAsset"),
        t("./CCFont"),
        t("./CCPrefab"),
        t("./CCAudioClip"),
        t("./CCScripts"),
        t("./CCSceneAsset"),
        t("./CCSpriteFrame"),
        t("./CCTexture2D"),
        t("./CCRenderTexture"),
        t("./CCTTFFont"),
        t("./CCSpriteAtlas"),
        t("./CCBitmapFont"),
        t("./CCLabelAtlas"),
        t("./CCTextAsset"),
        t("./CCJsonAsset"),
        t("./CCBufferAsset"),
        t("./material")
    }
    ), {
        "./CCAsset": 62,
        "./CCAudioClip": 63,
        "./CCBitmapFont": 64,
        "./CCBufferAsset": 65,
        "./CCFont": 66,
        "./CCJsonAsset": 67,
        "./CCLabelAtlas": 68,
        "./CCPrefab": 69,
        "./CCRenderTexture": 70,
        "./CCSceneAsset": 71,
        "./CCScripts": 72,
        "./CCSpriteAtlas": 73,
        "./CCSpriteFrame": 74,
        "./CCTTFFont": 75,
        "./CCTextAsset": 76,
        "./CCTexture2D": 77,
        "./material": 85
    }],
    79: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../CCAsset")) && i.__esModule ? i : {
            default: i
        }, r = t("./effect-parser"), s = cc.Class({
            name: "cc.EffectAsset",
            extends: n.default,
            ctor: function() {
                this._effect = null
            },
            properties: {
                properties: Object,
                techniques: [],
                shaders: []
            },
            onLoad: function() {
                if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                    for (var t = cc.renderer._forward._programLib, e = 0; e < this.shaders.length; e++)
                        t.define(this.shaders[e]);
                    this._initEffect()
                }
            },
            _initEffect: function() {
                this._effect || (this._effect = (0,
                r.parseEffect)(this),
                Object.freeze(this._effect))
            },
            getInstantiatedEffect: function() {
                return this._initEffect(),
                this._effect.clone()
            },
            getEffect: function() {
                return this._initEffect(),
                this._effect
            }
        });
        e.exports = cc.EffectAsset = s
    }
    ), {
        "../CCAsset": 62,
        "./effect-parser": 82
    }],
    80: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("../CCAsset")
          , r = t("../CCTexture2D")
          , s = (r.PixelFormat,
        t("./CCEffectAsset"))
          , a = (t("../../utils/texture-util"),
        cc.gfx)
          , o = cc.Enum({
            SPRITE: "2d-sprite",
            GRAY_SPRITE: "2d-gray-sprite",
            UNLIT: "unlit"
        })
          , l = cc.Class({
            name: "cc.Material",
            extends: n,
            ctor: function() {
                this.loaded = !1,
                this._manualHash = !1,
                this._dirty = !0,
                this._effect = null
            },
            properties: {
                _defines: {
                    default: void 0,
                    type: Object
                },
                _props: {
                    default: void 0,
                    type: Object
                },
                _effectAsset: {
                    type: s,
                    default: null
                },
                _techniqueIndex: 0,
                _techniqueData: Object,
                effectName: void 0,
                effectAsset: {
                    get: function() {
                        return this._effectAsset
                    },
                    set: function(t) {
                        cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS && (this._effectAsset = t,
                        t ? this._effect = this._effectAsset.getInstantiatedEffect() : cc.error("Can not set an empty effect asset."))
                    }
                },
                effect: {
                    get: function() {
                        return this._effect
                    }
                },
                techniqueIndex: {
                    get: function() {
                        return this._techniqueIndex
                    },
                    set: function(t) {
                        this._techniqueIndex = t,
                        this._effect.switchTechnique(t)
                    }
                }
            },
            statics: {
                getBuiltinMaterial: function(t) {
                    return cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? new cc.Material : cc.assetManager.builtins.getBuiltin("material", "builtin-" + t)
                },
                BUILTIN_NAME: o,
                createWithBuiltin: function(t, e) {
                    void 0 === e && (e = 0);
                    var i = cc.assetManager.builtins.getBuiltin("effect", "builtin-" + t);
                    return l.create(i, e)
                },
                create: function(t, e) {
                    if (void 0 === e && (e = 0),
                    !t)
                        return null;
                    var i = new l;
                    return i.effectAsset = t,
                    i.techniqueIndex = e,
                    i
                }
            },
            setProperty: function(t, e, i, n) {
                if (cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                    if ("string" == typeof i && (i = parseInt(i)),
                    e instanceof r) {
                        var s = e.isAlphaAtlas()
                          , a = "CC_USE_ALPHA_ATLAS_" + t
                          , o = this.getDefine(a, i);
                        (s || o) && this.define(a, s),
                        e.loaded || cc.assetManager.postLoadNative(e)
                    }
                    this._effect.setProperty(t, e, i, n)
                }
            },
            getProperty: function(t, e) {
                return "string" == typeof e && (e = parseInt(e)),
                this._effect.getProperty(t, e)
            },
            define: function(t, e, i, n) {
                cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS && ("string" == typeof i && (i = parseInt(i)),
                this._effect.define(t, e, i, n))
            },
            getDefine: function(t, e) {
                return "string" == typeof e && (e = parseInt(e)),
                this._effect.getDefine(t, e)
            },
            setCullMode: function(t, e) {
                void 0 === t && (t = a.CULL_BACK),
                this._effect.setCullMode(t, e)
            },
            setDepth: function(t, e, i, n) {
                void 0 === t && (t = !1),
                void 0 === e && (e = !1),
                void 0 === i && (i = a.DS_FUNC_LESS),
                this._effect.setDepth(t, e, i, n)
            },
            setBlend: function(t, e, i, n, r, s, o, l, h) {
                void 0 === t && (t = !1),
                void 0 === e && (e = a.BLEND_FUNC_ADD),
                void 0 === i && (i = a.BLEND_SRC_ALPHA),
                void 0 === n && (n = a.BLEND_ONE_MINUS_SRC_ALPHA),
                void 0 === r && (r = a.BLEND_FUNC_ADD),
                void 0 === s && (s = a.BLEND_SRC_ALPHA),
                void 0 === o && (o = a.BLEND_ONE_MINUS_SRC_ALPHA),
                void 0 === l && (l = 4294967295),
                this._effect.setBlend(t, e, i, n, r, s, o, l, h)
            },
            setStencilEnabled: function(t, e) {
                void 0 === t && (t = a.STENCIL_INHERIT),
                this._effect.setStencilEnabled(t, e)
            },
            setStencil: function(t, e, i, n, r, s, o, l, h) {
                void 0 === t && (t = a.STENCIL_INHERIT),
                void 0 === e && (e = a.DS_FUNC_ALWAYS),
                void 0 === i && (i = 0),
                void 0 === n && (n = 255),
                void 0 === r && (r = a.STENCIL_OP_KEEP),
                void 0 === s && (s = a.STENCIL_OP_KEEP),
                void 0 === o && (o = a.STENCIL_OP_KEEP),
                void 0 === l && (l = 255),
                this._effect.setStencil(t, e, i, n, r, s, o, l, h)
            },
            updateHash: function(t) {
                this._manualHash = t,
                this._effect && this._effect.updateHash(t)
            },
            getHash: function() {
                return this._manualHash || this._effect && this._effect.getHash()
            },
            onLoad: function() {
                if (this.effectAsset = this._effectAsset,
                this._effect) {
                    this._techniqueIndex && this._effect.switchTechnique(this._techniqueIndex),
                    this._techniqueData = this._techniqueData || {};
                    var t = this._techniqueData;
                    for (var e in t) {
                        var i = t[e = parseInt(e)];
                        if (i) {
                            for (var n in i.defines)
                                this.define(n, i.defines[n], e);
                            for (var r in i.props)
                                this.setProperty(r, i.props[r], e)
                        }
                    }
                }
            }
        })
          , h = l;
        i.default = h,
        cc.Material = l,
        e.exports = i.default
    }
    ), {
        "../../utils/texture-util": 275,
        "../CCAsset": 62,
        "../CCTexture2D": 77,
        "./CCEffectAsset": 79
    }],
    81: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../renderer/core/pass")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = cc.gfx
          , o = (function() {
            function t() {
                this._dirty = !0,
                this._name = "",
                this._technique = null
            }
            var e, i, n = t.prototype;
            return n._createPassProp = function(t, e) {
                var i = e._properties[t];
                if (i) {
                    var n = Object.create(null);
                    return n.name = t,
                    n.type = i.type,
                    i.value instanceof Float32Array ? n.value = new Float32Array(i.value) : i.value instanceof Float64Array ? n.value = new Float64Array(i.value) : n.value = i.value,
                    e._properties[t] = n,
                    n
                }
            }
            ,
            n._setPassProperty = function(t, e, i, n) {
                var s = i._properties;
                return s.hasOwnProperty(t) || this._createPassProp(t, i),
                s[t].value === e || (this._dirty = !0,
                r.default.prototype.setProperty.call(i, t, e, n))
            }
            ,
            n.setProperty = function(t, e, i, n) {
                var r = !1
                  , s = this.passes
                  , a = 0
                  , o = s.length;
                void 0 !== i && (a = i,
                o = i + 1);
                for (var l = a; l < o; l++)
                    this._setPassProperty(t, e, s[l], n) && (r = !0);
                r || cc.warnID(9103, this.name, t)
            }
            ,
            n.getProperty = function(t, e) {
                var i = this.passes;
                if (!(e >= i.length)) {
                    var n = 0
                      , r = i.length;
                    void 0 !== e && (n = e,
                    r = e + 1);
                    for (var s = n; s < r; s++) {
                        var a = i[s].getProperty(t);
                        if (void 0 !== a)
                            return a
                    }
                }
            }
            ,
            n.define = function(t, e, i, n) {
                var r = !1
                  , s = this.passes
                  , a = 0
                  , o = s.length;
                void 0 !== i && (a = i,
                o = i + 1);
                for (var l = a; l < o; l++)
                    s[l].define(t, e, n) && (r = !0);
                r || cc.warnID(9104, this.name, t)
            }
            ,
            n.getDefine = function(t, e) {
                var i = this.passes;
                if (!(e >= i.length)) {
                    var n = 0
                      , r = i.length;
                    void 0 !== e && (n = e,
                    r = e + 1);
                    for (var s = n; s < r; s++) {
                        var a = i[s].getDefine(t);
                        if (void 0 !== a)
                            return a
                    }
                }
            }
            ,
            n.setCullMode = function(t, e) {
                void 0 === t && (t = a.CULL_BACK);
                var i = this.passes
                  , n = 0
                  , r = i.length;
                void 0 !== e && (n = e,
                r = e + 1);
                for (var s = n; s < r; s++)
                    i[s].setCullMode(t);
                this._dirty = !0
            }
            ,
            n.setDepth = function(t, e, i, n) {
                var r = this.passes
                  , s = 0
                  , a = r.length;
                void 0 !== n && (s = n,
                a = n + 1);
                for (var o = s; o < a; o++)
                    r[o].setDepth(t, e, i);
                this._dirty = !0
            }
            ,
            n.setBlend = function(t, e, i, n, r, s, a, o, l) {
                var h = this.passes
                  , c = 0
                  , u = h.length;
                void 0 !== l && (c = l,
                u = l + 1);
                for (var _ = c; _ < u; _++)
                    h[_].setBlend(t, e, i, n, r, s, a, o);
                this._dirty = !0
            }
            ,
            n.setStencilEnabled = function(t, e) {
                void 0 === t && (t = a.STENCIL_INHERIT);
                var i = this.passes
                  , n = 0
                  , r = i.length;
                void 0 !== e && (n = e,
                r = e + 1);
                for (var s = n; s < r; s++)
                    i[s].setStencilEnabled(t);
                this._dirty = !0
            }
            ,
            n.setStencil = function(t, e, i, n, r, s, a, o, l) {
                var h = this.passes
                  , c = 0
                  , u = h.length;
                void 0 !== l && (c = l,
                u = l + 1);
                for (var _ = c; _ < u; _++) {
                    var f = h[_];
                    f.setStencilFront(t, e, i, n, r, s, a, o),
                    f.setStencilBack(t, e, i, n, r, s, a, o)
                }
                this._dirty = !0
            }
            ,
            e = t,
            (i = [{
                key: "name",
                get: function() {
                    return this._name
                }
            }, {
                key: "technique",
                get: function() {
                    return this._technique
                }
            }, {
                key: "passes",
                get: function() {
                    return []
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        i.default = o,
        cc.EffectBase = o,
        e.exports = i.default
    }
    ), {
        "../../../renderer/core/pass": 306
    }],
    82: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.parseEffect = function(t) {
            var e = _(t);
            return new a.default(t.name,e,0,t)
        }
        ;
        var n = l(t("../../../renderer/core/pass"))
          , r = t("../../../renderer/types")
          , s = l(t("../../../renderer/enums"))
          , a = l(t("./effect"))
          , o = l(t("../../../renderer/core/technique"));
        function l(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function h(t) {
            return cc.renderer._forward._programLib.getTemplate(t)
        }
        function c(t, e) {
            var i = e.properties || {}
              , n = h(e.program)
              , a = function(e) {
                if (!n.uniforms.find((function(t) {
                    return t.name === e
                }
                )))
                    return cc.warnID(9107, t.name, e),
                    "continue"
            };
            for (var o in i)
                a(o);
            var l = {};
            return n.uniforms.forEach((function(t) {
                var e, n = t.name, a = l[n] = Object.assign({}, t), o = i[n];
                void 0 === (e = o ? o.type === s.default.PARAM_TEXTURE_2D ? null : o.type === s.default.PARAM_INT || o.type === s.default.PARAM_FLOAT ? Array.isArray(o.value) ? o.value[0] : o.value : new Float32Array(o.value) : r.enums2default[t.type]) && (e = null),
                a.value = e
            }
            )),
            l
        }
        function u(t) {
            var e = {};
            return h(t.program).defines.forEach((function(t) {
                e[t.name] = r.enums2default[t.type]
            }
            )),
            e
        }
        function _(t) {
            for (var e = t.techniques.length, i = new Array(e), r = 0; r < e; ++r) {
                for (var s = t.techniques[r], a = s.name || r, l = s.passes.length, h = new Array(l), _ = 0; _ < l; ++_) {
                    var f = s.passes[_]
                      , d = f.name || _
                      , p = t.name + "-" + a + "-" + d
                      , m = f.stage || "opaque"
                      , y = c(t, f)
                      , v = u(f)
                      , g = h[_] = new n.default(d,p,f.program,m,y,v);
                    f.rasterizerState && g.setCullMode(f.rasterizerState.cullMode);
                    var A = f.blendState && f.blendState.targets[0];
                    A && g.setBlend(A.blend, A.blendEq, A.blendSrc, A.blendDst, A.blendAlphaEq, A.blendSrcAlpha, A.blendDstAlpha, A.blendColor);
                    var x = f.depthStencilState;
                    x && (g.setDepth(x.depthTest, x.depthWrite, x.depthFunc),
                    g.setStencilFront(x.stencilTest, x.stencilFuncFront, x.stencilRefFront, x.stencilMaskFront, x.stencilFailOpFront, x.stencilZFailOpFront, x.stencilZPassOpFront, x.stencilWriteMaskFront),
                    g.setStencilBack(x.stencilTest, x.stencilFuncBack, x.stencilRefBack, x.stencilMaskBack, x.stencilFailOpBack, x.stencilZFailOpBack, x.stencilZPassOpBack, x.stencilWriteMaskBack))
                }
                i[r] = new o.default(a,h)
            }
            return i
        }
    }
    ), {
        "../../../renderer/core/pass": 306,
        "../../../renderer/core/technique": 308,
        "../../../renderer/enums": 310,
        "../../../renderer/types": 338,
        "./effect": 84
    }],
    83: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("../../../renderer/murmurhash2_gc"))
          , r = a(t("./utils"))
          , s = a(t("./effect-base"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function l(t, e) {
            return (l = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        cc.gfx;
        var h = (function(t) {
            var e, i;
            function s(e) {
                var i;
                return (i = t.call(this) || this)._effect = void 0,
                i._passes = [],
                i._stagePasses = {},
                i._hash = 0,
                i.init(e),
                i
            }
            i = t,
            (e = s).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            l(e, i);
            var a, h, c = s.prototype;
            return c._onEffectChanged = function() {}
            ,
            c.init = function(t) {
                if (t instanceof s && (t = t.effect),
                this._effect = t,
                this._dirty = !0,
                t) {
                    var e = t.passes
                      , i = this._passes;
                    i.length = 0;
                    for (var n = this._stagePasses = {}, r = 0; r < e.length; r++) {
                        var a = i[r] = Object.setPrototypeOf({}, e[r]);
                        a._properties = Object.setPrototypeOf({}, e[r]._properties),
                        a._defines = Object.setPrototypeOf({}, e[r]._defines),
                        n[a._stage] || (n[a._stage] = []),
                        n[a._stage].push(a)
                    }
                }
            }
            ,
            c.updateHash = function() {}
            ,
            c.getHash = function() {
                if (!this._dirty)
                    return this._hash;
                this._dirty = !1;
                var t = "";
                t += r.default.serializePasses(this._passes);
                var e = this._effect;
                return e && (t += r.default.serializePasses(e.passes)),
                this._hash = (0,
                n.default)(t, 666),
                this.updateHash(this._hash),
                this._hash
            }
            ,
            a = s,
            (h = [{
                key: "effect",
                get: function() {
                    return this._effect
                }
            }, {
                key: "name",
                get: function() {
                    return this._effect && this._effect.name + " (variant)"
                }
            }, {
                key: "passes",
                get: function() {
                    return this._passes
                }
            }, {
                key: "stagePasses",
                get: function() {
                    return this._stagePasses
                }
            }]) && o(a.prototype, h),
            s
        }
        )(s.default);
        i.default = h,
        cc.EffectVariant = h,
        e.exports = i.default
    }
    ), {
        "../../../renderer/murmurhash2_gc": 333,
        "./effect-base": 81,
        "./utils": 88
    }],
    84: [(function(t, e, i) {
        "use strict";
        var n;
        function r(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0;
        var a = (function(t) {
            var e, i;
            function n(e, i, n, r) {
                var s;
                return (s = t.call(this) || this)._techniques = [],
                s._asset = null,
                s.init(e, i, n, r, !0),
                s
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var a, o, l = n.prototype;
            return l.init = function(t, e, i, n) {
                this._name = t,
                this._techniques = e,
                this._technique = e[i],
                this._asset = n
            }
            ,
            l.switchTechnique = function(t) {
                t >= this._techniques.length ? cc.warn("Can not switch to technique with index [" + t + "]") : this._technique = this._techniques[t]
            }
            ,
            l.clear = function() {
                this._techniques = []
            }
            ,
            l.clone = function() {
                for (var t = [], e = 0; e < this._techniques.length; e++)
                    t.push(this._techniques[e].clone());
                var i = this._techniques.indexOf(this._technique);
                return new n(this._name,t,i,this._asset)
            }
            ,
            a = n,
            (o = [{
                key: "technique",
                get: function() {
                    return this._technique
                }
            }, {
                key: "passes",
                get: function() {
                    return this._technique.passes
                }
            }]) && r(a.prototype, o),
            n
        }
        )(((n = t("./effect-base")) && n.__esModule ? n : {
            default: n
        }).default);
        i.default = a,
        cc.Effect = a,
        e.exports = i.default
    }
    ), {
        "./effect-base": 81
    }],
    85: [(function(t) {
        "use strict";
        t("./CCEffectAsset"),
        t("./CCMaterial"),
        t("./material-variant")
    }
    ), {
        "./CCEffectAsset": 79,
        "./CCMaterial": 80,
        "./material-variant": 87
    }],
    86: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = s(t("./utils"))
          , r = s(t("../../utils/pool"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function a(t, e) {
            return (a = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var o = new (function(t) {
            var e, i;
            function r() {
                for (var e, i = arguments.length, n = new Array(i), r = 0; r < i; r++)
                    n[r] = arguments[r];
                return (e = t.call.apply(t, [this].concat(n)) || this).enabled = !1,
                e._pool = {},
                e
            }
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            a(e, i);
            var s = r.prototype;
            return s.get = function(t, e) {
                var i, r = this._pool;
                if (t instanceof cc.MaterialVariant) {
                    if (!t._owner)
                        return t._owner = e,
                        t;
                    if (t._owner === e)
                        return t;
                    t = t.material
                }
                if (this.enabled) {
                    var s = t.effectAsset._uuid;
                    if (r[s]) {
                        var a = n.default.serializeDefines(t._effect._defines) + n.default.serializeTechniques(t._effect._techniques);
                        i = r[s][a] && r[s][a].pop()
                    }
                }
                return i ? this.count-- : ((i = new cc.MaterialVariant(t))._name = t._name + " (Instance)",
                i._uuid = t._uuid),
                i._owner = e,
                i
            }
            ,
            s.put = function(t) {
                if (this.enabled && t._owner) {
                    var e = this._pool
                      , i = t.effectAsset._uuid;
                    e[i] || (e[i] = {});
                    var r = n.default.serializeDefines(t._effect._defines) + n.default.serializeTechniques(t._effect._techniques);
                    e[i][r] || (e[i][r] = []),
                    this.count > this.maxSize || (this._clean(t),
                    e[i][r].push(t),
                    this.count++)
                }
            }
            ,
            s.clear = function() {
                this._pool = {},
                this.count = 0
            }
            ,
            s._clean = function(t) {
                t._owner = null
            }
            ,
            r
        }(r.default));
        r.default.register("material", o);
        var l = o;
        i.default = l,
        e.exports = i.default
    }
    ), {
        "../../utils/pool": 269,
        "./utils": 88
    }],
    87: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = o(t("./CCMaterial")), s = o(t("./effect-variant")), a = o(t("./material-pool"));
        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function l(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var c = (0,
        cc._decorator.ccclass)("cc.MaterialVariant")(n = (function(t) {
            var e, i, n, o;
            function c(e) {
                var i;
                return (i = t.call(this) || this)._owner = null,
                i._material = null,
                i.init(e),
                i
            }
            return i = t,
            (e = c).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i),
            c.createWithBuiltin = function(t, e) {
                return c.create(r.default.getBuiltinMaterial(t), e)
            }
            ,
            c.create = function(t, e) {
                return t ? a.default.get(t, e) : null
            }
            ,
            c.prototype.init = function(t) {
                this._effect = new s.default(t.effect),
                this._effectAsset = t._effectAsset,
                this._material = t
            }
            ,
            n = c,
            (o = [{
                key: "uuid",
                get: function() {
                    return this._material._uuid
                }
            }, {
                key: "owner",
                get: function() {
                    return this._owner
                }
            }, {
                key: "material",
                get: function() {
                    return this._material
                }
            }]) && l(n.prototype, o),
            c
        }
        )(r.default)) || n;
        i.default = c,
        cc.MaterialVariant = c,
        e.exports = i.default
    }
    ), {
        "./CCMaterial": 80,
        "./effect-variant": 83,
        "./material-pool": 86
    }],
    88: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../renderer/enums")) && n.__esModule ? n : {
            default: n
        };
        function s(t) {
            var e = "";
            for (var i in t)
                e += i + t[i];
            return e
        }
        function a(t) {
            var e = "";
            for (var i in t) {
                var n = t[i]
                  , s = n.value;
                s && (n.type === r.default.PARAM_TEXTURE_2D || n.type === r.default.PARAM_TEXTURE_CUBE ? e += s._id + ";" : e += s.toString() + ";")
            }
            return e
        }
        var o = {
            serializeDefines: s,
            serializePasses: function(t) {
                for (var e, i, n = "", r = 0; r < t.length; r++)
                    n += (void 0,
                    i = void 0,
                    i = (e = t[r])._programName + e._cullMode,
                    e._blend && (i += e._blendEq + e._blendAlphaEq + e._blendSrc + e._blendDst + e._blendSrcAlpha + e._blendDstAlpha + e._blendColor),
                    e._depthTest && (i += e._depthWrite + e._depthFunc),
                    e._stencilTest && (i += e._stencilFuncFront + e._stencilRefFront + e._stencilMaskFront + e._stencilFailOpFront + e._stencilZFailOpFront + e._stencilZPassOpFront + e._stencilWriteMaskFront + e._stencilFuncBack + e._stencilRefBack + e._stencilMaskBack + e._stencilFailOpBack + e._stencilZFailOpBack + e._stencilZPassOpBack + e._stencilWriteMaskBack),
                    i += a(e._properties),
                    i += s(e._defines));
                return n
            },
            serializeUniforms: a
        };
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../../../renderer/enums": 310
    }],
    89: [(function(t, e) {
        "use strict";
        t("../CCNode").EventType;
        var i = 56
          , n = 7
          , r = cc.Enum({
            ONCE: 0,
            ON_WINDOW_RESIZE: 1,
            ALWAYS: 2
        });
        function s(t, e, i, n) {
            for (var r = t._parent.scaleX, s = t._parent.scaleY, a = 0, o = 0, l = t._parent; ; ) {
                if (a += l.x,
                o += l.y,
                !(l = l._parent))
                    return i.x = i.y = 0,
                    void (n.x = n.y = 1);
                if (l === e)
                    break;
                var h = l.scaleX
                  , c = l.scaleY;
                a *= h,
                o *= c,
                r *= h,
                s *= c
            }
            n.x = 0 !== r ? 1 / r : 1,
            n.y = 0 !== s ? 1 / s : 1,
            i.x = -a,
            i.y = -o
        }
        var a = cc.Vec2.ZERO
          , o = cc.Vec2.ONE;
        function l(t, e) {
            var r, l, h, c = e._target;
            c ? s(t, r = c, l = a, h = o) : r = t._parent;
            var u, _ = (u = r)instanceof cc.Scene ? cc.visibleRect : u._contentSize, f = r._anchorPoint, d = r instanceof cc.Scene, p = t.x, m = t.y, y = t._anchorPoint;
            if (e._alignFlags & i) {
                var v, g, A = _.width;
                d ? (v = cc.visibleRect.left.x,
                g = cc.visibleRect.right.x) : g = (v = -f.x * A) + A,
                v += e._isAbsLeft ? e._left : e._left * A,
                g -= e._isAbsRight ? e._right : e._right * A,
                c && (v += l.x,
                v *= h.x,
                g += l.x,
                g *= h.x);
                var x, b = y.x, C = t.scaleX;
                if (C < 0 && (b = 1 - b,
                C = -C),
                e.isStretchWidth)
                    x = g - v,
                    0 !== C && (t.width = x / C),
                    p = v + b * x;
                else if (x = t.width * C,
                e.isAlignHorizontalCenter) {
                    var T = e._isAbsHorizontalCenter ? e._horizontalCenter : e._horizontalCenter * A
                      , S = (.5 - f.x) * _.width;
                    c && (T *= h.x,
                    S += l.x,
                    S *= h.x),
                    p = S + (b - .5) * x + T
                } else
                    p = e.isAlignLeft ? v + b * x : g + (b - 1) * x
            }
            if (e._alignFlags & n) {
                var w, E, M = _.height;
                d ? (E = cc.visibleRect.bottom.y,
                w = cc.visibleRect.top.y) : w = (E = -f.y * M) + M,
                E += e._isAbsBottom ? e._bottom : e._bottom * M,
                w -= e._isAbsTop ? e._top : e._top * M,
                c && (E += l.y,
                E *= h.y,
                w += l.y,
                w *= h.y);
                var D, B = y.y, I = t.scaleY;
                if (I < 0 && (B = 1 - B,
                I = -I),
                e.isStretchHeight)
                    D = w - E,
                    0 !== I && (t.height = D / I),
                    m = E + B * D;
                else if (D = t.height * I,
                e.isAlignVerticalCenter) {
                    var P = e._isAbsVerticalCenter ? e._verticalCenter : e._verticalCenter * M
                      , R = (.5 - f.y) * _.height;
                    c && (P *= h.y,
                    R += l.y,
                    R *= h.y),
                    m = R + (B - .5) * D + P
                } else
                    m = e.isAlignBottom ? E + B * D : w + (B - 1) * D
            }
            t.setPosition(p, m)
        }
        function h(t) {
            var e = t._widget;
            e && (l(t, e),
            e.alignMode !== r.ALWAYS ? _.remove(e) : u.push(e));
            for (var i = t._children, n = 0; n < i.length; n++) {
                var s = i[n];
                s._active && h(s)
            }
        }
        function c() {
            var t = cc.director.getScene();
            if (t) {
                if (_.isAligning = !0,
                _._nodesOrderDirty)
                    u.length = 0,
                    h(t),
                    _._nodesOrderDirty = !1;
                else {
                    var e, i = _._activeWidgetsIterator;
                    for (i.i = 0; i.i < u.length; ++i.i)
                        l((e = u[i.i]).node, e)
                }
                _.isAligning = !1
            }
        }
        var u = []
          , _ = cc._widgetManager = e.exports = {
            _AlignFlags: {
                TOP: 1,
                MID: 2,
                BOT: 4,
                LEFT: 8,
                CENTER: 16,
                RIGHT: 32
            },
            isAligning: !1,
            _nodesOrderDirty: !1,
            _activeWidgetsIterator: new cc.js.array.MutableForwardIterator(u),
            init: function(t) {
                t.on(cc.Director.EVENT_AFTER_UPDATE, c);
                var e = this.onResized.bind(this);
                cc.view.on("canvas-resize", e),
                window.addEventListener("orientationchange", e)
            },
            add: function(t) {
                t.node._widget = t,
                this._nodesOrderDirty = !0
            },
            remove: function(t) {
                t.node._widget = null,
                this._activeWidgetsIterator.remove(t)
            },
            onResized: function() {
                var t = cc.director.getScene();
                t && this.refreshWidgetOnResized(t)
            },
            refreshWidgetOnResized: function(t) {
                var e = cc.Node.isNode(t) && t.getComponent(cc.Widget);
                e && e.enabled && e.alignMode === r.ON_WINDOW_RESIZE && this.add(e);
                for (var i = t._children, n = 0; n < i.length; n++) {
                    var s = i[n];
                    this.refreshWidgetOnResized(s)
                }
            },
            updateAlignment: function t(e) {
                var i = e._parent;
                cc.Node.isNode(i) && t(i);
                var n = e._widget || e.getComponent(cc.Widget);
                n && i && l(e, n)
            },
            AlignMode: r
        }
    }
    ), {
        "../CCNode": 29
    }],
    90: [(function(t, e) {
        "use strict";
        var i = t("../value-types")
          , n = t("../geom-utils")
          , r = t("../utils/affine-transform")
          , s = t("../renderer/index")
          , a = t("../renderer/render-flow")
          , o = t("../CCGame")
          , l = null;
        l = t("../../renderer/scene/camera");
        var h = cc.mat4()
          , c = cc.mat4()
          , u = cc.v3()
          , _ = cc.v3()
          , f = cc.v3()
          , d = [];
        function p() {
            for (var t = 0, e = Number.MAX_VALUE; t < d.length; t++) {
                var i = d[t];
                i._depth < e && (A.main = i,
                e = i._depth)
            }
        }
        var m = null;
        function y() {
            if (m) {
                var t = m.getNode()
                  , e = cc.game.canvas;
                t.z = e.height / 1.1566,
                t.x = e.width / 2,
                t.y = e.height / 2
            }
        }
        var v = cc.Enum({
            COLOR: 1,
            DEPTH: 2,
            STENCIL: 4
        })
          , g = cc.Enum({
            OPAQUE: 1,
            TRANSPARENT: 2
        })
          , A = cc.Class({
            name: "cc.Camera",
            extends: cc.Component,
            ctor: function() {
                if (o.renderType !== o.RENDER_TYPE_CANVAS) {
                    var t = new l;
                    t.setStages(["opaque"]),
                    t.dirty = !0,
                    this._inited = !1,
                    this._camera = t
                } else
                    this._inited = !0
            },
            editor: !1,
            properties: {
                _cullingMask: 4294967295,
                _clearFlags: v.DEPTH | v.STENCIL,
                _backgroundColor: cc.color(0, 0, 0, 255),
                _depth: 0,
                _zoomRatio: 1,
                _targetTexture: null,
                _fov: 60,
                _orthoSize: 10,
                _nearClip: 1,
                _farClip: 4096,
                _ortho: !0,
                _rect: cc.rect(0, 0, 1, 1),
                _renderStages: 1,
                _alignWithScreen: !0,
                zoomRatio: {
                    get: function() {
                        return this._zoomRatio
                    },
                    set: function(t) {
                        this._zoomRatio = t
                    },
                    tooltip: !1
                },
                fov: {
                    get: function() {
                        return this._fov
                    },
                    set: function(t) {
                        this._fov = t
                    },
                    tooltip: !1
                },
                orthoSize: {
                    get: function() {
                        return this._orthoSize
                    },
                    set: function(t) {
                        this._orthoSize = t
                    },
                    tooltip: !1
                },
                nearClip: {
                    get: function() {
                        return this._nearClip
                    },
                    set: function(t) {
                        this._nearClip = t,
                        this._updateClippingpPlanes()
                    },
                    tooltip: !1
                },
                farClip: {
                    get: function() {
                        return this._farClip
                    },
                    set: function(t) {
                        this._farClip = t,
                        this._updateClippingpPlanes()
                    },
                    tooltip: !1
                },
                ortho: {
                    get: function() {
                        return this._ortho
                    },
                    set: function(t) {
                        this._ortho = t,
                        this._updateProjection()
                    },
                    tooltip: !1
                },
                rect: {
                    get: function() {
                        return this._rect
                    },
                    set: function(t) {
                        this._rect = t,
                        this._updateRect()
                    },
                    tooltip: !1
                },
                cullingMask: {
                    get: function() {
                        return this._cullingMask
                    },
                    set: function(t) {
                        this._cullingMask = t,
                        this._updateCameraMask()
                    },
                    tooltip: !1
                },
                clearFlags: {
                    get: function() {
                        return this._clearFlags
                    },
                    set: function(t) {
                        this._clearFlags = t,
                        this._camera && this._camera.setClearFlags(t)
                    },
                    tooltip: !1
                },
                backgroundColor: {
                    get: function() {
                        return this._backgroundColor
                    },
                    set: function(t) {
                        this._backgroundColor.equals(t) || (this._backgroundColor.set(t),
                        this._updateBackgroundColor())
                    },
                    tooltip: !1
                },
                depth: {
                    get: function() {
                        return this._depth
                    },
                    set: function(t) {
                        A.main === this ? this._depth < t && p() : A.main && t < A.main._depth && d.includes(this) && (A.main = this),
                        this._depth = t,
                        this._camera && this._camera.setPriority(t)
                    },
                    tooltip: !1
                },
                targetTexture: {
                    get: function() {
                        return this._targetTexture
                    },
                    set: function(t) {
                        this._targetTexture = t,
                        this._updateTargetTexture()
                    },
                    tooltip: !1
                },
                renderStages: {
                    get: function() {
                        return this._renderStages
                    },
                    set: function(t) {
                        this._renderStages = t,
                        this._updateStages()
                    },
                    tooltip: !1
                },
                alignWithScreen: {
                    get: function() {
                        return this._alignWithScreen
                    },
                    set: function(t) {
                        this._alignWithScreen = t
                    }
                },
                _is3D: {
                    get: function() {
                        return this.node && this.node._is3DNode
                    }
                }
            },
            statics: {
                main: null,
                cameras: d,
                ClearFlags: v,
                findCamera: function(t) {
                    for (var e = 0, i = d.length; e < i; e++) {
                        var n = d[e];
                        if (n.containsNode(t))
                            return n
                    }
                    return null
                },
                _findRendererCamera: function(t) {
                    for (var e = s.scene._cameras, i = 0; i < e._count; i++)
                        if (e._data[i]._cullingMask & t._cullingMask)
                            return e._data[i];
                    return null
                },
                _setupDebugCamera: function() {
                    if (!m && o.renderType !== o.RENDER_TYPE_CANVAS) {
                        var t = new l;
                        m = t,
                        t.setStages(["opaque"]),
                        t.setFov(60 * Math.PI / 180),
                        t.setNear(.1),
                        t.setFar(4096),
                        t.dirty = !0,
                        t.cullingMask = 1 << cc.Node.BuiltinGroupIndex.DEBUG,
                        t.setPriority(cc.macro.MAX_ZINDEX),
                        t.setClearFlags(0),
                        t.setColor(0, 0, 0, 0);
                        var e = new cc.Node;
                        t.setNode(e),
                        y(),
                        cc.view.on("design-resolution-changed", y),
                        s.scene.addCamera(t)
                    }
                }
            },
            _updateCameraMask: function() {
                if (this._camera) {
                    var t = this._cullingMask & ~(1 << cc.Node.BuiltinGroupIndex.DEBUG);
                    this._camera.cullingMask = t
                }
            },
            _updateBackgroundColor: function() {
                if (this._camera) {
                    var t = this._backgroundColor;
                    this._camera.setColor(t.r / 255, t.g / 255, t.b / 255, t.a / 255)
                }
            },
            _updateTargetTexture: function() {
                if (this._camera) {
                    var t = this._targetTexture;
                    this._camera.setFrameBuffer(t ? t._framebuffer : null)
                }
            },
            _updateClippingpPlanes: function() {
                this._camera && (this._camera.setNear(this._nearClip),
                this._camera.setFar(this._farClip))
            },
            _updateProjection: function() {
                if (this._camera) {
                    var t = this._ortho ? 1 : 0;
                    this._camera.setType(t)
                }
            },
            _updateRect: function() {
                if (this._camera) {
                    var t = this._rect;
                    this._camera.setRect(t.x, t.y, t.width, t.height)
                }
            },
            _updateStages: function() {
                var t = this._renderStages
                  , e = [];
                t & g.OPAQUE && e.push("opaque"),
                t & g.TRANSPARENT && e.push("transparent"),
                this._camera.setStages(e)
            },
            _init: function() {
                if (!this._inited) {
                    this._inited = !0;
                    var t = this._camera;
                    t && (t.setNode(this.node),
                    t.setClearFlags(this._clearFlags),
                    t.setPriority(this._depth),
                    this._updateBackgroundColor(),
                    this._updateCameraMask(),
                    this._updateTargetTexture(),
                    this._updateClippingpPlanes(),
                    this._updateProjection(),
                    this._updateStages(),
                    this._updateRect(),
                    this.beforeDraw())
                }
            },
            __preload: function() {
                this._init()
            },
            onEnable: function() {
                o.renderType !== o.RENDER_TYPE_CANVAS && (cc.director.on(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this),
                s.scene.addCamera(this._camera)),
                d.push(this),
                (!A.main || this._depth < A.main._depth) && (A.main = this)
            },
            onDisable: function() {
                o.renderType !== o.RENDER_TYPE_CANVAS && (cc.director.off(cc.Director.EVENT_BEFORE_DRAW, this.beforeDraw, this),
                s.scene.removeCamera(this._camera)),
                cc.js.array.fastRemove(d, this),
                A.main === this && (A.main = null,
                p())
            },
            getScreenToWorldMatrix2D: function(t) {
                return this.getWorldToScreenMatrix2D(t),
                i.Mat4.invert(t, t),
                t
            },
            getWorldToScreenMatrix2D: function(t) {
                this.node.getWorldRT(h);
                var e = this.zoomRatio
                  , n = h.m;
                n[0] *= e,
                n[1] *= e,
                n[4] *= e,
                n[5] *= e;
                var r = n[12]
                  , s = n[13]
                  , a = cc.visibleRect.center;
                return n[12] = a.x - (n[0] * r + n[4] * s),
                n[13] = a.y - (n[1] * r + n[5] * s),
                t !== h && i.Mat4.copy(t, h),
                t
            },
            getScreenToWorldPoint: function(t, e) {
                return this.node.is3DNode ? (e = e || new cc.Vec3,
                this._camera.screenToWorld(e, t, cc.visibleRect.width, cc.visibleRect.height)) : (e = e || new cc.Vec2,
                this.getScreenToWorldMatrix2D(h),
                i.Vec2.transformMat4(e, t, h)),
                e
            },
            getWorldToScreenPoint: function(t, e) {
                return this.node.is3DNode ? (e = e || new cc.Vec3,
                this._camera.worldToScreen(e, t, cc.visibleRect.width, cc.visibleRect.height)) : (e = e || new cc.Vec2,
                this.getWorldToScreenMatrix2D(h),
                i.Vec2.transformMat4(e, t, h)),
                e
            },
            getRay: function(t) {
                return cc.geomUtils ? (i.Vec3.set(f, t.x, t.y, 1),
                this._camera.screenToWorld(_, f, cc.visibleRect.width, cc.visibleRect.height),
                this.ortho ? (i.Vec3.set(f, t.x, t.y, -1),
                this._camera.screenToWorld(u, f, cc.visibleRect.width, cc.visibleRect.height)) : this.node.getWorldPosition(u),
                n.Ray.fromPoints(new n.Ray, u, _)) : t
            },
            containsNode: function(t) {
                return (t._cullingMask & this.cullingMask) > 0
            },
            render: function(t) {
                if (!(t = t || cc.director.getScene()))
                    return null;
                this.node.getWorldMatrix(h),
                this.beforeDraw(),
                a.renderCamera(this._camera, t)
            },
            _onAlignWithScreen: function() {
                var t = cc.game.canvas.height / cc.view._scaleY;
                this._targetTexture && (t = cc.visibleRect.height);
                var e = this._fov * cc.macro.RAD;
                this.node.z = t / (2 * Math.tan(e / 2)),
                e = 2 * Math.atan(Math.tan(e / 2) / this.zoomRatio),
                this._camera.setFov(e),
                this._camera.setOrthoHeight(t / 2 / this.zoomRatio),
                this.node.setRotation(0, 0, 0, 1)
            },
            beforeDraw: function() {
                if (this._camera) {
                    if (this._alignWithScreen)
                        this._onAlignWithScreen();
                    else {
                        var t = this._fov * cc.macro.RAD;
                        t = 2 * Math.atan(Math.tan(t / 2) / this.zoomRatio),
                        this._camera.setFov(t),
                        this._camera.setOrthoHeight(this._orthoSize / this.zoomRatio)
                    }
                    this._camera.dirty = !0
                }
            }
        });
        cc.js.mixin(A.prototype, {
            getNodeToCameraTransform: function(t) {
                var e = r.identity();
                return t.getWorldMatrix(c),
                this.containsNode(t) && (this.getWorldToCameraMatrix(h),
                i.Mat4.mul(c, c, h)),
                r.fromMat4(e, c),
                e
            },
            getCameraToWorldPoint: function(t, e) {
                return this.getScreenToWorldPoint(t, e)
            },
            getWorldToCameraPoint: function(t, e) {
                return this.getWorldToScreenPoint(t, e)
            },
            getCameraToWorldMatrix: function(t) {
                return this.getScreenToWorldMatrix2D(t)
            },
            getWorldToCameraMatrix: function(t) {
                return this.getWorldToScreenMatrix2D(t)
            }
        }),
        e.exports = cc.Camera = A
    }
    ), {
        "../../renderer/scene/camera": 335,
        "../CCGame": 28,
        "../geom-utils": 148,
        "../renderer/index": 224,
        "../renderer/render-flow": 225,
        "../utils/affine-transform": 258,
        "../value-types": 282
    }],
    91: [(function(t, e) {
        "use strict";
        cc.Collider.Box = cc.Class({
            properties: {
                _offset: cc.v2(0, 0),
                _size: cc.size(100, 100),
                offset: {
                    tooltip: !1,
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                size: {
                    tooltip: !1,
                    get: function() {
                        return this._size
                    },
                    set: function(t) {
                        this._size.width = t.width < 0 ? 0 : t.width,
                        this._size.height = t.height < 0 ? 0 : t.height
                    },
                    type: cc.Size
                }
            },
            resetInEditor: !1
        });
        var i = cc.Class({
            name: "cc.BoxCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Box],
            editor: !1
        });
        cc.BoxCollider = e.exports = i
    }
    ), {}],
    92: [(function(t, e) {
        "use strict";
        cc.Collider.Circle = cc.Class({
            properties: {
                _offset: cc.v2(0, 0),
                _radius: 50,
                offset: {
                    tooltip: !1,
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                radius: {
                    tooltip: !1,
                    get: function() {
                        return this._radius
                    },
                    set: function(t) {
                        this._radius = t < 0 ? 0 : t
                    }
                }
            },
            resetInEditor: !1
        });
        var i = cc.Class({
            name: "cc.CircleCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Circle],
            editor: !1
        });
        cc.CircleCollider = e.exports = i
    }
    ), {}],
    93: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.Collider",
            extends: cc.Component,
            properties: {
                editing: {
                    default: !1,
                    serializable: !1,
                    tooltip: !1
                },
                tag: {
                    tooltip: !1,
                    default: 0,
                    range: [0, 1e7],
                    type: cc.Integer
                }
            },
            onDisable: function() {
                cc.director.getCollisionManager().removeCollider(this)
            },
            onEnable: function() {
                cc.director.getCollisionManager().addCollider(this)
            }
        });
        cc.Collider = e.exports = i
    }
    ), {}],
    94: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../value-types/vec2")) && i.__esModule ? i : {
            default: i
        }, r = t("./CCContact"), s = r.CollisionType, a = t("../CCNode").EventType, o = new n.default;
        function l(t, e, i, n, r, s) {
            var a = t.x
              , o = t.y
              , l = t.width
              , h = t.height
              , c = e.m
              , u = c[0]
              , _ = c[1]
              , f = c[4]
              , d = c[5]
              , p = u * a + f * o + c[12]
              , m = _ * a + d * o + c[13]
              , y = u * l
              , v = _ * l
              , g = f * h
              , A = d * h;
            n.x = p,
            n.y = m,
            r.x = y + p,
            r.y = v + m,
            i.x = g + p,
            i.y = A + m,
            s.x = y + g + p,
            s.y = v + A + m
        }
        var h = cc.Class({
            mixins: [cc.EventTarget],
            properties: {
                enabled: !1,
                enabledDrawBoundingBox: !1
            },
            ctor: function() {
                this._contacts = [],
                this._colliders = [],
                this._debugDrawer = null,
                this._enabledDebugDraw = !1,
                cc.director._scheduler && cc.director._scheduler.enableForTarget(this)
            },
            update: function() {
                if (this.enabled) {
                    var t, e, i = this._colliders;
                    for (t = 0,
                    e = i.length; t < e; t++)
                        this.updateCollider(i[t]);
                    var n = this._contacts
                      , r = [];
                    for (t = 0,
                    e = n.length; t < e; t++) {
                        var a = n[t].updateState();
                        a !== s.None && r.push([a, n[t]])
                    }
                    for (t = 0,
                    e = r.length; t < e; t++) {
                        var o = r[t];
                        this._doCollide(o[0], o[1])
                    }
                    this.drawColliders()
                }
            },
            _doCollide: function(t, e) {
                var i;
                switch (t) {
                case s.CollisionEnter:
                    i = "onCollisionEnter";
                    break;
                case s.CollisionStay:
                    i = "onCollisionStay";
                    break;
                case s.CollisionExit:
                    i = "onCollisionExit"
                }
                var n, r, a, o = e.collider1, l = e.collider2, h = o.node._components, c = l.node._components;
                for (n = 0,
                r = h.length; n < r; n++)
                    (a = h[n])[i] && a[i](l, o);
                for (n = 0,
                r = c.length; n < r; n++)
                    (a = c[n])[i] && a[i](o, l)
            },
            shouldCollide: function(t, e) {
                var i = t.node
                  , n = e.node
                  , r = cc.game.collisionMatrix;
                return i !== n && r[i.groupIndex][n.groupIndex]
            },
            initCollider: function(t) {
                if (!t.world) {
                    var e = t.world = {};
                    e.aabb = cc.rect(),
                    e.preAabb = cc.rect(),
                    e.matrix = cc.mat4(),
                    e.radius = 0,
                    t instanceof cc.BoxCollider ? (e.position = null,
                    e.points = [cc.v2(), cc.v2(), cc.v2(), cc.v2()]) : t instanceof cc.PolygonCollider ? (e.position = null,
                    e.points = t.points.map((function(t) {
                        return cc.v2(t.x, t.y)
                    }
                    ))) : t instanceof cc.CircleCollider && (e.position = cc.v2(),
                    e.points = null)
                }
            },
            updateCollider: function(t) {
                var e = t.offset
                  , i = t.world
                  , r = i.aabb
                  , s = i.matrix;
                t.node.getWorldMatrix(s);
                var a = i.preAabb;
                if (a.x = r.x,
                a.y = r.y,
                a.width = r.width,
                a.height = r.height,
                t instanceof cc.BoxCollider) {
                    var h = t.size;
                    r.x = e.x - h.width / 2,
                    r.y = e.y - h.height / 2,
                    r.width = h.width,
                    r.height = h.height;
                    var c = i.points
                      , u = c[0]
                      , _ = c[1]
                      , f = c[2]
                      , d = c[3];
                    l(r, s, u, _, f, d);
                    var p = Math.min(u.x, _.x, f.x, d.x)
                      , m = Math.min(u.y, _.y, f.y, d.y)
                      , y = Math.max(u.x, _.x, f.x, d.x)
                      , v = Math.max(u.y, _.y, f.y, d.y);
                    r.x = p,
                    r.y = m,
                    r.width = y - p,
                    r.height = v - m
                } else if (t instanceof cc.CircleCollider) {
                    n.default.transformMat4(o, t.offset, s),
                    i.position.x = o.x,
                    i.position.y = o.y;
                    var g = s.m
                      , A = g[12]
                      , x = g[13];
                    g[12] = g[13] = 0,
                    o.x = t.radius,
                    o.y = 0,
                    n.default.transformMat4(o, o, s);
                    var b = Math.sqrt(o.x * o.x + o.y * o.y);
                    i.radius = b,
                    r.x = i.position.x - b,
                    r.y = i.position.y - b,
                    r.width = 2 * b,
                    r.height = 2 * b,
                    g[12] = A,
                    g[13] = x
                } else if (t instanceof cc.PolygonCollider) {
                    var C = t.points
                      , T = i.points;
                    T.length = C.length;
                    for (var S = 1e6, w = 1e6, E = -1e6, M = -1e6, D = 0, B = C.length; D < B; D++) {
                        T[D] || (T[D] = cc.v2()),
                        o.x = C[D].x + e.x,
                        o.y = C[D].y + e.y,
                        n.default.transformMat4(o, o, s);
                        var I = o.x
                          , P = o.y;
                        T[D].x = I,
                        T[D].y = P,
                        I > E && (E = I),
                        I < S && (S = I),
                        P > M && (M = P),
                        P < w && (w = P)
                    }
                    r.x = S,
                    r.y = w,
                    r.width = E - S,
                    r.height = M - w
                }
            },
            addCollider: function(t) {
                var e = this._colliders;
                if (-1 === e.indexOf(t)) {
                    for (var i = 0, n = e.length; i < n; i++) {
                        var s = e[i];
                        if (this.shouldCollide(t, s)) {
                            var o = new r(t,s);
                            this._contacts.push(o)
                        }
                    }
                    e.push(t),
                    this.initCollider(t)
                }
                t.node.on(a.GROUP_CHANGED, this.onNodeGroupChanged, this)
            },
            removeCollider: function(t) {
                var e = this._colliders
                  , i = e.indexOf(t);
                if (i >= 0) {
                    e.splice(i, 1);
                    for (var n = this._contacts, r = n.length - 1; r >= 0; r--) {
                        var o = n[r];
                        o.collider1 !== t && o.collider2 !== t || (o.touching && this._doCollide(s.CollisionExit, o),
                        n.splice(r, 1))
                    }
                    t.node.off(a.GROUP_CHANGED, this.onNodeGroupChanged, this)
                } else
                    cc.errorID(6600)
            },
            onNodeGroupChanged: function(t) {
                for (var e = t.getComponents(cc.Collider), i = 0, n = e.length; i < n; i++) {
                    var r = e[i];
                    cc.PhysicsCollider && r instanceof cc.PhysicsCollider || (this.removeCollider(r),
                    this.addCollider(r))
                }
            },
            drawColliders: function() {
                if (this._enabledDebugDraw) {
                    this._checkDebugDrawValid();
                    var t = this._debugDrawer;
                    t.clear();
                    for (var e = this._colliders, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (t.strokeColor = cc.Color.WHITE,
                        r instanceof cc.BoxCollider || r instanceof cc.PolygonCollider) {
                            var s = r.world.points;
                            if (s.length > 0) {
                                t.moveTo(s[0].x, s[0].y);
                                for (var a = 1; a < s.length; a++)
                                    t.lineTo(s[a].x, s[a].y);
                                t.close(),
                                t.stroke()
                            }
                        } else
                            r instanceof cc.CircleCollider && (t.circle(r.world.position.x, r.world.position.y, r.world.radius),
                            t.stroke());
                        if (this.enabledDrawBoundingBox) {
                            var o = r.world.aabb;
                            t.strokeColor = cc.Color.BLUE,
                            t.moveTo(o.xMin, o.yMin),
                            t.lineTo(o.xMin, o.yMax),
                            t.lineTo(o.xMax, o.yMax),
                            t.lineTo(o.xMax, o.yMin),
                            t.close(),
                            t.stroke()
                        }
                    }
                }
            },
            _checkDebugDrawValid: function() {
                if (!this._debugDrawer || !this._debugDrawer.isValid) {
                    var t = new cc.Node("COLLISION_MANAGER_DEBUG_DRAW");
                    t.zIndex = cc.macro.MAX_ZINDEX,
                    cc.game.addPersistRootNode(t),
                    this._debugDrawer = t.addComponent(cc.Graphics)
                }
            }
        });
        cc.js.getset(h.prototype, "enabledDebugDraw", (function() {
            return this._enabledDebugDraw
        }
        ), (function(t) {
            t && !this._enabledDebugDraw ? (this._checkDebugDrawValid(),
            this._debugDrawer.node.active = !0) : !t && this._enabledDebugDraw && (this._debugDrawer.clear(!0),
            this._debugDrawer.node.active = !1),
            this._enabledDebugDraw = t
        }
        )),
        cc.CollisionManager = e.exports = h
    }
    ), {
        "../CCNode": 29,
        "../value-types/vec2": 291,
        "./CCContact": 95
    }],
    95: [(function(t, e) {
        "use strict";
        var i = t("./CCIntersection")
          , n = cc.Enum({
            None: 0,
            CollisionEnter: 1,
            CollisionStay: 2,
            CollisionExit: 3
        });
        function r(t, e) {
            this.collider1 = t,
            this.collider2 = e,
            this.touching = !1;
            var n = t instanceof cc.BoxCollider || t instanceof cc.PolygonCollider
              , r = e instanceof cc.BoxCollider || e instanceof cc.PolygonCollider
              , s = t instanceof cc.CircleCollider
              , a = e instanceof cc.CircleCollider;
            n && r ? this.testFunc = i.polygonPolygon : s && a ? this.testFunc = i.circleCircle : n && a ? this.testFunc = i.polygonCircle : s && r ? (this.testFunc = i.polygonCircle,
            this.collider1 = e,
            this.collider2 = t) : cc.errorID(6601, cc.js.getClassName(t), cc.js.getClassName(e))
        }
        r.prototype.test = function() {
            var t = this.collider1.world
              , e = this.collider2.world;
            return !!t.aabb.intersects(e.aabb) && (this.testFunc === i.polygonPolygon ? this.testFunc(t.points, e.points) : this.testFunc === i.circleCircle ? this.testFunc(t, e) : this.testFunc === i.polygonCircle && this.testFunc(t.points, e))
        }
        ,
        r.prototype.updateState = function() {
            var t = this.test()
              , e = n.None;
            return t && !this.touching ? (this.touching = !0,
            e = n.CollisionEnter) : t && this.touching ? e = n.CollisionStay : !t && this.touching && (this.touching = !1,
            e = n.CollisionExit),
            e
        }
        ,
        r.CollisionType = n,
        e.exports = r
    }
    ), {
        "./CCIntersection": 96
    }],
    96: [(function(t, e) {
        "use strict";
        var i = {};
        function n(t, e, i, n) {
            var r = (n.x - i.x) * (t.y - i.y) - (n.y - i.y) * (t.x - i.x)
              , s = (e.x - t.x) * (t.y - i.y) - (e.y - t.y) * (t.x - i.x)
              , a = (n.y - i.y) * (e.x - t.x) - (n.x - i.x) * (e.y - t.y);
            if (0 !== a) {
                var o = r / a
                  , l = s / a;
                if (0 <= o && o <= 1 && 0 <= l && l <= 1)
                    return !0
            }
            return !1
        }
        function r(t, e, i) {
            for (var r = i.length, s = 0; s < r; ++s)
                if (n(t, e, i[s], i[(s + 1) % r]))
                    return !0;
            return !1
        }
        function s(t, e) {
            for (var i = !1, n = t.x, r = t.y, s = e.length, a = 0, o = s - 1; a < s; o = a++) {
                var l = e[a].x
                  , h = e[a].y
                  , c = e[o].x
                  , u = e[o].y;
                h > r != u > r && n < (c - l) * (r - h) / (u - h) + l && (i = !i)
            }
            return i
        }
        function a(t, e, i, n) {
            var r, s = i.x - e.x, a = i.y - e.y, o = s * s + a * a, l = ((t.x - e.x) * s + (t.y - e.y) * a) / o;
            return r = n ? o ? l < 0 ? e : l > 1 ? i : cc.v2(e.x + l * s, e.y + l * a) : e : cc.v2(e.x + l * s, e.y + l * a),
            s = t.x - r.x,
            a = t.y - r.y,
            Math.sqrt(s * s + a * a)
        }
        i.lineLine = n,
        i.lineRect = function(t, e, i) {
            var r = new cc.Vec2(i.x,i.y)
              , s = new cc.Vec2(i.x,i.yMax)
              , a = new cc.Vec2(i.xMax,i.yMax)
              , o = new cc.Vec2(i.xMax,i.y);
            return !!(n(t, e, r, s) || n(t, e, s, a) || n(t, e, a, o) || n(t, e, o, r))
        }
        ,
        i.linePolygon = r,
        i.rectRect = function(t, e) {
            var i = t.x
              , n = t.y
              , r = t.x + t.width
              , s = t.y + t.height
              , a = e.x
              , o = e.y
              , l = e.x + e.width
              , h = e.y + e.height;
            return i <= l && r >= a && n <= h && s >= o
        }
        ,
        i.rectPolygon = function(t, e) {
            var i, n, a = new cc.Vec2(t.x,t.y), o = new cc.Vec2(t.x,t.yMax), l = new cc.Vec2(t.xMax,t.yMax), h = new cc.Vec2(t.xMax,t.y);
            if (r(a, o, e))
                return !0;
            if (r(o, l, e))
                return !0;
            if (r(l, h, e))
                return !0;
            if (r(h, a, e))
                return !0;
            for (i = 0,
            n = e.length; i < n; ++i)
                if (s(e[i], t))
                    return !0;
            return !!(s(a, e) || s(o, e) || s(l, e) || s(h, e))
        }
        ,
        i.polygonPolygon = function(t, e) {
            var i, n;
            for (i = 0,
            n = t.length; i < n; ++i)
                if (r(t[i], t[(i + 1) % n], e))
                    return !0;
            for (i = 0,
            n = e.length; i < n; ++i)
                if (s(e[i], t))
                    return !0;
            for (i = 0,
            n = t.length; i < n; ++i)
                if (s(t[i], e))
                    return !0;
            return !1
        }
        ,
        i.circleCircle = function(t, e) {
            return t.position.sub(e.position).mag() < t.radius + e.radius
        }
        ,
        i.polygonCircle = function(t, e) {
            var i = e.position;
            if (s(i, t))
                return !0;
            for (var n = 0, r = t.length; n < r; n++)
                if (a(i, 0 === n ? t[t.length - 1] : t[n - 1], t[n], !0) < e.radius)
                    return !0;
            return !1
        }
        ,
        i.pointInPolygon = s,
        i.pointLineDistance = a,
        cc.Intersection = e.exports = i
    }
    ), {}],
    97: [(function(t, e) {
        "use strict";
        cc.Collider.Polygon = cc.Class({
            properties: {
                threshold: {
                    default: 1,
                    serializable: !1,
                    visible: !1
                },
                _offset: cc.v2(0, 0),
                offset: {
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t
                    },
                    type: cc.Vec2
                },
                points: {
                    tooltip: !1,
                    default: function() {
                        return [cc.v2(-50, -50), cc.v2(50, -50), cc.v2(50, 50), cc.v2(-50, 50)]
                    },
                    type: [cc.Vec2]
                }
            },
            resetPointsByContour: !1
        });
        var i = cc.Class({
            name: "cc.PolygonCollider",
            extends: cc.Collider,
            mixins: [cc.Collider.Polygon],
            editor: !1
        });
        cc.PolygonCollider = e.exports = i
    }
    ), {}],
    98: [(function(t) {
        "use strict";
        t("./CCCollisionManager"),
        t("./CCCollider"),
        t("./CCBoxCollider"),
        t("./CCCircleCollider"),
        t("./CCPolygonCollider")
    }
    ), {
        "./CCBoxCollider": 91,
        "./CCCircleCollider": 92,
        "./CCCollider": 93,
        "./CCCollisionManager": 94,
        "./CCPolygonCollider": 97
    }],
    99: [(function(t, e) {
        "use strict";
        t("./platform/CCClass");
        var i = t("./platform/CCObject").Flags
          , n = t("./platform/js").array
          , r = i.IsStartCalled
          , s = i.IsOnEnableCalled;
        function a(t, e) {
            for (var i = e.constructor._executionOrder, n = e._id, r = 0, s = t.length - 1, a = s >>> 1; r <= s; a = r + s >>> 1) {
                var o = t[a]
                  , l = o.constructor._executionOrder;
                if (l > i)
                    s = a - 1;
                else if (l < i)
                    r = a + 1;
                else {
                    var h = o._id;
                    if (h > n)
                        s = a - 1;
                    else {
                        if (!(h < n))
                            return a;
                        r = a + 1
                    }
                }
            }
            return ~r
        }
        function o(t, e) {
            for (var i = t.array, n = t.i + 1; n < i.length; ) {
                var r = i[n];
                r._enabled && r.node._activeInHierarchy ? ++n : (t.removeAt(n),
                e && (r._objFlags &= ~e))
            }
        }
        i.IsEditorOnEnableCalled;
        var l = cc.Class({
            __ctor__: function(t) {
                var e = n.MutableForwardIterator;
                this._zero = new e([]),
                this._neg = new e([]),
                this._pos = new e([]),
                this._invoke = t
            },
            statics: {
                stableRemoveInactive: o
            },
            add: null,
            remove: null,
            invoke: null
        });
        function h(t, e) {
            return t.constructor._executionOrder - e.constructor._executionOrder
        }
        var c = cc.Class({
            extends: l,
            add: function(t) {
                var e = t.constructor._executionOrder;
                (0 === e ? this._zero : e < 0 ? this._neg : this._pos).array.push(t)
            },
            remove: function(t) {
                var e = t.constructor._executionOrder;
                (0 === e ? this._zero : e < 0 ? this._neg : this._pos).fastRemove(t)
            },
            cancelInactive: function(t) {
                o(this._zero, t),
                o(this._neg, t),
                o(this._pos, t)
            },
            invoke: function() {
                var t = this._neg;
                t.array.length > 0 && (t.array.sort(h),
                this._invoke(t),
                t.array.length = 0),
                this._invoke(this._zero),
                this._zero.array.length = 0;
                var e = this._pos;
                e.array.length > 0 && (e.array.sort(h),
                this._invoke(e),
                e.array.length = 0)
            }
        })
          , u = cc.Class({
            extends: l,
            add: function(t) {
                var e = t.constructor._executionOrder;
                if (0 === e)
                    this._zero.array.push(t);
                else {
                    var i = e < 0 ? this._neg.array : this._pos.array
                      , n = a(i, t);
                    n < 0 && i.splice(~n, 0, t)
                }
            },
            remove: function(t) {
                var e = t.constructor._executionOrder;
                if (0 === e)
                    this._zero.fastRemove(t);
                else {
                    var i = e < 0 ? this._neg : this._pos
                      , n = a(i.array, t);
                    n >= 0 && i.removeAt(n)
                }
            },
            invoke: function(t) {
                this._neg.array.length > 0 && this._invoke(this._neg, t),
                this._invoke(this._zero, t),
                this._pos.array.length > 0 && this._invoke(this._pos, t)
            }
        });
        function _(t, e, i, n) {
            var r = "var a=it.array;for(it.i=0;it.i<a.length;++it.i){var c=a[it.i];" + t + "}";
            return n = e ? Function("it", "dt", r) : Function("it", r),
            t = Function("c", "dt", t),
            function(e, r) {
                try {
                    n(e, r)
                } catch (a) {
                    cc._throw(a);
                    var s = e.array;
                    for (i && (s[e.i]._objFlags |= i),
                    ++e.i; e.i < s.length; ++e.i)
                        try {
                            t(s[e.i], r)
                        } catch (a) {
                            cc._throw(a),
                            i && (s[e.i]._objFlags |= i)
                        }
                }
            }
        }
        var f = _("c.start();c._objFlags|=" + r, !1, r)
          , d = _("c.update(dt)", !0)
          , p = _("c.lateUpdate(dt)", !0);
        function m() {
            this.startInvoker = new c(f),
            this.updateInvoker = new u(d),
            this.lateUpdateInvoker = new u(p),
            this._deferredComps = [],
            this._updating = !1
        }
        var y = cc.Class({
            ctor: m,
            unscheduleAll: m,
            statics: {
                LifeCycleInvoker: l,
                OneOffInvoker: c,
                createInvokeImpl: _,
                invokeOnEnable: function(t) {
                    var e = cc.director._compScheduler
                      , i = t.array;
                    for (t.i = 0; t.i < i.length; ++t.i) {
                        var n = i[t.i];
                        n._enabled && (n.onEnable(),
                        !n.node._activeInHierarchy || e._onEnabled(n))
                    }
                }
            },
            _onEnabled: function(t) {
                cc.director.getScheduler().resumeTarget(t),
                t._objFlags |= s,
                this._updating ? this._deferredComps.push(t) : this._scheduleImmediate(t)
            },
            _onDisabled: function(t) {
                cc.director.getScheduler().pauseTarget(t),
                t._objFlags &= ~s;
                var e = this._deferredComps.indexOf(t);
                e >= 0 ? n.fastRemoveAt(this._deferredComps, e) : (!t.start || t._objFlags & r || this.startInvoker.remove(t),
                t.update && this.updateInvoker.remove(t),
                t.lateUpdate && this.lateUpdateInvoker.remove(t))
            },
            enableComp: function(t, e) {
                if (!(t._objFlags & s)) {
                    if (t.onEnable) {
                        if (e)
                            return void e.add(t);
                        if (t.onEnable(),
                        !t.node._activeInHierarchy)
                            return
                    }
                    this._onEnabled(t)
                }
            },
            disableComp: function(t) {
                t._objFlags & s && (t.onDisable && t.onDisable(),
                this._onDisabled(t))
            },
            _scheduleImmediate: function(t) {
                "function" != typeof t.start || t._objFlags & r || this.startInvoker.add(t),
                "function" == typeof t.update && this.updateInvoker.add(t),
                "function" == typeof t.lateUpdate && this.lateUpdateInvoker.add(t)
            },
            _deferredSchedule: function() {
                for (var t = this._deferredComps, e = 0, i = t.length; e < i; e++)
                    this._scheduleImmediate(t[e]);
                t.length = 0
            },
            _startForNewComps: function() {
                this._deferredComps.length > 0 && (this._deferredSchedule(),
                this.startInvoker.invoke())
            },
            startPhase: function() {
                this._updating = !0,
                this.startInvoker.invoke(),
                this._startForNewComps()
            },
            updatePhase: function(t) {
                this.updateInvoker.invoke(t)
            },
            lateUpdatePhase: function(t) {
                this.lateUpdateInvoker.invoke(t),
                this._updating = !1,
                this._startForNewComps()
            }
        });
        e.exports = y
    }
    ), {
        "./platform/CCClass": 193,
        "./platform/CCObject": 199,
        "./platform/js": 214,
        "./utils/misc": 267
    }],
    100: [(function(t, e) {
        "use strict";
        var i = t("../../animation/animation-animator")
          , n = t("../../animation/animation-clip")
          , r = t("../event/event-target")
          , s = t("../platform/js")
          , a = function(t, e) {
            return t === e
        }
          , o = cc.Enum({
            PLAY: "play",
            STOP: "stop",
            PAUSE: "pause",
            RESUME: "resume",
            LASTFRAME: "lastframe",
            FINISHED: "finished"
        })
          , l = cc.Class({
            name: "cc.Animation",
            extends: t("./CCComponent"),
            mixins: [r],
            editor: !1,
            statics: {
                EventType: o
            },
            ctor: function() {
                cc.EventTarget.call(this),
                this._animator = null,
                this._nameToState = s.createMap(!0),
                this._didInit = !1,
                this._currentClip = null
            },
            properties: {
                _defaultClip: {
                    default: null,
                    type: n
                },
                defaultClip: {
                    type: n,
                    get: function() {
                        return this._defaultClip
                    },
                    set: function() {},
                    tooltip: !1
                },
                currentClip: {
                    get: function() {
                        return this._currentClip
                    },
                    set: function(t) {
                        this._currentClip = t
                    },
                    type: n,
                    visible: !1
                },
                _writableClips: {
                    get: function() {
                        return this._clips
                    },
                    set: function(t) {
                        this._didInit = !1,
                        this._clips = t,
                        this._init()
                    },
                    type: [n]
                },
                _clips: {
                    default: [],
                    type: [n],
                    tooltip: !1,
                    visible: !0
                },
                playOnLoad: {
                    default: !1,
                    tooltip: !1
                }
            },
            start: function() {
                if (this.playOnLoad && this._defaultClip && (!this._animator || !this._animator.isPlaying)) {
                    var t = this.getAnimationState(this._defaultClip.name);
                    this._animator.playState(t)
                }
            },
            onEnable: function() {
                this._animator && this._animator.resume()
            },
            onDisable: function() {
                this._animator && this._animator.pause()
            },
            onDestroy: function() {
                this.stop()
            },
            getClips: function() {
                return this._clips
            },
            play: function(t, e) {
                var i = this.playAdditive(t, e);
                return this._animator.stopStatesExcept(i),
                i
            },
            playAdditive: function(t, e) {
                this._init();
                var i = this.getAnimationState(t || this._defaultClip && this._defaultClip.name);
                if (i) {
                    this.enabled = !0;
                    var n = this._animator;
                    n.isPlaying && i.isPlaying ? i.isPaused ? n.resumeState(i) : (n.stopState(i),
                    n.playState(i, e)) : n.playState(i, e),
                    this.enabledInHierarchy || n.pause(),
                    this.currentClip = i.clip
                }
                return i
            },
            stop: function(t) {
                if (this._didInit)
                    if (t) {
                        var e = this._nameToState[t];
                        e && this._animator.stopState(e)
                    } else
                        this._animator.stop()
            },
            pause: function(t) {
                if (this._didInit)
                    if (t) {
                        var e = this._nameToState[t];
                        e && this._animator.pauseState(e)
                    } else
                        this.enabled = !1
            },
            resume: function(t) {
                if (this._didInit)
                    if (t) {
                        var e = this.getAnimationState(t);
                        e && this._animator.resumeState(e)
                    } else
                        this.enabled = !0
            },
            setCurrentTime: function(t, e) {
                if (this._init(),
                e) {
                    var i = this.getAnimationState(e);
                    i && this._animator.setStateTime(i, t)
                } else
                    this._animator.setStateTime(t)
            },
            getAnimationState: function(t) {
                this._init();
                var e = this._nameToState[t];
                return e && !e.curveLoaded && this._animator._reloadClip(e),
                e || null
            },
            addClip: function(t, e) {
                if (t) {
                    this._init(),
                    cc.js.array.contains(this._clips, t) || this._clips.push(t),
                    e = e || t.name;
                    var i = this._nameToState[e];
                    if (i) {
                        if (i.clip === t)
                            return i;
                        var n = this._clips.indexOf(i.clip);
                        -1 !== n && this._clips.splice(n, 1)
                    }
                    var r = new cc.AnimationState(t,e);
                    return this._nameToState[e] = r,
                    r
                }
                cc.warnID(3900)
            },
            removeClip: function(t, e) {
                if (t) {
                    var i;
                    for (var n in this._init(),
                    this._nameToState)
                        if (i = this._nameToState[n],
                        a(i.clip, t))
                            break;
                    if (t === this._defaultClip) {
                        if (!e)
                            return void cc.warnID(3902);
                        this._defaultClip = null
                    }
                    if (i && i.isPlaying) {
                        if (!e)
                            return void cc.warnID(3903);
                        this.stop(i.name)
                    }
                    this._clips = this._clips.filter((function(e) {
                        return !a(e, t)
                    }
                    )),
                    i && delete this._nameToState[i.name]
                } else
                    cc.warnID(3901)
            },
            sample: function(t) {
                if (this._init(),
                t) {
                    var e = this.getAnimationState(t);
                    e && e.sample()
                } else
                    this._animator.sample()
            },
            on: function(t, e, i, n) {
                this._init();
                var r = this._EventTargetOn(t, e, i, n);
                if ("lastframe" === t) {
                    var s = this._nameToState;
                    for (var a in s)
                        s[a]._lastframeEventOn = !0
                }
                return r
            },
            off: function(t, e, i, n) {
                if (this._init(),
                "lastframe" === t) {
                    var r = this._nameToState;
                    for (var s in r)
                        r[s]._lastframeEventOn = !1
                }
                this._EventTargetOff(t, e, i, n)
            },
            _init: function() {
                this._didInit || (this._didInit = !0,
                this._animator = new i(this.node,this),
                this._createStates())
            },
            _createStates: function() {
                this._nameToState = s.createMap(!0);
                for (var t = null, e = !1, i = 0; i < this._clips.length; ++i) {
                    var n = this._clips[i];
                    n && (t = new cc.AnimationState(n),
                    this._nameToState[t.name] = t,
                    a(this._defaultClip, n) && (e = t))
                }
                this._defaultClip && !e && (t = new cc.AnimationState(this._defaultClip),
                this._nameToState[t.name] = t)
            }
        });
        l.prototype._EventTargetOn = r.prototype.on,
        l.prototype._EventTargetOff = r.prototype.off,
        cc.Animation = e.exports = l
    }
    ), {
        "../../animation/animation-animator": 9,
        "../../animation/animation-clip": 10,
        "../event/event-target": 140,
        "../platform/js": 214,
        "./CCComponent": 105
    }],
    101: [(function(t, e) {
        "use strict";
        var i = t("../utils/misc")
          , n = t("./CCComponent")
          , r = t("../assets/CCAudioClip")
          , s = cc.Class({
            name: "cc.AudioSource",
            extends: n,
            editor: !1,
            ctor: function() {
                this.audio = new cc._Audio
            },
            properties: {
                _clip: {
                    default: null,
                    type: r
                },
                _volume: 1,
                _mute: !1,
                _loop: !1,
                _pausedFlag: {
                    default: !1,
                    serializable: !1
                },
                _firstlyEnabled: !0,
                isPlaying: {
                    get: function() {
                        return this.audio.getState() === cc._Audio.State.PLAYING
                    },
                    visible: !1
                },
                clip: {
                    get: function() {
                        return this._clip
                    },
                    set: function(t) {
                        if (t !== this._clip) {
                            if (!(t instanceof r))
                                return cc.error("Wrong type of AudioClip.");
                            this._clip = t,
                            this.audio.stop(),
                            this.audio.src = this._clip,
                            this.preload && this._clip._ensureLoaded()
                        }
                    },
                    type: r,
                    tooltip: !1,
                    animatable: !1
                },
                volume: {
                    get: function() {
                        return this._volume
                    },
                    set: function(t) {
                        return t = i.clamp01(t),
                        this._volume = t,
                        this._mute || this.audio.setVolume(t),
                        t
                    },
                    tooltip: !1
                },
                mute: {
                    get: function() {
                        return this._mute
                    },
                    set: function(t) {
                        return this._mute = t,
                        this.audio.setVolume(t ? 0 : this._volume),
                        t
                    },
                    animatable: !1,
                    tooltip: !1
                },
                loop: {
                    get: function() {
                        return this._loop
                    },
                    set: function(t) {
                        return this._loop = t,
                        this.audio.setLoop(t),
                        t
                    },
                    animatable: !1,
                    tooltip: !1
                },
                playOnLoad: {
                    default: !1,
                    tooltip: !1,
                    animatable: !1
                },
                preload: {
                    default: !1,
                    animatable: !1
                }
            },
            _pausedCallback: function() {
                this.audio.getState() === cc._Audio.State.PLAYING && (this.audio.pause(),
                this._pausedFlag = !0)
            },
            _restoreCallback: function() {
                this._pausedFlag && this.audio.resume(),
                this._pausedFlag = !1
            },
            onLoad: function() {
                this.audio.src || (this.audio.src = this._clip),
                this.preload && this._clip._ensureLoaded()
            },
            onEnable: function() {
                this.playOnLoad && this._firstlyEnabled && (this._firstlyEnabled = !1,
                this.play()),
                cc.game.on(cc.game.EVENT_HIDE, this._pausedCallback, this),
                cc.game.on(cc.game.EVENT_SHOW, this._restoreCallback, this)
            },
            onDisable: function() {
                this.stop(),
                cc.game.off(cc.game.EVENT_HIDE, this._pausedCallback, this),
                cc.game.off(cc.game.EVENT_SHOW, this._restoreCallback, this)
            },
            onDestroy: function() {
                this.audio.destroy()
            },
            play: function() {
                if (this._clip) {
                    var t = this.audio;
                    t.setVolume(this._mute ? 0 : this._volume),
                    t.setLoop(this._loop),
                    t.setCurrentTime(0),
                    t.play()
                }
            },
            stop: function() {
                this.audio.stop()
            },
            pause: function() {
                this.audio.pause()
            },
            resume: function() {
                this.audio.resume()
            },
            rewind: function() {
                this.audio.setCurrentTime(0)
            },
            getCurrentTime: function() {
                return this.audio.getCurrentTime()
            },
            setCurrentTime: function(t) {
                return this.audio.setCurrentTime(t),
                t
            },
            getDuration: function() {
                return this.audio.getDuration()
            }
        });
        cc.AudioSource = e.exports = s
    }
    ), {
        "../assets/CCAudioClip": 63,
        "../utils/misc": 267,
        "./CCComponent": 105
    }],
    102: [(function(t, e) {
        "use strict";
        var i = ["touchstart", "touchmove", "touchend", "mousedown", "mousemove", "mouseup", "mouseenter", "mouseleave", "mousewheel"];
        function n(t) {
            t.stopPropagation()
        }
        var r = cc.Class({
            name: "cc.BlockInputEvents",
            extends: t("./CCComponent"),
            editor: {
                menu: "i18n:MAIN_MENU.component.ui/Block Input Events",
                inspector: "packages://inspector/inspectors/comps/block-input-events.js",
                help: "i18n:COMPONENT.help_url.block_input_events"
            },
            onEnable: function() {
                for (var t = 0; t < i.length; t++)
                    this.node.on(i[t], n, this)
            },
            onDisable: function() {
                for (var t = 0; t < i.length; t++)
                    this.node.off(i[t], n, this)
            }
        });
        cc.BlockInputEvents = e.exports = r
    }
    ), {
        "./CCComponent": 105
    }],
    103: [(function(t, e) {
        "use strict";
        var i = t("./CCComponent")
          , n = t("../utils/gray-sprite-state")
          , r = cc.Enum({
            NONE: 0,
            COLOR: 1,
            SPRITE: 2,
            SCALE: 3
        })
          , s = cc.Enum({
            NORMAL: 0,
            HOVER: 1,
            PRESSED: 2,
            DISABLED: 3
        })
          , a = cc.Class({
            name: "cc.Button",
            extends: i,
            mixins: [n],
            ctor: function() {
                this._pressed = !1,
                this._hovered = !1,
                this._fromColor = null,
                this._toColor = null,
                this._time = 0,
                this._transitionFinished = !0,
                this._fromScale = cc.Vec2.ZERO,
                this._toScale = cc.Vec2.ZERO,
                this._originalScale = null,
                this._graySpriteMaterial = null,
                this._spriteMaterial = null,
                this._sprite = null
            },
            editor: !1,
            properties: {
                interactable: {
                    default: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateState(),
                        this.interactable || this._resetState()
                    },
                    animatable: !1
                },
                _resizeToTarget: {
                    animatable: !1,
                    set: function(t) {
                        t && this._resizeNodeToTargetNode()
                    }
                },
                enableAutoGrayEffect: {
                    default: !1,
                    tooltip: !1,
                    notify: function() {
                        this._updateDisabledState(!0)
                    }
                },
                transition: {
                    default: r.NONE,
                    tooltip: !1,
                    type: r,
                    animatable: !1,
                    notify: function(t) {
                        this._updateTransition(t)
                    },
                    formerlySerializedAs: "transition"
                },
                normalColor: {
                    default: cc.Color.WHITE,
                    displayName: "Normal",
                    tooltip: !1,
                    notify: function() {
                        this.transition === r.Color && this._getButtonState() === s.NORMAL && (this._getTarget().opacity = this.normalColor.a),
                        this._updateState()
                    }
                },
                pressedColor: {
                    default: cc.color(211, 211, 211),
                    displayName: "Pressed",
                    tooltip: !1,
                    notify: function() {
                        this.transition === r.Color && this._getButtonState() === s.PRESSED && (this._getTarget().opacity = this.pressedColor.a),
                        this._updateState()
                    },
                    formerlySerializedAs: "pressedColor"
                },
                hoverColor: {
                    default: cc.Color.WHITE,
                    displayName: "Hover",
                    tooltip: !1,
                    notify: function() {
                        this.transition === r.Color && this._getButtonState() === s.HOVER && (this._getTarget().opacity = this.hoverColor.a),
                        this._updateState()
                    },
                    formerlySerializedAs: "hoverColor"
                },
                disabledColor: {
                    default: cc.color(124, 124, 124),
                    displayName: "Disabled",
                    tooltip: !1,
                    notify: function() {
                        this.transition === r.Color && this._getButtonState() === s.DISABLED && (this._getTarget().opacity = this.disabledColor.a),
                        this._updateState()
                    }
                },
                duration: {
                    default: .1,
                    range: [0, 10],
                    tooltip: !1
                },
                zoomScale: {
                    default: 1.2,
                    tooltip: !1
                },
                normalSprite: {
                    default: null,
                    type: cc.SpriteFrame,
                    displayName: "Normal",
                    tooltip: !1,
                    notify: function() {
                        this._updateState()
                    }
                },
                pressedSprite: {
                    default: null,
                    type: cc.SpriteFrame,
                    displayName: "Pressed",
                    tooltip: !1,
                    formerlySerializedAs: "pressedSprite",
                    notify: function() {
                        this._updateState()
                    }
                },
                hoverSprite: {
                    default: null,
                    type: cc.SpriteFrame,
                    displayName: "Hover",
                    tooltip: !1,
                    formerlySerializedAs: "hoverSprite",
                    notify: function() {
                        this._updateState()
                    }
                },
                disabledSprite: {
                    default: null,
                    type: cc.SpriteFrame,
                    displayName: "Disabled",
                    tooltip: !1,
                    notify: function() {
                        this._updateState()
                    }
                },
                target: {
                    default: null,
                    type: cc.Node,
                    tooltip: !1,
                    notify: function(t) {
                        this._applyTarget(),
                        t && this.target !== t && this._unregisterTargetEvent(t)
                    }
                },
                clickEvents: {
                    default: [],
                    type: cc.Component.EventHandler,
                    tooltip: !1
                }
            },
            statics: {
                Transition: r
            },
            __preload: function() {
                this._applyTarget(),
                this._resetState()
            },
            _resetState: function() {
                this._pressed = !1,
                this._hovered = !1;
                var t = this._getTarget()
                  , e = this.transition
                  , i = this._originalScale;
                e === r.COLOR && this.interactable ? this._setTargetColor(this.normalColor) : e === r.SCALE && i && t.setScale(i.x, i.y),
                this._transitionFinished = !0
            },
            onEnable: function() {
                this.normalSprite && this.normalSprite.ensureLoadTexture(),
                this.hoverSprite && this.hoverSprite.ensureLoadTexture(),
                this.pressedSprite && this.pressedSprite.ensureLoadTexture(),
                this.disabledSprite && this.disabledSprite.ensureLoadTexture(),
                this._registerNodeEvent(),
                this._updateState()
            },
            onDisable: function() {
                this._resetState(),
                this._unregisterNodeEvent()
            },
            _getTarget: function() {
                return this.target ? this.target : this.node
            },
            _onTargetSpriteFrameChanged: function(t) {
                this.transition === r.SPRITE && this._setCurrentStateSprite(t.spriteFrame)
            },
            _onTargetColorChanged: function(t) {
                this.transition === r.COLOR && this._setCurrentStateColor(t)
            },
            _onTargetScaleChanged: function() {
                var t = this._getTarget();
                this._originalScale && (this.transition !== r.SCALE || this._transitionFinished) && (this._originalScale.x = t.scaleX,
                this._originalScale.y = t.scaleY)
            },
            _setTargetColor: function(t) {
                var e = this._getTarget()
                  , i = t.clone();
                e.opacity = i.a,
                i.a = 255,
                e.color = i
            },
            _getStateColor: function(t) {
                switch (t) {
                case s.NORMAL:
                    return this.normalColor;
                case s.HOVER:
                    return this.hoverColor;
                case s.PRESSED:
                    return this.pressedColor;
                case s.DISABLED:
                    return this.disabledColor
                }
            },
            _getStateSprite: function(t) {
                switch (t) {
                case s.NORMAL:
                    return this.normalSprite;
                case s.HOVER:
                    return this.hoverSprite;
                case s.PRESSED:
                    return this.pressedSprite;
                case s.DISABLED:
                    return this.disabledSprite
                }
            },
            _setCurrentStateColor: function(t) {
                switch (this._getButtonState()) {
                case s.NORMAL:
                    this.normalColor = t;
                    break;
                case s.HOVER:
                    this.hoverColor = t;
                    break;
                case s.PRESSED:
                    this.pressedColor = t;
                    break;
                case s.DISABLED:
                    this.disabledColor = t
                }
            },
            _setCurrentStateSprite: function(t) {
                switch (this._getButtonState()) {
                case s.NORMAL:
                    this.normalSprite = t;
                    break;
                case s.HOVER:
                    this.hoverSprite = t;
                    break;
                case s.PRESSED:
                    this.pressedSprite = t;
                    break;
                case s.DISABLED:
                    this.disabledSprite = t
                }
            },
            update: function(t) {
                var e = this._getTarget();
                if (!this._transitionFinished && (this.transition === r.COLOR || this.transition === r.SCALE)) {
                    this.time += t;
                    var i = 1;
                    if (this.duration > 0 && (i = this.time / this.duration),
                    i >= 1 && (i = 1),
                    this.transition === r.COLOR) {
                        var n = this._fromColor.lerp(this._toColor, i);
                        this._setTargetColor(n)
                    } else
                        this.transition === r.SCALE && this._originalScale && (e.scale = this._fromScale.lerp(this._toScale, i));
                    1 === i && (this._transitionFinished = !0)
                }
            },
            _registerNodeEvent: function() {
                this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this),
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this),
                this.node.on(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this),
                this.node.on(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this)
            },
            _unregisterNodeEvent: function() {
                this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMove, this),
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this),
                this.node.off(cc.Node.EventType.MOUSE_ENTER, this._onMouseMoveIn, this),
                this.node.off(cc.Node.EventType.MOUSE_LEAVE, this._onMouseMoveOut, this)
            },
            _registerTargetEvent: function(t) {
                t.on(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this)
            },
            _unregisterTargetEvent: function(t) {
                t.off(cc.Node.EventType.SCALE_CHANGED, this._onTargetScaleChanged, this)
            },
            _getTargetSprite: function(t) {
                var e = null;
                return t && (e = t.getComponent(cc.Sprite)),
                e
            },
            _applyTarget: function() {
                var t = this._getTarget();
                this._sprite = this._getTargetSprite(t),
                this._originalScale || (this._originalScale = cc.Vec2.ZERO),
                this._originalScale.x = t.scaleX,
                this._originalScale.y = t.scaleY,
                this._registerTargetEvent(t)
            },
            _onTouchBegan: function(t) {
                this.interactable && this.enabledInHierarchy && (this._pressed = !0,
                this._updateState(),
                t.stopPropagation())
            },
            _onTouchMove: function(t) {
                if (this.interactable && this.enabledInHierarchy && this._pressed) {
                    var e, i = t.touch, n = this.node._hitTest(i.getLocation()), a = this._getTarget(), o = this._originalScale;
                    this.transition === r.SCALE && o ? n ? (this._fromScale.x = o.x,
                    this._fromScale.y = o.y,
                    this._toScale.x = o.x * this.zoomScale,
                    this._toScale.y = o.y * this.zoomScale,
                    this._transitionFinished = !1) : (this.time = 0,
                    this._transitionFinished = !0,
                    a.setScale(o.x, o.y)) : (e = n ? s.PRESSED : s.NORMAL,
                    this._applyTransition(e)),
                    t.stopPropagation()
                }
            },
            _onTouchEnded: function(t) {
                this.interactable && this.enabledInHierarchy && (this._pressed && (cc.Component.EventHandler.emitEvents(this.clickEvents, t),
                this.node.emit("click", this)),
                this._pressed = !1,
                this._updateState(),
                t.stopPropagation())
            },
            _onTouchCancel: function() {
                this.interactable && this.enabledInHierarchy && (this._pressed = !1,
                this._updateState())
            },
            _onMouseMoveIn: function() {
                !this._pressed && this.interactable && this.enabledInHierarchy && (this.transition !== r.SPRITE || this.hoverSprite) && (this._hovered || (this._hovered = !0,
                this._updateState()))
            },
            _onMouseMoveOut: function() {
                this._hovered && (this._hovered = !1,
                this._updateState())
            },
            _updateState: function() {
                var t = this._getButtonState();
                this._applyTransition(t),
                this._updateDisabledState()
            },
            _getButtonState: function() {
                return this.interactable ? this._pressed ? s.PRESSED : this._hovered ? s.HOVER : s.NORMAL : s.DISABLED
            },
            _updateColorTransitionImmediately: function(t) {
                var e = this._getStateColor(t);
                this._setTargetColor(e),
                this._fromColor = e.clone(),
                this._toColor = e
            },
            _updateColorTransition: function(t) {
                if (t === s.DISABLED)
                    this._updateColorTransitionImmediately(t);
                else {
                    var e = this._getTarget()
                      , i = this._getStateColor(t);
                    this._fromColor = e.color.clone(),
                    this._toColor = i,
                    this.time = 0,
                    this._transitionFinished = !1
                }
            },
            _updateSpriteTransition: function(t) {
                var e = this._getStateSprite(t);
                this._sprite && e && (this._sprite.spriteFrame = e)
            },
            _updateScaleTransition: function(t) {
                t === s.PRESSED ? this._zoomUp() : this._zoomBack()
            },
            _zoomUp: function() {
                this._originalScale && (this._fromScale.x = this._originalScale.x,
                this._fromScale.y = this._originalScale.y,
                this._toScale.x = this._originalScale.x * this.zoomScale,
                this._toScale.y = this._originalScale.y * this.zoomScale,
                this.time = 0,
                this._transitionFinished = !1)
            },
            _zoomBack: function() {
                if (this._originalScale) {
                    var t = this._getTarget();
                    this._fromScale.x = t.scaleX,
                    this._fromScale.y = t.scaleY,
                    this._toScale.x = this._originalScale.x,
                    this._toScale.y = this._originalScale.y,
                    this.time = 0,
                    this._transitionFinished = !1
                }
            },
            _updateTransition: function(t) {
                t === r.COLOR ? this._updateColorTransitionImmediately(s.NORMAL) : t === r.SPRITE && this._updateSpriteTransition(s.NORMAL),
                this._updateState()
            },
            _applyTransition: function(t) {
                var e = this.transition;
                e === r.COLOR ? this._updateColorTransition(t) : e === r.SPRITE ? this._updateSpriteTransition(t) : e === r.SCALE && this._updateScaleTransition(t)
            },
            _resizeNodeToTargetNode: !1,
            _updateDisabledState: function(t) {
                if (this._sprite && (this.enableAutoGrayEffect || t)) {
                    var e = !1;
                    this.transition === r.SPRITE && this.disabledSprite || (e = this.enableAutoGrayEffect && !this.interactable),
                    this._switchGrayMaterial(e, this._sprite)
                }
            }
        });
        cc.Button = e.exports = a
    }
    ), {
        "../utils/gray-sprite-state": 264,
        "./CCComponent": 105
    }],
    104: [(function(t, e) {
        "use strict";
        var i = t("../camera/CCCamera")
          , n = t("./CCComponent")
          , r = cc.Class({
            name: "cc.Canvas",
            extends: n,
            editor: !1,
            resetInEditor: !1,
            statics: {
                instance: null
            },
            properties: {
                _designResolution: cc.size(960, 640),
                designResolution: {
                    get: function() {
                        return cc.size(this._designResolution)
                    },
                    set: function(t) {
                        this._designResolution.width = t.width,
                        this._designResolution.height = t.height,
                        this.applySettings()
                    },
                    tooltip: !1
                },
                _fitWidth: !1,
                _fitHeight: !0,
                fitHeight: {
                    get: function() {
                        return this._fitHeight
                    },
                    set: function(t) {
                        this._fitHeight !== t && (this._fitHeight = t,
                        this.applySettings())
                    },
                    tooltip: !1
                },
                fitWidth: {
                    get: function() {
                        return this._fitWidth
                    },
                    set: function(t) {
                        this._fitWidth !== t && (this._fitWidth = t,
                        this.applySettings())
                    },
                    tooltip: !1
                }
            },
            _fitDesignResolution: !1,
            __preload: function() {
                if (r.instance)
                    return cc.warnID(6700, this.node.name, r.instance.node.name);
                r.instance = this,
                this.applySettings();
                var t = this.getComponent(cc.Widget);
                t && t.updateAlignment()
            },
            start: function() {
                if (!i.main && cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS) {
                    var t = new cc.Node("Main Camera");
                    t.parent = this.node,
                    t.setSiblingIndex(0);
                    var e = t.addComponent(i)
                      , n = i.ClearFlags;
                    e.clearFlags = n.COLOR | n.DEPTH | n.STENCIL,
                    e.depth = -1
                }
            },
            onDestroy: function() {
                r.instance === this && (r.instance = null)
            },
            applySettings: function() {
                var t, e = cc.ResolutionPolicy;
                t = this.fitHeight && this.fitWidth ? e.SHOW_ALL : this.fitHeight || this.fitWidth ? this.fitWidth ? e.FIXED_WIDTH : e.FIXED_HEIGHT : e.NO_BORDER;
                var i = this._designResolution;
                cc.view.setDesignResolutionSize(i.width, i.height, t)
            }
        });
        cc.Canvas = e.exports = r
    }
    ), {
        "../camera/CCCamera": 90,
        "./CCComponent": 105
    }],
    105: [(function(t, e) {
        "use strict";
        var i = t("../platform/CCObject")
          , n = t("../platform/js")
          , r = new (t("../platform/id-generater"))("Comp")
          , s = (i.Flags.IsOnEnableCalled,
        i.Flags.IsOnLoadCalled)
          , a = !!cc.ActionManager
          , o = cc.Class({
            name: "cc.Component",
            extends: i,
            ctor: function() {
                this._id = r.getNewId(),
                this.__eventTargets = []
            },
            properties: {
                node: {
                    default: null,
                    visible: !1
                },
                name: {
                    get: function() {
                        if (this._name)
                            return this._name;
                        var t = cc.js.getClassName(this)
                          , e = t.lastIndexOf(".");
                        return e >= 0 && (t = t.slice(e + 1)),
                        this.node.name + "<" + t + ">"
                    },
                    set: function(t) {
                        this._name = t
                    },
                    visible: !1
                },
                uuid: {
                    get: function() {
                        return this._id
                    },
                    visible: !1
                },
                __scriptAsset: !1,
                _enabled: !0,
                enabled: {
                    get: function() {
                        return this._enabled
                    },
                    set: function(t) {
                        if (this._enabled !== t && (this._enabled = t,
                        this.node._activeInHierarchy)) {
                            var e = cc.director._compScheduler;
                            t ? e.enableComp(this) : e.disableComp(this)
                        }
                    },
                    visible: !1,
                    animatable: !0
                },
                enabledInHierarchy: {
                    get: function() {
                        return this._enabled && this.node._activeInHierarchy
                    },
                    visible: !1
                },
                _isOnLoadCalled: {
                    get: function() {
                        return this._objFlags & s
                    }
                }
            },
            update: null,
            lateUpdate: null,
            __preload: null,
            onLoad: null,
            start: null,
            onEnable: null,
            onDisable: null,
            onDestroy: null,
            onFocusInEditor: null,
            onLostFocusInEditor: null,
            resetInEditor: null,
            addComponent: function(t) {
                return this.node.addComponent(t)
            },
            getComponent: function(t) {
                return this.node.getComponent(t)
            },
            getComponents: function(t) {
                return this.node.getComponents(t)
            },
            getComponentInChildren: function(t) {
                return this.node.getComponentInChildren(t)
            },
            getComponentsInChildren: function(t) {
                return this.node.getComponentsInChildren(t)
            },
            _getLocalBounds: null,
            onRestore: null,
            destroy: function() {
                this._super() && this._enabled && this.node._activeInHierarchy && cc.director._compScheduler.disableComp(this)
            },
            _onPreDestroy: function() {
                a && cc.director.getActionManager().removeAllActionsFromTarget(this),
                this.unscheduleAllCallbacks();
                for (var t = this.__eventTargets, e = t.length - 1; e >= 0; --e) {
                    var i = t[e];
                    i && i.targetOff(this)
                }
                t.length = 0,
                cc.director._nodeActivator.destroyComp(this),
                this.node._removeComponent(this)
            },
            _instantiate: function(t) {
                return t || (t = cc.instantiate._clone(this, this)),
                t.node = null,
                t
            },
            schedule: function(t, e, i, n) {
                cc.assertID(t, 1619),
                e = e || 0,
                cc.assertID(e >= 0, 1620),
                i = isNaN(i) ? cc.macro.REPEAT_FOREVER : i,
                n = n || 0;
                var r = cc.director.getScheduler()
                  , s = r.isTargetPaused(this);
                r.schedule(t, this, e, i, n, s)
            },
            scheduleOnce: function(t, e) {
                this.schedule(t, 0, 0, e)
            },
            unschedule: function(t) {
                t && cc.director.getScheduler().unschedule(t, this)
            },
            unscheduleAllCallbacks: function() {
                cc.director.getScheduler().unscheduleAllForTarget(this)
            }
        });
        o._requireComponent = null,
        o._executionOrder = 0,
        n.value(o, "_registerEditorProps", (function(t, e) {
            var i = e.requireComponent;
            i && (t._requireComponent = i);
            var n = e.executionOrder;
            n && "number" == typeof n && (t._executionOrder = n)
        }
        )),
        o.prototype.__scriptUuid = "",
        cc.Component = e.exports = o
    }
    ), {
        "../platform/CCObject": 199,
        "../platform/id-generater": 210,
        "../platform/js": 214
    }],
    106: [(function() {
        "use strict";
        cc.Component.EventHandler = cc.Class({
            name: "cc.ClickEvent",
            properties: {
                target: {
                    default: null,
                    type: cc.Node
                },
                component: "",
                _componentId: "",
                _componentName: {
                    get: function() {
                        return this._genCompIdIfNeeded(),
                        this._compId2Name(this._componentId)
                    },
                    set: function(t) {
                        this._componentId = this._compName2Id(t)
                    }
                },
                handler: {
                    default: ""
                },
                customEventData: {
                    default: ""
                }
            },
            statics: {
                emitEvents: function(t) {
                    var e;
                    if (arguments.length > 0)
                        for (var i = 0, n = (e = new Array(arguments.length - 1)).length; i < n; i++)
                            e[i] = arguments[i + 1];
                    for (var r = 0, s = t.length; r < s; r++) {
                        var a = t[r];
                        a instanceof cc.Component.EventHandler && a.emit(e)
                    }
                }
            },
            emit: function(t) {
                var e = this.target;
                if (cc.isValid(e)) {
                    this._genCompIdIfNeeded();
                    var i = cc.js._getClassById(this._componentId)
                      , n = e.getComponent(i);
                    if (cc.isValid(n)) {
                        var r = n[this.handler];
                        "function" == typeof r && (null != this.customEventData && "" !== this.customEventData && (t = t.slice()).push(this.customEventData),
                        r.apply(n, t))
                    }
                }
            },
            _compName2Id: function(t) {
                var e = cc.js.getClassByName(t);
                return cc.js._getClassId(e)
            },
            _compId2Name: function(t) {
                var e = cc.js._getClassById(t);
                return cc.js.getClassName(e)
            },
            _genCompIdIfNeeded: function() {
                this._componentId || (this._componentName = this.component,
                this.component = "")
            }
        })
    }
    ), {}],
    107: [(function(t, e) {
        "use strict";
        var i = t("../platform/CCMacro")
          , n = t("./CCRenderComponent")
          , r = (t("../assets/material/CCMaterial"),
        t("../renderer/utils/label/label-frame"))
          , s = t("../utils/blend-func")
          , a = t("../renderer/utils/utils").deleteFromDynamicAtlas
          , o = i.TextAlignment
          , l = i.VerticalTextAlignment
          , h = cc.Enum({
            NONE: 0,
            CLAMP: 1,
            SHRINK: 2,
            RESIZE_HEIGHT: 3
        })
          , c = cc.Enum({
            NONE: 0,
            BITMAP: 1,
            CHAR: 2
        })
          , u = cc.Class({
            name: "cc.Label",
            extends: n,
            mixins: [s],
            ctor: function() {
                this._actualFontSize = 0,
                this._assemblerData = null,
                this._frame = null,
                this._ttfTexture = null,
                this._letterTexture = null,
                cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? this._updateMaterial = this._updateMaterialCanvas : this._updateMaterial = this._updateMaterialWebgl
            },
            editor: !1,
            properties: {
                _string: {
                    default: "",
                    formerlySerializedAs: "_N$string"
                },
                string: {
                    get: function() {
                        return this._string
                    },
                    set: function(t) {
                        var e = this._string;
                        this._string = "" + t,
                        this.string !== e && this.setVertsDirty(),
                        this._checkStringEmpty()
                    },
                    multiline: !0,
                    tooltip: !1
                },
                horizontalAlign: {
                    default: o.LEFT,
                    type: o,
                    tooltip: !1,
                    notify: function(t) {
                        this.horizontalAlign !== t && this.setVertsDirty()
                    },
                    animatable: !1
                },
                verticalAlign: {
                    default: l.TOP,
                    type: l,
                    tooltip: !1,
                    notify: function(t) {
                        this.verticalAlign !== t && this.setVertsDirty()
                    },
                    animatable: !1
                },
                actualFontSize: {
                    displayName: "Actual Font Size",
                    animatable: !1,
                    readonly: !0,
                    get: function() {
                        return this._actualFontSize
                    },
                    tooltip: !1
                },
                _fontSize: 40,
                fontSize: {
                    get: function() {
                        return this._fontSize
                    },
                    set: function(t) {
                        this._fontSize !== t && (this._fontSize = t,
                        this.setVertsDirty())
                    },
                    range: [0, 512],
                    tooltip: !1
                },
                fontFamily: {
                    default: "Arial",
                    tooltip: !1,
                    notify: function(t) {
                        this.fontFamily !== t && this.setVertsDirty()
                    },
                    animatable: !1
                },
                _lineHeight: 40,
                lineHeight: {
                    get: function() {
                        return this._lineHeight
                    },
                    set: function(t) {
                        this._lineHeight !== t && (this._lineHeight = t,
                        this.setVertsDirty())
                    },
                    tooltip: !1
                },
                overflow: {
                    default: h.NONE,
                    type: h,
                    tooltip: !1,
                    notify: function(t) {
                        this.overflow !== t && this.setVertsDirty()
                    },
                    animatable: !1
                },
                _enableWrapText: !0,
                enableWrapText: {
                    get: function() {
                        return this._enableWrapText
                    },
                    set: function(t) {
                        this._enableWrapText !== t && (this._enableWrapText = t,
                        this.setVertsDirty())
                    },
                    animatable: !1,
                    tooltip: !1
                },
                _N$file: null,
                font: {
                    get: function() {
                        return this._N$file
                    },
                    set: function(t) {
                        this.font !== t && (t || (this._isSystemFontUsed = !0),
                        this._N$file = t,
                        t && this._isSystemFontUsed && (this._isSystemFontUsed = !1),
                        this.enabledInHierarchy && this._forceUpdateRenderData())
                    },
                    type: cc.Font,
                    tooltip: !1,
                    animatable: !1
                },
                _isSystemFontUsed: !0,
                useSystemFont: {
                    get: function() {
                        return this._isSystemFontUsed
                    },
                    set: function(t) {
                        if (this._isSystemFontUsed !== t) {
                            if (this._isSystemFontUsed = !!t,
                            t) {
                                if (this.font = null,
                                !this.enabledInHierarchy)
                                    return;
                                this._forceUpdateRenderData()
                            }
                            this.markForValidate()
                        }
                    },
                    animatable: !1,
                    tooltip: !1
                },
                _bmFontOriginalSize: {
                    displayName: "BMFont Original Size",
                    get: function() {
                        return this._N$file instanceof cc.BitmapFont ? this._N$file.fontSize : -1
                    },
                    visible: !0,
                    animatable: !1
                },
                _spacingX: 0,
                spacingX: {
                    get: function() {
                        return this._spacingX
                    },
                    set: function(t) {
                        this._spacingX = t,
                        this.setVertsDirty()
                    },
                    tooltip: !1
                },
                _batchAsBitmap: !1,
                cacheMode: {
                    default: c.NONE,
                    type: c,
                    tooltip: !1,
                    notify: function(t) {
                        this.cacheMode !== t && (t !== c.BITMAP || this.font instanceof cc.BitmapFont || this._frame && this._frame._resetDynamicAtlasFrame(),
                        t === c.CHAR && (this._ttfTexture = null),
                        this.enabledInHierarchy && this._forceUpdateRenderData())
                    },
                    animatable: !1
                },
                _styleFlags: 0,
                enableBold: {
                    get: function() {
                        return !!(1 & this._styleFlags)
                    },
                    set: function(t) {
                        t ? this._styleFlags |= 1 : this._styleFlags &= -2,
                        this.setVertsDirty()
                    },
                    animatable: !1,
                    tooltip: !1
                },
                enableItalic: {
                    get: function() {
                        return !!(2 & this._styleFlags)
                    },
                    set: function(t) {
                        t ? this._styleFlags |= 2 : this._styleFlags &= -3,
                        this.setVertsDirty()
                    },
                    animatable: !1,
                    tooltip: !1
                },
                enableUnderline: {
                    get: function() {
                        return !!(4 & this._styleFlags)
                    },
                    set: function(t) {
                        t ? this._styleFlags |= 4 : this._styleFlags &= -5,
                        this.setVertsDirty()
                    },
                    animatable: !1,
                    tooltip: !1
                },
                _underlineHeight: 0,
                underlineHeight: {
                    get: function() {
                        return this._underlineHeight
                    },
                    set: function(t) {
                        this._underlineHeight !== t && (this._underlineHeight = t,
                        this.setVertsDirty())
                    },
                    tooltip: !1
                }
            },
            statics: {
                HorizontalAlign: o,
                VerticalAlign: l,
                Overflow: h,
                CacheMode: c,
                _shareAtlas: null,
                clearCharCache: function() {
                    u._shareAtlas && u._shareAtlas.clearAllCache()
                }
            },
            onLoad: function() {
                this._batchAsBitmap && this.cacheMode === c.NONE && (this.cacheMode = c.BITMAP,
                this._batchAsBitmap = !1),
                cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && (this.cacheMode = c.NONE)
            },
            onEnable: function() {
                this._super(),
                this.node.on(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this),
                this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this),
                this.node.on(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this),
                this._forceUpdateRenderData()
            },
            onDisable: function() {
                this._super(),
                this.node.off(cc.Node.EventType.SIZE_CHANGED, this._nodeSizeChanged, this),
                this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this),
                this.node.off(cc.Node.EventType.COLOR_CHANGED, this._nodeColorChanged, this)
            },
            onDestroy: function() {
                this._assembler && this._assembler._resetAssemblerData && this._assembler._resetAssemblerData(this._assemblerData),
                this._assemblerData = null,
                this._letterTexture = null,
                this._ttfTexture && (this._ttfTexture.destroy(),
                this._ttfTexture = null),
                this._super()
            },
            _nodeSizeChanged: function() {
                this.overflow !== h.NONE && this.setVertsDirty()
            },
            _nodeColorChanged: function() {
                this.font instanceof cc.BitmapFont || this.setVertsDirty()
            },
            setVertsDirty: function() {
                this._super()
            },
            _updateColor: function() {
                this.font instanceof cc.BitmapFont || this._srcBlendFactor === cc.macro.BlendFactor.SRC_ALPHA && this.node._renderFlag & cc.RenderFlow.FLAG_OPACITY || this.setVertsDirty(),
                n.prototype._updateColor.call(this)
            },
            _validateRender: function() {
                if (this.string) {
                    if (this._materials[0]) {
                        var t = this.font;
                        if (!(t instanceof cc.BitmapFont))
                            return;
                        var e = t.spriteFrame;
                        if (e && e.textureLoaded() && t._fntConfig)
                            return
                    }
                    this.disableRender()
                } else
                    this.disableRender()
            },
            _resetAssembler: function() {
                this._resetFrame(),
                n.prototype._resetAssembler.call(this)
            },
            _resetFrame: function() {
                !this._frame || this.font instanceof cc.BitmapFont || (a(this, this._frame),
                this._frame = null)
            },
            _checkStringEmpty: function() {
                this.markForRender(!!this.string)
            },
            _on3DNodeChanged: function() {
                this._resetAssembler(),
                this._applyFontTexture()
            },
            _onBMFontTextureLoaded: function() {
                this._frame._texture = this.font.spriteFrame._texture,
                this.markForRender(!0),
                this._updateMaterial(),
                this._assembler && this._assembler.updateRenderData(this)
            },
            _onBlendChanged: function() {
                this.useSystemFont && this.enabledInHierarchy && this._forceUpdateRenderData()
            },
            _applyFontTexture: function() {
                var t = this.font;
                if (t instanceof cc.BitmapFont) {
                    var e = t.spriteFrame;
                    this._frame = e,
                    e && e.onTextureLoaded(this._onBMFontTextureLoaded, this)
                } else
                    this._nativeTTF() || (this._frame || (this._frame = new r),
                    this.cacheMode === c.CHAR ? (this._letterTexture = this._assembler._getAssemblerData(),
                    this._frame._refreshTexture(this._letterTexture)) : this._ttfTexture || (this._ttfTexture = new cc.Texture2D,
                    this._assemblerData = this._assembler._getAssemblerData(),
                    this._ttfTexture.initWithElement(this._assemblerData.canvas)),
                    this.cacheMode !== c.CHAR && (this._frame._resetDynamicAtlasFrame(),
                    this._frame._refreshTexture(this._ttfTexture),
                    this._srcBlendFactor === cc.macro.BlendFactor.ONE && this._ttfTexture.setPremultiplyAlpha(!0)),
                    this._updateMaterial()),
                    this._assembler && this._assembler.updateRenderData(this);
                this.markForValidate()
            },
            _updateMaterialCanvas: function() {
                this._frame && (this._frame._texture._nativeUrl = this.uuid + "_texture")
            },
            _updateMaterialWebgl: function() {
                var t = this.getMaterial(0);
                this._nativeTTF() ? t && this._assembler._updateTTFMaterial(this) : this._frame && (t && t.setProperty("texture", this._frame._texture),
                s.prototype._updateMaterial.call(this))
            },
            _forceUseCanvas: !1,
            _useNativeTTF: function() {
                return cc.macro.ENABLE_NATIVE_TTF_RENDERER && !this._forceUseCanvas
            },
            _nativeTTF: function() {
                return this._useNativeTTF() && !!this._assembler && !!this._assembler._updateTTFMaterial
            },
            _forceUpdateRenderData: function() {
                this.setVertsDirty(),
                this._resetAssembler(),
                this._applyFontTexture()
            },
            _enableBold: function(t) {
                this.enableBold = !!t
            },
            _enableItalics: function(t) {
                this.enableItalic = !!t
            },
            _enableUnderline: function(t) {
                this.enableUnderline = !!t
            }
        });
        cc.Label = e.exports = u
    }
    ), {
        "../assets/material/CCMaterial": 80,
        "../platform/CCMacro": 198,
        "../renderer/utils/label/label-frame": 229,
        "../renderer/utils/utils": 232,
        "../utils/blend-func": 261,
        "./CCRenderComponent": 115
    }],
    108: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.LabelOutline",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _color: cc.Color.WHITE,
                _width: 1,
                color: {
                    tooltip: !1,
                    get: function() {
                        return this._color.clone()
                    },
                    set: function(t) {
                        this._color.equals(t) || this._color.set(t),
                        this._updateRenderData()
                    }
                },
                width: {
                    tooltip: !1,
                    get: function() {
                        return this._width
                    },
                    set: function(t) {
                        this._width !== t && (this._width = t,
                        this._updateRenderData())
                    },
                    range: [0, 512]
                }
            },
            onEnable: function() {
                this._updateRenderData()
            },
            onDisable: function() {
                this._updateRenderData()
            },
            _updateRenderData: function() {
                var t = this.node.getComponent(cc.Label);
                t && t.setVertsDirty()
            }
        });
        cc.LabelOutline = e.exports = i
    }
    ), {
        "./CCComponent": 105
    }],
    109: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.LabelShadow",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _color: cc.Color.WHITE,
                _offset: cc.v2(2, 2),
                _blur: 2,
                color: {
                    tooltip: !1,
                    get: function() {
                        return this._color.clone()
                    },
                    set: function(t) {
                        this._color.equals(t) || this._color.set(t),
                        this._updateRenderData()
                    }
                },
                offset: {
                    tooltip: !1,
                    get: function() {
                        return this._offset
                    },
                    set: function(t) {
                        this._offset = t,
                        this._updateRenderData()
                    }
                },
                blur: {
                    tooltip: !1,
                    get: function() {
                        return this._blur
                    },
                    set: function(t) {
                        this._blur = t,
                        this._updateRenderData()
                    },
                    range: [0, 1024]
                }
            },
            onEnable: function() {
                this._updateRenderData()
            },
            onDisable: function() {
                this._updateRenderData()
            },
            _updateRenderData: function() {
                var t = this.node.getComponent(cc.Label);
                t && t.markForRender(!0)
            }
        });
        cc.LabelShadow = e.exports = i
    }
    ), {
        "./CCComponent": 105
    }],
    110: [(function(t, e) {
        "use strict";
        var i = t("../CCNode").EventType
          , n = cc.Enum({
            NONE: 0,
            HORIZONTAL: 1,
            VERTICAL: 2,
            GRID: 3
        })
          , r = cc.Enum({
            NONE: 0,
            CONTAINER: 1,
            CHILDREN: 2
        })
          , s = cc.Enum({
            HORIZONTAL: 0,
            VERTICAL: 1
        })
          , a = cc.Enum({
            BOTTOM_TO_TOP: 0,
            TOP_TO_BOTTOM: 1
        })
          , o = cc.Enum({
            LEFT_TO_RIGHT: 0,
            RIGHT_TO_LEFT: 1
        })
          , l = cc.Class({
            name: "cc.Layout",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _layoutSize: cc.size(300, 200),
                _layoutDirty: {
                    default: !0,
                    serializable: !1
                },
                _resize: r.NONE,
                _N$layoutType: n.NONE,
                type: {
                    type: n,
                    get: function() {
                        return this._N$layoutType
                    },
                    set: function(t) {
                        this._N$layoutType = t,
                        this._doLayoutDirty()
                    },
                    tooltip: !1,
                    animatable: !1
                },
                resizeMode: {
                    type: r,
                    tooltip: !1,
                    animatable: !1,
                    get: function() {
                        return this._resize
                    },
                    set: function(t) {
                        this.type === n.NONE && t === r.CHILDREN || (this._resize = t,
                        this._doLayoutDirty())
                    }
                },
                cellSize: {
                    default: cc.size(40, 40),
                    tooltip: !1,
                    type: cc.Size,
                    notify: function() {
                        this._doLayoutDirty()
                    }
                },
                startAxis: {
                    default: s.HORIZONTAL,
                    tooltip: !1,
                    type: s,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    animatable: !1
                },
                paddingLeft: {
                    default: 0,
                    tooltip: !1,
                    notify: function() {
                        this._doLayoutDirty()
                    }
                },
                paddingRight: {
                    default: 0,
                    tooltip: !1,
                    notify: function() {
                        this._doLayoutDirty()
                    }
                },
                paddingTop: {
                    default: 0,
                    tooltip: !1,
                    notify: function() {
                        this._doLayoutDirty()
                    }
                },
                paddingBottom: {
                    default: 0,
                    tooltip: !1,
                    notify: function() {
                        this._doLayoutDirty()
                    }
                },
                spacingX: {
                    default: 0,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    tooltip: !1
                },
                spacingY: {
                    default: 0,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    tooltip: !1
                },
                verticalDirection: {
                    default: a.TOP_TO_BOTTOM,
                    type: a,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    tooltip: !1,
                    animatable: !1
                },
                horizontalDirection: {
                    default: o.LEFT_TO_RIGHT,
                    type: o,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    tooltip: !1,
                    animatable: !1
                },
                affectedByScale: {
                    default: !1,
                    notify: function() {
                        this._doLayoutDirty()
                    },
                    animatable: !1,
                    tooltip: !1
                }
            },
            statics: {
                Type: n,
                VerticalDirection: a,
                HorizontalDirection: o,
                ResizeMode: r,
                AxisDirection: s
            },
            onEnable: function() {
                this._addEventListeners(),
                this.node.getContentSize().equals(cc.size(0, 0)) && this.node.setContentSize(this._layoutSize),
                this._doLayoutDirty()
            },
            onDisable: function() {
                this._removeEventListeners()
            },
            _doLayoutDirty: function() {
                this._layoutDirty = !0
            },
            _doScaleDirty: function() {
                this._layoutDirty = this._layoutDirty || this.affectedByScale
            },
            _addEventListeners: function() {
                cc.director.on(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this),
                this.node.on(i.SIZE_CHANGED, this._resized, this),
                this.node.on(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                this.node.on(i.CHILD_ADDED, this._childAdded, this),
                this.node.on(i.CHILD_REMOVED, this._childRemoved, this),
                this.node.on(i.CHILD_REORDER, this._doLayoutDirty, this),
                this._addChildrenEventListeners()
            },
            _removeEventListeners: function() {
                cc.director.off(cc.Director.EVENT_AFTER_UPDATE, this.updateLayout, this),
                this.node.off(i.SIZE_CHANGED, this._resized, this),
                this.node.off(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                this.node.off(i.CHILD_ADDED, this._childAdded, this),
                this.node.off(i.CHILD_REMOVED, this._childRemoved, this),
                this.node.off(i.CHILD_REORDER, this._doLayoutDirty, this),
                this._removeChildrenEventListeners()
            },
            _addChildrenEventListeners: function() {
                for (var t = this.node.children, e = 0; e < t.length; ++e) {
                    var n = t[e];
                    n.on(i.SCALE_CHANGED, this._doScaleDirty, this),
                    n.on(i.SIZE_CHANGED, this._doLayoutDirty, this),
                    n.on(i.POSITION_CHANGED, this._doLayoutDirty, this),
                    n.on(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                    n.on("active-in-hierarchy-changed", this._doLayoutDirty, this)
                }
            },
            _removeChildrenEventListeners: function() {
                for (var t = this.node.children, e = 0; e < t.length; ++e) {
                    var n = t[e];
                    n.off(i.SCALE_CHANGED, this._doScaleDirty, this),
                    n.off(i.SIZE_CHANGED, this._doLayoutDirty, this),
                    n.off(i.POSITION_CHANGED, this._doLayoutDirty, this),
                    n.off(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                    n.off("active-in-hierarchy-changed", this._doLayoutDirty, this)
                }
            },
            _childAdded: function(t) {
                t.on(i.SCALE_CHANGED, this._doScaleDirty, this),
                t.on(i.SIZE_CHANGED, this._doLayoutDirty, this),
                t.on(i.POSITION_CHANGED, this._doLayoutDirty, this),
                t.on(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                t.on("active-in-hierarchy-changed", this._doLayoutDirty, this),
                this._doLayoutDirty()
            },
            _childRemoved: function(t) {
                t.off(i.SCALE_CHANGED, this._doScaleDirty, this),
                t.off(i.SIZE_CHANGED, this._doLayoutDirty, this),
                t.off(i.POSITION_CHANGED, this._doLayoutDirty, this),
                t.off(i.ANCHOR_CHANGED, this._doLayoutDirty, this),
                t.off("active-in-hierarchy-changed", this._doLayoutDirty, this),
                this._doLayoutDirty()
            },
            _resized: function() {
                this._layoutSize = this.node.getContentSize(),
                this._doLayoutDirty()
            },
            _doLayoutHorizontally: function(t, e, i, s) {
                var l = this.node.getAnchorPoint()
                  , h = this.node.children
                  , c = 1
                  , u = this.paddingLeft
                  , _ = -l.x * t;
                this.horizontalDirection === o.RIGHT_TO_LEFT && (c = -1,
                _ = (1 - l.x) * t,
                u = this.paddingRight);
                for (var f = _ + c * u - c * this.spacingX, d = 0, p = 0, m = 0, y = 0, v = 0, g = 0, A = 0, x = 0; x < h.length; ++x)
                    (C = h[x]).activeInHierarchy && A++;
                var b = this.cellSize.width;
                for (this.type !== n.GRID && this.resizeMode === r.CHILDREN && (b = (t - (this.paddingLeft + this.paddingRight) - (A - 1) * this.spacingX) / A),
                x = 0; x < h.length; ++x) {
                    var C = h[x]
                      , T = this._getUsedScaleValue(C.scaleX)
                      , S = this._getUsedScaleValue(C.scaleY);
                    if (C.activeInHierarchy) {
                        this._resize === r.CHILDREN && (C.width = b / T,
                        this.type === n.GRID && (C.height = this.cellSize.height / S));
                        var w = C.anchorX
                          , E = C.width * T
                          , M = C.height * S;
                        m > p && (p = m),
                        M >= p && (m = p,
                        p = M,
                        g = C.getAnchorPoint().y),
                        this.horizontalDirection === o.RIGHT_TO_LEFT && (w = 1 - C.anchorX),
                        f = f + c * w * E + c * this.spacingX;
                        var D = c * (1 - w) * E;
                        if (e) {
                            var B = f + D + c * (c > 0 ? this.paddingRight : this.paddingLeft)
                              , I = this.horizontalDirection === o.LEFT_TO_RIGHT && B > (1 - l.x) * t
                              , P = this.horizontalDirection === o.RIGHT_TO_LEFT && B < -l.x * t;
                            (I || P) && (M >= p ? (0 === m && (m = p),
                            d += m,
                            m = p) : (d += p,
                            m = M,
                            p = 0),
                            f = _ + c * (u + w * E),
                            y++)
                        }
                        var R = i(C, d, y);
                        t >= E + this.paddingLeft + this.paddingRight && s && C.setPosition(cc.v2(f, R));
                        var O, L = 1, F = 0 === p ? M : p;
                        this.verticalDirection === a.TOP_TO_BOTTOM ? (v = v || this.node._contentSize.height,
                        (O = R + (L = -1) * (F * g + this.paddingBottom)) < v && (v = O)) : (v = v || -this.node._contentSize.height,
                        (O = R + L * (F * g + this.paddingTop)) > v && (v = O)),
                        f += D
                    }
                }
                return v
            },
            _getVerticalBaseHeight: function(t) {
                var e = 0
                  , i = 0;
                if (this.resizeMode === r.CONTAINER) {
                    for (var n = 0; n < t.length; ++n) {
                        var s = t[n];
                        s.activeInHierarchy && (i++,
                        e += s.height * this._getUsedScaleValue(s.scaleY))
                    }
                    e += (i - 1) * this.spacingY + this.paddingBottom + this.paddingTop
                } else
                    e = this.node.getContentSize().height;
                return e
            },
            _doLayoutVertically: function(t, e, i, s) {
                var l = this.node.getAnchorPoint()
                  , h = this.node.children
                  , c = 1
                  , u = this.paddingBottom
                  , _ = -l.y * t;
                this.verticalDirection === a.TOP_TO_BOTTOM && (c = -1,
                _ = (1 - l.y) * t,
                u = this.paddingTop);
                for (var f = _ + c * u - c * this.spacingY, d = 0, p = 0, m = 0, y = 0, v = 0, g = 0, A = 0, x = 0; x < h.length; ++x)
                    (C = h[x]).activeInHierarchy && A++;
                var b = this.cellSize.height;
                for (this.type !== n.GRID && this.resizeMode === r.CHILDREN && (b = (t - (this.paddingTop + this.paddingBottom) - (A - 1) * this.spacingY) / A),
                x = 0; x < h.length; ++x) {
                    var C = h[x]
                      , T = this._getUsedScaleValue(C.scaleX)
                      , S = this._getUsedScaleValue(C.scaleY);
                    if (C.activeInHierarchy) {
                        this.resizeMode === r.CHILDREN && (C.height = b / S,
                        this.type === n.GRID && (C.width = this.cellSize.width / T));
                        var w = C.anchorY
                          , E = C.width * T
                          , M = C.height * S;
                        m > p && (p = m),
                        E >= p && (m = p,
                        p = E,
                        g = C.getAnchorPoint().x),
                        this.verticalDirection === a.TOP_TO_BOTTOM && (w = 1 - C.anchorY),
                        f = f + c * w * M + c * this.spacingY;
                        var D = c * (1 - w) * M;
                        if (e) {
                            var B = f + D + c * (c > 0 ? this.paddingTop : this.paddingBottom)
                              , I = this.verticalDirection === a.BOTTOM_TO_TOP && B > (1 - l.y) * t
                              , P = this.verticalDirection === a.TOP_TO_BOTTOM && B < -l.y * t;
                            (I || P) && (E >= p ? (0 === m && (m = p),
                            d += m,
                            m = p) : (d += p,
                            m = E,
                            p = 0),
                            f = _ + c * (u + w * M),
                            y++)
                        }
                        var R = i(C, d, y);
                        t >= M + (this.paddingTop + this.paddingBottom) && s && C.setPosition(cc.v2(R, f));
                        var O, L = 1, F = 0 === p ? E : p;
                        this.horizontalDirection === o.RIGHT_TO_LEFT ? (L = -1,
                        v = v || this.node._contentSize.width,
                        (O = R + L * (F * g + this.paddingLeft)) < v && (v = O)) : (v = v || -this.node._contentSize.width,
                        (O = R + L * (F * g + this.paddingRight)) > v && (v = O)),
                        f += D
                    }
                }
                return v
            },
            _doLayoutBasic: function() {
                for (var t = this.node.children, e = null, i = 0; i < t.length; ++i) {
                    var n = t[i];
                    n.activeInHierarchy && (e ? e.union(e, n.getBoundingBoxToWorld()) : e = n.getBoundingBoxToWorld())
                }
                if (e) {
                    var r = this.node.convertToNodeSpaceAR(cc.v2(e.x, e.y));
                    r = cc.v2(r.x - this.paddingLeft, r.y - this.paddingBottom);
                    var s = this.node.convertToNodeSpaceAR(cc.v2(e.xMax, e.yMax))
                      , a = (s = cc.v2(s.x + this.paddingRight, s.y + this.paddingTop)).sub(r);
                    if (0 !== (a = cc.size(parseFloat(a.x.toFixed(2)), parseFloat(a.y.toFixed(2)))).width) {
                        var o = -r.x / a.width;
                        this.node.anchorX = parseFloat(o.toFixed(2))
                    }
                    if (0 !== a.height) {
                        var l = -r.y / a.height;
                        this.node.anchorY = parseFloat(l.toFixed(2))
                    }
                    this.node.setContentSize(a)
                }
            },
            _doLayoutGridAxisHorizontal: function(t, e) {
                var i = e.width
                  , n = 1
                  , s = -t.y * e.height
                  , o = this.paddingBottom;
                this.verticalDirection === a.TOP_TO_BOTTOM && (n = -1,
                s = (1 - t.y) * e.height,
                o = this.paddingTop);
                var l = function(t, e, i) {
                    return s + n * (e + t.anchorY * t.height * this._getUsedScaleValue(t.scaleY) + o + i * this.spacingY)
                }
                .bind(this)
                  , h = 0;
                if (this.resizeMode === r.CONTAINER) {
                    var c = this._doLayoutHorizontally(i, !0, l, !1);
                    (h = s - c) < 0 && (h *= -1),
                    s = -t.y * h,
                    this.verticalDirection === a.TOP_TO_BOTTOM && (n = -1,
                    s = (1 - t.y) * h)
                }
                this._doLayoutHorizontally(i, !0, l, !0),
                this.resizeMode === r.CONTAINER && this.node.setContentSize(i, h)
            },
            _doLayoutGridAxisVertical: function(t, e) {
                var i = e.height
                  , n = 1
                  , s = -t.x * e.width
                  , a = this.paddingLeft;
                this.horizontalDirection === o.RIGHT_TO_LEFT && (n = -1,
                s = (1 - t.x) * e.width,
                a = this.paddingRight);
                var l = function(t, e, i) {
                    return s + n * (e + t.anchorX * t.width * this._getUsedScaleValue(t.scaleX) + a + i * this.spacingX)
                }
                .bind(this)
                  , h = 0;
                if (this.resizeMode === r.CONTAINER) {
                    var c = this._doLayoutVertically(i, !0, l, !1);
                    (h = s - c) < 0 && (h *= -1),
                    s = -t.x * h,
                    this.horizontalDirection === o.RIGHT_TO_LEFT && (n = -1,
                    s = (1 - t.x) * h)
                }
                this._doLayoutVertically(i, !0, l, !0),
                this.resizeMode === r.CONTAINER && this.node.setContentSize(h, i)
            },
            _doLayoutGrid: function() {
                var t = this.node.getAnchorPoint()
                  , e = this.node.getContentSize();
                this.startAxis === s.HORIZONTAL ? this._doLayoutGridAxisHorizontal(t, e) : this.startAxis === s.VERTICAL && this._doLayoutGridAxisVertical(t, e)
            },
            _getHorizontalBaseWidth: function(t) {
                var e = 0
                  , i = 0;
                if (this.resizeMode === r.CONTAINER) {
                    for (var n = 0; n < t.length; ++n) {
                        var s = t[n];
                        s.activeInHierarchy && (i++,
                        e += s.width * this._getUsedScaleValue(s.scaleX))
                    }
                    e += (i - 1) * this.spacingX + this.paddingLeft + this.paddingRight
                } else
                    e = this.node.getContentSize().width;
                return e
            },
            _doLayout: function() {
                if (this.type === n.HORIZONTAL) {
                    var t = this._getHorizontalBaseWidth(this.node.children);
                    this._doLayoutHorizontally(t, !1, (function(t) {
                        return t.y
                    }
                    ), !0),
                    this.node.width = t
                } else if (this.type === n.VERTICAL) {
                    var e = this._getVerticalBaseHeight(this.node.children);
                    this._doLayoutVertically(e, !1, (function(t) {
                        return t.x
                    }
                    ), !0),
                    this.node.height = e
                } else
                    this.type === n.NONE ? this.resizeMode === r.CONTAINER && this._doLayoutBasic() : this.type === n.GRID && this._doLayoutGrid()
            },
            _getUsedScaleValue: function(t) {
                return this.affectedByScale ? Math.abs(t) : 1
            },
            updateLayout: function() {
                this._layoutDirty && this.node.children.length > 0 && (this._doLayout(),
                this._layoutDirty = !1)
            }
        });
        cc.Layout = e.exports = l
    }
    ), {
        "../CCNode": 29,
        "./CCComponent": 105
    }],
    111: [(function(t, e) {
        "use strict";
        var i = a(t("../../renderer/gfx"))
          , n = a(t("../value-types/mat4"))
          , r = a(t("../value-types/vec2"))
          , s = a(t("../assets/material/material-variant"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var o = t("../utils/misc")
          , l = t("./CCRenderComponent")
          , h = t("../renderer/render-flow")
          , c = t("../graphics/graphics")
          , u = new r.default
          , _ = new n.default
          , f = [];
        function d(t, e, i) {
            f.length = 0;
            for (var n = 2 * Math.PI / i, r = 0; r < i; ++r)
                f.push(cc.v2(e.x * Math.cos(n * r) + t.x, e.y * Math.sin(n * r) + t.y));
            return f
        }
        var p = cc.Enum({
            RECT: 0,
            ELLIPSE: 1,
            IMAGE_STENCIL: 2
        })
          , m = cc.Class({
            name: "cc.Mask",
            extends: l,
            editor: !1,
            ctor: function() {
                this._graphics = null,
                this._enableMaterial = null,
                this._exitMaterial = null,
                this._clearMaterial = null
            },
            properties: {
                _spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame
                },
                _type: p.RECT,
                type: {
                    get: function() {
                        return this._type
                    },
                    set: function(t) {
                        this._type !== t && this._resetAssembler(),
                        this._type = t,
                        this._type !== p.IMAGE_STENCIL && (this.spriteFrame = null,
                        this.alphaThreshold = 0,
                        this._updateGraphics()),
                        this._activateMaterial()
                    },
                    type: p,
                    tooltip: !1
                },
                spriteFrame: {
                    type: cc.SpriteFrame,
                    tooltip: !1,
                    get: function() {
                        return this._spriteFrame
                    },
                    set: function(t) {
                        this._spriteFrame !== t && (this._spriteFrame = t,
                        this.setVertsDirty(),
                        this._updateMaterial())
                    }
                },
                alphaThreshold: {
                    default: .1,
                    type: cc.Float,
                    range: [0, 1, .1],
                    slide: !0,
                    tooltip: !1,
                    notify: function() {
                        cc.game.renderType !== cc.game.RENDER_TYPE_CANVAS ? this._updateMaterial() : cc.warnID(4201)
                    }
                },
                inverted: {
                    default: !1,
                    type: cc.Boolean,
                    tooltip: !1,
                    notify: function() {
                        cc.game.renderType === cc.game.RENDER_TYPE_CANVAS && cc.warnID(4202)
                    }
                },
                _segments: 64,
                segements: {
                    get: function() {
                        return this._segments
                    },
                    set: function(t) {
                        this._segments = o.clampf(t, 3, 1e4),
                        this._updateGraphics()
                    },
                    type: cc.Integer,
                    tooltip: !1
                },
                _resizeToTarget: {
                    animatable: !1,
                    set: function(t) {
                        t && this._resizeNodeToTargetNode()
                    }
                }
            },
            statics: {
                Type: p
            },
            onRestore: function() {
                this._activateMaterial()
            },
            onEnable: function() {
                this._super(),
                this._type !== p.IMAGE_STENCIL && this._updateGraphics(),
                this.node.on(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this),
                this.node.on(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this),
                this.node.on(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this),
                this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this),
                this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this)
            },
            onDisable: function() {
                this._super(),
                this.node.off(cc.Node.EventType.POSITION_CHANGED, this._updateGraphics, this),
                this.node.off(cc.Node.EventType.ROTATION_CHANGED, this._updateGraphics, this),
                this.node.off(cc.Node.EventType.SCALE_CHANGED, this._updateGraphics, this),
                this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateGraphics, this),
                this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._updateGraphics, this),
                this.node._renderFlag &= ~h.FLAG_POST_RENDER
            },
            onDestroy: function() {
                this._super(),
                this._removeGraphics()
            },
            _resizeNodeToTargetNode: !1,
            _validateRender: function() {
                if (this._type === p.IMAGE_STENCIL) {
                    var t = this._spriteFrame;
                    t && t.textureLoaded() || this.disableRender()
                }
            },
            _activateMaterial: function() {
                this._createGraphics();
                var t = this._materials[0];
                (t = t ? s.default.create(t, this) : s.default.createWithBuiltin("2d-sprite", this)).define("USE_ALPHA_TEST", !0),
                this._type === p.IMAGE_STENCIL ? (t.define("CC_USE_MODEL", !1),
                t.define("USE_TEXTURE", !0)) : (t.define("CC_USE_MODEL", !0),
                t.define("USE_TEXTURE", !1)),
                this._enableMaterial || (this._enableMaterial = s.default.createWithBuiltin("2d-sprite", this)),
                this._exitMaterial || (this._exitMaterial = s.default.createWithBuiltin("2d-sprite", this),
                this._exitMaterial.setStencilEnabled(i.default.STENCIL_DISABLE)),
                this._clearMaterial || (this._clearMaterial = s.default.createWithBuiltin("clear-stencil", this)),
                this.setMaterial(0, t),
                this._graphics._materials[0] = t,
                this._updateMaterial()
            },
            _updateMaterial: function() {
                var t = this._materials[0];
                if (t) {
                    if (this._type === p.IMAGE_STENCIL && this.spriteFrame) {
                        var e = this.spriteFrame.getTexture();
                        t.setProperty("texture", e)
                    }
                    t.setProperty("alphaThreshold", this.alphaThreshold)
                }
            },
            _createGraphics: function() {
                this._graphics || (this._graphics = new c,
                cc.Assembler.init(this._graphics),
                this._graphics.node = this.node,
                this._graphics.lineWidth = 0,
                this._graphics.strokeColor = cc.color(0, 0, 0, 0))
            },
            _updateGraphics: function() {
                if (this.enabledInHierarchy) {
                    var t = this.node
                      , e = this._graphics;
                    e.clear(!1);
                    var i = t._contentSize.width
                      , n = t._contentSize.height
                      , r = -i * t._anchorPoint.x
                      , s = -n * t._anchorPoint.y;
                    if (this._type === p.RECT)
                        e.rect(r, s, i, n);
                    else if (this._type === p.ELLIPSE) {
                        for (var a = d(cc.v2(r + i / 2, s + n / 2), {
                            x: i / 2,
                            y: n / 2
                        }, this._segments), o = 0; o < a.length; ++o) {
                            var l = a[o];
                            0 === o ? e.moveTo(l.x, l.y) : e.lineTo(l.x, l.y)
                        }
                        e.close()
                    }
                    cc.game.renderType === cc.game.RENDER_TYPE_CANVAS ? e.stroke() : e.fill()
                }
            },
            _removeGraphics: function() {
                this._graphics && (this._graphics.destroy(),
                this._graphics._destroyImmediate(),
                this._graphics = null)
            },
            _hitTest: function(t) {
                var e = this.node
                  , i = e.getContentSize()
                  , s = i.width
                  , a = i.height
                  , o = u;
                if (e._updateWorldMatrix(),
                !n.default.invert(_, e._worldMatrix))
                    return !1;
                r.default.transformMat4(o, t, _),
                o.x += e._anchorPoint.x * s,
                o.y += e._anchorPoint.y * a;
                var l = !1;
                if (this.type === p.RECT || this.type === p.IMAGE_STENCIL)
                    l = o.x >= 0 && o.y >= 0 && o.x <= s && o.y <= a;
                else if (this.type === p.ELLIPSE) {
                    var h = s / 2
                      , c = a / 2
                      , f = o.x - .5 * s
                      , d = o.y - .5 * a;
                    l = f * f / (h * h) + d * d / (c * c) < 1
                }
                return this.inverted && (l = !l),
                l
            },
            markForRender: function(t) {
                var e = h.FLAG_RENDER | h.FLAG_UPDATE_RENDER_DATA | h.FLAG_POST_RENDER;
                t ? (this.node._renderFlag |= e,
                this.markForValidate()) : t || (this.node._renderFlag &= ~e)
            },
            disableRender: function() {
                this.node._renderFlag &= ~(h.FLAG_RENDER | h.FLAG_UPDATE_RENDER_DATA | h.FLAG_POST_RENDER)
            }
        });
        cc.Mask = e.exports = m
    }
    ), {
        "../../renderer/gfx": 315,
        "../assets/material/material-variant": 87,
        "../graphics/graphics": 156,
        "../renderer/render-flow": 225,
        "../utils/misc": 267,
        "../value-types/mat4": 284,
        "../value-types/vec2": 291,
        "./CCRenderComponent": 115
    }],
    112: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            Unified: 0,
            Free: 1
        })
          , n = cc.Enum({
            Horizontal: 0,
            Vertical: 1
        })
          , r = cc.Enum({
            PAGE_TURNING: 0
        })
          , s = cc.Class({
            name: "cc.PageView",
            extends: cc.ScrollView,
            editor: !1,
            ctor: function() {
                this._curPageIdx = 0,
                this._lastPageIdx = 0,
                this._pages = [],
                this._initContentPos = cc.v2(),
                this._scrollCenterOffsetX = [],
                this._scrollCenterOffsetY = []
            },
            properties: {
                sizeMode: {
                    default: i.Unified,
                    type: i,
                    tooltip: !1,
                    notify: function() {
                        this._syncSizeMode()
                    }
                },
                direction: {
                    default: n.Horizontal,
                    type: n,
                    tooltip: !1,
                    notify: function() {
                        this._syncScrollDirection()
                    }
                },
                scrollThreshold: {
                    default: .5,
                    type: cc.Float,
                    slide: !0,
                    range: [0, 1, .01],
                    tooltip: !1
                },
                autoPageTurningThreshold: {
                    default: 100,
                    type: cc.Float,
                    tooltip: !1
                },
                pageTurningEventTiming: {
                    default: .1,
                    type: cc.Float,
                    range: [0, 1, .01],
                    tooltip: !1
                },
                indicator: {
                    default: null,
                    type: cc.PageViewIndicator,
                    tooltip: !1,
                    notify: function() {
                        this.indicator && this.indicator.setPageView(this)
                    }
                },
                pageTurningSpeed: {
                    default: .3,
                    type: cc.Float,
                    tooltip: !1
                },
                pageEvents: {
                    default: [],
                    type: cc.Component.EventHandler,
                    tooltip: !1
                }
            },
            statics: {
                SizeMode: i,
                Direction: n,
                EventType: r
            },
            onEnable: function() {
                this._super(),
                this.node.on(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this),
                this.node.on("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this)
            },
            onDisable: function() {
                this._super(),
                this.node.off(cc.Node.EventType.SIZE_CHANGED, this._updateAllPagesSize, this),
                this.node.off("scroll-ended-with-threshold", this._dispatchPageTurningEvent, this)
            },
            onLoad: function() {
                this._initPages(),
                this.indicator && this.indicator.setPageView(this)
            },
            getCurrentPageIndex: function() {
                return this._curPageIdx
            },
            setCurrentPageIndex: function(t) {
                this.scrollToPage(t, !0)
            },
            getPages: function() {
                return this._pages
            },
            addPage: function(t) {
                t && -1 === this._pages.indexOf(t) && this.content && (this.content.addChild(t),
                this._pages.push(t),
                this._updatePageView())
            },
            insertPage: function(t, e) {
                e < 0 || !t || -1 !== this._pages.indexOf(t) || !this.content || (e >= this._pages.length ? this.addPage(t) : (this._pages.splice(e, 0, t),
                this.content.addChild(t),
                this._updatePageView()))
            },
            removePage: function(t) {
                if (t && this.content) {
                    var e = this._pages.indexOf(t);
                    -1 !== e ? this.removePageAtIndex(e) : cc.warnID(4300, t.name)
                }
            },
            removePageAtIndex: function(t) {
                var e = this._pages;
                if (!(t < 0 || t >= e.length)) {
                    var i = e[t];
                    i && (this.content.removeChild(i),
                    e.splice(t, 1),
                    this._updatePageView())
                }
            },
            removeAllPages: function() {
                if (this.content) {
                    for (var t = this._pages, e = 0, i = t.length; e < i; e++)
                        this.content.removeChild(t[e]);
                    this._pages.length = 0,
                    this._updatePageView()
                }
            },
            scrollToPage: function(t, e) {
                t < 0 || t >= this._pages.length || (e = void 0 !== e ? e : .3,
                this._curPageIdx = t,
                this.scrollToOffset(this._moveOffsetValue(t), e, !0),
                this.indicator && this.indicator._changedState())
            },
            getScrollEndedEventTiming: function() {
                return this.pageTurningEventTiming
            },
            _syncScrollDirection: function() {
                this.horizontal = this.direction === n.Horizontal,
                this.vertical = this.direction === n.Vertical
            },
            _syncSizeMode: function() {
                if (this.content) {
                    var t = this.content.getComponent(cc.Layout);
                    if (t) {
                        if (this.sizeMode === i.Free && this._pages.length > 0) {
                            var e = this._pages[this._pages.length - 1];
                            this.direction === n.Horizontal ? (t.paddingLeft = (this._view.width - this._pages[0].width) / 2,
                            t.paddingRight = (this._view.width - e.width) / 2) : this.direction === n.Vertical && (t.paddingTop = (this._view.height - this._pages[0].height) / 2,
                            t.paddingBottom = (this._view.height - e.height) / 2)
                        }
                        t.updateLayout()
                    }
                }
            },
            _updatePageView: function() {
                var t = this.content.getComponent(cc.Layout);
                t && t.enabled && t.updateLayout();
                var e = this._pages.length;
                this._curPageIdx >= e && (this._curPageIdx = 0 === e ? 0 : e - 1,
                this._lastPageIdx = this._curPageIdx);
                for (var i = this._initContentPos, r = 0; r < e; ++r) {
                    var s = this._pages[r];
                    s.setSiblingIndex(r),
                    this.direction === n.Horizontal ? this._scrollCenterOffsetX[r] = Math.abs(i.x + s.x) : this._scrollCenterOffsetY[r] = Math.abs(i.y + s.y)
                }
                this.indicator && this.indicator._refresh()
            },
            _updateAllPagesSize: function() {
                if (this.sizeMode === i.Unified && this._view)
                    for (var t = this._pages, e = this._view.getContentSize(), n = 0, r = t.length; n < r; n++)
                        t[n].setContentSize(e)
            },
            _initPages: function() {
                if (this.content) {
                    this._initContentPos = this.content.position;
                    for (var t = this.content.children, e = 0; e < t.length; ++e) {
                        var i = t[e];
                        this._pages.indexOf(i) >= 0 || this._pages.push(i)
                    }
                    this._syncScrollDirection(),
                    this._syncSizeMode(),
                    this._updatePageView()
                }
            },
            _dispatchPageTurningEvent: function() {
                this._lastPageIdx !== this._curPageIdx && (this._lastPageIdx = this._curPageIdx,
                cc.Component.EventHandler.emitEvents(this.pageEvents, this, r.PAGE_TURNING),
                this.node.emit("page-turning", this))
            },
            _isScrollable: function(t, e, r) {
                if (this.sizeMode === i.Free) {
                    var s, a;
                    if (this.direction === n.Horizontal)
                        return s = this._scrollCenterOffsetX[e],
                        a = this._scrollCenterOffsetX[r],
                        Math.abs(t.x) >= Math.abs(s - a) * this.scrollThreshold;
                    if (this.direction === n.Vertical)
                        return s = this._scrollCenterOffsetY[e],
                        a = this._scrollCenterOffsetY[r],
                        Math.abs(t.y) >= Math.abs(s - a) * this.scrollThreshold
                } else {
                    if (this.direction === n.Horizontal)
                        return Math.abs(t.x) >= this._view.width * this.scrollThreshold;
                    if (this.direction === n.Vertical)
                        return Math.abs(t.y) >= this._view.height * this.scrollThreshold
                }
            },
            _isQuicklyScrollable: function(t) {
                if (this.direction === n.Horizontal) {
                    if (Math.abs(t.x) > this.autoPageTurningThreshold)
                        return !0
                } else if (this.direction === n.Vertical && Math.abs(t.y) > this.autoPageTurningThreshold)
                    return !0;
                return !1
            },
            _moveOffsetValue: function(t) {
                var e = cc.v2(0, 0);
                return this.sizeMode === i.Free ? this.direction === n.Horizontal ? e.x = this._scrollCenterOffsetX[t] : this.direction === n.Vertical && (e.y = this._scrollCenterOffsetY[t]) : this.direction === n.Horizontal ? e.x = t * this._view.width : this.direction === n.Vertical && (e.y = t * this._view.height),
                e
            },
            _getDragDirection: function(t) {
                return this.direction === n.Horizontal ? 0 === t.x ? 0 : t.x > 0 ? 1 : -1 : this.direction === n.Vertical ? 0 === t.y ? 0 : t.y < 0 ? 1 : -1 : void 0
            },
            _handleReleaseLogic: function() {
                this._autoScrollToPage(),
                this._scrolling && (this._scrolling = !1,
                this._autoScrolling || this._dispatchEvent("scroll-ended"))
            },
            _autoScrollToPage: function() {
                if (this._startBounceBackIfNeeded()) {
                    var t = this._getHowMuchOutOfBoundary();
                    ((t = this._clampDelta(t)).x > 0 || t.y < 0) && (this._curPageIdx = 0 === this._pages.length ? 0 : this._pages.length - 1),
                    (t.x < 0 || t.y > 0) && (this._curPageIdx = 0),
                    this.indicator && this.indicator._changedState()
                } else {
                    var e = this._touchBeganPosition.sub(this._touchEndPosition)
                      , i = this._curPageIdx
                      , n = i + this._getDragDirection(e)
                      , r = this.pageTurningSpeed * Math.abs(i - n);
                    if (n < this._pages.length) {
                        if (this._isScrollable(e, i, n))
                            return void this.scrollToPage(n, r);
                        var s = this._calculateTouchMoveVelocity();
                        if (this._isQuicklyScrollable(s))
                            return void this.scrollToPage(n, r)
                    }
                    this.scrollToPage(i, r)
                }
            },
            _onTouchBegan: function(t, e) {
                this._touchBeganPosition = t.touch.getLocation(),
                this._super(t, e)
            },
            _onTouchMoved: function(t, e) {
                this._super(t, e)
            },
            _onTouchEnded: function(t, e) {
                this._touchEndPosition = t.touch.getLocation(),
                this._super(t, e)
            },
            _onTouchCancelled: function(t, e) {
                this._touchEndPosition = t.touch.getLocation(),
                this._super(t, e)
            },
            _onMouseWheel: function() {}
        });
        cc.PageView = e.exports = s
    }
    ), {}],
    113: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            HORIZONTAL: 0,
            VERTICAL: 1
        })
          , n = cc.Class({
            name: "cc.PageViewIndicator",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _layout: null,
                _pageView: null,
                _indicators: [],
                spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame,
                    tooltip: !1
                },
                direction: {
                    default: i.HORIZONTAL,
                    type: i,
                    tooltip: !1
                },
                cellSize: {
                    default: cc.size(20, 20),
                    tooltip: !1
                },
                spacing: {
                    default: 0,
                    tooltip: !1
                }
            },
            statics: {
                Direction: i
            },
            onLoad: function() {
                this._updateLayout()
            },
            setPageView: function(t) {
                this._pageView = t,
                this._refresh()
            },
            _updateLayout: function() {
                this._layout = this.getComponent(cc.Layout),
                this._layout || (this._layout = this.addComponent(cc.Layout)),
                this.direction === i.HORIZONTAL ? (this._layout.type = cc.Layout.Type.HORIZONTAL,
                this._layout.spacingX = this.spacing) : this.direction === i.VERTICAL && (this._layout.type = cc.Layout.Type.VERTICAL,
                this._layout.spacingY = this.spacing),
                this._layout.resizeMode = cc.Layout.ResizeMode.CONTAINER
            },
            _createIndicator: function() {
                var t = new cc.Node
                  , e = t.addComponent(cc.Sprite);
                return e.spriteFrame = this.spriteFrame,
                e.sizeMode = cc.Sprite.SizeMode.CUSTOM,
                t.parent = this.node,
                t.width = this.cellSize.width,
                t.height = this.cellSize.height,
                t
            },
            _changedState: function() {
                var t = this._indicators;
                if (0 !== t.length) {
                    var e = this._pageView._curPageIdx;
                    if (!(e >= t.length)) {
                        for (var i = 0; i < t.length; ++i)
                            t[i].opacity = 127.5;
                        t[e].opacity = 255
                    }
                }
            },
            _refresh: function() {
                if (this._pageView) {
                    var t = this._indicators
                      , e = this._pageView.getPages();
                    if (e.length !== t.length) {
                        var i = 0;
                        if (e.length > t.length)
                            for (i = 0; i < e.length; ++i)
                                t[i] || (t[i] = this._createIndicator());
                        else
                            for (i = t.length - e.length; i > 0; --i) {
                                var n = t[i - 1];
                                this.node.removeChild(n),
                                t.splice(i - 1, 1)
                            }
                        this._layout && this._layout.enabledInHierarchy && this._layout.updateLayout(),
                        this._changedState()
                    }
                }
            }
        });
        cc.PageViewIndicator = e.exports = n
    }
    ), {
        "./CCComponent": 105
    }],
    114: [(function(t, e) {
        "use strict";
        var i = t("../utils/misc")
          , n = t("./CCComponent")
          , r = cc.Enum({
            HORIZONTAL: 0,
            VERTICAL: 1,
            FILLED: 2
        })
          , s = cc.Class({
            name: "cc.ProgressBar",
            extends: n,
            editor: !1,
            _initBarSprite: function() {
                if (this.barSprite) {
                    var t = this.barSprite.node;
                    if (!t)
                        return;
                    var e = this.node.getContentSize()
                      , i = this.node.getAnchorPoint()
                      , n = t.getContentSize();
                    t.parent === this.node && this.node.setContentSize(n),
                    this.barSprite.fillType === cc.Sprite.FillType.RADIAL && (this.mode = r.FILLED);
                    var s = t.getContentSize();
                    if (this.mode === r.HORIZONTAL ? this.totalLength = s.width : this.mode === r.VERTICAL ? this.totalLength = s.height : this.totalLength = this.barSprite.fillRange,
                    t.parent === this.node) {
                        var a = -e.width * i.x;
                        t.setPosition(cc.v2(a, 0))
                    }
                }
            },
            _updateBarStatus: function() {
                if (this.barSprite) {
                    var t = this.barSprite.node;
                    if (!t)
                        return;
                    var e, n, s, a = t.getAnchorPoint(), o = t.getContentSize(), l = t.getPosition(), h = cc.v2(0, .5), c = i.clamp01(this.progress), u = this.totalLength * c;
                    switch (this.mode) {
                    case r.HORIZONTAL:
                        this.reverse && (h = cc.v2(1, .5)),
                        e = cc.size(u, o.height),
                        n = this.totalLength,
                        s = o.height;
                        break;
                    case r.VERTICAL:
                        h = this.reverse ? cc.v2(.5, 1) : cc.v2(.5, 0),
                        e = cc.size(o.width, u),
                        n = o.width,
                        s = this.totalLength
                    }
                    if (this.mode === r.FILLED)
                        this.barSprite.type !== cc.Sprite.Type.FILLED ? cc.warn("ProgressBar FILLED mode only works when barSprite's Type is FILLED!") : (this.reverse && (u *= -1),
                        this.barSprite.fillRange = u);
                    else if (this.barSprite.type !== cc.Sprite.Type.FILLED) {
                        var _ = h.x - a.x
                          , f = h.y - a.y
                          , d = cc.v2(n * _, s * f);
                        t.setPosition(l.x + d.x, l.y + d.y),
                        t.setAnchorPoint(h),
                        t.setContentSize(e)
                    } else
                        cc.warn("ProgressBar non-FILLED mode only works when barSprite's Type is non-FILLED!")
                }
            },
            properties: {
                barSprite: {
                    default: null,
                    type: cc.Sprite,
                    tooltip: !1,
                    notify: function() {
                        this._initBarSprite()
                    },
                    animatable: !1
                },
                mode: {
                    default: r.HORIZONTAL,
                    type: r,
                    tooltip: !1,
                    notify: function() {
                        if (this.barSprite) {
                            var t = this.barSprite.node;
                            if (!t)
                                return;
                            var e = t.getContentSize();
                            this.mode === r.HORIZONTAL ? this.totalLength = e.width : this.mode === r.VERTICAL ? this.totalLength = e.height : this.mode === r.FILLED && (this.totalLength = this.barSprite.fillRange)
                        }
                    },
                    animatable: !1
                },
                _N$totalLength: 1,
                totalLength: {
                    range: [0, Number.MAX_VALUE],
                    tooltip: !1,
                    get: function() {
                        return this._N$totalLength
                    },
                    set: function(t) {
                        this.mode === r.FILLED && (t = i.clamp01(t)),
                        this._N$totalLength = t,
                        this._updateBarStatus()
                    }
                },
                progress: {
                    default: 1,
                    type: cc.Float,
                    range: [0, 1, .1],
                    slide: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateBarStatus()
                    }
                },
                reverse: {
                    default: !1,
                    tooltip: !1,
                    notify: function() {
                        this.barSprite && (this.barSprite.fillStart = 1 - this.barSprite.fillStart),
                        this._updateBarStatus()
                    },
                    animatable: !1
                }
            },
            statics: {
                Mode: r
            }
        });
        cc.ProgressBar = e.exports = s
    }
    ), {
        "../utils/misc": 267,
        "./CCComponent": 105
    }],
    115: [(function(t, e) {
        "use strict";
        var i = s(t("../renderer/assembler"))
          , n = s(t("../assets/material/material-variant"))
          , r = t("../value-types");
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("./CCComponent")
          , o = t("../renderer/render-flow")
          , l = t("../assets/material/CCMaterial")
          , h = new r.Color
          , c = cc.Class({
            name: "RenderComponent",
            extends: a,
            editor: !1,
            properties: {
                _materials: {
                    default: [],
                    type: l
                },
                materials: {
                    get: function() {
                        return this._materials
                    },
                    set: function(t) {
                        this._materials = t,
                        this._activateMaterial()
                    },
                    type: [l],
                    displayName: "Materials",
                    animatable: !1
                }
            },
            ctor: function() {
                this._vertsDirty = !0,
                this._assembler = null
            },
            _resetAssembler: function() {
                i.default.init(this),
                this._updateColor(),
                this.setVertsDirty()
            },
            __preload: function() {
                this._resetAssembler(),
                this._activateMaterial()
            },
            onEnable: function() {
                this.node._renderComponent && (this.node._renderComponent.enabled = !1),
                this.node._renderComponent = this,
                this.node._renderFlag |= o.FLAG_OPACITY_COLOR,
                this.setVertsDirty()
            },
            onDisable: function() {
                this.node._renderComponent = null,
                this.disableRender()
            },
            onDestroy: function() {
                for (var t = this._materials, e = 0; e < t.length; e++)
                    cc.pool.material.put(t[e]);
                t.length = 0,
                cc.pool.assembler.put(this._assembler)
            },
            setVertsDirty: function() {
                this._vertsDirty = !0,
                this.markForRender(!0)
            },
            _on3DNodeChanged: function() {
                this._resetAssembler()
            },
            _validateRender: function() {},
            markForValidate: function() {
                cc.RenderFlow.registerValidate(this)
            },
            markForRender: function(t) {
                var e = o.FLAG_RENDER | o.FLAG_UPDATE_RENDER_DATA;
                t ? (this.node._renderFlag |= e,
                this.markForValidate()) : this.node._renderFlag &= ~e
            },
            disableRender: function() {
                this.node._renderFlag &= ~(o.FLAG_RENDER | o.FLAG_UPDATE_RENDER_DATA)
            },
            getMaterial: function(t) {
                if (t < 0 || t >= this._materials.length)
                    return null;
                var e = this._materials[t];
                if (!e)
                    return null;
                var i = n.default.create(e, this);
                return i !== e && this.setMaterial(t, i),
                i
            },
            getMaterials: function() {
                for (var t = this._materials, e = 0; e < t.length; e++)
                    t[e] = n.default.create(t[e], this);
                return t
            },
            setMaterial: function(t, e) {
                return e !== this._materials[t] && (e = n.default.create(e, this),
                this._materials[t] = e),
                this._updateMaterial(),
                this.markForRender(!0),
                e
            },
            _getDefaultMaterial: function() {
                return l.getBuiltinMaterial("2d-sprite")
            },
            _activateMaterial: function() {
                var t = this._materials;
                if (!t[0]) {
                    var e = this._getDefaultMaterial();
                    t[0] = e
                }
                for (var i = 0; i < t.length; i++)
                    t[i] = n.default.create(t[i], this);
                this._updateMaterial()
            },
            _updateMaterial: function() {},
            _updateColor: function() {
                if (this._assembler.updateColor) {
                    var t = this.srcBlendFactor === cc.macro.BlendFactor.ONE;
                    t && r.Color.premultiplyAlpha(h, this.node._color);
                    var e = t ? h._val : null;
                    this._assembler.updateColor(this, e)
                }
            },
            _checkBacth: function(t, e) {
                var i = this._materials[0];
                (i && i.getHash() !== t.material.getHash() || t.cullingMask !== e) && (t._flush(),
                t.node = i.getDefine("CC_USE_MODEL") ? this.node : t._dummyNode,
                t.material = i,
                t.cullingMask = e)
            }
        });
        cc.RenderComponent = e.exports = c
    }
    ), {
        "../assets/material/CCMaterial": 80,
        "../assets/material/material-variant": 87,
        "../renderer/assembler": 221,
        "../renderer/render-flow": 225,
        "../value-types": 282,
        "./CCComponent": 105
    }],
    116: [(function(t, e) {
        "use strict";
        var i = t("../platform/js")
          , n = t("../platform/CCMacro")
          , r = t("../utils/text-utils")
          , s = new (t("../utils/html-text-parser"))
          , a = n.TextAlignment
          , o = n.VerticalTextAlignment
          , l = cc.Label.CacheMode
          , h = new i.Pool(function(t) {
            if (!cc.isValid(t))
                return !1;
            var e = t.getComponent(cc.LabelOutline);
            return e && (e.width = 0),
            !0
        }
        ,20);
        h.get = function() {
            var t = this._get();
            t || (t = new cc.PrivateNode("RICHTEXT_CHILD")),
            t.setPosition(0, 0),
            t.setAnchorPoint(.5, .5),
            t.skewX = 0;
            var e = t.getComponent(cc.Label);
            return e || (e = t.addComponent(cc.Label)),
            e.string = "",
            e.horizontalAlign = a.LEFT,
            e.verticalAlign = o.CENTER,
            e._forceUseCanvas = !0,
            t
        }
        ;
        var c = cc.Class({
            name: "cc.RichText",
            extends: cc.Component,
            ctor: function() {
                this._textArray = null,
                this._labelSegments = [],
                this._labelSegmentsCache = [],
                this._linesWidth = [],
                this._updateRichTextStatus = this._updateRichText
            },
            editor: !1,
            properties: {
                string: {
                    default: "<color=#00ff00>Rich</c><color=#0fffff>Text</color>",
                    multiline: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateRichTextStatus()
                    }
                },
                horizontalAlign: {
                    default: a.LEFT,
                    type: a,
                    tooltip: !1,
                    animatable: !1,
                    notify: function(t) {
                        this.horizontalAlign !== t && (this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    }
                },
                fontSize: {
                    default: 40,
                    tooltip: !1,
                    notify: function(t) {
                        this.fontSize !== t && (this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    }
                },
                _fontFamily: "Arial",
                fontFamily: {
                    tooltip: !1,
                    get: function() {
                        return this._fontFamily
                    },
                    set: function(t) {
                        this._fontFamily !== t && (this._fontFamily = t,
                        this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    },
                    animatable: !1
                },
                font: {
                    default: null,
                    type: cc.TTFFont,
                    tooltip: !1,
                    notify: function(t) {
                        this.font !== t && (this._layoutDirty = !0,
                        this.font ? (this.useSystemFont = !1,
                        this._onTTFLoaded()) : this.useSystemFont = !0,
                        this._updateRichTextStatus())
                    }
                },
                _isSystemFontUsed: !0,
                useSystemFont: {
                    get: function() {
                        return this._isSystemFontUsed
                    },
                    set: function(t) {
                        this._isSystemFontUsed !== t && (this._isSystemFontUsed = t,
                        this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    },
                    animatable: !1,
                    tooltip: !1
                },
                cacheMode: {
                    default: l.NONE,
                    type: l,
                    tooltip: !1,
                    notify: function(t) {
                        this.cacheMode !== t && this._updateRichTextStatus()
                    },
                    animatable: !1
                },
                maxWidth: {
                    default: 0,
                    tooltip: !1,
                    notify: function(t) {
                        this.maxWidth !== t && (this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    }
                },
                lineHeight: {
                    default: 40,
                    tooltip: !1,
                    notify: function(t) {
                        this.lineHeight !== t && (this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    }
                },
                imageAtlas: {
                    default: null,
                    type: cc.SpriteAtlas,
                    tooltip: !1,
                    notify: function(t) {
                        this.imageAtlas !== t && (this._layoutDirty = !0,
                        this._updateRichTextStatus())
                    }
                },
                handleTouchEvent: {
                    default: !0,
                    tooltip: !1,
                    notify: function(t) {
                        this.handleTouchEvent !== t && this.enabledInHierarchy && (this.handleTouchEvent ? this._addEventListeners() : this._removeEventListeners())
                    }
                }
            },
            statics: {
                HorizontalAlign: a,
                VerticalAlign: o
            },
            onEnable: function() {
                this.handleTouchEvent && this._addEventListeners(),
                this._updateRichText(),
                this._activateChildren(!0)
            },
            onDisable: function() {
                this.handleTouchEvent && this._removeEventListeners(),
                this._activateChildren(!1)
            },
            start: function() {
                this._onTTFLoaded()
            },
            _onColorChanged: function(t) {
                this.node.children.forEach((function(e) {
                    e.color = t
                }
                ))
            },
            _addEventListeners: function() {
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.on(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this)
            },
            _removeEventListeners: function() {
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.off(cc.Node.EventType.COLOR_CHANGED, this._onColorChanged, this)
            },
            _updateLabelSegmentTextAttributes: function() {
                this._labelSegments.forEach(function(t) {
                    this._applyTextAttribute(t, null, !0)
                }
                .bind(this))
            },
            _createFontLabel: function(t) {
                return h.get(t, this)
            },
            _onTTFLoaded: function() {
                if (this.font instanceof cc.TTFFont)
                    if (this.font._nativeAsset)
                        this._layoutDirty = !0,
                        this._updateRichText();
                    else {
                        var t = this;
                        cc.assetManager.postLoadNative(this.font, (function() {
                            t._layoutDirty = !0,
                            t._updateRichText()
                        }
                        ))
                    }
                else
                    this._layoutDirty = !0,
                    this._updateRichText()
            },
            _measureText: function(t, e) {
                var i = this
                  , n = function(e) {
                    var n;
                    return 0 === i._labelSegmentsCache.length ? (n = i._createFontLabel(e),
                    i._labelSegmentsCache.push(n)) : n = i._labelSegmentsCache[0],
                    n._styleIndex = t,
                    i._applyTextAttribute(n, e, !0),
                    n.getContentSize().width
                };
                return e ? n(e) : n
            },
            _onTouchEnded: function(t) {
                for (var e = this, i = this.node.getComponents(cc.Component), n = function(n) {
                    var r = e._labelSegments[n]
                      , s = r._clickHandler
                      , a = r._clickParam;
                    s && e._containsTouchLocation(r, t.touch.getLocation()) && (i.forEach((function(e) {
                        e.enabledInHierarchy && e[s] && e[s](t, a)
                    }
                    )),
                    t.stopPropagation())
                }, r = 0; r < this._labelSegments.length; ++r)
                    n(r)
            },
            _containsTouchLocation: function(t, e) {
                return t.getBoundingBoxToWorld().contains(e)
            },
            _resetState: function() {
                for (var t = this.node.children, e = t.length - 1; e >= 0; e--) {
                    var i = t[e];
                    "RICHTEXT_CHILD" !== i.name && "RICHTEXT_Image_CHILD" !== i.name || (i.parent === this.node ? i.parent = null : t.splice(e, 1),
                    "RICHTEXT_CHILD" === i.name && h.put(i))
                }
                this._labelSegments.length = 0,
                this._labelSegmentsCache.length = 0,
                this._linesWidth.length = 0,
                this._lineOffsetX = 0,
                this._lineCount = 1,
                this._labelWidth = 0,
                this._labelHeight = 0,
                this._layoutDirty = !0
            },
            onRestore: !1,
            _activateChildren: function(t) {
                for (var e = this.node.children.length - 1; e >= 0; e--) {
                    var i = this.node.children[e];
                    "RICHTEXT_CHILD" !== i.name && "RICHTEXT_Image_CHILD" !== i.name || (i.active = t)
                }
            },
            _addLabelSegment: function(t, e) {
                var i;
                return (i = 0 === this._labelSegmentsCache.length ? this._createFontLabel(t) : this._labelSegmentsCache.pop())._styleIndex = e,
                i._lineCount = this._lineCount,
                i.active = this.node.active,
                i.setAnchorPoint(0, 0),
                this._applyTextAttribute(i, t),
                this.node.addChild(i),
                this._labelSegments.push(i),
                i
            },
            _updateRichTextWithMaxWidth: function(t, e, i) {
                var n = e;
                if (this._lineOffsetX > 0 && n + this._lineOffsetX > this.maxWidth)
                    for (var s = 0; this._lineOffsetX <= this.maxWidth; ) {
                        var a = this._getFirstWordLen(t, s, t.length)
                          , o = t.substr(s, a)
                          , l = this._measureText(i, o);
                        if (!(this._lineOffsetX + l <= this.maxWidth)) {
                            if (s > 0) {
                                var h = t.substr(0, s);
                                this._addLabelSegment(h, i),
                                t = t.substr(s, t.length),
                                n = this._measureText(i, t)
                            }
                            this._updateLineInfo();
                            break
                        }
                        this._lineOffsetX += l,
                        s += a
                    }
                if (n > this.maxWidth)
                    for (var c = r.fragmentText(t, n, this.maxWidth, this._measureText(i)), u = 0; u < c.length; ++u) {
                        var _ = c[u]
                          , f = this._addLabelSegment(_, i).getContentSize();
                        this._lineOffsetX += f.width,
                        c.length > 1 && u < c.length - 1 && this._updateLineInfo()
                    }
                else
                    this._lineOffsetX += n,
                    this._addLabelSegment(t, i)
            },
            _isLastComponentCR: function(t) {
                return t.length - 1 === t.lastIndexOf("\n")
            },
            _updateLineInfo: function() {
                this._linesWidth.push(this._lineOffsetX),
                this._lineOffsetX = 0,
                this._lineCount++
            },
            _needsUpdateTextLayout: function(t) {
                if (this._layoutDirty || !this._textArray || !t)
                    return !0;
                if (this._textArray.length !== t.length)
                    return !0;
                for (var e = 0; e < this._textArray.length; ++e) {
                    var i = this._textArray[e]
                      , n = t[e];
                    if (i.text !== n.text)
                        return !0;
                    var r = i.style
                      , s = n.style;
                    if (r) {
                        if (s) {
                            if (!r.outline != !s.outline)
                                return !0;
                            if (r.size !== s.size || !r.italic != !s.italic || r.isImage !== s.isImage)
                                return !0;
                            if (r.src !== s.src || r.imageAlign !== s.imageAlign || r.imageHeight !== s.imageHeight || r.imageWidth !== s.imageWidth || r.imageOffset !== s.imageOffset)
                                return !0
                        } else if (r.size || r.italic || r.isImage || r.outline)
                            return !0
                    } else if (s && (s.size || s.italic || s.isImage || s.outline))
                        return !0
                }
                return !1
            },
            _addRichTextImageElement: function(t) {
                var e = t.style.src
                  , i = this.imageAtlas.getSpriteFrame(e);
                if (i) {
                    var n = new cc.PrivateNode("RICHTEXT_Image_CHILD")
                      , r = n.addComponent(cc.Sprite);
                    switch (t.style.imageAlign) {
                    case "top":
                        n.setAnchorPoint(0, 1);
                        break;
                    case "center":
                        n.setAnchorPoint(0, .5);
                        break;
                    default:
                        n.setAnchorPoint(0, 0)
                    }
                    t.style.imageOffset && (n._imageOffset = t.style.imageOffset),
                    r.type = cc.Sprite.Type.SLICED,
                    r.sizeMode = cc.Sprite.SizeMode.CUSTOM,
                    this.node.addChild(n),
                    this._labelSegments.push(n);
                    var s = i.getRect()
                      , a = 1
                      , o = s.width
                      , l = s.height
                      , h = t.style.imageWidth
                      , c = t.style.imageHeight;
                    c > 0 ? (o *= a = c / l,
                    l *= a) : (o *= a = this.lineHeight / l,
                    l *= a),
                    h > 0 && (o = h),
                    this.maxWidth > 0 ? (this._lineOffsetX + o > this.maxWidth && this._updateLineInfo(),
                    this._lineOffsetX += o) : (this._lineOffsetX += o,
                    this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX)),
                    r.spriteFrame = i,
                    n.setContentSize(o, l),
                    n._lineCount = this._lineCount,
                    t.style.event ? (t.style.event.click && (n._clickHandler = t.style.event.click),
                    t.style.event.param ? n._clickParam = t.style.event.param : n._clickParam = "") : n._clickHandler = null
                } else
                    cc.warnID(4400)
            },
            _updateRichText: function() {
                if (this.enabledInHierarchy) {
                    var t = s.parse(this.string);
                    if (!this._needsUpdateTextLayout(t))
                        return this._textArray = t,
                        void this._updateLabelSegmentTextAttributes();
                    this._textArray = t,
                    this._resetState();
                    for (var e, i = !1, n = 0; n < this._textArray.length; ++n) {
                        var a = this._textArray[n]
                          , o = a.text;
                        if ("" === o) {
                            if (a.style && a.style.newline) {
                                this._updateLineInfo();
                                continue
                            }
                            if (a.style && a.style.isImage && this.imageAtlas) {
                                this._addRichTextImageElement(a);
                                continue
                            }
                        }
                        for (var l = o.split("\n"), h = 0; h < l.length; ++h) {
                            var c = l[h];
                            if ("" !== c)
                                if (i = !1,
                                this.maxWidth > 0) {
                                    var u = this._measureText(n, c);
                                    this._updateRichTextWithMaxWidth(c, u, n),
                                    l.length > 1 && h < l.length - 1 && this._updateLineInfo()
                                } else
                                    e = this._addLabelSegment(c, n).getContentSize(),
                                    this._lineOffsetX += e.width,
                                    this._lineOffsetX > this._labelWidth && (this._labelWidth = this._lineOffsetX),
                                    l.length > 1 && h < l.length - 1 && this._updateLineInfo();
                            else {
                                if (this._isLastComponentCR(o) && h === l.length - 1)
                                    continue;
                                this._updateLineInfo(),
                                i = !0
                            }
                        }
                    }
                    i || this._linesWidth.push(this._lineOffsetX),
                    this.maxWidth > 0 && (this._labelWidth = this.maxWidth),
                    this._labelHeight = (this._lineCount + r.BASELINE_RATIO) * this.lineHeight,
                    this.node.setContentSize(this._labelWidth, this._labelHeight),
                    this._updateRichTextPosition(),
                    this._layoutDirty = !1
                }
            },
            _getFirstWordLen: function(t, e, i) {
                var n = t.charAt(e);
                if (r.isUnicodeCJK(n) || r.isUnicodeSpace(n))
                    return 1;
                for (var s = 1, a = e + 1; a < i && (n = t.charAt(a),
                !r.isUnicodeSpace(n) && !r.isUnicodeCJK(n)); ++a)
                    s++;
                return s
            },
            _updateRichTextPosition: function() {
                for (var t = 0, e = 1, i = this._lineCount, n = 0; n < this._labelSegments.length; ++n) {
                    var s = this._labelSegments[n]
                      , o = s._lineCount;
                    o > e && (t = 0,
                    e = o);
                    var l = 0;
                    switch (this.horizontalAlign) {
                    case a.LEFT:
                        l = -this._labelWidth / 2;
                        break;
                    case a.CENTER:
                        l = -this._linesWidth[o - 1] / 2;
                        break;
                    case a.RIGHT:
                        l = this._labelWidth / 2 - this._linesWidth[o - 1]
                    }
                    s.x = t + l;
                    var h = s.getContentSize();
                    if (s.y = this.lineHeight * (i - o) - this._labelHeight / 2,
                    o === e && (t += h.width),
                    s.getComponent(cc.Sprite)) {
                        var c = this.lineHeight
                          , u = this.lineHeight * (1 + r.BASELINE_RATIO);
                        switch (s.anchorY) {
                        case 1:
                            s.y += c + (u - c) / 2;
                            break;
                        case .5:
                            s.y += u / 2;
                            break;
                        default:
                            s.y += (u - c) / 2
                        }
                        if (s._imageOffset) {
                            var _ = s._imageOffset.split(",");
                            if (1 === _.length && _[0]) {
                                var f = parseFloat(_[0]);
                                Number.isInteger(f) && (s.y += f)
                            } else if (2 === _.length) {
                                var d = parseFloat(_[0])
                                  , p = parseFloat(_[1]);
                                Number.isInteger(d) && (s.x += d),
                                Number.isInteger(p) && (s.y += p)
                            }
                        }
                    }
                    var m = s.getComponent(cc.LabelOutline);
                    m && m.width && (s.y = s.y - m.width)
                }
            },
            _convertLiteralColorValue: function(t) {
                var e = t.toUpperCase();
                return cc.Color[e] ? cc.Color[e] : cc.color().fromHEX(t)
            },
            _applyTextAttribute: function(t, e, i) {
                var n = t.getComponent(cc.Label);
                if (n) {
                    var r = t._styleIndex
                      , s = null;
                    if (this._textArray[r] && (s = this._textArray[r].style),
                    s && s.color ? t.color = this._convertLiteralColorValue(s.color) : t.color = this.node.color,
                    n.cacheMode = this.cacheMode,
                    this.font instanceof cc.Font && !this._isSystemFontUsed ? n.font = this.font : n.fontFamily = this.fontFamily,
                    n.useSystemFont = this._isSystemFontUsed,
                    n.lineHeight = this.lineHeight,
                    n.enableBold = s && s.bold,
                    n.enableItalics = s && s.italic,
                    s && s.italic && (t.skewX = 12),
                    n.enableUnderline = s && s.underline,
                    s && s.outline) {
                        var a = t.getComponent(cc.LabelOutline);
                        a || (a = t.addComponent(cc.LabelOutline)),
                        a.color = this._convertLiteralColorValue(s.outline.color),
                        a.width = s.outline.width
                    }
                    s && s.size ? n.fontSize = s.size : n.fontSize = this.fontSize,
                    null !== e && ("string" != typeof e && (e = "" + e),
                    n.string = e),
                    i && n._forceUpdateRenderData(),
                    s && s.event ? (s.event.click && (t._clickHandler = s.event.click),
                    s.event.param ? t._clickParam = s.event.param : t._clickParam = "") : t._clickHandler = null
                }
            },
            onDestroy: function() {
                for (var t = 0; t < this._labelSegments.length; ++t)
                    this._labelSegments[t].removeFromParent(),
                    h.put(this._labelSegments[t])
            }
        });
        cc.RichText = e.exports = c
    }
    ), {
        "../platform/CCMacro": 198,
        "../platform/js": 214,
        "../utils/html-text-parser": 265,
        "../utils/text-utils": 274
    }],
    117: [(function(t, e) {
        "use strict";
        var i = t("../utils/misc")
          , n = (t("./CCComponent"),
        cc.Enum({
            HORIZONTAL: 0,
            VERTICAL: 1
        }))
          , r = cc.Class({
            name: "cc.Scrollbar",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                _scrollView: null,
                _touching: !1,
                _autoHideRemainingTime: {
                    default: 0,
                    serializable: !1
                },
                _opacity: 255,
                handle: {
                    default: null,
                    type: cc.Sprite,
                    tooltip: !1,
                    notify: function() {
                        this._onScroll(cc.v2(0, 0))
                    },
                    animatable: !1
                },
                direction: {
                    default: n.HORIZONTAL,
                    type: n,
                    tooltip: !1,
                    notify: function() {
                        this._onScroll(cc.v2(0, 0))
                    },
                    animatable: !1
                },
                enableAutoHide: {
                    default: !0,
                    animatable: !1,
                    tooltip: !1
                },
                autoHideTime: {
                    default: 1,
                    animatable: !1,
                    tooltip: !1
                }
            },
            statics: {
                Direction: n
            },
            setTargetScrollView: function(t) {
                this._scrollView = t
            },
            _convertToScrollViewSpace: function(t) {
                var e = this._scrollView.node
                  , i = t.convertToWorldSpaceAR(cc.v2(-t.anchorX * t.width, -t.anchorY * t.height))
                  , n = e.convertToNodeSpaceAR(i);
                return n.x += e.anchorX * e.width,
                n.y += e.anchorY * e.height,
                n
            },
            _setOpacity: function(t) {
                this.handle && (this.node.opacity = t,
                this.handle.node.opacity = t)
            },
            _onScroll: function(t) {
                if (this._scrollView) {
                    var e = this._scrollView.content;
                    if (e) {
                        var i = e.getContentSize()
                          , r = this._scrollView.node.getContentSize()
                          , s = this.node.getContentSize();
                        if (this._conditionalDisableScrollBar(i, r))
                            return;
                        this.enableAutoHide && (this._autoHideRemainingTime = this.autoHideTime,
                        this._setOpacity(this._opacity));
                        var a = 0
                          , o = 0
                          , l = 0
                          , h = 0
                          , c = 0;
                        this.direction === n.HORIZONTAL ? (a = i.width,
                        o = r.width,
                        c = s.width,
                        l = t.x,
                        h = -this._convertToScrollViewSpace(e).x) : this.direction === n.VERTICAL && (a = i.height,
                        o = r.height,
                        c = s.height,
                        l = t.y,
                        h = -this._convertToScrollViewSpace(e).y);
                        var u = this._calculateLength(a, o, c, l)
                          , _ = this._calculatePosition(a, o, c, h, l, u);
                        this._updateLength(u),
                        this._updateHanlderPosition(_)
                    }
                }
            },
            _updateHanlderPosition: function(t) {
                if (this.handle) {
                    var e = this._fixupHandlerPosition();
                    this.handle.node.setPosition(t.x + e.x, t.y + e.y)
                }
            },
            _fixupHandlerPosition: function() {
                var t = this.node.getContentSize()
                  , e = this.node.getAnchorPoint()
                  , i = this.handle.node.getContentSize()
                  , r = this.handle.node.parent
                  , s = this.node.convertToWorldSpaceAR(cc.v2(-t.width * e.x, -t.height * e.y))
                  , a = r.convertToNodeSpaceAR(s);
                return this.direction === n.HORIZONTAL ? a = cc.v2(a.x, a.y + (t.height - i.height) / 2) : this.direction === n.VERTICAL && (a = cc.v2(a.x + (t.width - i.width) / 2, a.y)),
                this.handle.node.setPosition(a),
                a
            },
            _onTouchBegan: function() {
                this.enableAutoHide && (this._touching = !0)
            },
            _conditionalDisableScrollBar: function(t, e) {
                return t.width <= e.width && this.direction === n.HORIZONTAL || t.height <= e.height && this.direction === n.VERTICAL
            },
            _onTouchEnded: function() {
                if (this.enableAutoHide && (this._touching = !1,
                !(this.autoHideTime <= 0))) {
                    if (this._scrollView) {
                        var t = this._scrollView.content;
                        if (t) {
                            var e = t.getContentSize()
                              , i = this._scrollView.node.getContentSize();
                            if (this._conditionalDisableScrollBar(e, i))
                                return
                        }
                    }
                    this._autoHideRemainingTime = this.autoHideTime
                }
            },
            _calculateLength: function(t, e, i, n) {
                var r = t;
                return n && (r += 20 * (n > 0 ? n : -n)),
                i * (e / r)
            },
            _calculatePosition: function(t, e, r, s, a, o) {
                var l = t - e;
                a && (l += Math.abs(a));
                var h = 0;
                l && (h = s / l,
                h = i.clamp01(h));
                var c = (r - o) * h;
                return this.direction === n.VERTICAL ? cc.v2(0, c) : cc.v2(c, 0)
            },
            _updateLength: function(t) {
                if (this.handle) {
                    var e = this.handle.node
                      , i = e.getContentSize();
                    e.setAnchorPoint(cc.v2(0, 0)),
                    this.direction === n.HORIZONTAL ? e.setContentSize(t, i.height) : e.setContentSize(i.width, t)
                }
            },
            _processAutoHide: function(t) {
                if (this.enableAutoHide && !(this._autoHideRemainingTime <= 0) && !this._touching && (this._autoHideRemainingTime -= t,
                this._autoHideRemainingTime <= this.autoHideTime)) {
                    this._autoHideRemainingTime = Math.max(0, this._autoHideRemainingTime);
                    var e = this._opacity * (this._autoHideRemainingTime / this.autoHideTime);
                    this._setOpacity(e)
                }
            },
            start: function() {
                this.enableAutoHide && this._setOpacity(0)
            },
            hide: function() {
                this._autoHideRemainingTime = 0,
                this._setOpacity(0)
            },
            show: function() {
                this._autoHideRemainingTime = this.autoHideTime,
                this._setOpacity(this._opacity)
            },
            update: function(t) {
                this._processAutoHide(t)
            }
        });
        cc.Scrollbar = e.exports = r
    }
    ), {
        "../utils/misc": 267,
        "./CCComponent": 105
    }],
    118: [(function(t, e) {
        "use strict";
        var i = t("../CCNode").EventType
          , n = cc.v2()
          , r = cc.v2()
          , s = function() {
            return (new Date).getMilliseconds()
        }
          , a = cc.Enum({
            SCROLL_TO_TOP: 0,
            SCROLL_TO_BOTTOM: 1,
            SCROLL_TO_LEFT: 2,
            SCROLL_TO_RIGHT: 3,
            SCROLLING: 4,
            BOUNCE_TOP: 5,
            BOUNCE_BOTTOM: 6,
            BOUNCE_LEFT: 7,
            BOUNCE_RIGHT: 8,
            SCROLL_ENDED: 9,
            TOUCH_UP: 10,
            AUTOSCROLL_ENDED_WITH_THRESHOLD: 11,
            SCROLL_BEGAN: 12
        })
          , o = {
            "scroll-to-top": a.SCROLL_TO_TOP,
            "scroll-to-bottom": a.SCROLL_TO_BOTTOM,
            "scroll-to-left": a.SCROLL_TO_LEFT,
            "scroll-to-right": a.SCROLL_TO_RIGHT,
            scrolling: a.SCROLLING,
            "bounce-bottom": a.BOUNCE_BOTTOM,
            "bounce-left": a.BOUNCE_LEFT,
            "bounce-right": a.BOUNCE_RIGHT,
            "bounce-top": a.BOUNCE_TOP,
            "scroll-ended": a.SCROLL_ENDED,
            "touch-up": a.TOUCH_UP,
            "scroll-ended-with-threshold": a.AUTOSCROLL_ENDED_WITH_THRESHOLD,
            "scroll-began": a.SCROLL_BEGAN
        }
          , l = cc.Class({
            name: "cc.ScrollView",
            extends: t("./CCViewGroup"),
            editor: !1,
            ctor: function() {
                this._topBoundary = 0,
                this._bottomBoundary = 0,
                this._leftBoundary = 0,
                this._rightBoundary = 0,
                this._touchMoveDisplacements = [],
                this._touchMoveTimeDeltas = [],
                this._touchMovePreviousTimestamp = 0,
                this._touchMoved = !1,
                this._autoScrolling = !1,
                this._autoScrollAttenuate = !1,
                this._autoScrollStartPosition = cc.v2(0, 0),
                this._autoScrollTargetDelta = cc.v2(0, 0),
                this._autoScrollTotalTime = 0,
                this._autoScrollAccumulatedTime = 0,
                this._autoScrollCurrentlyOutOfBoundary = !1,
                this._autoScrollBraking = !1,
                this._autoScrollBrakingStartPosition = cc.v2(0, 0),
                this._outOfBoundaryAmount = cc.v2(0, 0),
                this._outOfBoundaryAmountDirty = !0,
                this._stopMouseWheel = !1,
                this._mouseWheelEventElapsedTime = 0,
                this._isScrollEndedWithThresholdEventFired = !1,
                this._scrollEventEmitMask = 0,
                this._isBouncing = !1,
                this._scrolling = !1
            },
            properties: {
                content: {
                    default: void 0,
                    type: cc.Node,
                    tooltip: !1,
                    formerlySerializedAs: "content",
                    notify: function() {
                        this._calculateBoundary()
                    }
                },
                horizontal: {
                    default: !0,
                    animatable: !1,
                    tooltip: !1
                },
                vertical: {
                    default: !0,
                    animatable: !1,
                    tooltip: !1
                },
                inertia: {
                    default: !0,
                    tooltip: !1
                },
                brake: {
                    default: .5,
                    type: cc.Float,
                    range: [0, 1, .1],
                    tooltip: !1
                },
                elastic: {
                    default: !0,
                    animatable: !1,
                    tooltip: !1
                },
                bounceDuration: {
                    default: 1,
                    range: [0, 10],
                    tooltip: !1
                },
                horizontalScrollBar: {
                    default: void 0,
                    type: cc.Scrollbar,
                    tooltip: !1,
                    notify: function() {
                        this.horizontalScrollBar && (this.horizontalScrollBar.setTargetScrollView(this),
                        this._updateScrollBar(0))
                    },
                    animatable: !1
                },
                verticalScrollBar: {
                    default: void 0,
                    type: cc.Scrollbar,
                    tooltip: !1,
                    notify: function() {
                        this.verticalScrollBar && (this.verticalScrollBar.setTargetScrollView(this),
                        this._updateScrollBar(0))
                    },
                    animatable: !1
                },
                scrollEvents: {
                    default: [],
                    type: cc.Component.EventHandler,
                    tooltip: !1
                },
                cancelInnerEvents: {
                    default: !0,
                    animatable: !1,
                    tooltip: !1
                },
                _view: {
                    get: function() {
                        if (this.content)
                            return this.content.parent
                    }
                }
            },
            statics: {
                EventType: a
            },
            scrollToBottom: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, 0),
                    applyToHorizontal: !1,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i, !0)
            },
            scrollToTop: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, 1),
                    applyToHorizontal: !1,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToLeft: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, 0),
                    applyToHorizontal: !0,
                    applyToVertical: !1
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToRight: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(1, 0),
                    applyToHorizontal: !0,
                    applyToVertical: !1
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToTopLeft: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, 1),
                    applyToHorizontal: !0,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToTopRight: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(1, 1),
                    applyToHorizontal: !0,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToBottomLeft: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, 0),
                    applyToHorizontal: !0,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToBottomRight: function(t, e) {
                var i = this._calculateMovePercentDelta({
                    anchor: cc.v2(1, 0),
                    applyToHorizontal: !0,
                    applyToVertical: !0
                });
                t ? this._startAutoScroll(i, t, !1 !== e) : this._moveContent(i)
            },
            scrollToOffset: function(t, e, i) {
                var n = this.getMaxScrollOffset()
                  , r = cc.v2(0, 0);
                0 === n.x ? r.x = 0 : r.x = t.x / n.x,
                0 === n.y ? r.y = 1 : r.y = (n.y - t.y) / n.y,
                this.scrollTo(r, e, i)
            },
            getScrollOffset: function() {
                var t = this._getContentTopBoundary() - this._topBoundary
                  , e = this._getContentLeftBoundary() - this._leftBoundary;
                return cc.v2(e, t)
            },
            getMaxScrollOffset: function() {
                var t = this._view.getContentSize()
                  , e = this.content.getContentSize()
                  , i = e.width - t.width
                  , n = e.height - t.height;
                return i = i >= 0 ? i : 0,
                n = n >= 0 ? n : 0,
                cc.v2(i, n)
            },
            scrollToPercentHorizontal: function(t, e, i) {
                var n = this._calculateMovePercentDelta({
                    anchor: cc.v2(t, 0),
                    applyToHorizontal: !0,
                    applyToVertical: !1
                });
                e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
            },
            scrollTo: function(t, e, i) {
                var n = this._calculateMovePercentDelta({
                    anchor: cc.v2(t),
                    applyToHorizontal: !0,
                    applyToVertical: !0
                });
                e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
            },
            scrollToPercentVertical: function(t, e, i) {
                var n = this._calculateMovePercentDelta({
                    anchor: cc.v2(0, t),
                    applyToHorizontal: !1,
                    applyToVertical: !0
                });
                e ? this._startAutoScroll(n, e, !1 !== i) : this._moveContent(n)
            },
            stopAutoScroll: function() {
                this._autoScrolling = !1,
                this._autoScrollAccumulatedTime = this._autoScrollTotalTime
            },
            setContentPosition: function(t) {
                t.fuzzyEquals(this.getContentPosition(), 1e-4) || (this.content.setPosition(t),
                this._outOfBoundaryAmountDirty = !0)
            },
            getContentPosition: function() {
                return this.content.getPosition()
            },
            isScrolling: function() {
                return this._scrolling
            },
            isAutoScrolling: function() {
                return this._autoScrolling
            },
            _registerEvent: function() {
                this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, !0),
                this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, !0),
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, !0),
                this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, !0),
                this.node.on(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, !0)
            },
            _unregisterEvent: function() {
                this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this, !0),
                this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this, !0),
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this, !0),
                this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this, !0),
                this.node.off(cc.Node.EventType.MOUSE_WHEEL, this._onMouseWheel, this, !0)
            },
            _onMouseWheel: function(t, e) {
                if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                    var i = cc.v2(0, 0)
                      , n = -.1;
                    cc.sys.os === cc.sys.OS_WINDOWS && cc.sys.browserType === cc.sys.BROWSER_TYPE_FIREFOX && (n = -.1 / 3),
                    this.vertical ? i = cc.v2(0, t.getScrollY() * n) : this.horizontal && (i = cc.v2(t.getScrollY() * n, 0)),
                    this._mouseWheelEventElapsedTime = 0,
                    this._processDeltaMove(i),
                    this._stopMouseWheel || (this._handlePressLogic(),
                    this.schedule(this._checkMouseWheel, 1 / 60),
                    this._stopMouseWheel = !0),
                    this._stopPropagationIfTargetIsMe(t)
                }
            },
            _checkMouseWheel: function(t) {
                if (!this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4))
                    return this._processInertiaScroll(),
                    this.unschedule(this._checkMouseWheel),
                    this._dispatchEvent("scroll-ended"),
                    void (this._stopMouseWheel = !1);
                this._mouseWheelEventElapsedTime += t,
                this._mouseWheelEventElapsedTime > .1 && (this._onScrollBarTouchEnded(),
                this.unschedule(this._checkMouseWheel),
                this._dispatchEvent("scroll-ended"),
                this._stopMouseWheel = !1)
            },
            _calculateMovePercentDelta: function(t) {
                var e = t.anchor
                  , i = t.applyToHorizontal
                  , n = t.applyToVertical;
                this._calculateBoundary(),
                e = e.clampf(cc.v2(0, 0), cc.v2(1, 1));
                var r = this._view.getContentSize()
                  , s = this.content.getContentSize()
                  , a = this._getContentBottomBoundary() - this._bottomBoundary;
                a = -a;
                var o = this._getContentLeftBoundary() - this._leftBoundary;
                o = -o;
                var l = cc.v2(0, 0)
                  , h = 0;
                return i && (h = s.width - r.width,
                l.x = o - h * e.x),
                n && (h = s.height - r.height,
                l.y = a - h * e.y),
                l
            },
            _moveContentToTopLeft: function(t) {
                var e = this.content.getContentSize()
                  , i = this._getContentBottomBoundary() - this._bottomBoundary;
                i = -i;
                var n = cc.v2(0, 0)
                  , r = 0
                  , s = this._getContentLeftBoundary() - this._leftBoundary;
                s = -s,
                e.height < t.height && (r = e.height - t.height,
                n.y = i - r),
                e.width < t.width && (r = e.width - t.width,
                n.x = s),
                this._updateScrollBarState(),
                this._moveContent(n),
                this._adjustContentOutOfBoundary()
            },
            _calculateBoundary: function() {
                if (this.content) {
                    var t = this.content.getComponent(cc.Layout);
                    t && t.enabledInHierarchy && t.updateLayout();
                    var e = this._view.getContentSize()
                      , i = e.width * this._view.anchorX
                      , n = e.height * this._view.anchorY;
                    this._leftBoundary = -i,
                    this._bottomBoundary = -n,
                    this._rightBoundary = this._leftBoundary + e.width,
                    this._topBoundary = this._bottomBoundary + e.height,
                    this._moveContentToTopLeft(e)
                }
            },
            _hasNestedViewGroup: function(t, e) {
                if (t.eventPhase === cc.Event.CAPTURING_PHASE) {
                    if (e)
                        for (var i = 0; i < e.length; ++i) {
                            var n = e[i];
                            if (this.node === n)
                                return !!t.target.getComponent(cc.ViewGroup);
                            if (n.getComponent(cc.ViewGroup))
                                return !0
                        }
                    return !1
                }
            },
            _stopPropagationIfTargetIsMe: function(t) {
                t.eventPhase === cc.Event.AT_TARGET && t.target === this.node && t.stopPropagation()
            },
            _onTouchBegan: function(t, e) {
                if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                    var i = t.touch;
                    this.content && this._handlePressLogic(i),
                    this._touchMoved = !1,
                    this._stopPropagationIfTargetIsMe(t)
                }
            },
            _onTouchMoved: function(t, e) {
                if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                    var i = t.touch;
                    if (this.content && this._handleMoveLogic(i),
                    this.cancelInnerEvents) {
                        if (i.getLocation().sub(i.getStartLocation()).mag() > 7 && !this._touchMoved && t.target !== this.node) {
                            var n = new cc.Event.EventTouch(t.getTouches(),t.bubbles);
                            n.type = cc.Node.EventType.TOUCH_CANCEL,
                            n.touch = t.touch,
                            n.simulate = !0,
                            t.target.dispatchEvent(n),
                            this._touchMoved = !0
                        }
                        this._stopPropagationIfTargetIsMe(t)
                    }
                }
            },
            _onTouchEnded: function(t, e) {
                if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                    this._dispatchEvent("touch-up");
                    var i = t.touch;
                    this.content && this._handleReleaseLogic(i),
                    this._touchMoved ? t.stopPropagation() : this._stopPropagationIfTargetIsMe(t)
                }
            },
            _onTouchCancelled: function(t, e) {
                if (this.enabledInHierarchy && !this._hasNestedViewGroup(t, e)) {
                    if (!t.simulate) {
                        var i = t.touch;
                        this.content && this._handleReleaseLogic(i)
                    }
                    this._stopPropagationIfTargetIsMe(t)
                }
            },
            _processDeltaMove: function(t) {
                this._scrollChildren(t),
                this._gatherTouchMove(t)
            },
            _getLocalAxisAlignDelta: function(t) {
                return this.node.convertToNodeSpaceAR(t.getLocation(), n),
                this.node.convertToNodeSpaceAR(t.getPreviousLocation(), r),
                n.sub(r)
            },
            _handleMoveLogic: function(t) {
                var e = this._getLocalAxisAlignDelta(t);
                this._processDeltaMove(e)
            },
            _scrollChildren: function(t) {
                var e, i = t = this._clampDelta(t);
                this.elastic && (e = this._getHowMuchOutOfBoundary(),
                i.x *= 0 === e.x ? 1 : .5,
                i.y *= 0 === e.y ? 1 : .5),
                this.elastic || (e = this._getHowMuchOutOfBoundary(i),
                i = i.add(e));
                var n = -1;
                i.y > 0 ? this.content.y - this.content.anchorY * this.content.height + i.y >= this._bottomBoundary && (n = "scroll-to-bottom") : i.y < 0 && this.content.y - this.content.anchorY * this.content.height + this.content.height + i.y <= this._topBoundary && (n = "scroll-to-top"),
                i.x < 0 ? this.content.x - this.content.anchorX * this.content.width + this.content.width + i.x <= this._rightBoundary && (n = "scroll-to-right") : i.x > 0 && this.content.x - this.content.anchorX * this.content.width + i.x >= this._leftBoundary && (n = "scroll-to-left"),
                this._moveContent(i, !1),
                0 === i.x && 0 === i.y || (this._scrolling || (this._scrolling = !0,
                this._dispatchEvent("scroll-began")),
                this._dispatchEvent("scrolling")),
                -1 !== n && this._dispatchEvent(n)
            },
            _handlePressLogic: function() {
                this._autoScrolling && this._dispatchEvent("scroll-ended"),
                this._autoScrolling = !1,
                this._isBouncing = !1,
                this._touchMovePreviousTimestamp = s(),
                this._touchMoveDisplacements.length = 0,
                this._touchMoveTimeDeltas.length = 0,
                this._onScrollBarTouchBegan()
            },
            _clampDelta: function(t) {
                var e = this.content.getContentSize()
                  , i = this._view.getContentSize();
                return e.width < i.width && (t.x = 0),
                e.height < i.height && (t.y = 0),
                t
            },
            _gatherTouchMove: function(t) {
                for (t = this._clampDelta(t); this._touchMoveDisplacements.length >= 5; )
                    this._touchMoveDisplacements.shift(),
                    this._touchMoveTimeDeltas.shift();
                this._touchMoveDisplacements.push(t);
                var e = s();
                this._touchMoveTimeDeltas.push((e - this._touchMovePreviousTimestamp) / 1e3),
                this._touchMovePreviousTimestamp = e
            },
            _startBounceBackIfNeeded: function() {
                if (!this.elastic)
                    return !1;
                var t = this._getHowMuchOutOfBoundary();
                if ((t = this._clampDelta(t)).fuzzyEquals(cc.v2(0, 0), 1e-4))
                    return !1;
                var e = Math.max(this.bounceDuration, 0);
                return this._startAutoScroll(t, e, !0),
                this._isBouncing || (t.y > 0 && this._dispatchEvent("bounce-top"),
                t.y < 0 && this._dispatchEvent("bounce-bottom"),
                t.x > 0 && this._dispatchEvent("bounce-right"),
                t.x < 0 && this._dispatchEvent("bounce-left"),
                this._isBouncing = !0),
                !0
            },
            _processInertiaScroll: function() {
                if (!this._startBounceBackIfNeeded() && this.inertia) {
                    var t = this._calculateTouchMoveVelocity();
                    !t.fuzzyEquals(cc.v2(0, 0), 1e-4) && this.brake < 1 && this._startInertiaScroll(t)
                }
                this._onScrollBarTouchEnded()
            },
            _handleReleaseLogic: function(t) {
                var e = this._getLocalAxisAlignDelta(t);
                this._gatherTouchMove(e),
                this._processInertiaScroll(),
                this._scrolling && (this._scrolling = !1,
                this._autoScrolling || this._dispatchEvent("scroll-ended"))
            },
            _isOutOfBoundary: function() {
                return !this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4)
            },
            _isNecessaryAutoScrollBrake: function() {
                if (this._autoScrollBraking)
                    return !0;
                if (this._isOutOfBoundary()) {
                    if (!this._autoScrollCurrentlyOutOfBoundary)
                        return this._autoScrollCurrentlyOutOfBoundary = !0,
                        this._autoScrollBraking = !0,
                        this._autoScrollBrakingStartPosition = this.getContentPosition(),
                        !0
                } else
                    this._autoScrollCurrentlyOutOfBoundary = !1;
                return !1
            },
            getScrollEndedEventTiming: function() {
                return 1e-4
            },
            _processAutoScrolling: function(t) {
                var e = this._isNecessaryAutoScrollBrake()
                  , i = e ? .05 : 1;
                this._autoScrollAccumulatedTime += t * (1 / i);
                var n, r = Math.min(1, this._autoScrollAccumulatedTime / this._autoScrollTotalTime);
                this._autoScrollAttenuate && (n = r,
                r = (n -= 1) * n * n * n * n + 1);
                var s = this._autoScrollStartPosition.add(this._autoScrollTargetDelta.mul(r))
                  , a = Math.abs(r - 1) <= 1e-4;
                if (Math.abs(r - 1) <= this.getScrollEndedEventTiming() && !this._isScrollEndedWithThresholdEventFired && (this._dispatchEvent("scroll-ended-with-threshold"),
                this._isScrollEndedWithThresholdEventFired = !0),
                this.elastic) {
                    var o = s.sub(this._autoScrollBrakingStartPosition);
                    e && (o = o.mul(i)),
                    s = this._autoScrollBrakingStartPosition.add(o)
                } else {
                    var l = s.sub(this.getContentPosition())
                      , h = this._getHowMuchOutOfBoundary(l);
                    h.fuzzyEquals(cc.v2(0, 0), 1e-4) || (s = s.add(h),
                    a = !0)
                }
                a && (this._autoScrolling = !1);
                var c = s.sub(this.getContentPosition());
                this._moveContent(this._clampDelta(c), a),
                this._dispatchEvent("scrolling"),
                this._autoScrolling || (this._isBouncing = !1,
                this._scrolling = !1,
                this._dispatchEvent("scroll-ended"))
            },
            _startInertiaScroll: function(t) {
                var e = t.mul(.7);
                this._startAttenuatingAutoScroll(e, t)
            },
            _calculateAttenuatedFactor: function(t) {
                return this.brake <= 0 ? 1 - this.brake : (1 - this.brake) * (1 / (1 + 14e-6 * t + t * t * 8e-9))
            },
            _startAttenuatingAutoScroll: function(t, e) {
                var i = this._calculateAutoScrollTimeByInitalSpeed(e.mag())
                  , n = t.normalize()
                  , r = this.content.getContentSize()
                  , s = this._view.getContentSize()
                  , a = r.width - s.width
                  , o = r.height - s.height
                  , l = this._calculateAttenuatedFactor(a)
                  , h = this._calculateAttenuatedFactor(o);
                n = cc.v2(n.x * a * (1 - this.brake) * l, n.y * o * h * (1 - this.brake));
                var c = t.mag()
                  , u = n.mag() / c;
                n = n.add(t),
                this.brake > 0 && u > 7 && (u = Math.sqrt(u),
                n = t.mul(u).add(t)),
                this.brake > 0 && u > 3 && (i *= u = 3),
                0 === this.brake && u > 1 && (i *= u),
                this._startAutoScroll(n, i, !0)
            },
            _calculateAutoScrollTimeByInitalSpeed: function(t) {
                return Math.sqrt(Math.sqrt(t / 5))
            },
            _startAutoScroll: function(t, e, i) {
                var n = this._flattenVectorByDirection(t);
                this._autoScrolling = !0,
                this._autoScrollTargetDelta = n,
                this._autoScrollAttenuate = i,
                this._autoScrollStartPosition = this.getContentPosition(),
                this._autoScrollTotalTime = e,
                this._autoScrollAccumulatedTime = 0,
                this._autoScrollBraking = !1,
                this._isScrollEndedWithThresholdEventFired = !1,
                this._autoScrollBrakingStartPosition = cc.v2(0, 0),
                this._getHowMuchOutOfBoundary().fuzzyEquals(cc.v2(0, 0), 1e-4) || (this._autoScrollCurrentlyOutOfBoundary = !0)
            },
            _calculateTouchMoveVelocity: function() {
                var t = 0;
                if ((t = this._touchMoveTimeDeltas.reduce((function(t, e) {
                    return t + e
                }
                ), t)) <= 0 || t >= .5)
                    return cc.v2(0, 0);
                var e = cc.v2(0, 0);
                return e = this._touchMoveDisplacements.reduce((function(t, e) {
                    return t.add(e)
                }
                ), e),
                cc.v2(e.x * (1 - this.brake) / t, e.y * (1 - this.brake) / t)
            },
            _flattenVectorByDirection: function(t) {
                var e = t;
                return e.x = this.horizontal ? e.x : 0,
                e.y = this.vertical ? e.y : 0,
                e
            },
            _moveContent: function(t, e) {
                var i = this._flattenVectorByDirection(t)
                  , n = this.getContentPosition().add(i);
                this.setContentPosition(n);
                var r = this._getHowMuchOutOfBoundary();
                this._updateScrollBar(r),
                this.elastic && e && this._startBounceBackIfNeeded()
            },
            _getContentLeftBoundary: function() {
                return this.getContentPosition().x - this.content.getAnchorPoint().x * this.content.getContentSize().width
            },
            _getContentRightBoundary: function() {
                var t = this.content.getContentSize();
                return this._getContentLeftBoundary() + t.width
            },
            _getContentTopBoundary: function() {
                var t = this.content.getContentSize();
                return this._getContentBottomBoundary() + t.height
            },
            _getContentBottomBoundary: function() {
                return this.getContentPosition().y - this.content.getAnchorPoint().y * this.content.getContentSize().height
            },
            _getHowMuchOutOfBoundary: function(t) {
                if ((t = t || cc.v2(0, 0)).fuzzyEquals(cc.v2(0, 0), 1e-4) && !this._outOfBoundaryAmountDirty)
                    return this._outOfBoundaryAmount;
                var e = cc.v2(0, 0);
                return this._getContentLeftBoundary() + t.x > this._leftBoundary ? e.x = this._leftBoundary - (this._getContentLeftBoundary() + t.x) : this._getContentRightBoundary() + t.x < this._rightBoundary && (e.x = this._rightBoundary - (this._getContentRightBoundary() + t.x)),
                this._getContentTopBoundary() + t.y < this._topBoundary ? e.y = this._topBoundary - (this._getContentTopBoundary() + t.y) : this._getContentBottomBoundary() + t.y > this._bottomBoundary && (e.y = this._bottomBoundary - (this._getContentBottomBoundary() + t.y)),
                t.fuzzyEquals(cc.v2(0, 0), 1e-4) && (this._outOfBoundaryAmount = e,
                this._outOfBoundaryAmountDirty = !1),
                this._clampDelta(e)
            },
            _updateScrollBarState: function() {
                if (this.content) {
                    var t = this.content.getContentSize()
                      , e = this._view.getContentSize();
                    this.verticalScrollBar && (t.height < e.height ? this.verticalScrollBar.hide() : this.verticalScrollBar.show()),
                    this.horizontalScrollBar && (t.width < e.width ? this.horizontalScrollBar.hide() : this.horizontalScrollBar.show())
                }
            },
            _updateScrollBar: function(t) {
                this.horizontalScrollBar && this.horizontalScrollBar._onScroll(t),
                this.verticalScrollBar && this.verticalScrollBar._onScroll(t)
            },
            _onScrollBarTouchBegan: function() {
                this.horizontalScrollBar && this.horizontalScrollBar._onTouchBegan(),
                this.verticalScrollBar && this.verticalScrollBar._onTouchBegan()
            },
            _onScrollBarTouchEnded: function() {
                this.horizontalScrollBar && this.horizontalScrollBar._onTouchEnded(),
                this.verticalScrollBar && this.verticalScrollBar._onTouchEnded()
            },
            _dispatchEvent: function(t) {
                if ("scroll-ended" === t)
                    this._scrollEventEmitMask = 0;
                else if ("scroll-to-top" === t || "scroll-to-bottom" === t || "scroll-to-left" === t || "scroll-to-right" === t) {
                    var e = 1 << o[t];
                    if (this._scrollEventEmitMask & e)
                        return;
                    this._scrollEventEmitMask |= e
                }
                cc.Component.EventHandler.emitEvents(this.scrollEvents, this, o[t]),
                this.node.emit(t, this)
            },
            _adjustContentOutOfBoundary: function() {
                if (this._outOfBoundaryAmountDirty = !0,
                this._isOutOfBoundary()) {
                    var t = this._getHowMuchOutOfBoundary(cc.v2(0, 0))
                      , e = this.getContentPosition().add(t);
                    this.content && (this.content.setPosition(e),
                    this._updateScrollBar(0))
                }
            },
            start: function() {
                this._calculateBoundary(),
                this.content && cc.director.once(cc.Director.EVENT_BEFORE_DRAW, this._adjustContentOutOfBoundary, this)
            },
            _hideScrollbar: function() {
                this.horizontalScrollBar && this.horizontalScrollBar.hide(),
                this.verticalScrollBar && this.verticalScrollBar.hide()
            },
            onDisable: function() {
                this._unregisterEvent(),
                this.content && (this.content.off(i.SIZE_CHANGED, this._calculateBoundary, this),
                this.content.off(i.SCALE_CHANGED, this._calculateBoundary, this),
                this._view && (this._view.off(i.POSITION_CHANGED, this._calculateBoundary, this),
                this._view.off(i.SCALE_CHANGED, this._calculateBoundary, this),
                this._view.off(i.SIZE_CHANGED, this._calculateBoundary, this))),
                this._hideScrollbar(),
                this.stopAutoScroll()
            },
            onEnable: function() {
                this._registerEvent(),
                this.content && (this.content.on(i.SIZE_CHANGED, this._calculateBoundary, this),
                this.content.on(i.SCALE_CHANGED, this._calculateBoundary, this),
                this._view && (this._view.on(i.POSITION_CHANGED, this._calculateBoundary, this),
                this._view.on(i.SCALE_CHANGED, this._calculateBoundary, this),
                this._view.on(i.SIZE_CHANGED, this._calculateBoundary, this))),
                this._updateScrollBarState()
            },
            update: function(t) {
                this._autoScrolling && this._processAutoScrolling(t)
            }
        });
        cc.ScrollView = e.exports = l
    }
    ), {
        "../CCNode": 29,
        "./CCViewGroup": 125
    }],
    119: [(function(t, e) {
        "use strict";
        var i = t("../utils/misc")
          , n = t("./CCComponent")
          , r = cc.Enum({
            Horizontal: 0,
            Vertical: 1
        })
          , s = cc.Class({
            name: "cc.Slider",
            extends: n,
            editor: !1,
            ctor: function() {
                this._offset = cc.v2(),
                this._touchHandle = !1,
                this._dragging = !1
            },
            properties: {
                handle: {
                    default: null,
                    type: cc.Button,
                    tooltip: !1,
                    notify: function() {}
                },
                direction: {
                    default: r.Horizontal,
                    type: r,
                    tooltip: !1
                },
                progress: {
                    default: .5,
                    type: cc.Float,
                    range: [0, 1, .1],
                    slide: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateHandlePosition()
                    }
                },
                slideEvents: {
                    default: [],
                    type: cc.Component.EventHandler,
                    tooltip: !1
                }
            },
            statics: {
                Direction: r
            },
            __preload: function() {
                this._updateHandlePosition()
            },
            onEnable: function() {
                this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this),
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this),
                this.handle && this.handle.isValid && (this.handle.node.on(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this),
                this.handle.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this),
                this.handle.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this))
            },
            onDisable: function() {
                this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this),
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this),
                this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancelled, this),
                this.handle && this.handle.isValid && (this.handle.node.off(cc.Node.EventType.TOUCH_START, this._onHandleDragStart, this),
                this.handle.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this),
                this.handle.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this))
            },
            _onHandleDragStart: function(t) {
                this._dragging = !0,
                this._touchHandle = !0,
                this._offset = this.handle.node.convertToNodeSpaceAR(t.touch.getLocation()),
                t.stopPropagation()
            },
            _onTouchBegan: function(t) {
                this.handle && (this._dragging = !0,
                this._touchHandle || this._handleSliderLogic(t.touch),
                t.stopPropagation())
            },
            _onTouchMoved: function(t) {
                this._dragging && (this._handleSliderLogic(t.touch),
                t.stopPropagation())
            },
            _onTouchEnded: function(t) {
                this._dragging = !1,
                this._touchHandle = !1,
                this._offset = cc.v2(),
                t.stopPropagation()
            },
            _onTouchCancelled: function(t) {
                this._dragging = !1,
                t.stopPropagation()
            },
            _handleSliderLogic: function(t) {
                this._updateProgress(t),
                this._emitSlideEvent()
            },
            _emitSlideEvent: function() {
                cc.Component.EventHandler.emitEvents(this.slideEvents, this),
                this.node.emit("slide", this)
            },
            _updateProgress: function(t) {
                if (this.handle) {
                    var e = this.node
                      , n = e.convertToNodeSpaceAR(t.getLocation());
                    this.direction === r.Horizontal ? this.progress = i.clamp01((n.x - this._offset.x + e.anchorX * e.width) / e.width) : this.progress = i.clamp01((n.y - this._offset.y + e.anchorY * e.height) / e.height)
                }
            },
            _updateHandlePosition: function() {
                if (this.handle) {
                    var t;
                    t = this.direction === r.Horizontal ? cc.v2(-this.node.width * this.node.anchorX + this.progress * this.node.width, 0) : cc.v2(0, -this.node.height * this.node.anchorY + this.progress * this.node.height);
                    var e = this.node.convertToWorldSpaceAR(t);
                    this.handle.node.position = this.handle.node.parent.convertToNodeSpaceAR(e)
                }
            }
        });
        cc.Slider = e.exports = s
    }
    ), {
        "../utils/misc": 267,
        "./CCComponent": 105
    }],
    120: [(function(t, e) {
        "use strict";
        var i = t("../utils/misc")
          , n = (t("../CCNode").EventType,
        t("./CCRenderComponent"))
          , r = t("../utils/blend-func")
          , s = cc.Enum({
            SIMPLE: 0,
            SLICED: 1,
            TILED: 2,
            FILLED: 3,
            MESH: 4
        })
          , a = cc.Enum({
            HORIZONTAL: 0,
            VERTICAL: 1,
            RADIAL: 2
        })
          , o = cc.Enum({
            CUSTOM: 0,
            TRIMMED: 1,
            RAW: 2
        })
          , l = cc.Enum({
            NORMAL: 0,
            GRAY: 1
        })
          , h = cc.Class({
            name: "cc.Sprite",
            extends: n,
            mixins: [r],
            editor: !1,
            properties: {
                _spriteFrame: {
                    default: null,
                    type: cc.SpriteFrame
                },
                _type: s.SIMPLE,
                _sizeMode: o.TRIMMED,
                _fillType: 0,
                _fillCenter: cc.v2(0, 0),
                _fillStart: 0,
                _fillRange: 0,
                _isTrimmedMode: !0,
                _atlas: {
                    default: null,
                    type: cc.SpriteAtlas,
                    tooltip: !1,
                    editorOnly: !0,
                    visible: !0,
                    animatable: !1
                },
                spriteFrame: {
                    get: function() {
                        return this._spriteFrame
                    },
                    set: function(t) {
                        var e = this._spriteFrame;
                        e !== t && (this._spriteFrame = t,
                        this._applySpriteFrame(e))
                    },
                    type: cc.SpriteFrame
                },
                type: {
                    get: function() {
                        return this._type
                    },
                    set: function(t) {
                        this._type !== t && (this._type = t,
                        this.setVertsDirty(),
                        this._resetAssembler())
                    },
                    type: s,
                    animatable: !1,
                    tooltip: !1
                },
                fillType: {
                    get: function() {
                        return this._fillType
                    },
                    set: function(t) {
                        t !== this._fillType && (this._fillType = t,
                        this.setVertsDirty(),
                        this._resetAssembler())
                    },
                    type: a,
                    tooltip: !1
                },
                fillCenter: {
                    get: function() {
                        return this._fillCenter
                    },
                    set: function(t) {
                        this._fillCenter.x = t.x,
                        this._fillCenter.y = t.y,
                        this._type === s.FILLED && this.setVertsDirty()
                    },
                    tooltip: !1
                },
                fillStart: {
                    get: function() {
                        return this._fillStart
                    },
                    set: function(t) {
                        this._fillStart = i.clampf(t, -1, 1),
                        this._type === s.FILLED && this.setVertsDirty()
                    },
                    tooltip: !1
                },
                fillRange: {
                    get: function() {
                        return this._fillRange
                    },
                    set: function(t) {
                        this._fillRange = i.clampf(t, -1, 1),
                        this._type === s.FILLED && this.setVertsDirty()
                    },
                    tooltip: !1
                },
                trim: {
                    get: function() {
                        return this._isTrimmedMode
                    },
                    set: function(t) {
                        this._isTrimmedMode !== t && (this._isTrimmedMode = t,
                        this._type !== s.SIMPLE && this._type !== s.MESH || this.setVertsDirty())
                    },
                    animatable: !1,
                    tooltip: !1
                },
                sizeMode: {
                    get: function() {
                        return this._sizeMode
                    },
                    set: function(t) {
                        this._sizeMode = t,
                        t !== o.CUSTOM && this._applySpriteSize()
                    },
                    animatable: !1,
                    type: o,
                    tooltip: !1
                }
            },
            statics: {
                FillType: a,
                Type: s,
                SizeMode: o,
                State: l
            },
            setVisible: function(t) {
                this.enabled = t
            },
            setState: function() {},
            getState: function() {},
            __preload: function() {
                this._super(),
                this._applySpriteFrame()
            },
            onEnable: function() {
                this._super(),
                this._spriteFrame && this._spriteFrame.ensureLoadTexture(),
                this.node.on(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this),
                this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this)
            },
            onDisable: function() {
                this._super(),
                this.node.off(cc.Node.EventType.SIZE_CHANGED, this.setVertsDirty, this),
                this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this.setVertsDirty, this)
            },
            _updateMaterial: function() {
                var t = null;
                this._spriteFrame && (t = this._spriteFrame.getTexture());
                var e = this.getMaterial(0);
                e && (void 0 !== e.getDefine("USE_TEXTURE") && e.define("USE_TEXTURE", !0),
                e.getProperty("texture") !== t && e.setProperty("texture", t)),
                r.prototype._updateMaterial.call(this)
            },
            _applyAtlas: !1,
            _validateRender: function() {
                var t = this._spriteFrame;
                this._materials[0] && t && t.textureLoaded() || this.disableRender()
            },
            _applySpriteSize: function() {
                if (this._spriteFrame && this.isValid) {
                    if (o.RAW === this._sizeMode) {
                        var t = this._spriteFrame._originalSize;
                        this.node.setContentSize(t)
                    } else if (o.TRIMMED === this._sizeMode) {
                        var e = this._spriteFrame._rect;
                        this.node.setContentSize(e.width, e.height)
                    }
                    this.setVertsDirty()
                }
            },
            _applySpriteFrame: function(t) {
                if (this.isValid) {
                    var e = t && t.getTexture();
                    e && !e.loaded && t.off("load", this._applySpriteSize, this),
                    this._updateMaterial();
                    var i = this._spriteFrame;
                    if (i) {
                        var n = i.getTexture();
                        n && n.loaded ? this._applySpriteSize() : (this.disableRender(),
                        i.once("load", this._applySpriteSize, this))
                    } else
                        this.disableRender()
                }
            }
        });
        cc.Sprite = e.exports = h
    }
    ), {
        "../CCNode": 29,
        "../utils/blend-func": 261,
        "../utils/misc": 267,
        "./CCRenderComponent": 115
    }],
    121: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            NONE: 0,
            CHECKBOX: 1,
            TEXT_ATLAS: 2,
            SLIDER_BAR: 3,
            LIST_VIEW: 4,
            PAGE_VIEW: 5
        })
          , n = cc.Enum({
            VERTICAL: 0,
            HORIZONTAL: 1
        })
          , r = cc.Enum({
            TOP: 0,
            CENTER: 1,
            BOTTOM: 2
        })
          , s = cc.Enum({
            LEFT: 0,
            CENTER: 1,
            RIGHT: 2
        })
          , a = cc.Class({
            name: "cc.StudioComponent",
            extends: cc.Component,
            editor: !1,
            properties: !1,
            statics: {
                ComponentType: i,
                ListDirection: n,
                VerticalAlign: r,
                HorizontalAlign: s
            }
        });
        cc.StudioComponent = e.exports = a;
        var o = cc.Class({
            name: "cc.StudioWidget",
            extends: cc.Widget,
            editor: !1,
            _validateTargetInDEV: function() {}
        });
        cc.StudioWidget = e.exports = o
    }
    ), {}],
    122: [(function(t, e) {
        "use strict";
        var i = t("../utils/gray-sprite-state")
          , n = cc.Class({
            name: "cc.Toggle",
            extends: t("./CCButton"),
            mixins: [i],
            editor: !1,
            properties: {
                _N$isChecked: !0,
                isChecked: {
                    get: function() {
                        return this._N$isChecked
                    },
                    set: function(t) {
                        if (t !== this._N$isChecked) {
                            var e = this.toggleGroup || this._toggleContainer;
                            e && e.enabled && this._N$isChecked && !e.allowSwitchOff || (this._N$isChecked = t,
                            this._updateCheckMark(),
                            e && e.enabled && e.updateToggles(this),
                            cc.Toggle._triggerEventInScript_isChecked && this._emitToggleEvents())
                        }
                    },
                    tooltip: !1
                },
                toggleGroup: {
                    default: null,
                    tooltip: !1,
                    type: t("./CCToggleGroup")
                },
                checkMark: {
                    default: null,
                    type: cc.Sprite,
                    tooltip: !1
                },
                checkEvents: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                _resizeToTarget: {
                    animatable: !1,
                    set: function(t) {
                        t && this._resizeNodeToTargetNode()
                    }
                }
            },
            statics: {
                _triggerEventInScript_check: !1,
                _triggerEventInScript_isChecked: !1
            },
            onEnable: function() {
                this._super(),
                this._registerToggleEvent(),
                this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.addToggle(this)
            },
            onDisable: function() {
                this._super(),
                this._unregisterToggleEvent(),
                this.toggleGroup && this.toggleGroup.enabledInHierarchy && this.toggleGroup.removeToggle(this)
            },
            _hideCheckMark: function() {
                this._N$isChecked = !1,
                this._updateCheckMark()
            },
            toggle: function(t) {
                this.isChecked = !this.isChecked,
                cc.Toggle._triggerEventInScript_isChecked || !cc.Toggle._triggerEventInScript_check && !t || this._emitToggleEvents()
            },
            check: function() {
                this.isChecked = !0,
                !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents()
            },
            uncheck: function() {
                this.isChecked = !1,
                !cc.Toggle._triggerEventInScript_isChecked && cc.Toggle._triggerEventInScript_check && this._emitToggleEvents()
            },
            _updateCheckMark: function() {
                this.checkMark && (this.checkMark.node.active = !!this.isChecked)
            },
            _updateDisabledState: function() {
                if (this._super(),
                this.enableAutoGrayEffect && this.checkMark) {
                    var t = !this.interactable;
                    this._switchGrayMaterial(t, this.checkMark)
                }
            },
            _registerToggleEvent: function() {
                this.node.on("click", this.toggle, this)
            },
            _unregisterToggleEvent: function() {
                this.node.off("click", this.toggle, this)
            },
            _emitToggleEvents: function() {
                this.node.emit("toggle", this),
                this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, this)
            }
        });
        cc.Toggle = e.exports = n,
        t("../platform/js").get(n.prototype, "_toggleContainer", (function() {
            var t = this.node.parent;
            return cc.Node.isNode(t) ? t.getComponent(cc.ToggleContainer) : null
        }
        ))
    }
    ), {
        "../platform/js": 214,
        "../utils/gray-sprite-state": 264,
        "./CCButton": 103,
        "./CCToggleGroup": 124
    }],
    123: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.ToggleContainer",
            extends: cc.Component,
            editor: !1,
            properties: {
                allowSwitchOff: {
                    tooltip: !1,
                    default: !1
                },
                checkEvents: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            updateToggles: function(t) {
                this.enabledInHierarchy && t.isChecked && (this.toggleItems.forEach((function(e) {
                    e !== t && e.isChecked && e.enabled && e._hideCheckMark()
                }
                )),
                this.checkEvents && cc.Component.EventHandler.emitEvents(this.checkEvents, t))
            },
            _allowOnlyOneToggleChecked: function() {
                var t = !1;
                return this.toggleItems.forEach((function(e) {
                    t ? e._hideCheckMark() : e.isChecked && (t = !0)
                }
                )),
                t
            },
            _makeAtLeastOneToggleChecked: function() {
                if (!this._allowOnlyOneToggleChecked() && !this.allowSwitchOff) {
                    var t = this.toggleItems;
                    t.length > 0 && t[0].check()
                }
            },
            onEnable: function() {
                this._makeAtLeastOneToggleChecked(),
                this.node.on("child-added", this._allowOnlyOneToggleChecked, this),
                this.node.on("child-removed", this._makeAtLeastOneToggleChecked, this)
            },
            onDisable: function() {
                this.node.off("child-added", this._allowOnlyOneToggleChecked, this),
                this.node.off("child-removed", this._makeAtLeastOneToggleChecked, this)
            }
        });
        t("../platform/js").get(i.prototype, "toggleItems", (function() {
            return this.node._children.map((function(t) {
                return t.getComponent(cc.Toggle)
            }
            )).filter(Boolean)
        }
        )),
        cc.ToggleContainer = e.exports = i
    }
    ), {
        "../platform/js": 214
    }],
    124: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.ToggleGroup",
            extends: cc.Component,
            ctor: function() {
                this._toggleItems = []
            },
            editor: !1,
            properties: {
                allowSwitchOff: {
                    tooltip: !1,
                    default: !1
                },
                toggleItems: {
                    get: function() {
                        return this._toggleItems
                    }
                }
            },
            updateToggles: function(t) {
                this.enabledInHierarchy && this._toggleItems.forEach((function(e) {
                    t.isChecked && e !== t && e.isChecked && e.enabled && e._hideCheckMark()
                }
                ))
            },
            addToggle: function(t) {
                -1 === this._toggleItems.indexOf(t) && this._toggleItems.push(t),
                this._allowOnlyOneToggleChecked()
            },
            removeToggle: function(t) {
                var e = this._toggleItems.indexOf(t);
                e > -1 && this._toggleItems.splice(e, 1),
                this._makeAtLeastOneToggleChecked()
            },
            _allowOnlyOneToggleChecked: function() {
                var t = !1;
                return this._toggleItems.forEach((function(e) {
                    t && e.enabled && e._hideCheckMark(),
                    e.isChecked && e.enabled && (t = !0)
                }
                )),
                t
            },
            _makeAtLeastOneToggleChecked: function() {
                this._allowOnlyOneToggleChecked() || this.allowSwitchOff || this._toggleItems.length > 0 && (this._toggleItems[0].isChecked = !0)
            },
            start: function() {
                this._makeAtLeastOneToggleChecked()
            }
        })
          , n = t("../platform/js")
          , r = !1;
        n.get(cc, "ToggleGroup", (function() {
            return r || (cc.errorID(1405, "cc.ToggleGroup", "cc.ToggleContainer"),
            r = !0),
            i
        }
        )),
        e.exports = i
    }
    ), {
        "../platform/js": 214
    }],
    125: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.ViewGroup",
            extends: t("./CCComponent")
        });
        cc.ViewGroup = e.exports = i
    }
    ), {
        "./CCComponent": 105
    }],
    126: [(function(t, e) {
        "use strict";
        var i = t("../base-ui/CCWidgetManager")
          , n = i.AlignMode
          , r = i._AlignFlags
          , s = r.TOP
          , a = r.MID
          , o = r.BOT
          , l = r.LEFT
          , h = r.CENTER
          , c = r.RIGHT
          , u = s | o
          , _ = l | c
          , f = cc.Class({
            name: "cc.Widget",
            extends: t("./CCComponent"),
            editor: !1,
            properties: {
                target: {
                    get: function() {
                        return this._target
                    },
                    set: function(t) {
                        this._target = t
                    },
                    type: cc.Node,
                    tooltip: !1
                },
                isAlignTop: {
                    get: function() {
                        return (this._alignFlags & s) > 0
                    },
                    set: function(t) {
                        this._setAlign(s, t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isAlignVerticalCenter: {
                    get: function() {
                        return (this._alignFlags & a) > 0
                    },
                    set: function(t) {
                        t ? (this.isAlignTop = !1,
                        this.isAlignBottom = !1,
                        this._alignFlags |= a) : this._alignFlags &= ~a
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isAlignBottom: {
                    get: function() {
                        return (this._alignFlags & o) > 0
                    },
                    set: function(t) {
                        this._setAlign(o, t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isAlignLeft: {
                    get: function() {
                        return (this._alignFlags & l) > 0
                    },
                    set: function(t) {
                        this._setAlign(l, t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isAlignHorizontalCenter: {
                    get: function() {
                        return (this._alignFlags & h) > 0
                    },
                    set: function(t) {
                        t ? (this.isAlignLeft = !1,
                        this.isAlignRight = !1,
                        this._alignFlags |= h) : this._alignFlags &= ~h
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isAlignRight: {
                    get: function() {
                        return (this._alignFlags & c) > 0
                    },
                    set: function(t) {
                        this._setAlign(c, t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                isStretchWidth: {
                    get: function() {
                        return (this._alignFlags & _) === _
                    },
                    visible: !1
                },
                isStretchHeight: {
                    get: function() {
                        return (this._alignFlags & u) === u
                    },
                    visible: !1
                },
                top: {
                    get: function() {
                        return this._top
                    },
                    set: function(t) {
                        this._top = t
                    },
                    tooltip: !1
                },
                bottom: {
                    get: function() {
                        return this._bottom
                    },
                    set: function(t) {
                        this._bottom = t
                    },
                    tooltip: !1
                },
                left: {
                    get: function() {
                        return this._left
                    },
                    set: function(t) {
                        this._left = t
                    },
                    tooltip: !1
                },
                right: {
                    get: function() {
                        return this._right
                    },
                    set: function(t) {
                        this._right = t
                    },
                    tooltip: !1
                },
                horizontalCenter: {
                    get: function() {
                        return this._horizontalCenter
                    },
                    set: function(t) {
                        this._horizontalCenter = t
                    },
                    tooltip: !1
                },
                verticalCenter: {
                    get: function() {
                        return this._verticalCenter
                    },
                    set: function(t) {
                        this._verticalCenter = t
                    },
                    tooltip: !1
                },
                isAbsoluteHorizontalCenter: {
                    get: function() {
                        return this._isAbsHorizontalCenter
                    },
                    set: function(t) {
                        this._isAbsHorizontalCenter = t
                    },
                    animatable: !1
                },
                isAbsoluteVerticalCenter: {
                    get: function() {
                        return this._isAbsVerticalCenter
                    },
                    set: function(t) {
                        this._isAbsVerticalCenter = t
                    },
                    animatable: !1
                },
                isAbsoluteTop: {
                    get: function() {
                        return this._isAbsTop
                    },
                    set: function(t) {
                        this._isAbsTop = t
                    },
                    animatable: !1
                },
                isAbsoluteBottom: {
                    get: function() {
                        return this._isAbsBottom
                    },
                    set: function(t) {
                        this._isAbsBottom = t
                    },
                    animatable: !1
                },
                isAbsoluteLeft: {
                    get: function() {
                        return this._isAbsLeft
                    },
                    set: function(t) {
                        this._isAbsLeft = t
                    },
                    animatable: !1
                },
                isAbsoluteRight: {
                    get: function() {
                        return this._isAbsRight
                    },
                    set: function(t) {
                        this._isAbsRight = t
                    },
                    animatable: !1
                },
                alignMode: {
                    default: n.ON_WINDOW_RESIZE,
                    type: n,
                    tooltip: !1
                },
                _wasAlignOnce: {
                    default: void 0,
                    formerlySerializedAs: "isAlignOnce"
                },
                _target: null,
                _alignFlags: 0,
                _left: 0,
                _right: 0,
                _top: 0,
                _bottom: 0,
                _verticalCenter: 0,
                _horizontalCenter: 0,
                _isAbsLeft: !0,
                _isAbsRight: !0,
                _isAbsTop: !0,
                _isAbsBottom: !0,
                _isAbsHorizontalCenter: !0,
                _isAbsVerticalCenter: !0,
                _originalWidth: 0,
                _originalHeight: 0
            },
            statics: {
                AlignMode: n
            },
            onLoad: function() {
                void 0 !== this._wasAlignOnce && (this.alignMode = this._wasAlignOnce ? n.ONCE : n.ALWAYS,
                this._wasAlignOnce = void 0)
            },
            onEnable: function() {
                i.add(this)
            },
            onDisable: function() {
                i.remove(this)
            },
            _validateTargetInDEV: !1,
            _setAlign: function(t, e) {
                if (e !== (this._alignFlags & t) > 0) {
                    var i = (t & _) > 0;
                    e ? (this._alignFlags |= t,
                    i ? (this.isAlignHorizontalCenter = !1,
                    this.isStretchWidth && (this._originalWidth = this.node.width)) : (this.isAlignVerticalCenter = !1,
                    this.isStretchHeight && (this._originalHeight = this.node.height))) : (i ? this.isStretchWidth && (this.node.width = this._originalWidth) : this.isStretchHeight && (this.node.height = this._originalHeight),
                    this._alignFlags &= ~t)
                }
            },
            updateAlignment: function() {
                i.updateAlignment(this.node)
            }
        });
        Object.defineProperty(f.prototype, "isAlignOnce", {
            get: function() {
                return this.alignMode === n.ONCE
            },
            set: function(t) {
                this.alignMode = t ? n.ONCE : n.ALWAYS
            }
        }),
        cc.Widget = e.exports = f
    }
    ), {
        "../base-ui/CCWidgetManager": 89,
        "./CCComponent": 105
    }],
    127: [(function(t, e) {
        "use strict";
        var i = t("../../platform/CCMacro")
          , n = t("../editbox/EditBoxImplBase")
          , r = t("../CCLabel")
          , s = t("./types")
          , a = s.InputMode
          , o = s.InputFlag
          , l = s.KeyboardReturnType;
        function h(t) {
            return t.charAt(0).toUpperCase() + t.slice(1)
        }
        var c = cc.Class({
            name: "cc.EditBox",
            extends: cc.Component,
            editor: !1,
            properties: {
                _string: "",
                string: {
                    tooltip: !1,
                    get: function() {
                        return this._string
                    },
                    set: function(t) {
                        t = "" + t,
                        this.maxLength >= 0 && t.length >= this.maxLength && (t = t.slice(0, this.maxLength)),
                        this._string = t,
                        this._updateString(t)
                    }
                },
                textLabel: {
                    tooltip: !1,
                    default: null,
                    type: r,
                    notify: function(t) {
                        this.textLabel && this.textLabel !== t && (this._updateTextLabel(),
                        this._updateLabels())
                    }
                },
                placeholderLabel: {
                    tooltip: !1,
                    default: null,
                    type: r,
                    notify: function(t) {
                        this.placeholderLabel && this.placeholderLabel !== t && (this._updatePlaceholderLabel(),
                        this._updateLabels())
                    }
                },
                background: {
                    tooltip: !1,
                    default: null,
                    type: cc.Sprite,
                    notify: function(t) {
                        this.background && this.background !== t && this._updateBackgroundSprite()
                    }
                },
                _N$backgroundImage: {
                    default: void 0,
                    type: cc.SpriteFrame
                },
                backgroundImage: {
                    get: function() {
                        return this.background ? this.background.spriteFrame : null
                    },
                    set: function(t) {
                        this.background && (this.background.spriteFrame = t)
                    }
                },
                returnType: {
                    default: l.DEFAULT,
                    tooltip: !1,
                    displayName: "KeyboardReturnType",
                    type: l
                },
                _N$returnType: {
                    default: void 0,
                    type: cc.Float
                },
                inputFlag: {
                    tooltip: !1,
                    default: o.DEFAULT,
                    type: o,
                    notify: function() {
                        this._updateString(this._string)
                    }
                },
                inputMode: {
                    tooltip: !1,
                    default: a.ANY,
                    type: a,
                    notify: function(t) {
                        this.inputMode !== t && (this._updateTextLabel(),
                        this._updatePlaceholderLabel())
                    }
                },
                fontSize: {
                    get: function() {
                        return this.textLabel ? this.textLabel.fontSize : 0
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.fontSize = t)
                    }
                },
                _N$fontSize: {
                    default: void 0,
                    type: cc.Float
                },
                lineHeight: {
                    get: function() {
                        return this.textLabel ? this.textLabel.lineHeight : 0
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.lineHeight = t)
                    }
                },
                _N$lineHeight: {
                    default: void 0,
                    type: cc.Float
                },
                fontColor: {
                    get: function() {
                        return this.textLabel ? this.textLabel.node.color : cc.Color.BLACK
                    },
                    set: function(t) {
                        this.textLabel && (this.textLabel.node.color = t,
                        this.textLabel.node.opacity = t.a)
                    }
                },
                _N$fontColor: void 0,
                placeholder: {
                    tooltip: !1,
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.string : ""
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.string = t)
                    }
                },
                _N$placeholder: {
                    default: void 0,
                    type: cc.String
                },
                placeholderFontSize: {
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.fontSize : 0
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.fontSize = t)
                    }
                },
                _N$placeholderFontSize: {
                    default: void 0,
                    type: cc.Float
                },
                placeholderFontColor: {
                    get: function() {
                        return this.placeholderLabel ? this.placeholderLabel.node.color : cc.Color.BLACK
                    },
                    set: function(t) {
                        this.placeholderLabel && (this.placeholderLabel.node.color = t,
                        this.placeholderLabel.node.opacity = t.a)
                    }
                },
                _N$placeholderFontColor: void 0,
                maxLength: {
                    tooltip: !1,
                    default: 20
                },
                _N$maxLength: {
                    default: void 0,
                    type: cc.Float
                },
                stayOnTop: {
                    default: !1,
                    notify: function() {
                        cc.warn("editBox.stayOnTop is removed since v2.1.")
                    }
                },
                _tabIndex: 0,
                tabIndex: {
                    tooltip: !1,
                    get: function() {
                        return this._tabIndex
                    },
                    set: function(t) {
                        this._tabIndex !== t && (this._tabIndex = t,
                        this._impl && this._impl.setTabIndex(t))
                    }
                },
                editingDidBegan: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                textChanged: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                editingDidEnded: {
                    default: [],
                    type: cc.Component.EventHandler
                },
                editingReturn: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            statics: {
                _ImplClass: n,
                KeyboardReturnType: l,
                InputFlag: o,
                InputMode: a
            },
            _init: function() {
                this._upgradeComp(),
                this._isLabelVisible = !0,
                this.node.on(cc.Node.EventType.SIZE_CHANGED, this._syncSize, this),
                (this._impl = new c._ImplClass).init(this),
                this._updateString(this._string),
                this._syncSize()
            },
            _updateBackgroundSprite: function() {
                var t = this.background;
                if (!t) {
                    var e = this.node.getChildByName("BACKGROUND_SPRITE");
                    e || (e = new cc.Node("BACKGROUND_SPRITE")),
                    (t = e.getComponent(cc.Sprite)) || (t = e.addComponent(cc.Sprite)),
                    e.parent = this.node,
                    this.background = t
                }
                t.type = cc.Sprite.Type.SLICED,
                void 0 !== this._N$backgroundImage && (t.spriteFrame = this._N$backgroundImage,
                this._N$backgroundImage = void 0)
            },
            _updateTextLabel: function() {
                var t = this.textLabel;
                if (!t) {
                    var e = this.node.getChildByName("TEXT_LABEL");
                    e || (e = new cc.Node("TEXT_LABEL")),
                    (t = e.getComponent(r)) || (t = e.addComponent(r)),
                    e.parent = this.node,
                    this.textLabel = t
                }
                t.node.setAnchorPoint(0, 1),
                t.overflow = r.Overflow.CLAMP,
                this.inputMode === a.ANY ? (t.verticalAlign = i.VerticalTextAlignment.TOP,
                t.enableWrapText = !0) : (t.verticalAlign = i.VerticalTextAlignment.CENTER,
                t.enableWrapText = !1),
                t.string = this._updateLabelStringStyle(this._string),
                void 0 !== this._N$fontColor && (t.node.color = this._N$fontColor,
                t.node.opacity = this._N$fontColor.a,
                this._N$fontColor = void 0),
                void 0 !== this._N$fontSize && (t.fontSize = this._N$fontSize,
                this._N$fontSize = void 0),
                void 0 !== this._N$lineHeight && (t.lineHeight = this._N$lineHeight,
                this._N$lineHeight = void 0)
            },
            _updatePlaceholderLabel: function() {
                var t = this.placeholderLabel;
                if (!t) {
                    var e = this.node.getChildByName("PLACEHOLDER_LABEL");
                    e || (e = new cc.Node("PLACEHOLDER_LABEL")),
                    (t = e.getComponent(r)) || (t = e.addComponent(r)),
                    e.parent = this.node,
                    this.placeholderLabel = t
                }
                t.node.setAnchorPoint(0, 1),
                t.overflow = r.Overflow.CLAMP,
                this.inputMode === a.ANY ? (t.verticalAlign = i.VerticalTextAlignment.TOP,
                t.enableWrapText = !0) : (t.verticalAlign = i.VerticalTextAlignment.CENTER,
                t.enableWrapText = !1),
                t.string = this.placeholder,
                void 0 !== this._N$placeholderFontColor && (t.node.color = this._N$placeholderFontColor,
                t.node.opacity = this._N$placeholderFontColor.a,
                this._N$placeholderFontColor = void 0),
                void 0 !== this._N$placeholderFontSize && (t.fontSize = this._N$placeholderFontSize,
                this._N$placeholderFontSize = void 0)
            },
            _upgradeComp: function() {
                void 0 !== this._N$returnType && (this.returnType = this._N$returnType,
                this._N$returnType = void 0),
                void 0 !== this._N$maxLength && (this.maxLength = this._N$maxLength,
                this._N$maxLength = void 0),
                void 0 !== this._N$backgroundImage && this._updateBackgroundSprite(),
                void 0 === this._N$fontColor && void 0 === this._N$fontSize && void 0 === this._N$lineHeight || this._updateTextLabel(),
                void 0 === this._N$placeholderFontColor && void 0 === this._N$placeholderFontSize || this._updatePlaceholderLabel(),
                void 0 !== this._N$placeholder && (this.placeholder = this._N$placeholder,
                this._N$placeholder = void 0)
            },
            _syncSize: function() {
                if (this._impl) {
                    var t = this.node.getContentSize();
                    this._impl.setSize(t.width, t.height)
                }
            },
            _showLabels: function() {
                this._isLabelVisible = !0,
                this._updateLabels()
            },
            _hideLabels: function() {
                this._isLabelVisible = !1,
                this.textLabel && (this.textLabel.node.active = !1),
                this.placeholderLabel && (this.placeholderLabel.node.active = !1)
            },
            _updateLabels: function() {
                if (this._isLabelVisible) {
                    var t = this._string;
                    this.textLabel && (this.textLabel.node.active = "" !== t),
                    this.placeholderLabel && (this.placeholderLabel.node.active = "" === t)
                }
            },
            _updateString: function(t) {
                var e = this.textLabel;
                if (e) {
                    var i = t;
                    i && (i = this._updateLabelStringStyle(i)),
                    e.string = i,
                    this._updateLabels()
                }
            },
            _updateLabelStringStyle: function(t, e) {
                var i = this.inputFlag;
                if (e || i !== o.PASSWORD)
                    i === o.INITIAL_CAPS_ALL_CHARACTERS ? t = t.toUpperCase() : i === o.INITIAL_CAPS_WORD ? t = t.replace(/(?:^|\s)\S/g, (function(t) {
                        return t.toUpperCase()
                    }
                    )) : i === o.INITIAL_CAPS_SENTENCE && (t = h(t));
                else {
                    for (var n = "", r = t.length, s = 0; s < r; ++s)
                        n += "\u25cf";
                    t = n
                }
                return t
            },
            editBoxEditingDidBegan: function() {
                cc.Component.EventHandler.emitEvents(this.editingDidBegan, this),
                this.node.emit("editing-did-began", this)
            },
            editBoxEditingDidEnded: function() {
                cc.Component.EventHandler.emitEvents(this.editingDidEnded, this),
                this.node.emit("editing-did-ended", this)
            },
            editBoxTextChanged: function(t) {
                t = this._updateLabelStringStyle(t, !0),
                this.string = t,
                cc.Component.EventHandler.emitEvents(this.textChanged, t, this),
                this.node.emit("text-changed", this)
            },
            editBoxEditingReturn: function() {
                cc.Component.EventHandler.emitEvents(this.editingReturn, this),
                this.node.emit("editing-return", this)
            },
            onEnable: function() {
                this._registerEvent(),
                this._impl && this._impl.enable()
            },
            onDisable: function() {
                this._unregisterEvent(),
                this._impl && this._impl.disable()
            },
            onDestroy: function() {
                this._impl && this._impl.clear()
            },
            __preload: function() {
                this._init()
            },
            _registerEvent: function() {
                this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this)
            },
            _unregisterEvent: function() {
                this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegan, this),
                this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnded, this)
            },
            _onTouchBegan: function(t) {
                t.stopPropagation()
            },
            _onTouchCancel: function(t) {
                t.stopPropagation()
            },
            _onTouchEnded: function(t) {
                this._impl && this._impl.beginEditing(),
                t.stopPropagation()
            },
            setFocus: function() {
                cc.errorID(1400, "setFocus()", "focus()"),
                this._impl && this._impl.setFocus(!0)
            },
            focus: function() {
                this._impl && this._impl.setFocus(!0)
            },
            blur: function() {
                this._impl && this._impl.setFocus(!1)
            },
            isFocused: function() {
                return !!this._impl && this._impl.isFocused()
            },
            update: function() {
                this._impl && this._impl.update()
            }
        });
        cc.EditBox = e.exports = c,
        cc.sys.isBrowser && t("./WebEditBoxImpl")
    }
    ), {
        "../../platform/CCMacro": 198,
        "../CCLabel": 107,
        "../editbox/EditBoxImplBase": 128,
        "./WebEditBoxImpl": 129,
        "./types": 131
    }],
    128: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            ctor: function() {
                this._delegate = null,
                this._editing = !1
            },
            init: function() {},
            enable: function() {},
            disable: function() {
                this._editing && this.endEditing()
            },
            clear: function() {},
            update: function() {},
            setTabIndex: function() {},
            setSize: function() {},
            setFocus: function(t) {
                t ? this.beginEditing() : this.endEditing()
            },
            isFocused: function() {
                return this._editing
            },
            beginEditing: function() {},
            endEditing: function() {}
        });
        e.exports = i
    }
    ), {}],
    129: [(function(t) {
        "use strict";
        var e, i = (e = t("../../value-types/mat4")) && e.__esModule ? e : {
            default: e
        }, n = t("../../platform/utils"), r = t("../../platform/CCMacro"), s = t("./types"), a = t("../CCLabel"), o = t("./tabIndexUtil"), l = cc.EditBox, h = cc.js, c = s.InputMode, u = s.InputFlag, _ = s.KeyboardReturnType, f = {
            zoomInvalid: !1
        };
        cc.sys.OS_ANDROID !== cc.sys.os || cc.sys.browserType !== cc.sys.BROWSER_TYPE_SOUGOU && cc.sys.browserType !== cc.sys.BROWSER_TYPE_360 || (f.zoomInvalid = !0);
        var d = 0
          , p = cc.v3()
          , m = null
          , y = !1
          , v = !1
          , g = l._ImplClass;
        function A() {
            g.call(this),
            this._domId = "EditBoxId_" + ++d,
            this._placeholderStyleSheet = null,
            this._elem = null,
            this._isTextArea = !1,
            this._worldMat = new i.default,
            this._cameraMat = new i.default,
            this._m00 = 0,
            this._m01 = 0,
            this._m04 = 0,
            this._m05 = 0,
            this._m12 = 0,
            this._m13 = 0,
            this._w = 0,
            this._h = 0,
            this._cacheViewportRect = cc.rect(0, 0, 0, 0),
            this._inputMode = null,
            this._inputFlag = null,
            this._returnType = null,
            this._eventListeners = {},
            this._textLabelFont = null,
            this._textLabelFontSize = null,
            this._textLabelFontColor = null,
            this._textLabelAlign = null,
            this._placeholderLabelFont = null,
            this._placeholderLabelFontSize = null,
            this._placeholderLabelFontColor = null,
            this._placeholderLabelAlign = null,
            this._placeholderLineHeight = null
        }
        h.extend(A, g),
        l._ImplClass = A,
        Object.assign(A.prototype, {
            init: function(t) {
                t && (this._delegate = t,
                t.inputMode === c.ANY ? this._createTextArea() : this._createInput(),
                o.add(this),
                this.setTabIndex(t.tabIndex),
                this._initStyleSheet(),
                this._registerEventListeners(),
                this._addDomToGameContainer(),
                y = cc.view.isAutoFullScreenEnabled(),
                v = cc.view._resizeWithBrowserSize)
            },
            clear: function() {
                this._removeEventListeners(),
                this._removeDomFromGameContainer(),
                o.remove(this),
                m === this && (m = null)
            },
            update: function() {
                this._updateMatrix()
            },
            setTabIndex: function(t) {
                this._elem.tabIndex = t,
                o.resort()
            },
            setSize: function(t, e) {
                var i = this._elem;
                i.style.width = t + "px",
                i.style.height = e + "px"
            },
            beginEditing: function() {
                m && m !== this && m.setFocus(!1),
                this._editing = !0,
                m = this,
                this._delegate.editBoxEditingDidBegan(),
                this._showDom(),
                this._elem.focus()
            },
            endEditing: function() {
                this._elem && this._elem.blur()
            },
            _createInput: function() {
                this._isTextArea = !1,
                this._elem = document.createElement("input")
            },
            _createTextArea: function() {
                this._isTextArea = !0,
                this._elem = document.createElement("textarea")
            },
            _addDomToGameContainer: function() {
                cc.game.container.appendChild(this._elem),
                document.head.appendChild(this._placeholderStyleSheet)
            },
            _removeDomFromGameContainer: function() {
                n.contains(cc.game.container, this._elem) && cc.game.container.removeChild(this._elem),
                n.contains(document.head, this._placeholderStyleSheet) && document.head.removeChild(this._placeholderStyleSheet),
                delete this._elem,
                delete this._placeholderStyleSheet
            },
            _showDom: function() {
                this._updateMaxLength(),
                this._updateInputType(),
                this._updateStyleSheet(),
                this._elem.style.display = "",
                this._delegate._hideLabels(),
                cc.sys.isMobile && this._showDomOnMobile()
            },
            _hideDom: function() {
                this._elem.style.display = "none",
                this._delegate._showLabels(),
                cc.sys.isMobile && this._hideDomOnMobile()
            },
            _showDomOnMobile: function() {
                cc.sys.os === cc.sys.OS_ANDROID && (y && (cc.view.enableAutoFullScreen(!1),
                cc.screen.exitFullScreen()),
                v && cc.view.resizeWithBrowserSize(!1),
                this._adjustWindowScroll())
            },
            _hideDomOnMobile: function() {
                cc.sys.os === cc.sys.OS_ANDROID && (v && cc.view.resizeWithBrowserSize(!0),
                setTimeout((function() {
                    m || y && cc.view.enableAutoFullScreen(!0)
                }
                ), 800)),
                this._scrollBackWindow()
            },
            _adjustWindowScroll: function() {
                var t = this;
                setTimeout((function() {
                    window.scrollY < 100 && t._elem.scrollIntoView({
                        block: "start",
                        inline: "nearest",
                        behavior: "smooth"
                    })
                }
                ), 800)
            },
            _scrollBackWindow: function() {
                setTimeout((function() {
                    var t = cc.sys;
                    t.browserType !== t.BROWSER_TYPE_WECHAT || t.os !== t.OS_IOS ? window.scrollTo(0, 0) : window.top && window.top.scrollTo(0, 0)
                }
                ), 800)
            },
            _updateCameraMatrix: function() {
                var t = this._delegate.node;
                t.getWorldMatrix(this._worldMat);
                var e = this._worldMat
                  , n = t._contentSize
                  , r = t._anchorPoint;
                p.x = -r.x * n.width,
                p.y = -r.y * n.height,
                i.default.transform(e, e, p);
                var s = cc.Camera.findCamera(t);
                return !!s && (s.getWorldToScreenMatrix2D(this._cameraMat),
                i.default.mul(this._cameraMat, this._cameraMat, e),
                !0)
            },
            _updateMatrix: function() {
                if (this._updateCameraMatrix()) {
                    var t = this._cameraMat.m
                      , e = this._delegate.node
                      , i = cc.view;
                    if (this._m00 !== t[0] || this._m01 !== t[1] || this._m04 !== t[4] || this._m05 !== t[5] || this._m12 !== t[12] || this._m13 !== t[13] || this._w !== e._contentSize.width || this._h !== e._contentSize.height || !this._cacheViewportRect.equals(i._viewportRect)) {
                        this._m00 = t[0],
                        this._m01 = t[1],
                        this._m04 = t[4],
                        this._m05 = t[5],
                        this._m12 = t[12],
                        this._m13 = t[13],
                        this._w = e._contentSize.width,
                        this._h = e._contentSize.height,
                        this._cacheViewportRect.set(i._viewportRect);
                        var n = i._scaleX
                          , r = i._scaleY
                          , s = i._viewportRect
                          , a = i._devicePixelRatio;
                        n /= a,
                        r /= a;
                        var o = cc.game.container
                          , l = t[0] * n
                          , h = t[1]
                          , c = t[4]
                          , u = t[5] * r
                          , _ = o && o.style.paddingLeft && parseInt(o.style.paddingLeft);
                        _ += s.x / a;
                        var d = o && o.style.paddingBottom && parseInt(o.style.paddingBottom);
                        d += s.y / a;
                        var p = t[12] * n + _
                          , m = t[13] * r + d;
                        f.zoomInvalid && (this.setSize(e.width * l, e.height * u),
                        l = 1,
                        u = 1);
                        var y = this._elem
                          , v = "matrix(" + l + "," + -h + "," + -c + "," + u + "," + p + "," + -m + ")";
                        y.style.transform = v,
                        y.style["-webkit-transform"] = v,
                        y.style["transform-origin"] = "0px 100% 0px",
                        y.style["-webkit-transform-origin"] = "0px 100% 0px"
                    }
                }
            },
            _updateInputType: function() {
                var t = this._delegate
                  , e = t.inputMode
                  , i = t.inputFlag
                  , n = t.returnType
                  , r = this._elem;
                if (this._inputMode !== e || this._inputFlag !== i || this._returnType !== n) {
                    if (this._inputMode = e,
                    this._inputFlag = i,
                    this._returnType = n,
                    this._isTextArea) {
                        var s = "none";
                        return i === u.INITIAL_CAPS_ALL_CHARACTERS ? s = "uppercase" : i === u.INITIAL_CAPS_WORD && (s = "capitalize"),
                        void (r.style.textTransform = s)
                    }
                    if (i === u.PASSWORD)
                        return r.type = "password",
                        void (r.style.textTransform = "none");
                    var a = r.type;
                    e === c.EMAIL_ADDR ? a = "email" : e === c.NUMERIC || e === c.DECIMAL ? a = "number" : e === c.PHONE_NUMBER ? (a = "number",
                    r.pattern = "[0-9]*") : e === c.URL ? a = "url" : (a = "text",
                    n === _.SEARCH && (a = "search")),
                    r.type = a;
                    var o = "none";
                    i === u.INITIAL_CAPS_ALL_CHARACTERS ? o = "uppercase" : i === u.INITIAL_CAPS_WORD && (o = "capitalize"),
                    r.style.textTransform = o
                }
            },
            _updateMaxLength: function() {
                var t = this._delegate.maxLength;
                t < 0 && (t = 65535),
                this._elem.maxLength = t
            },
            _initStyleSheet: function() {
                var t = this._elem;
                t.style.display = "none",
                t.style.border = 0,
                t.style.background = "transparent",
                t.style.width = "100%",
                t.style.height = "100%",
                t.style.active = 0,
                t.style.outline = "medium",
                t.style.padding = "0",
                t.style.textTransform = "none",
                t.style.position = "absolute",
                t.style.bottom = "0px",
                t.style.left = "2px",
                t.className = "cocosEditBox",
                t.id = this._domId,
                this._isTextArea ? (t.style.resize = "none",
                t.style.overflow_y = "scroll") : (t.type = "text",
                t.style["-moz-appearance"] = "textfield"),
                this._placeholderStyleSheet = document.createElement("style")
            },
            _updateStyleSheet: function() {
                var t = this._delegate
                  , e = this._elem;
                e.value = t.string,
                e.placeholder = t.placeholder,
                this._updateTextLabel(t.textLabel),
                this._updatePlaceholderLabel(t.placeholderLabel)
            },
            _updateTextLabel: function(t) {
                if (t) {
                    var e = t.font;
                    e = !e || e instanceof cc.BitmapFont ? t.fontFamily : e._fontFamily;
                    var i = t.fontSize * t.node.scaleY;
                    if (this._textLabelFont !== e || this._textLabelFontSize !== i || this._textLabelFontColor !== t.fontColor || this._textLabelAlign !== t.horizontalAlign) {
                        this._textLabelFont = e,
                        this._textLabelFontSize = i,
                        this._textLabelFontColor = t.fontColor,
                        this._textLabelAlign = t.horizontalAlign;
                        var n = this._elem;
                        switch (n.style.fontSize = i + "px",
                        n.style.color = t.node.color.toCSS(),
                        n.style.fontFamily = e,
                        t.horizontalAlign) {
                        case a.HorizontalAlign.LEFT:
                            n.style.textAlign = "left";
                            break;
                        case a.HorizontalAlign.CENTER:
                            n.style.textAlign = "center";
                            break;
                        case a.HorizontalAlign.RIGHT:
                            n.style.textAlign = "right"
                        }
                    }
                }
            },
            _updatePlaceholderLabel: function(t) {
                if (t) {
                    var e = t.font;
                    e = !e || e instanceof cc.BitmapFont ? t.fontFamily : t.font._fontFamily;
                    var i = t.fontSize * t.node.scaleY;
                    if (this._placeholderLabelFont !== e || this._placeholderLabelFontSize !== i || this._placeholderLabelFontColor !== t.fontColor || this._placeholderLabelAlign !== t.horizontalAlign || this._placeholderLineHeight !== t.fontSize) {
                        this._placeholderLabelFont = e,
                        this._placeholderLabelFontSize = i,
                        this._placeholderLabelFontColor = t.fontColor,
                        this._placeholderLabelAlign = t.horizontalAlign,
                        this._placeholderLineHeight = t.fontSize;
                        var n, r = this._placeholderStyleSheet, s = t.node.color.toCSS(), o = t.fontSize;
                        switch (t.horizontalAlign) {
                        case a.HorizontalAlign.LEFT:
                            n = "left";
                            break;
                        case a.HorizontalAlign.CENTER:
                            n = "center";
                            break;
                        case a.HorizontalAlign.RIGHT:
                            n = "right"
                        }
                        r.innerHTML = "#" + this._domId + "::-webkit-input-placeholder,#" + this._domId + "::-moz-placeholder,#" + this._domId + ":-ms-input-placeholder{text-transform: initial; font-family: " + e + "; font-size: " + i + "px; color: " + s + "; line-height: " + o + "px; text-align: " + n + ";}",
                        cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE && (r.innerHTML += "#" + this._domId + "::-ms-clear{display: none;}")
                    }
                }
            },
            _registerEventListeners: function() {
                var t = this
                  , e = this._elem
                  , i = !1
                  , n = this._eventListeners;
                n.compositionStart = function() {
                    i = !0
                }
                ,
                n.compositionEnd = function() {
                    i = !1,
                    t._delegate.editBoxTextChanged(e.value)
                }
                ,
                n.onInput = function() {
                    if (!i) {
                        var n = t._delegate.maxLength;
                        n >= 0 && (e.value = e.value.slice(0, n)),
                        t._delegate.editBoxTextChanged(e.value)
                    }
                }
                ,
                n.onClick = function() {
                    t._editing && cc.sys.isMobile && t._adjustWindowScroll()
                }
                ,
                n.onKeydown = function(i) {
                    i.keyCode === r.KEY.enter ? (i.stopPropagation(),
                    t._delegate.editBoxEditingReturn(),
                    t._isTextArea || e.blur()) : i.keyCode === r.KEY.tab && (i.stopPropagation(),
                    i.preventDefault(),
                    o.next(t))
                }
                ,
                n.onBlur = function() {
                    cc.sys.isMobile && i && n.compositionEnd(),
                    t._editing = !1,
                    m = null,
                    t._hideDom(),
                    t._delegate.editBoxEditingDidEnded()
                }
                ,
                e.addEventListener("compositionstart", n.compositionStart),
                e.addEventListener("compositionend", n.compositionEnd),
                e.addEventListener("input", n.onInput),
                e.addEventListener("keydown", n.onKeydown),
                e.addEventListener("blur", n.onBlur),
                e.addEventListener("touchstart", n.onClick)
            },
            _removeEventListeners: function() {
                var t = this._elem
                  , e = this._eventListeners;
                t.removeEventListener("compositionstart", e.compositionStart),
                t.removeEventListener("compositionend", e.compositionEnd),
                t.removeEventListener("input", e.onInput),
                t.removeEventListener("keydown", e.onKeydown),
                t.removeEventListener("blur", e.onBlur),
                t.removeEventListener("touchstart", e.onClick),
                e.compositionStart = null,
                e.compositionEnd = null,
                e.onInput = null,
                e.onKeydown = null,
                e.onBlur = null,
                e.onClick = null
            }
        })
    }
    ), {
        "../../platform/CCMacro": 198,
        "../../platform/utils": 217,
        "../../value-types/mat4": 284,
        "../CCLabel": 107,
        "./tabIndexUtil": 130,
        "./types": 131
    }],
    130: [(function(t, e) {
        "use strict";
        e.exports = {
            _tabIndexList: [],
            add: function(t) {
                var e = this._tabIndexList;
                -1 === e.indexOf(t) && e.push(t)
            },
            remove: function(t) {
                var e = this._tabIndexList
                  , i = e.indexOf(t);
                -1 !== i && e.splice(i, 1)
            },
            resort: function() {
                this._tabIndexList.sort((function(t, e) {
                    return t._delegate._tabIndex - e._delegate._tabIndex
                }
                ))
            },
            next: function(t) {
                var e = this._tabIndexList
                  , i = e.indexOf(t);
                if (t.setFocus(!1),
                -1 !== i) {
                    var n = e[i + 1];
                    n && n._delegate._tabIndex >= 0 && n.setFocus(!0)
                }
            }
        }
    }
    ), {}],
    131: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            DEFAULT: 0,
            DONE: 1,
            SEND: 2,
            SEARCH: 3,
            GO: 4,
            NEXT: 5
        })
          , n = cc.Enum({
            ANY: 0,
            EMAIL_ADDR: 1,
            NUMERIC: 2,
            PHONE_NUMBER: 3,
            URL: 4,
            DECIMAL: 5,
            SINGLE_LINE: 6
        })
          , r = cc.Enum({
            PASSWORD: 0,
            SENSITIVE: 1,
            INITIAL_CAPS_WORD: 2,
            INITIAL_CAPS_SENTENCE: 3,
            INITIAL_CAPS_ALL_CHARACTERS: 4,
            DEFAULT: 5
        });
        e.exports = {
            KeyboardReturnType: i,
            InputMode: n,
            InputFlag: r
        }
    }
    ), {}],
    132: [(function(t, e) {
        "use strict";
        t("./CCComponent"),
        t("./CCComponentEventHandler"),
        t("./missing-script");
        var i = t("./SubContextView");
        i || (i = cc.Class({
            name: "cc.SubContextView",
            extends: cc.Component
        }),
        cc.SubContextView = cc.WXSubContextView = cc.SwanSubContextView = i);
        var n = [t("./CCSprite"), t("./CCWidget"), t("./CCCanvas"), t("./CCAudioSource"), t("./CCAnimation"), t("./CCButton"), t("./CCLabel"), t("./CCProgressBar"), t("./CCMask"), t("./CCScrollBar"), t("./CCScrollView"), t("./CCPageViewIndicator"), t("./CCPageView"), t("./CCSlider"), t("./CCLayout"), t("./editbox/CCEditBox"), t("./CCLabelOutline"), t("./CCLabelShadow"), t("./CCRichText"), t("./CCToggleContainer"), t("./CCToggleGroup"), t("./CCToggle"), t("./CCBlockInputEvents"), t("./CCMotionStreak"), t("./CCSafeArea"), i];
        e.exports = n
    }
    ), {
        "./CCAnimation": 100,
        "./CCAudioSource": 101,
        "./CCBlockInputEvents": 102,
        "./CCButton": 103,
        "./CCCanvas": 104,
        "./CCComponent": 105,
        "./CCComponentEventHandler": 106,
        "./CCLabel": 107,
        "./CCLabelOutline": 108,
        "./CCLabelShadow": 109,
        "./CCLayout": 110,
        "./CCMask": 111,
        "./CCMotionStreak": void 0,
        "./CCPageView": 112,
        "./CCPageViewIndicator": 113,
        "./CCProgressBar": 114,
        "./CCRichText": 116,
        "./CCSafeArea": void 0,
        "./CCScrollBar": 117,
        "./CCScrollView": 118,
        "./CCSlider": 119,
        "./CCSprite": 120,
        "./CCToggle": 122,
        "./CCToggleContainer": 123,
        "./CCToggleGroup": 124,
        "./CCWidget": 126,
        "./SubContextView": void 0,
        "./editbox/CCEditBox": 127,
        "./missing-script": 133
    }],
    133: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = cc.Class({
            name: "cc.MissingScript",
            extends: cc.Component,
            editor: {
                inspector: "packages://inspector/inspectors/comps/missing-script.js"
            },
            properties: {
                compiled: {
                    default: !1,
                    serializable: !1
                },
                _$erialized: {
                    default: null,
                    visible: !1,
                    editorOnly: !0
                }
            },
            ctor: !1,
            statics: {
                safeFindClass: function(t) {
                    return i._getClassById(t) || (cc.deserialize.reportMissingClass(t),
                    n)
                }
            },
            onLoad: function() {
                cc.warnID(4600, this.node.name)
            }
        });
        cc._MissingScript = e.exports = n
    }
    ), {}],
    134: [(function(t, e) {
        "use strict";
        var i = cc.js;
        t("../event/event");
        var n = function(t, e) {
            cc.Event.call(this, cc.Event.MOUSE, e),
            this._eventType = t,
            this._button = 0,
            this._x = 0,
            this._y = 0,
            this._prevX = 0,
            this._prevY = 0,
            this._scrollX = 0,
            this._scrollY = 0
        };
        i.extend(n, cc.Event);
        var r = n.prototype;
        r.setScrollData = function(t, e) {
            this._scrollX = t,
            this._scrollY = e
        }
        ,
        r.getScrollX = function() {
            return this._scrollX
        }
        ,
        r.getScrollY = function() {
            return this._scrollY
        }
        ,
        r.setLocation = function(t, e) {
            this._x = t,
            this._y = e
        }
        ,
        r.getLocation = function() {
            return cc.v2(this._x, this._y)
        }
        ,
        r.getLocationInView = function() {
            return cc.v2(this._x, cc.view._designResolutionSize.height - this._y)
        }
        ,
        r._setPrevCursor = function(t, e) {
            this._prevX = t,
            this._prevY = e
        }
        ,
        r.getPreviousLocation = function() {
            return cc.v2(this._prevX, this._prevY)
        }
        ,
        r.getDelta = function() {
            return cc.v2(this._x - this._prevX, this._y - this._prevY)
        }
        ,
        r.getDeltaX = function() {
            return this._x - this._prevX
        }
        ,
        r.getDeltaY = function() {
            return this._y - this._prevY
        }
        ,
        r.setButton = function(t) {
            this._button = t
        }
        ,
        r.getButton = function() {
            return this._button
        }
        ,
        r.getLocationX = function() {
            return this._x
        }
        ,
        r.getLocationY = function() {
            return this._y
        }
        ,
        n.NONE = 0,
        n.DOWN = 1,
        n.UP = 2,
        n.MOVE = 3,
        n.SCROLL = 4,
        n.BUTTON_LEFT = 0,
        n.BUTTON_RIGHT = 2,
        n.BUTTON_MIDDLE = 1,
        n.BUTTON_4 = 3,
        n.BUTTON_5 = 4,
        n.BUTTON_6 = 5,
        n.BUTTON_7 = 6,
        n.BUTTON_8 = 7;
        var s = function(t, e) {
            cc.Event.call(this, cc.Event.TOUCH, e),
            this._eventCode = 0,
            this._touches = t || [],
            this.touch = null,
            this.currentTouch = null
        };
        i.extend(s, cc.Event),
        (r = s.prototype).getEventCode = function() {
            return this._eventCode
        }
        ,
        r.getTouches = function() {
            return this._touches
        }
        ,
        r._setEventCode = function(t) {
            this._eventCode = t
        }
        ,
        r._setTouches = function(t) {
            this._touches = t
        }
        ,
        r.setLocation = function(t, e) {
            this.touch && this.touch.setTouchInfo(this.touch.getID(), t, e)
        }
        ,
        r.getLocation = function() {
            return this.touch ? this.touch.getLocation() : cc.v2()
        }
        ,
        r.getLocationInView = function() {
            return this.touch ? this.touch.getLocationInView() : cc.v2()
        }
        ,
        r.getPreviousLocation = function() {
            return this.touch ? this.touch.getPreviousLocation() : cc.v2()
        }
        ,
        r.getStartLocation = function() {
            return this.touch ? this.touch.getStartLocation() : cc.v2()
        }
        ,
        r.getID = function() {
            return this.touch ? this.touch.getID() : null
        }
        ,
        r.getDelta = function() {
            return this.touch ? this.touch.getDelta() : cc.v2()
        }
        ,
        r.getDeltaX = function() {
            return this.touch ? this.touch.getDelta().x : 0
        }
        ,
        r.getDeltaY = function() {
            return this.touch ? this.touch.getDelta().y : 0
        }
        ,
        r.getLocationX = function() {
            return this.touch ? this.touch.getLocationX() : 0
        }
        ,
        r.getLocationY = function() {
            return this.touch ? this.touch.getLocationY() : 0
        }
        ,
        s.MAX_TOUCHES = 5,
        s.BEGAN = 0,
        s.MOVED = 1,
        s.ENDED = 2,
        s.CANCELED = 3;
        var a = function(t, e) {
            cc.Event.call(this, cc.Event.ACCELERATION, e),
            this.acc = t
        };
        i.extend(a, cc.Event);
        var o = function(t, e, i) {
            cc.Event.call(this, cc.Event.KEYBOARD, i),
            this.keyCode = t,
            this.isPressed = e
        };
        i.extend(o, cc.Event),
        cc.Event.EventMouse = n,
        cc.Event.EventTouch = s,
        cc.Event.EventAcceleration = a,
        cc.Event.EventKeyboard = o,
        e.exports = cc.Event
    }
    ), {
        "../event/event": 141
    }],
    135: [(function(t, e) {
        "use strict";
        var i = t("../platform/js");
        cc.EventListener = function(t, e, i) {
            this._onEvent = i,
            this._type = t || 0,
            this._listenerID = e || "",
            this._registered = !1,
            this._fixedPriority = 0,
            this._node = null,
            this._target = null,
            this._paused = !0,
            this._isEnabled = !0
        }
        ,
        cc.EventListener.prototype = {
            constructor: cc.EventListener,
            _setPaused: function(t) {
                this._paused = t
            },
            _isPaused: function() {
                return this._paused
            },
            _setRegistered: function(t) {
                this._registered = t
            },
            _isRegistered: function() {
                return this._registered
            },
            _getType: function() {
                return this._type
            },
            _getListenerID: function() {
                return this._listenerID
            },
            _setFixedPriority: function(t) {
                this._fixedPriority = t
            },
            _getFixedPriority: function() {
                return this._fixedPriority
            },
            _setSceneGraphPriority: function(t) {
                this._target = t,
                this._node = t
            },
            _getSceneGraphPriority: function() {
                return this._node
            },
            checkAvailable: function() {
                return null !== this._onEvent
            },
            clone: function() {
                return null
            },
            setEnabled: function(t) {
                this._isEnabled = t
            },
            isEnabled: function() {
                return this._isEnabled
            },
            retain: function() {},
            release: function() {}
        },
        cc.EventListener.UNKNOWN = 0,
        cc.EventListener.TOUCH_ONE_BY_ONE = 1,
        cc.EventListener.TOUCH_ALL_AT_ONCE = 2,
        cc.EventListener.KEYBOARD = 3,
        cc.EventListener.MOUSE = 4,
        cc.EventListener.ACCELERATION = 6,
        cc.EventListener.CUSTOM = 8;
        var n = cc.EventListener.ListenerID = {
            MOUSE: "__cc_mouse",
            TOUCH_ONE_BY_ONE: "__cc_touch_one_by_one",
            TOUCH_ALL_AT_ONCE: "__cc_touch_all_at_once",
            KEYBOARD: "__cc_keyboard",
            ACCELERATION: "__cc_acceleration"
        }
          , r = function(t, e) {
            this._onCustomEvent = e,
            cc.EventListener.call(this, cc.EventListener.CUSTOM, t, this._callback)
        };
        i.extend(r, cc.EventListener),
        i.mixin(r.prototype, {
            _onCustomEvent: null,
            _callback: function(t) {
                null !== this._onCustomEvent && this._onCustomEvent(t)
            },
            checkAvailable: function() {
                return cc.EventListener.prototype.checkAvailable.call(this) && null !== this._onCustomEvent
            },
            clone: function() {
                return new r(this._listenerID,this._onCustomEvent)
            }
        });
        var s = function() {
            cc.EventListener.call(this, cc.EventListener.MOUSE, n.MOUSE, this._callback)
        };
        i.extend(s, cc.EventListener),
        i.mixin(s.prototype, {
            onMouseDown: null,
            onMouseUp: null,
            onMouseMove: null,
            onMouseScroll: null,
            _callback: function(t) {
                var e = cc.Event.EventMouse;
                switch (t._eventType) {
                case e.DOWN:
                    this.onMouseDown && this.onMouseDown(t);
                    break;
                case e.UP:
                    this.onMouseUp && this.onMouseUp(t);
                    break;
                case e.MOVE:
                    this.onMouseMove && this.onMouseMove(t);
                    break;
                case e.SCROLL:
                    this.onMouseScroll && this.onMouseScroll(t)
                }
            },
            clone: function() {
                var t = new s;
                return t.onMouseDown = this.onMouseDown,
                t.onMouseUp = this.onMouseUp,
                t.onMouseMove = this.onMouseMove,
                t.onMouseScroll = this.onMouseScroll,
                t
            },
            checkAvailable: function() {
                return !0
            }
        });
        var a = function() {
            cc.EventListener.call(this, cc.EventListener.TOUCH_ONE_BY_ONE, n.TOUCH_ONE_BY_ONE, null),
            this._claimedTouches = []
        };
        i.extend(a, cc.EventListener),
        i.mixin(a.prototype, {
            constructor: a,
            _claimedTouches: null,
            swallowTouches: !1,
            onTouchBegan: null,
            onTouchMoved: null,
            onTouchEnded: null,
            onTouchCancelled: null,
            setSwallowTouches: function(t) {
                this.swallowTouches = t
            },
            isSwallowTouches: function() {
                return this.swallowTouches
            },
            clone: function() {
                var t = new a;
                return t.onTouchBegan = this.onTouchBegan,
                t.onTouchMoved = this.onTouchMoved,
                t.onTouchEnded = this.onTouchEnded,
                t.onTouchCancelled = this.onTouchCancelled,
                t.swallowTouches = this.swallowTouches,
                t
            },
            checkAvailable: function() {
                return !!this.onTouchBegan || (cc.logID(1801),
                !1)
            }
        });
        var o = function() {
            cc.EventListener.call(this, cc.EventListener.TOUCH_ALL_AT_ONCE, n.TOUCH_ALL_AT_ONCE, null)
        };
        i.extend(o, cc.EventListener),
        i.mixin(o.prototype, {
            constructor: o,
            onTouchesBegan: null,
            onTouchesMoved: null,
            onTouchesEnded: null,
            onTouchesCancelled: null,
            clone: function() {
                var t = new o;
                return t.onTouchesBegan = this.onTouchesBegan,
                t.onTouchesMoved = this.onTouchesMoved,
                t.onTouchesEnded = this.onTouchesEnded,
                t.onTouchesCancelled = this.onTouchesCancelled,
                t
            },
            checkAvailable: function() {
                return null !== this.onTouchesBegan || null !== this.onTouchesMoved || null !== this.onTouchesEnded || null !== this.onTouchesCancelled || (cc.logID(1802),
                !1)
            }
        });
        var l = function(t) {
            this._onAccelerationEvent = t,
            cc.EventListener.call(this, cc.EventListener.ACCELERATION, n.ACCELERATION, this._callback)
        };
        i.extend(l, cc.EventListener),
        i.mixin(l.prototype, {
            constructor: l,
            _onAccelerationEvent: null,
            _callback: function(t) {
                this._onAccelerationEvent(t.acc, t)
            },
            checkAvailable: function() {
                return cc.assertID(this._onAccelerationEvent, 1803),
                !0
            },
            clone: function() {
                return new l(this._onAccelerationEvent)
            }
        });
        var h = function() {
            cc.EventListener.call(this, cc.EventListener.KEYBOARD, n.KEYBOARD, this._callback)
        };
        i.extend(h, cc.EventListener),
        i.mixin(h.prototype, {
            constructor: h,
            onKeyPressed: null,
            onKeyReleased: null,
            _callback: function(t) {
                t.isPressed ? this.onKeyPressed && this.onKeyPressed(t.keyCode, t) : this.onKeyReleased && this.onKeyReleased(t.keyCode, t)
            },
            clone: function() {
                var t = new h;
                return t.onKeyPressed = this.onKeyPressed,
                t.onKeyReleased = this.onKeyReleased,
                t
            },
            checkAvailable: function() {
                return null !== this.onKeyPressed || null !== this.onKeyReleased || (cc.logID(1800),
                !1)
            }
        }),
        cc.EventListener.create = function(t) {
            cc.assertID(t && t.event, 1900);
            var e = t.event;
            delete t.event;
            var i = null;
            for (var n in e === cc.EventListener.TOUCH_ONE_BY_ONE ? i = new a : e === cc.EventListener.TOUCH_ALL_AT_ONCE ? i = new o : e === cc.EventListener.MOUSE ? i = new s : e === cc.EventListener.CUSTOM ? (i = new r(t.eventName,t.callback),
            delete t.eventName,
            delete t.callback) : e === cc.EventListener.KEYBOARD ? i = new h : e === cc.EventListener.ACCELERATION && (i = new l(t.callback),
            delete t.callback),
            t)
                i[n] = t[n];
            return i
        }
        ,
        e.exports = cc.EventListener
    }
    ), {
        "../platform/js": 214
    }],
    136: [(function(t, e) {
        "use strict";
        var i = t("../platform/js");
        t("./CCEventListener");
        var n = cc.EventListener.ListenerID
          , r = function() {
            this._fixedListeners = [],
            this._sceneGraphListeners = [],
            this.gt0Index = 0
        };
        r.prototype = {
            constructor: r,
            size: function() {
                return this._fixedListeners.length + this._sceneGraphListeners.length
            },
            empty: function() {
                return 0 === this._fixedListeners.length && 0 === this._sceneGraphListeners.length
            },
            push: function(t) {
                0 === t._getFixedPriority() ? this._sceneGraphListeners.push(t) : this._fixedListeners.push(t)
            },
            clearSceneGraphListeners: function() {
                this._sceneGraphListeners.length = 0
            },
            clearFixedListeners: function() {
                this._fixedListeners.length = 0
            },
            clear: function() {
                this._sceneGraphListeners.length = 0,
                this._fixedListeners.length = 0
            },
            getFixedPriorityListeners: function() {
                return this._fixedListeners
            },
            getSceneGraphPriorityListeners: function() {
                return this._sceneGraphListeners
            }
        };
        var s = function(t) {
            var e = cc.Event
              , i = t.type;
            return i === e.ACCELERATION ? n.ACCELERATION : i === e.KEYBOARD ? n.KEYBOARD : i.startsWith(e.MOUSE) ? n.MOUSE : (i.startsWith(e.TOUCH) && cc.logID(2e3),
            "")
        }
          , a = {
            DIRTY_NONE: 0,
            DIRTY_FIXED_PRIORITY: 1,
            DIRTY_SCENE_GRAPH_PRIORITY: 2,
            DIRTY_ALL: 3,
            _listenersMap: {},
            _priorityDirtyFlagMap: {},
            _nodeListenersMap: {},
            _toAddedListeners: [],
            _toRemovedListeners: [],
            _dirtyListeners: {},
            _inDispatch: 0,
            _isEnabled: !1,
            _currentTouch: null,
            _currentTouchListener: null,
            _internalCustomListenerIDs: [],
            _setDirtyForNode: function(t) {
                var e = this._nodeListenersMap[t._id];
                if (void 0 !== e)
                    for (var i = 0, n = e.length; i < n; i++) {
                        var r = e[i]._getListenerID();
                        null == this._dirtyListeners[r] && (this._dirtyListeners[r] = !0)
                    }
                if (t.childrenCount > 0)
                    for (var s = t._children, a = 0, o = s.length; a < o; a++)
                        this._setDirtyForNode(s[a])
            },
            pauseTarget: function(t, e) {
                if (t instanceof cc._BaseNode) {
                    var i, n, r = this._nodeListenersMap[t._id];
                    if (r)
                        for (i = 0,
                        n = r.length; i < n; i++)
                            r[i]._setPaused(!0);
                    if (!0 === e) {
                        var s = t._children;
                        for (i = 0,
                        n = s ? s.length : 0; i < n; i++)
                            this.pauseTarget(s[i], !0)
                    }
                } else
                    cc.warnID(3506)
            },
            resumeTarget: function(t, e) {
                if (t instanceof cc._BaseNode) {
                    var i, n, r = this._nodeListenersMap[t._id];
                    if (r)
                        for (i = 0,
                        n = r.length; i < n; i++)
                            r[i]._setPaused(!1);
                    if (this._setDirtyForNode(t),
                    !0 === e) {
                        var s = t._children;
                        for (i = 0,
                        n = s ? s.length : 0; i < n; i++)
                            this.resumeTarget(s[i], !0)
                    }
                } else
                    cc.warnID(3506)
            },
            _addListener: function(t) {
                0 === this._inDispatch ? this._forceAddEventListener(t) : this._toAddedListeners.push(t)
            },
            _forceAddEventListener: function(t) {
                var e = t._getListenerID()
                  , i = this._listenersMap[e];
                if (i || (i = new r,
                this._listenersMap[e] = i),
                i.push(t),
                0 === t._getFixedPriority()) {
                    this._setDirty(e, this.DIRTY_SCENE_GRAPH_PRIORITY);
                    var n = t._getSceneGraphPriority();
                    null === n && cc.logID(3507),
                    this._associateNodeAndEventListener(n, t),
                    n.activeInHierarchy && this.resumeTarget(n)
                } else
                    this._setDirty(e, this.DIRTY_FIXED_PRIORITY)
            },
            _getListeners: function(t) {
                return this._listenersMap[t]
            },
            _updateDirtyFlagForSceneGraph: function() {
                var t = this._dirtyListeners;
                for (var e in t)
                    this._setDirty(e, this.DIRTY_SCENE_GRAPH_PRIORITY);
                this._dirtyListeners = {}
            },
            _removeAllListenersInVector: function(t) {
                if (t)
                    for (var e, i = t.length - 1; i >= 0; i--)
                        (e = t[i])._setRegistered(!1),
                        null != e._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(e._getSceneGraphPriority(), e),
                        e._setSceneGraphPriority(null)),
                        0 === this._inDispatch && cc.js.array.removeAt(t, i)
            },
            _removeListenersForListenerID: function(t) {
                var e, i = this._listenersMap[t];
                if (i) {
                    var n = i.getFixedPriorityListeners()
                      , r = i.getSceneGraphPriorityListeners();
                    this._removeAllListenersInVector(r),
                    this._removeAllListenersInVector(n),
                    delete this._priorityDirtyFlagMap[t],
                    this._inDispatch || (i.clear(),
                    delete this._listenersMap[t])
                }
                var s, a = this._toAddedListeners;
                for (e = a.length - 1; e >= 0; e--)
                    (s = a[e]) && s._getListenerID() === t && cc.js.array.removeAt(a, e)
            },
            _sortEventListeners: function(t) {
                var e = this.DIRTY_NONE
                  , i = this._priorityDirtyFlagMap;
                i[t] && (e = i[t]),
                e !== this.DIRTY_NONE && (i[t] = this.DIRTY_NONE,
                e & this.DIRTY_FIXED_PRIORITY && this._sortListenersOfFixedPriority(t),
                e & this.DIRTY_SCENE_GRAPH_PRIORITY && cc.director.getScene() && this._sortListenersOfSceneGraphPriority(t))
            },
            _sortListenersOfSceneGraphPriority: function(t) {
                var e = this._getListeners(t);
                if (e) {
                    var i = e.getSceneGraphPriorityListeners();
                    i && 0 !== i.length && e.getSceneGraphPriorityListeners().sort(this._sortEventListenersOfSceneGraphPriorityDes)
                }
            },
            _sortEventListenersOfSceneGraphPriorityDes: function(t, e) {
                var i = t._getSceneGraphPriority()
                  , n = e._getSceneGraphPriority();
                if (!(e && n && n._activeInHierarchy && null !== n._parent))
                    return -1;
                if (!t || !i || !i._activeInHierarchy || null === i._parent)
                    return 1;
                for (var r = i, s = n, a = !1; r._parent._id !== s._parent._id; )
                    r = null === r._parent._parent ? (a = !0) && n : r._parent,
                    s = null === s._parent._parent ? (a = !0) && i : s._parent;
                if (r._id === s._id) {
                    if (r._id === n._id)
                        return -1;
                    if (r._id === i._id)
                        return 1
                }
                return a ? r._localZOrder - s._localZOrder : s._localZOrder - r._localZOrder
            },
            _sortListenersOfFixedPriority: function(t) {
                var e = this._listenersMap[t];
                if (e) {
                    var i = e.getFixedPriorityListeners();
                    if (i && 0 !== i.length) {
                        i.sort(this._sortListenersOfFixedPriorityAsc);
                        for (var n = 0, r = i.length; n < r && !(i[n]._getFixedPriority() >= 0); )
                            ++n;
                        e.gt0Index = n
                    }
                }
            },
            _sortListenersOfFixedPriorityAsc: function(t, e) {
                return t._getFixedPriority() - e._getFixedPriority()
            },
            _onUpdateListeners: function(t) {
                var e, i, n, r = t.getFixedPriorityListeners(), s = t.getSceneGraphPriorityListeners(), a = this._toRemovedListeners;
                if (s)
                    for (e = s.length - 1; e >= 0; e--)
                        (i = s[e])._isRegistered() || (cc.js.array.removeAt(s, e),
                        -1 !== (n = a.indexOf(i)) && a.splice(n, 1));
                if (r)
                    for (e = r.length - 1; e >= 0; e--)
                        (i = r[e])._isRegistered() || (cc.js.array.removeAt(r, e),
                        -1 !== (n = a.indexOf(i)) && a.splice(n, 1));
                s && 0 === s.length && t.clearSceneGraphListeners(),
                r && 0 === r.length && t.clearFixedListeners()
            },
            frameUpdateListeners: function() {
                var t = this._listenersMap
                  , e = this._priorityDirtyFlagMap;
                for (var i in t)
                    t[i].empty() && (delete e[i],
                    delete t[i]);
                var n = this._toAddedListeners;
                if (0 !== n.length) {
                    for (var r = 0, s = n.length; r < s; r++)
                        this._forceAddEventListener(n[r]);
                    n.length = 0
                }
                0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners()
            },
            _updateTouchListeners: function() {
                var t = this._inDispatch;
                if (cc.assertID(t > 0, 3508),
                !(t > 1)) {
                    var e;
                    (e = this._listenersMap[n.TOUCH_ONE_BY_ONE]) && this._onUpdateListeners(e),
                    (e = this._listenersMap[n.TOUCH_ALL_AT_ONCE]) && this._onUpdateListeners(e),
                    cc.assertID(1 === t, 3509);
                    var i = this._toAddedListeners;
                    if (0 !== i.length) {
                        for (var r = 0, s = i.length; r < s; r++)
                            this._forceAddEventListener(i[r]);
                        this._toAddedListeners.length = 0
                    }
                    0 !== this._toRemovedListeners.length && this._cleanToRemovedListeners()
                }
            },
            _cleanToRemovedListeners: function() {
                for (var t = this._toRemovedListeners, e = 0; e < t.length; e++) {
                    var i = t[e]
                      , n = this._listenersMap[i._getListenerID()];
                    if (n) {
                        var r, s = n.getFixedPriorityListeners(), a = n.getSceneGraphPriorityListeners();
                        a && -1 !== (r = a.indexOf(i)) && a.splice(r, 1),
                        s && -1 !== (r = s.indexOf(i)) && s.splice(r, 1)
                    }
                }
                t.length = 0
            },
            _onTouchEventCallback: function(t, e) {
                if (!t._isRegistered())
                    return !1;
                var i = e.event
                  , n = i.currentTouch;
                i.currentTarget = t._node;
                var r, s = !1, o = i.getEventCode(), l = cc.Event.EventTouch;
                if (o === l.BEGAN) {
                    if (!cc.macro.ENABLE_MULTI_TOUCH && a._currentTouch) {
                        var h = a._currentTouchListener._node;
                        if (h && h.activeInHierarchy)
                            return !1
                    }
                    t.onTouchBegan && (s = t.onTouchBegan(n, i)) && t._registered && (t._claimedTouches.push(n),
                    a._currentTouchListener = t,
                    a._currentTouch = n)
                } else if (t._claimedTouches.length > 0 && -1 !== (r = t._claimedTouches.indexOf(n))) {
                    if (s = !0,
                    !cc.macro.ENABLE_MULTI_TOUCH && a._currentTouch && a._currentTouch !== n)
                        return !1;
                    o === l.MOVED && t.onTouchMoved ? t.onTouchMoved(n, i) : o === l.ENDED ? (t.onTouchEnded && t.onTouchEnded(n, i),
                    t._registered && t._claimedTouches.splice(r, 1),
                    a._clearCurTouch()) : o === l.CANCELED && (t.onTouchCancelled && t.onTouchCancelled(n, i),
                    t._registered && t._claimedTouches.splice(r, 1),
                    a._clearCurTouch())
                }
                return i.isStopped() ? (a._updateTouchListeners(i),
                !0) : !(!s || !t.swallowTouches || (e.needsMutableSet && e.touches.splice(n, 1),
                0))
            },
            _dispatchTouchEvent: function(t) {
                this._sortEventListeners(n.TOUCH_ONE_BY_ONE),
                this._sortEventListeners(n.TOUCH_ALL_AT_ONCE);
                var e = this._getListeners(n.TOUCH_ONE_BY_ONE)
                  , i = this._getListeners(n.TOUCH_ALL_AT_ONCE);
                if (null !== e || null !== i) {
                    var r = t.getTouches()
                      , s = cc.js.array.copy(r)
                      , a = {
                        event: t,
                        needsMutableSet: e && i,
                        touches: s,
                        selTouch: null
                    };
                    if (e)
                        for (var o = 0; o < r.length; o++)
                            t.currentTouch = r[o],
                            t._propagationStopped = t._propagationImmediateStopped = !1,
                            this._dispatchEventToListeners(e, this._onTouchEventCallback, a);
                    i && s.length > 0 && (this._dispatchEventToListeners(i, this._onTouchesEventCallback, {
                        event: t,
                        touches: s
                    }),
                    t.isStopped()) || this._updateTouchListeners(t)
                }
            },
            _onTouchesEventCallback: function(t, e) {
                if (!t._registered)
                    return !1;
                var i = cc.Event.EventTouch
                  , n = e.event
                  , r = e.touches
                  , s = n.getEventCode();
                return n.currentTarget = t._node,
                s === i.BEGAN && t.onTouchesBegan ? t.onTouchesBegan(r, n) : s === i.MOVED && t.onTouchesMoved ? t.onTouchesMoved(r, n) : s === i.ENDED && t.onTouchesEnded ? t.onTouchesEnded(r, n) : s === i.CANCELED && t.onTouchesCancelled && t.onTouchesCancelled(r, n),
                !!n.isStopped() && (a._updateTouchListeners(n),
                !0)
            },
            _associateNodeAndEventListener: function(t, e) {
                var i = this._nodeListenersMap[t._id];
                i || (i = [],
                this._nodeListenersMap[t._id] = i),
                i.push(e)
            },
            _dissociateNodeAndEventListener: function(t, e) {
                var i = this._nodeListenersMap[t._id];
                i && (cc.js.array.remove(i, e),
                0 === i.length && delete this._nodeListenersMap[t._id])
            },
            _dispatchEventToListeners: function(t, e, i) {
                var n, r, s = !1, a = t.getFixedPriorityListeners(), o = t.getSceneGraphPriorityListeners(), l = 0;
                if (a && 0 !== a.length)
                    for (; l < t.gt0Index; ++l)
                        if ((r = a[l]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                            s = !0;
                            break
                        }
                if (o && !s)
                    for (n = 0; n < o.length; n++)
                        if ((r = o[n]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                            s = !0;
                            break
                        }
                if (a && !s)
                    for (; l < a.length; ++l)
                        if ((r = a[l]).isEnabled() && !r._isPaused() && r._isRegistered() && e(r, i)) {
                            s = !0;
                            break
                        }
            },
            _setDirty: function(t, e) {
                var i = this._priorityDirtyFlagMap;
                null == i[t] ? i[t] = e : i[t] = e | i[t]
            },
            _sortNumberAsc: function(t, e) {
                return t - e
            },
            hasEventListener: function(t) {
                return !!this._getListeners(t)
            },
            addListener: function(t, e) {
                if (cc.assertID(t && e, 3503),
                cc.js.isNumber(e) || e instanceof cc._BaseNode) {
                    if (t instanceof cc.EventListener) {
                        if (t._isRegistered())
                            return void cc.logID(3505)
                    } else
                        cc.assertID(!cc.js.isNumber(e), 3504),
                        t = cc.EventListener.create(t);
                    if (t.checkAvailable()) {
                        if (cc.js.isNumber(e)) {
                            if (0 === e)
                                return void cc.logID(3500);
                            t._setSceneGraphPriority(null),
                            t._setFixedPriority(e),
                            t._setRegistered(!0),
                            t._setPaused(!1),
                            this._addListener(t)
                        } else
                            t._setSceneGraphPriority(e),
                            t._setFixedPriority(0),
                            t._setRegistered(!0),
                            this._addListener(t);
                        return t
                    }
                } else
                    cc.warnID(3506)
            },
            addCustomListener: function(t, e) {
                var i = new cc.EventListener.create({
                    event: cc.EventListener.CUSTOM,
                    eventName: t,
                    callback: e
                });
                return this.addListener(i, 1),
                i
            },
            removeListener: function(t) {
                if (null != t) {
                    var e, i = this._listenersMap;
                    for (var n in i) {
                        var r = i[n]
                          , s = r.getFixedPriorityListeners()
                          , a = r.getSceneGraphPriorityListeners();
                        if ((e = this._removeListenerInVector(a, t)) ? this._setDirty(t._getListenerID(), this.DIRTY_SCENE_GRAPH_PRIORITY) : (e = this._removeListenerInVector(s, t)) && this._setDirty(t._getListenerID(), this.DIRTY_FIXED_PRIORITY),
                        r.empty() && (delete this._priorityDirtyFlagMap[t._getListenerID()],
                        delete i[n]),
                        e)
                            break
                    }
                    if (!e)
                        for (var o = this._toAddedListeners, l = o.length - 1; l >= 0; l--) {
                            var h = o[l];
                            if (h === t) {
                                cc.js.array.removeAt(o, l),
                                h._setRegistered(!1);
                                break
                            }
                        }
                    this._currentTouchListener === t && this._clearCurTouch()
                }
            },
            _clearCurTouch: function() {
                this._currentTouchListener = null,
                this._currentTouch = null
            },
            _removeListenerInCallback: function(t, e) {
                if (null == t)
                    return !1;
                for (var i = t.length - 1; i >= 0; i--) {
                    var n = t[i];
                    if (n._onCustomEvent === e || n._onEvent === e)
                        return n._setRegistered(!1),
                        null != n._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(n._getSceneGraphPriority(), n),
                        n._setSceneGraphPriority(null)),
                        0 === this._inDispatch ? cc.js.array.removeAt(t, i) : this._toRemovedListeners.push(n),
                        !0
                }
                return !1
            },
            _removeListenerInVector: function(t, e) {
                if (null == t)
                    return !1;
                for (var i = t.length - 1; i >= 0; i--) {
                    var n = t[i];
                    if (n === e)
                        return n._setRegistered(!1),
                        null != n._getSceneGraphPriority() && (this._dissociateNodeAndEventListener(n._getSceneGraphPriority(), n),
                        n._setSceneGraphPriority(null)),
                        0 === this._inDispatch ? cc.js.array.removeAt(t, i) : this._toRemovedListeners.push(n),
                        !0
                }
                return !1
            },
            removeListeners: function(t, e) {
                var i = this;
                if (cc.js.isNumber(t) || t instanceof cc._BaseNode)
                    if (void 0 !== t._id) {
                        var r, s = i._nodeListenersMap[t._id];
                        if (s) {
                            var a = cc.js.array.copy(s);
                            for (r = 0; r < a.length; r++)
                                i.removeListener(a[r]);
                            delete i._nodeListenersMap[t._id]
                        }
                        var o = i._toAddedListeners;
                        for (r = 0; r < o.length; ) {
                            var l = o[r];
                            l._getSceneGraphPriority() === t ? (l._setSceneGraphPriority(null),
                            l._setRegistered(!1),
                            o.splice(r, 1)) : ++r
                        }
                        if (!0 === e) {
                            var h, c = t.children;
                            for (r = 0,
                            h = c.length; r < h; r++)
                                i.removeListeners(c[r], !0)
                        }
                    } else
                        t === cc.EventListener.TOUCH_ONE_BY_ONE ? i._removeListenersForListenerID(n.TOUCH_ONE_BY_ONE) : t === cc.EventListener.TOUCH_ALL_AT_ONCE ? i._removeListenersForListenerID(n.TOUCH_ALL_AT_ONCE) : t === cc.EventListener.MOUSE ? i._removeListenersForListenerID(n.MOUSE) : t === cc.EventListener.ACCELERATION ? i._removeListenersForListenerID(n.ACCELERATION) : t === cc.EventListener.KEYBOARD ? i._removeListenersForListenerID(n.KEYBOARD) : cc.logID(3501);
                else
                    cc.warnID(3506)
            },
            removeCustomListeners: function(t) {
                this._removeListenersForListenerID(t)
            },
            removeAllListeners: function() {
                var t = this._listenersMap
                  , e = this._internalCustomListenerIDs;
                for (var i in t)
                    -1 === e.indexOf(i) && this._removeListenersForListenerID(i)
            },
            setPriority: function(t, e) {
                if (null != t) {
                    var i = this._listenersMap;
                    for (var n in i) {
                        var r = i[n].getFixedPriorityListeners();
                        if (r && -1 !== r.indexOf(t))
                            return null != t._getSceneGraphPriority() && cc.logID(3502),
                            void (t._getFixedPriority() !== e && (t._setFixedPriority(e),
                            this._setDirty(t._getListenerID(), this.DIRTY_FIXED_PRIORITY)))
                    }
                }
            },
            setEnabled: function(t) {
                this._isEnabled = t
            },
            isEnabled: function() {
                return this._isEnabled
            },
            dispatchEvent: function(t) {
                if (this._isEnabled)
                    if (this._updateDirtyFlagForSceneGraph(),
                    this._inDispatch++,
                    t && t.getType) {
                        if (t.getType().startsWith(cc.Event.TOUCH))
                            return this._dispatchTouchEvent(t),
                            void this._inDispatch--;
                        var e = s(t);
                        this._sortEventListeners(e);
                        var i = this._listenersMap[e];
                        null != i && (this._dispatchEventToListeners(i, this._onListenerCallback, t),
                        this._onUpdateListeners(i)),
                        this._inDispatch--
                    } else
                        cc.errorID(3511)
            },
            _onListenerCallback: function(t, e) {
                return e.currentTarget = t._target,
                t._onEvent(e),
                e.isStopped()
            },
            dispatchCustomEvent: function(t, e) {
                var i = new cc.Event.EventCustom(t);
                i.setUserData(e),
                this.dispatchEvent(i)
            }
        };
        i.get(cc, "eventManager", (function() {
            return cc.errorID(1405, "cc.eventManager", "cc.EventTarget or cc.systemEvent"),
            a
        }
        )),
        e.exports = cc.internal.eventManager = a
    }
    ), {
        "../platform/js": 214,
        "./CCEventListener": 135
    }],
    137: [(function() {
        "use strict";
        cc.Touch = function(t, e, i) {
            this._lastModified = 0,
            this.setTouchInfo(i, t, e)
        }
        ,
        cc.Touch.prototype = {
            constructor: cc.Touch,
            getLocation: function() {
                return cc.v2(this._point.x, this._point.y)
            },
            getLocationX: function() {
                return this._point.x
            },
            getLocationY: function() {
                return this._point.y
            },
            getPreviousLocation: function() {
                return cc.v2(this._prevPoint.x, this._prevPoint.y)
            },
            getStartLocation: function() {
                return cc.v2(this._startPoint.x, this._startPoint.y)
            },
            getDelta: function() {
                return this._point.sub(this._prevPoint)
            },
            getLocationInView: function() {
                return cc.v2(this._point.x, cc.view._designResolutionSize.height - this._point.y)
            },
            getPreviousLocationInView: function() {
                return cc.v2(this._prevPoint.x, cc.view._designResolutionSize.height - this._prevPoint.y)
            },
            getStartLocationInView: function() {
                return cc.v2(this._startPoint.x, cc.view._designResolutionSize.height - this._startPoint.y)
            },
            getID: function() {
                return this._id
            },
            setTouchInfo: function(t, e, i) {
                this._prevPoint = this._point,
                this._point = cc.v2(e || 0, i || 0),
                this._id = t,
                this._startPointCaptured || (this._startPoint = cc.v2(this._point),
                cc.view._convertPointWithScale(this._startPoint),
                this._startPointCaptured = !0)
            },
            _setPoint: function(t, e) {
                void 0 === e ? (this._point.x = t.x,
                this._point.y = t.y) : (this._point.x = t,
                this._point.y = e)
            },
            _setPrevPoint: function(t, e) {
                this._prevPoint = void 0 === e ? cc.v2(t.x, t.y) : cc.v2(t || 0, e || 0)
            }
        }
    }
    ), {}],
    138: [(function(t, e) {
        "use strict";
        t("./CCEvent"),
        t("./CCTouch"),
        t("./CCEventListener");
        var i = t("./CCEventManager");
        e.exports = i
    }
    ), {
        "./CCEvent": 134,
        "./CCEventListener": 135,
        "./CCEventManager": 136,
        "./CCTouch": 137
    }],
    139: [(function(t, e) {
        "use strict";
        var i = cc.js
          , n = t("../platform/callbacks-invoker");
        function r() {
            n.call(this)
        }
        i.extend(r, n),
        r.prototype.emit = function(t, e) {
            var i = t.type
              , n = this._callbackTable[i];
            if (n) {
                var r = !n.isInvoking;
                n.isInvoking = !0;
                for (var s = n.callbackInfos, a = 0, o = s.length; a < o; ++a) {
                    var l = s[a];
                    if (l && l.callback && (l.callback.call(l.target, t, e),
                    t._propagationImmediateStopped))
                        break
                }
                r && (n.isInvoking = !1,
                n.containCanceled && n.purgeCanceled())
            }
        }
        ,
        e.exports = r
    }
    ), {
        "../platform/callbacks-invoker": 206
    }],
    140: [(function(t, e) {
        "use strict";
        var i = t("../platform/js")
          , n = t("../platform/callbacks-invoker")
          , r = i.array.fastRemove;
        function s() {
            n.call(this)
        }
        i.extend(s, n);
        var a = s.prototype;
        a.__on = a.on,
        a.on = function(t, e, i, n) {
            if (e)
                return this.hasEventListener(t, e, i) || (this.__on(t, e, i, n),
                i && i.__eventTargets && i.__eventTargets.push(this)),
                e;
            cc.errorID(6800)
        }
        ,
        a.__off = a.off,
        a.off = function(t, e, i) {
            if (e)
                this.__off(t, e, i),
                i && i.__eventTargets && r(i.__eventTargets, this);
            else {
                var n = this._callbackTable[t];
                if (!n)
                    return;
                for (var s = n.callbackInfos, a = 0; a < s.length; ++a) {
                    var o = s[a] && s[a].target;
                    o && o.__eventTargets && r(o.__eventTargets, this)
                }
                this.removeAll(t)
            }
        }
        ,
        a.targetOff = function(t) {
            this.removeAll(t),
            t && t.__eventTargets && r(t.__eventTargets, this)
        }
        ,
        a.once = function(t, e, i) {
            this.on(t, e, i, !0)
        }
        ,
        a.dispatchEvent = function(t) {
            this.emit(t.type, t)
        }
        ,
        a.clear = function() {
            for (var t in this._callbackTable)
                for (var e = this._callbackTable[t].callbackInfos, i = e.length - 1; i >= 0; i--) {
                    var n = e[i];
                    n && this.off(t, n.callback, n.target)
                }
        }
        ,
        cc.EventTarget = e.exports = s
    }
    ), {
        "../platform/callbacks-invoker": 206,
        "../platform/js": 214
    }],
    141: [(function(t, e) {
        "use strict";
        var i = t("../platform/js");
        cc.Event = function(t, e) {
            this.type = t,
            this.bubbles = !!e,
            this.target = null,
            this.currentTarget = null,
            this.eventPhase = 0,
            this._propagationStopped = !1,
            this._propagationImmediateStopped = !1
        }
        ,
        cc.Event.prototype = {
            constructor: cc.Event,
            unuse: function() {
                this.type = cc.Event.NO_TYPE,
                this.target = null,
                this.currentTarget = null,
                this.eventPhase = cc.Event.NONE,
                this._propagationStopped = !1,
                this._propagationImmediateStopped = !1
            },
            reuse: function(t, e) {
                this.type = t,
                this.bubbles = e || !1
            },
            stopPropagation: function() {
                this._propagationStopped = !0
            },
            stopPropagationImmediate: function() {
                this._propagationImmediateStopped = !0
            },
            isStopped: function() {
                return this._propagationStopped || this._propagationImmediateStopped
            },
            getCurrentTarget: function() {
                return this.currentTarget
            },
            getType: function() {
                return this.type
            }
        },
        cc.Event.NO_TYPE = "no_type",
        cc.Event.TOUCH = "touch",
        cc.Event.MOUSE = "mouse",
        cc.Event.KEYBOARD = "keyboard",
        cc.Event.ACCELERATION = "acceleration",
        cc.Event.NONE = 0,
        cc.Event.CAPTURING_PHASE = 1,
        cc.Event.AT_TARGET = 2,
        cc.Event.BUBBLING_PHASE = 3;
        var n = function(t, e) {
            cc.Event.call(this, t, e),
            this.detail = null
        };
        i.extend(n, cc.Event),
        n.prototype.reset = n,
        n.prototype.setUserData = function(t) {
            this.detail = t
        }
        ,
        n.prototype.getUserData = function() {
            return this.detail
        }
        ,
        n.prototype.getEventName = cc.Event.prototype.getType;
        var r = new i.Pool(10);
        n.put = function(t) {
            r.put(t)
        }
        ,
        n.get = function(t, e) {
            var i = r._get();
            return i ? i.reset(t, e) : i = new n(t,e),
            i
        }
        ,
        cc.Event.EventCustom = n,
        e.exports = cc.Event
    }
    ), {
        "../platform/js": 214
    }],
    142: [(function(t) {
        "use strict";
        t("./event"),
        t("./event-listeners"),
        t("./event-target"),
        t("./system-event")
    }
    ), {
        "./event": 141,
        "./event-listeners": 139,
        "./event-target": 140,
        "./system-event": 143
    }],
    143: [(function(t, e) {
        "use strict";
        var i = t("../event/event-target")
          , n = t("../event-manager")
          , r = t("../platform/CCInputManager")
          , s = cc.Enum({
            KEY_DOWN: "keydown",
            KEY_UP: "keyup",
            DEVICEMOTION: "devicemotion"
        })
          , a = null
          , o = null
          , l = cc.Class({
            name: "SystemEvent",
            extends: i,
            statics: {
                EventType: s
            },
            setAccelerometerEnabled: function(t) {
                t && window.DeviceMotionEvent && "function" == typeof DeviceMotionEvent.requestPermission ? DeviceMotionEvent.requestPermission().then((function(t) {
                    console.log("Device Motion Event request permission: " + t),
                    r.setAccelerometerEnabled("granted" === t)
                }
                )) : r.setAccelerometerEnabled(t)
            },
            setAccelerometerInterval: function(t) {
                r.setAccelerometerInterval(t)
            },
            on: function(t, e, i, r) {
                this._super(t, e, i, r),
                t !== s.KEY_DOWN && t !== s.KEY_UP || (a || (a = cc.EventListener.create({
                    event: cc.EventListener.KEYBOARD,
                    onKeyPressed: function(t, e) {
                        e.type = s.KEY_DOWN,
                        cc.systemEvent.dispatchEvent(e)
                    },
                    onKeyReleased: function(t, e) {
                        e.type = s.KEY_UP,
                        cc.systemEvent.dispatchEvent(e)
                    }
                })),
                n.hasEventListener(cc.EventListener.ListenerID.KEYBOARD) || n.addListener(a, 1)),
                t === s.DEVICEMOTION && (o || (o = cc.EventListener.create({
                    event: cc.EventListener.ACCELERATION,
                    callback: function(t, e) {
                        e.type = s.DEVICEMOTION,
                        cc.systemEvent.dispatchEvent(e)
                    }
                })),
                n.hasEventListener(cc.EventListener.ListenerID.ACCELERATION) || n.addListener(o, 1))
            },
            off: function(t, e, i) {
                if (this._super(t, e, i),
                a && (t === s.KEY_DOWN || t === s.KEY_UP)) {
                    var r = this.hasEventListener(s.KEY_DOWN)
                      , l = this.hasEventListener(s.KEY_UP);
                    r || l || n.removeListener(a)
                }
                o && t === s.DEVICEMOTION && n.removeListener(o)
            }
        });
        cc.SystemEvent = e.exports = l,
        cc.systemEvent = new cc.SystemEvent
    }
    ), {
        "../event-manager": 138,
        "../event/event-target": 140,
        "../platform/CCInputManager": 197
    }],
    144: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("../value-types/vec3"))
          , r = a(t("../value-types/mat3"))
          , s = a(t("./enums"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var o = new n.default
          , l = new n.default
          , h = new r.default
          , c = function(t, e, i) {
            var r = h.m
              , s = i.m;
            r[0] = Math.abs(s[0]),
            r[1] = Math.abs(s[1]),
            r[2] = Math.abs(s[2]),
            r[3] = Math.abs(s[4]),
            r[4] = Math.abs(s[5]),
            r[5] = Math.abs(s[6]),
            r[6] = Math.abs(s[8]),
            r[7] = Math.abs(s[9]),
            r[8] = Math.abs(s[10]),
            n.default.transformMat3(t, e, h)
        }
          , u = (function() {
            function t(t, e, i, r, a, o) {
                this.center = void 0,
                this.halfExtents = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_AABB,
                this.center = new n.default(t,e,i),
                this.halfExtents = new n.default(r,a,o)
            }
            t.create = function(e, i, n, r, s, a) {
                return new t(e,i,n,r,s,a)
            }
            ,
            t.clone = function(e) {
                return new t(e.center.x,e.center.y,e.center.z,e.halfExtents.x,e.halfExtents.y,e.halfExtents.z)
            }
            ,
            t.copy = function(t, e) {
                return n.default.copy(t.center, e.center),
                n.default.copy(t.halfExtents, e.halfExtents),
                t
            }
            ,
            t.fromPoints = function(t, e, i) {
                return n.default.scale(t.center, n.default.add(o, e, i), .5),
                n.default.scale(t.halfExtents, n.default.sub(l, i, e), .5),
                t
            }
            ,
            t.set = function(t, e, i, r, s, a, o) {
                return n.default.set(t.center, e, i, r),
                n.default.set(t.halfExtents, s, a, o),
                t
            }
            ;
            var e = t.prototype;
            return e.getBoundary = function(t, e) {
                n.default.sub(t, this.center, this.halfExtents),
                n.default.add(e, this.center, this.halfExtents)
            }
            ,
            e.transform = function(t, e, i, r, s) {
                s || (s = this),
                n.default.transformMat4(s.center, this.center, t),
                c(s.halfExtents, this.halfExtents, t)
            }
            ,
            t
        }
        )();
        i.default = u,
        e.exports = i.default
    }
    ), {
        "../value-types/mat3": 283,
        "../value-types/vec3": 292,
        "./enums": 146
    }],
    145: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.point_plane = _,
        i.pt_point_plane = function(t, e, i) {
            var r = _(e, i);
            return n.Vec3.subtract(t, e, n.Vec3.multiplyScalar(t, i.n, r))
        }
        ,
        i.pt_point_aabb = function(t, e, i) {
            return n.Vec3.copy(t, e),
            n.Vec3.subtract(l, i.center, i.halfExtents),
            n.Vec3.add(h, i.center, i.halfExtents),
            t.x = t.x < l.x ? l.x : t.x,
            t.y = t.y < l.x ? l.y : t.y,
            t.z = t.z < l.x ? l.z : t.z,
            t.x = t.x > h.x ? h.x : t.x,
            t.y = t.y > h.x ? h.y : t.y,
            t.z = t.z > h.x ? h.z : t.z,
            t
        }
        ,
        i.pt_point_obb = function(t, e, i) {
            var l = i.orientation.m;
            n.Vec3.set(r, l[0], l[1], l[2]),
            n.Vec3.set(s, l[3], l[4], l[5]),
            n.Vec3.set(a, l[6], l[7], l[8]),
            c[0] = r,
            c[1] = s,
            c[2] = a,
            u[0] = i.halfExtents.x,
            u[1] = i.halfExtents.y,
            u[2] = i.halfExtents.z,
            n.Vec3.subtract(o, e, i.center),
            n.Vec3.set(t, i.center.x, i.center.y, i.center.z);
            for (var h = 0; h < 3; h++) {
                var _ = n.Vec3.dot(o, c[h]);
                _ > u[h] && (_ = u[h]),
                _ < -u[h] && (_ = -u[h]),
                t.x += _ * c[h].x,
                t.y += _ * c[h].y,
                t.z += _ * c[h].z
            }
            return t
        }
        ;
        var n = t("../value-types")
          , r = new n.Vec3
          , s = new n.Vec3
          , a = new n.Vec3
          , o = new n.Vec3
          , l = new n.Vec3
          , h = new n.Vec3
          , c = new Array(3)
          , u = new Array(3);
        function _(t, e) {
            return n.Vec3.dot(e.n, t) - e.d
        }
    }
    ), {
        "../value-types": 282
    }],
    146: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0,
        i.default = {
            SHAPE_RAY: 1,
            SHAPE_LINE: 2,
            SHAPE_SPHERE: 4,
            SHAPE_AABB: 8,
            SHAPE_OBB: 16,
            SHAPE_PLANE: 32,
            SHAPE_TRIANGLE: 64,
            SHAPE_FRUSTUM: 128,
            SHAPE_FRUSTUM_ACCURATE: 256
        },
        e.exports = i.default
    }
    ), {}],
    147: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("../value-types")
          , r = a(t("./enums"))
          , s = a(t("./plane"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var l = new Array(8);
        l[0] = new n.Vec3(1,1,1),
        l[1] = new n.Vec3(-1,1,1),
        l[2] = new n.Vec3(-1,-1,1),
        l[3] = new n.Vec3(1,-1,1),
        l[4] = new n.Vec3(1,1,-1),
        l[5] = new n.Vec3(-1,1,-1),
        l[6] = new n.Vec3(-1,-1,-1),
        l[7] = new n.Vec3(1,-1,-1);
        var h, c = (function() {
            function t() {
                this.planes = void 0,
                this.vertices = void 0,
                this._type = void 0,
                this._type = r.default.SHAPE_FRUSTUM,
                this.planes = new Array(6);
                for (var t = 0; t < 6; ++t)
                    this.planes[t] = s.default.create(0, 0, 0, 0);
                this.vertices = new Array(8);
                for (var e = 0; e < 8; ++e)
                    this.vertices[e] = new n.Vec3
            }
            t.create = function() {
                return new t
            }
            ,
            t.clone = function(e) {
                return t.copy(new t, e)
            }
            ,
            t.copy = function(t, e) {
                t._type = e._type;
                for (var i = 0; i < 6; ++i)
                    s.default.copy(t.planes[i], e.planes[i]);
                for (var r = 0; r < 8; ++r)
                    n.Vec3.copy(t.vertices[r], e.vertices[r]);
                return t
            }
            ;
            var e, i, a = t.prototype;
            return a.update = function(t, e) {
                var i = t.m;
                if (n.Vec3.set(this.planes[0].n, i[3] + i[0], i[7] + i[4], i[11] + i[8]),
                this.planes[0].d = -(i[15] + i[12]),
                n.Vec3.set(this.planes[1].n, i[3] - i[0], i[7] - i[4], i[11] - i[8]),
                this.planes[1].d = -(i[15] - i[12]),
                n.Vec3.set(this.planes[2].n, i[3] + i[1], i[7] + i[5], i[11] + i[9]),
                this.planes[2].d = -(i[15] + i[13]),
                n.Vec3.set(this.planes[3].n, i[3] - i[1], i[7] - i[5], i[11] - i[9]),
                this.planes[3].d = -(i[15] - i[13]),
                n.Vec3.set(this.planes[4].n, i[3] + i[2], i[7] + i[6], i[11] + i[10]),
                this.planes[4].d = -(i[15] + i[14]),
                n.Vec3.set(this.planes[5].n, i[3] - i[2], i[7] - i[6], i[11] - i[10]),
                this.planes[5].d = -(i[15] - i[14]),
                this._type === r.default.SHAPE_FRUSTUM_ACCURATE) {
                    for (var s = 0; s < 6; s++) {
                        var a = this.planes[s]
                          , o = 1 / a.n.length();
                        n.Vec3.multiplyScalar(a.n, a.n, o),
                        a.d *= o
                    }
                    for (var h = 0; h < 8; h++)
                        n.Vec3.transformMat4(this.vertices[h], l[h], e)
                }
            }
            ,
            a.transform = function(t) {
                if (this._type === r.default.SHAPE_FRUSTUM_ACCURATE) {
                    for (var e = 0; e < 8; e++)
                        n.Vec3.transformMat4(this.vertices[e], this.vertices[e], t);
                    s.default.fromPoints(this.planes[0], this.vertices[1], this.vertices[5], this.vertices[6]),
                    s.default.fromPoints(this.planes[1], this.vertices[3], this.vertices[7], this.vertices[4]),
                    s.default.fromPoints(this.planes[2], this.vertices[6], this.vertices[7], this.vertices[3]),
                    s.default.fromPoints(this.planes[3], this.vertices[0], this.vertices[4], this.vertices[5]),
                    s.default.fromPoints(this.planes[4], this.vertices[2], this.vertices[3], this.vertices[0]),
                    s.default.fromPoints(this.planes[0], this.vertices[7], this.vertices[6], this.vertices[5])
                }
            }
            ,
            e = t,
            (i = [{
                key: "accurate",
                set: function(t) {
                    this._type = t ? r.default.SHAPE_FRUSTUM_ACCURATE : r.default.SHAPE_FRUSTUM
                }
            }]) && o(e.prototype, i),
            t
        }
        )();
        i.default = c,
        c.createOrtho = (h = new n.Vec3,
        function(t, e, i, r, a, o) {
            var l = e / 2
              , c = i / 2;
            n.Vec3.set(h, l, c, r),
            n.Vec3.transformMat4(t.vertices[0], h, o),
            n.Vec3.set(h, -l, c, r),
            n.Vec3.transformMat4(t.vertices[1], h, o),
            n.Vec3.set(h, -l, -c, r),
            n.Vec3.transformMat4(t.vertices[2], h, o),
            n.Vec3.set(h, l, -c, r),
            n.Vec3.transformMat4(t.vertices[3], h, o),
            n.Vec3.set(h, l, c, a),
            n.Vec3.transformMat4(t.vertices[4], h, o),
            n.Vec3.set(h, -l, c, a),
            n.Vec3.transformMat4(t.vertices[5], h, o),
            n.Vec3.set(h, -l, -c, a),
            n.Vec3.transformMat4(t.vertices[6], h, o),
            n.Vec3.set(h, l, -c, a),
            n.Vec3.transformMat4(t.vertices[7], h, o),
            s.default.fromPoints(t.planes[0], t.vertices[1], t.vertices[6], t.vertices[5]),
            s.default.fromPoints(t.planes[1], t.vertices[3], t.vertices[4], t.vertices[7]),
            s.default.fromPoints(t.planes[2], t.vertices[6], t.vertices[3], t.vertices[7]),
            s.default.fromPoints(t.planes[3], t.vertices[0], t.vertices[5], t.vertices[4]),
            s.default.fromPoints(t.planes[4], t.vertices[2], t.vertices[0], t.vertices[3]),
            s.default.fromPoints(t.planes[0], t.vertices[7], t.vertices[5], t.vertices[6])
        }
        ),
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146,
        "./plane": 152
    }],
    148: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = {
            enums: !0,
            Triangle: !0,
            Aabb: !0,
            Ray: !0,
            intersect: !0,
            Sphere: !0,
            Obb: !0,
            Frustum: !0,
            Line: !0,
            Plane: !0
        };
        i.Plane = i.Line = i.Frustum = i.Obb = i.Sphere = i.intersect = i.Ray = i.Aabb = i.Triangle = i.enums = void 0;
        var r = p(t("./enums"));
        i.enums = r.default;
        var s = p(t("./triangle"));
        i.Triangle = s.default;
        var a = p(t("./aabb"));
        i.Aabb = a.default;
        var o = p(t("./ray"));
        i.Ray = o.default;
        var l = p(t("./intersect"));
        i.intersect = l.default;
        var h = p(t("./sphere"));
        i.Sphere = h.default;
        var c = p(t("./obb"));
        i.Obb = c.default;
        var u = p(t("./frustum"));
        i.Frustum = u.default;
        var _ = p(t("./line"));
        i.Line = _.default;
        var f = p(t("./plane"));
        i.Plane = f.default;
        var d = t("./distance");
        function p(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        Object.keys(d).forEach((function(t) {
            "default" !== t && "__esModule" !== t && (Object.prototype.hasOwnProperty.call(n, t) || t in i && i[t] === d[t] || (i[t] = d[t]))
        }
        )),
        cc.geomUtils = e.exports
    }
    ), {
        "./aabb": 144,
        "./distance": 145,
        "./enums": 146,
        "./frustum": 147,
        "./intersect": 149,
        "./line": 150,
        "./obb": 151,
        "./plane": 152,
        "./ray": 153,
        "./sphere": 154,
        "./triangle": 155
    }],
    149: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = _(t("../../renderer/gfx"))
          , r = _(t("../../renderer/memop/recycle-pool"))
          , s = t("../value-types")
          , a = _(t("./aabb"))
          , o = (function(t) {
            if (t && t.__esModule)
                return t;
            if (null === t || "object" != typeof t && "function" != typeof t)
                return {
                    default: t
                };
            var e = u();
            if (e && e.has(t))
                return e.get(t);
            var i = {}
              , n = Object.defineProperty && Object.getOwnPropertyDescriptor;
            for (var r in t)
                if (Object.prototype.hasOwnProperty.call(t, r)) {
                    var s = n ? Object.getOwnPropertyDescriptor(t, r) : null;
                    s && (s.get || s.set) ? Object.defineProperty(i, r, s) : i[r] = t[r]
                }
            return i.default = t,
            e && e.set(t, i),
            i
        }
        )(t("./distance"))
          , l = _(t("./enums"))
          , h = _(t("./ray"))
          , c = _(t("./triangle"));
        function u() {
            if ("function" != typeof WeakMap)
                return null;
            var t = new WeakMap;
            return u = function() {
                return t
            }
            ,
            t
        }
        function _(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var f, d, p, m, y, v, g, A, x, b, C, T, S, w, E, M = (function() {
            var t = c.default.create()
              , e = 1 / 0;
            function i(t, e, i, n) {
                s.Vec3.set(t, e[i * n], e[i * n + 1], e[i * n + 2])
            }
            return function(r, s) {
                e = 1 / 0;
                for (var a = s._subMeshes, o = 0; o < a.length; o++)
                    if (a[o]._primitiveType === n.default.PT_TRIANGLES)
                        for (var l = s._subDatas[o] || s._subDatas[0], h = s._getAttrMeshData(o, n.default.ATTR_POSITION), c = l.getIData(Uint16Array), u = l.vfm.element(n.default.ATTR_POSITION).num, _ = 0; _ < c.length; _ += 3) {
                            i(t.a, h, c[_], u),
                            i(t.b, h, c[_ + 1], u),
                            i(t.c, h, c[_ + 2], u);
                            var f = P(r, t);
                            f > 0 && f < e && (e = f)
                        }
                return e
            }
        }
        )(), D = (function() {
            function t(e, i) {
                for (var n = e.children, r = n.length - 1; r >= 0; r--)
                    t(n[r], i);
                i(e)
            }
            function e(t, e) {
                return t.distance - e.distance
            }
            function i(t, e, i) {
                var n = i.m
                  , r = e.x
                  , s = e.y
                  , a = e.z
                  , o = n[3] * r + n[7] * s + n[11] * a;
                return o = o ? 1 / o : 1,
                t.x = (n[0] * r + n[4] * s + n[8] * a) * o,
                t.y = (n[1] * r + n[5] * s + n[9] * a) * o,
                t.z = (n[2] * r + n[6] * s + n[10] * a) * o,
                t
            }
            var n = new r.default(function() {
                return {
                    distance: 0,
                    node: null
                }
            }
            ,1)
              , o = []
              , l = a.default.create()
              , c = new s.Vec3
              , u = new s.Vec3
              , _ = new h.default
              , f = cc.mat4()
              , d = cc.mat4()
              , p = new s.Vec3;
            function m(t) {
                return t > 0 && t < 1 / 0
            }
            return function(r, h, y, v) {
                return n.reset(),
                o.length = 0,
                t(r = r || cc.director.getScene(), (function(t) {
                    if (!v || v(t)) {
                        s.Mat4.invert(d, t.getWorldMatrix(f)),
                        s.Vec3.transformMat4(_.o, h.o, d),
                        s.Vec3.normalize(_.d, i(_.d, h.d, d));
                        var e = 1 / 0
                          , r = t._renderComponent;
                        if (r instanceof cc.MeshRenderer ? e = V(_, r._boundingBox) : t.width && t.height && (s.Vec3.set(c, -t.width * t.anchorX, -t.height * t.anchorY, t.z),
                        s.Vec3.set(u, t.width * (1 - t.anchorX), t.height * (1 - t.anchorY), t.z),
                        a.default.fromPoints(l, c, u),
                        e = V(_, l)),
                        m(e) && (y && (e = y(_, t, e)),
                        m(e))) {
                            s.Vec3.scale(p, _.d, e),
                            i(p, p, f);
                            var g = n.add();
                            g.node = t,
                            g.distance = s.Vec3.mag(p),
                            o.push(g)
                        }
                    }
                }
                )),
                o.sort(e),
                o
            }
        }
        )(), B = (f = new s.Vec3(0,0,0),
        function(t, e) {
            var i = s.Vec3.dot(t.d, e.n);
            if (Math.abs(i) < Number.EPSILON)
                return 0;
            s.Vec3.multiplyScalar(f, e.n, e.d);
            var n = s.Vec3.dot(s.Vec3.subtract(f, f, t.o), e.n) / i;
            return n < 0 ? 0 : n
        }
        ), I = (d = new s.Vec3(0,0,0),
        function(t, e) {
            s.Vec3.subtract(d, t.e, t.s);
            var i = (e.d - s.Vec3.dot(t.s, e.n)) / s.Vec3.dot(d, e.n);
            return i < 0 || i > 1 ? 0 : i
        }
        ), P = (function() {
            var t = new s.Vec3(0,0,0)
              , e = new s.Vec3(0,0,0)
              , i = new s.Vec3(0,0,0)
              , n = new s.Vec3(0,0,0)
              , r = new s.Vec3(0,0,0);
            return function(a, o, l) {
                s.Vec3.subtract(t, o.b, o.a),
                s.Vec3.subtract(e, o.c, o.a),
                s.Vec3.cross(i, a.d, e);
                var h = s.Vec3.dot(t, i);
                if (h < Number.EPSILON && (!l || h > -Number.EPSILON))
                    return 0;
                var c = 1 / h;
                s.Vec3.subtract(n, a.o, o.a);
                var u = s.Vec3.dot(n, i) * c;
                if (u < 0 || u > 1)
                    return 0;
                s.Vec3.cross(r, n, t);
                var _ = s.Vec3.dot(a.d, r) * c;
                if (_ < 0 || u + _ > 1)
                    return 0;
                var f = s.Vec3.dot(e, r) * c;
                return f < 0 ? 0 : f
            }
        }
        )(), R = P, O = (function() {
            var t = new s.Vec3(0,0,0)
              , e = new s.Vec3(0,0,0)
              , i = new s.Vec3(0,0,0)
              , n = new s.Vec3(0,0,0)
              , r = new s.Vec3(0,0,0)
              , a = new s.Vec3(0,0,0);
            return function(o, l, h) {
                s.Vec3.subtract(t, l.b, l.a),
                s.Vec3.subtract(e, l.c, l.a),
                s.Vec3.subtract(i, o.s, o.e),
                s.Vec3.cross(r, t, e);
                var c = s.Vec3.dot(i, r);
                if (c <= 0)
                    return 0;
                s.Vec3.subtract(n, o.s, l.a);
                var u = s.Vec3.dot(n, r);
                if (u < 0 || u > c)
                    return 0;
                s.Vec3.cross(a, i, n);
                var _ = s.Vec3.dot(e, a);
                if (_ < 0 || _ > c)
                    return 0;
                var f = -s.Vec3.dot(t, a);
                if (f < 0 || _ + f > c)
                    return 0;
                if (h) {
                    var d = 1 / c
                      , p = 1 - (_ *= d) - (f *= d);
                    s.Vec3.set(h, l.a.x * p + l.b.x * _ + l.c.x * f, l.a.y * p + l.b.y * _ + l.c.y * f, l.a.z * p + l.b.z * _ + l.c.z * f)
                }
                return 1
            }
        }
        )(), L = (p = new s.Vec3(0,0,0),
        m = new s.Vec3(0,0,0),
        y = new s.Vec3(0,0,0),
        v = new s.Vec3(0,0,0),
        g = new s.Vec3(0,0,0),
        A = new s.Vec3(0,0,0),
        x = new s.Vec3(0,0,0),
        function(t, e, i, n, r, a, o) {
            s.Vec3.subtract(p, e, t),
            s.Vec3.subtract(m, i, t),
            s.Vec3.subtract(y, n, t),
            s.Vec3.subtract(v, r, t),
            s.Vec3.cross(A, v, p);
            var l = s.Vec3.dot(m, A);
            if (l >= 0) {
                var h = -s.Vec3.dot(y, A);
                if (h < 0)
                    return 0;
                var c = s.Vec3.dot(s.Vec3.cross(x, p, y), m);
                if (c < 0)
                    return 0;
                if (o) {
                    var u = 1 / (h + l + c);
                    h *= u,
                    l *= u,
                    c *= u,
                    s.Vec3.set(o, i.x * h + n.x * l + r.x * c, i.y * h + n.y * l + r.y * c, i.z * h + n.z * l + r.z * c)
                }
            } else {
                s.Vec3.subtract(g, a, t);
                var _ = s.Vec3.dot(g, A);
                if (_ < 0)
                    return 0;
                var f = s.Vec3.dot(s.Vec3.cross(x, p, m), g);
                if (f < 0)
                    return 0;
                if (o) {
                    var d = 1 / (_ + (l = -l) + f);
                    _ *= d,
                    l *= d,
                    f *= d,
                    s.Vec3.set(o, i.x * _ + a.x * l + r.x * f, i.y * _ + a.y * l + r.y * f, i.z * _ + a.z * l + r.z * f)
                }
            }
            return 1
        }
        ), F = (function() {
            var t = new s.Vec3(0,0,0);
            return function(e, i) {
                var n = i.radius
                  , r = i.center
                  , a = e.o
                  , o = e.d
                  , l = n * n;
                s.Vec3.subtract(t, r, a);
                var h = t.lengthSqr()
                  , c = s.Vec3.dot(t, o)
                  , u = l - (h - c * c);
                if (u < 0)
                    return 0;
                var _ = Math.sqrt(u)
                  , f = h < l ? c + _ : c - _;
                return f < 0 ? 0 : f
            }
        }
        )(), V = (b = new s.Vec3,
        C = new s.Vec3,
        function(t, e) {
            var i = t.o
              , n = t.d
              , r = 1 / n.x
              , a = 1 / n.y
              , o = 1 / n.z;
            s.Vec3.subtract(b, e.center, e.halfExtents),
            s.Vec3.add(C, e.center, e.halfExtents);
            var l = (b.x - i.x) * r
              , h = (C.x - i.x) * r
              , c = (b.y - i.y) * a
              , u = (C.y - i.y) * a
              , _ = (b.z - i.z) * o
              , f = (C.z - i.z) * o
              , d = Math.max(Math.max(Math.min(l, h), Math.min(c, u)), Math.min(_, f))
              , p = Math.min(Math.min(Math.max(l, h), Math.max(c, u)), Math.max(_, f));
            return p < 0 || d > p ? 0 : d
        }
        ), N = V, k = (function() {
            var t = new s.Vec3
              , e = new s.Vec3
              , i = new s.Vec3
              , n = new s.Vec3
              , r = new s.Vec3
              , a = new s.Vec3
              , o = new s.Vec3
              , l = new Array(3)
              , h = new Array(3)
              , c = new Array(3)
              , u = new Array(6);
            return function(_, f) {
                l[0] = f.halfExtents.x,
                l[1] = f.halfExtents.y,
                l[2] = f.halfExtents.z,
                t = f.center,
                e = _.o,
                i = _.d;
                var d = f.orientation.m;
                s.Vec3.set(n, d[0], d[1], d[2]),
                s.Vec3.set(r, d[3], d[4], d[5]),
                s.Vec3.set(a, d[6], d[7], d[8]),
                s.Vec3.subtract(o, t, e),
                h[0] = s.Vec3.dot(n, i),
                h[1] = s.Vec3.dot(r, i),
                h[2] = s.Vec3.dot(a, i),
                c[0] = s.Vec3.dot(n, o),
                c[1] = s.Vec3.dot(r, o),
                c[2] = s.Vec3.dot(a, o);
                for (var p = 0; p < 3; ++p) {
                    if (0 === h[p]) {
                        if (-c[p] - l[p] > 0 || -c[p] + l[p] < 0)
                            return 0;
                        h[p] = 1e-7
                    }
                    u[2 * p + 0] = (c[p] + l[p]) / h[p],
                    u[2 * p + 1] = (c[p] - l[p]) / h[p]
                }
                var m = Math.max(Math.max(Math.min(u[0], u[1]), Math.min(u[2], u[3])), Math.min(u[4], u[5]))
                  , y = Math.min(Math.min(Math.max(u[0], u[1]), Math.max(u[2], u[3])), Math.max(u[4], u[5]));
                return y < 0 || m > y || m < 0 ? 0 : m
            }
        }
        )(), G = (T = new s.Vec3,
        S = new s.Vec3,
        w = new s.Vec3,
        E = new s.Vec3,
        function(t, e) {
            return s.Vec3.subtract(T, t.center, t.halfExtents),
            s.Vec3.add(S, t.center, t.halfExtents),
            s.Vec3.subtract(w, e.center, e.halfExtents),
            s.Vec3.add(E, e.center, e.halfExtents),
            T.x <= E.x && S.x >= w.x && T.y <= E.y && S.y >= w.y && T.z <= E.z && S.z >= w.z
        }
        );
        function U(t, e, i) {
            s.Vec3.set(i[0], t.x, e.y, e.z),
            s.Vec3.set(i[1], t.x, e.y, t.z),
            s.Vec3.set(i[2], t.x, t.y, e.z),
            s.Vec3.set(i[3], t.x, t.y, t.z),
            s.Vec3.set(i[4], e.x, e.y, e.z),
            s.Vec3.set(i[5], e.x, e.y, t.z),
            s.Vec3.set(i[6], e.x, t.y, e.z),
            s.Vec3.set(i[7], e.x, t.y, t.z)
        }
        function z(t, e, i, n, r, a) {
            s.Vec3.set(a[0], t.x + i.x * e.x + n.x * e.y + r.x * e.z, t.y + i.y * e.x + n.y * e.y + r.y * e.z, t.z + i.z * e.x + n.z * e.y + r.z * e.z),
            s.Vec3.set(a[1], t.x - i.x * e.x + n.x * e.y + r.x * e.z, t.y - i.y * e.x + n.y * e.y + r.y * e.z, t.z - i.z * e.x + n.z * e.y + r.z * e.z),
            s.Vec3.set(a[2], t.x + i.x * e.x - n.x * e.y + r.x * e.z, t.y + i.y * e.x - n.y * e.y + r.y * e.z, t.z + i.z * e.x - n.z * e.y + r.z * e.z),
            s.Vec3.set(a[3], t.x + i.x * e.x + n.x * e.y - r.x * e.z, t.y + i.y * e.x + n.y * e.y - r.y * e.z, t.z + i.z * e.x + n.z * e.y - r.z * e.z),
            s.Vec3.set(a[4], t.x - i.x * e.x - n.x * e.y - r.x * e.z, t.y - i.y * e.x - n.y * e.y - r.y * e.z, t.z - i.z * e.x - n.z * e.y - r.z * e.z),
            s.Vec3.set(a[5], t.x + i.x * e.x - n.x * e.y - r.x * e.z, t.y + i.y * e.x - n.y * e.y - r.y * e.z, t.z + i.z * e.x - n.z * e.y - r.z * e.z),
            s.Vec3.set(a[6], t.x - i.x * e.x + n.x * e.y - r.x * e.z, t.y - i.y * e.x + n.y * e.y - r.y * e.z, t.z - i.z * e.x + n.z * e.y - r.z * e.z),
            s.Vec3.set(a[7], t.x - i.x * e.x - n.x * e.y + r.x * e.z, t.y - i.y * e.x - n.y * e.y + r.y * e.z, t.z - i.z * e.x - n.z * e.y + r.z * e.z)
        }
        function H(t, e) {
            for (var i = s.Vec3.dot(e, t[0]), n = i, r = 1; r < 8; ++r) {
                var a = s.Vec3.dot(e, t[r]);
                i = a < i ? a : i,
                n = a > n ? a : n
            }
            return [i, n]
        }
        var W, j = (function() {
            for (var t = new Array(15), e = 0; e < 15; e++)
                t[e] = new s.Vec3(0,0,0);
            for (var i = new Array(8), n = new Array(8), r = 0; r < 8; r++)
                i[r] = new s.Vec3(0,0,0),
                n[r] = new s.Vec3(0,0,0);
            var a = new s.Vec3
              , o = new s.Vec3;
            return function(e, r) {
                var l = r.orientation.m;
                s.Vec3.set(t[0], 1, 0, 0),
                s.Vec3.set(t[1], 0, 1, 0),
                s.Vec3.set(t[2], 0, 0, 1),
                s.Vec3.set(t[3], l[0], l[1], l[2]),
                s.Vec3.set(t[4], l[3], l[4], l[5]),
                s.Vec3.set(t[5], l[6], l[7], l[8]);
                for (var h = 0; h < 3; ++h)
                    s.Vec3.cross(t[6 + 3 * h], t[h], t[0]),
                    s.Vec3.cross(t[7 + 3 * h], t[h], t[1]),
                    s.Vec3.cross(t[7 + 3 * h], t[h], t[2]);
                s.Vec3.subtract(a, e.center, e.halfExtents),
                s.Vec3.add(o, e.center, e.halfExtents),
                U(a, o, i),
                z(r.center, r.halfExtents, t[3], t[4], t[5], n);
                for (var c = 0; c < 15; ++c) {
                    var u = H(i, t[c])
                      , _ = H(n, t[c]);
                    if (_[0] > u[1] || u[0] > _[1])
                        return 0
                }
                return 1
            }
        }
        )(), X = function(t, e) {
            var i = t.halfExtents.x * Math.abs(e.n.x) + t.halfExtents.y * Math.abs(e.n.y) + t.halfExtents.z * Math.abs(e.n.z)
              , n = s.Vec3.dot(e.n, t.center);
            return n + i < e.d ? -1 : n - i > e.d ? 0 : 1
        }, Y = function(t, e) {
            for (var i = 0; i < e.planes.length; i++)
                if (-1 === X(t, e.planes[i]))
                    return 0;
            return 1
        }, q = (function() {
            for (var t = new Array(8), e = 0, i = 0, n = 0; n < t.length; n++)
                t[n] = new s.Vec3(0,0,0);
            return function(n, r) {
                for (var a = 0, o = !1, l = 0; l < r.planes.length; l++) {
                    if (-1 === (a = X(n, r.planes[l])))
                        return 0;
                    1 === a && (o = !0)
                }
                if (!o)
                    return 1;
                for (var h = 0; h < r.vertices.length; h++)
                    s.Vec3.subtract(t[h], r.vertices[h], n.center);
                e = 0,
                i = 0;
                for (var c = 0; c < r.vertices.length; c++)
                    t[c].x > n.halfExtents.x ? e++ : t[c].x < -n.halfExtents.x && i++;
                if (e === r.vertices.length || i === r.vertices.length)
                    return 0;
                e = 0,
                i = 0;
                for (var u = 0; u < r.vertices.length; u++)
                    t[u].y > n.halfExtents.y ? e++ : t[u].y < -n.halfExtents.y && i++;
                if (e === r.vertices.length || i === r.vertices.length)
                    return 0;
                e = 0,
                i = 0;
                for (var _ = 0; _ < r.vertices.length; _++)
                    t[_].z > n.halfExtents.z ? e++ : t[_].z < -n.halfExtents.z && i++;
                return e === r.vertices.length || i === r.vertices.length ? 0 : 1
            }
        }
        )(), J = (function() {
            var t = new s.Vec3(0,0,0)
              , e = new s.Mat3;
            return function(i, n) {
                return s.Vec3.subtract(t, n, i.center),
                s.Vec3.transformMat3(t, t, s.Mat3.transpose(e, i.orientation)),
                r = t,
                a = i.halfExtents,
                Math.abs(r.x) < a.x && Math.abs(r.y) < a.y && Math.abs(r.z) < a.z;
                var r, a
            }
        }
        )(), Z = (W = function(t, e, i, n) {
            return Math.abs(t.x * e + t.y * i + t.z * n)
        }
        ,
        function(t, e) {
            var i = t.orientation.m
              , n = t.halfExtents.x * W(e.n, i[0], i[1], i[2]) + t.halfExtents.y * W(e.n, i[3], i[4], i[5]) + t.halfExtents.z * W(e.n, i[6], i[7], i[8])
              , r = s.Vec3.dot(e.n, t.center);
            return r + n < e.d ? -1 : r - n > e.d ? 0 : 1
        }
        ), K = function(t, e) {
            for (var i = 0; i < e.planes.length; i++)
                if (-1 === Z(t, e.planes[i]))
                    return 0;
            return 1
        }, Q = (function() {
            for (var t = new Array(8), e = 0, i = 0, n = 0, r = 0; r < t.length; r++)
                t[r] = new s.Vec3(0,0,0);
            var a = function(t, e, i, n) {
                return t.x * e + t.y * i + t.z * n
            };
            return function(r, o) {
                for (var l = 0, h = !1, c = 0; c < o.planes.length; c++) {
                    if (-1 === (l = Z(r, o.planes[c])))
                        return 0;
                    1 === l && (h = !0)
                }
                if (!h)
                    return 1;
                for (var u = 0; u < o.vertices.length; u++)
                    s.Vec3.subtract(t[u], o.vertices[u], r.center);
                i = 0,
                n = 0;
                for (var _ = r.orientation.m, f = 0; f < o.vertices.length; f++)
                    (e = a(t[f], _[0], _[1], _[2])) > r.halfExtents.x ? i++ : e < -r.halfExtents.x && n++;
                if (i === o.vertices.length || n === o.vertices.length)
                    return 0;
                i = 0,
                n = 0;
                for (var d = 0; d < o.vertices.length; d++)
                    (e = a(t[d], _[3], _[4], _[5])) > r.halfExtents.y ? i++ : e < -r.halfExtents.y && n++;
                if (i === o.vertices.length || n === o.vertices.length)
                    return 0;
                i = 0,
                n = 0;
                for (var p = 0; p < o.vertices.length; p++)
                    (e = a(t[p], _[6], _[7], _[8])) > r.halfExtents.z ? i++ : e < -r.halfExtents.z && n++;
                return i === o.vertices.length || n === o.vertices.length ? 0 : 1
            }
        }
        )(), $ = (function() {
            for (var t = new Array(15), e = 0; e < 15; e++)
                t[e] = new s.Vec3(0,0,0);
            for (var i = new Array(8), n = new Array(8), r = 0; r < 8; r++)
                i[r] = new s.Vec3(0,0,0),
                n[r] = new s.Vec3(0,0,0);
            return function(e, r) {
                var a = e.orientation.m
                  , o = r.orientation.m;
                s.Vec3.set(t[0], a[0], a[1], a[2]),
                s.Vec3.set(t[1], a[3], a[4], a[5]),
                s.Vec3.set(t[2], a[6], a[7], a[8]),
                s.Vec3.set(t[3], o[0], o[1], o[2]),
                s.Vec3.set(t[4], o[3], o[4], o[5]),
                s.Vec3.set(t[5], o[6], o[7], o[8]);
                for (var l = 0; l < 3; ++l)
                    s.Vec3.cross(t[6 + 3 * l], t[l], t[0]),
                    s.Vec3.cross(t[7 + 3 * l], t[l], t[1]),
                    s.Vec3.cross(t[7 + 3 * l], t[l], t[2]);
                z(e.center, e.halfExtents, t[0], t[1], t[2], i),
                z(r.center, r.halfExtents, t[3], t[4], t[5], n);
                for (var h = 0; h < 15; ++h) {
                    var c = H(i, t[h])
                      , u = H(n, t[h]);
                    if (u[0] > c[1] || c[0] > u[1])
                        return 0
                }
                return 1
            }
        }
        )(), tt = function(t, e) {
            var i = s.Vec3.dot(e.n, t.center)
              , n = t.radius * e.n.length();
            return i + n < e.d ? -1 : i - n > e.d ? 0 : 1
        }, et = function(t, e) {
            for (var i = 0; i < e.planes.length; i++)
                if (-1 === tt(t, e.planes[i]))
                    return 0;
            return 1
        }, it = (function() {
            var t = new s.Vec3(0,0,0)
              , e = [1, -1, 1, -1, 1, -1];
            return function(i, n) {
                for (var r = 0; r < 6; r++) {
                    var a = n.planes[r]
                      , o = i.radius
                      , l = i.center
                      , h = a.n
                      , c = a.d
                      , u = s.Vec3.dot(h, l);
                    if (u + o < c)
                        return 0;
                    if (!(u - o > c)) {
                        s.Vec3.add(t, l, s.Vec3.multiplyScalar(t, h, o));
                        for (var _ = 0; _ < 6; _++)
                            if (_ !== r && _ !== r + e[r]) {
                                var f = n.planes[_];
                                if (s.Vec3.dot(f.n, t) < f.d)
                                    return 0
                            }
                    }
                }
                return 1
            }
        }
        )(), nt = function(t, e) {
            var i = t.radius + e.radius;
            return s.Vec3.squaredDistance(t.center, e.center) < i * i
        }, rt = (function() {
            var t = new s.Vec3;
            return function(e, i) {
                return o.pt_point_aabb(t, e.center, i),
                s.Vec3.squaredDistance(e.center, t) < e.radius * e.radius
            }
        }
        )(), st = (function() {
            var t = new s.Vec3;
            return function(e, i) {
                return o.pt_point_obb(t, e.center, i),
                s.Vec3.squaredDistance(e.center, t) < e.radius * e.radius
            }
        }
        )(), at = {
            rayAabb: N,
            rayMesh: M,
            raycast: D,
            rayTriangle: R,
            ray_sphere: F,
            ray_aabb: V,
            ray_obb: k,
            ray_plane: B,
            ray_triangle: P,
            line_plane: I,
            line_triangle: O,
            line_quad: L,
            sphere_sphere: nt,
            sphere_aabb: rt,
            sphere_obb: st,
            sphere_plane: tt,
            sphere_frustum: et,
            sphere_frustum_accurate: it,
            aabb_aabb: G,
            aabb_obb: j,
            aabb_plane: X,
            aabb_frustum: Y,
            aabb_frustum_accurate: q,
            obb_obb: $,
            obb_plane: Z,
            obb_frustum: K,
            obb_frustum_accurate: Q,
            obb_point: J,
            resolve: function(t, e, i) {
                void 0 === i && (i = null);
                var n = t._type
                  , r = e._type
                  , s = this[n | r];
                return n < r ? s(t, e, i) : s(e, t, i)
            }
        };
        at[l.default.SHAPE_RAY | l.default.SHAPE_SPHERE] = F,
        at[l.default.SHAPE_RAY | l.default.SHAPE_AABB] = V,
        at[l.default.SHAPE_RAY | l.default.SHAPE_OBB] = k,
        at[l.default.SHAPE_RAY | l.default.SHAPE_PLANE] = B,
        at[l.default.SHAPE_RAY | l.default.SHAPE_TRIANGLE] = P,
        at[l.default.SHAPE_LINE | l.default.SHAPE_PLANE] = I,
        at[l.default.SHAPE_LINE | l.default.SHAPE_TRIANGLE] = O,
        at[l.default.SHAPE_SPHERE] = nt,
        at[l.default.SHAPE_SPHERE | l.default.SHAPE_AABB] = rt,
        at[l.default.SHAPE_SPHERE | l.default.SHAPE_OBB] = st,
        at[l.default.SHAPE_SPHERE | l.default.SHAPE_PLANE] = tt,
        at[l.default.SHAPE_SPHERE | l.default.SHAPE_FRUSTUM] = et,
        at[l.default.SHAPE_SPHERE | l.default.SHAPE_FRUSTUM_ACCURATE] = it,
        at[l.default.SHAPE_AABB] = G,
        at[l.default.SHAPE_AABB | l.default.SHAPE_OBB] = j,
        at[l.default.SHAPE_AABB | l.default.SHAPE_PLANE] = X,
        at[l.default.SHAPE_AABB | l.default.SHAPE_FRUSTUM] = Y,
        at[l.default.SHAPE_AABB | l.default.SHAPE_FRUSTUM_ACCURATE] = q,
        at[l.default.SHAPE_OBB] = $,
        at[l.default.SHAPE_OBB | l.default.SHAPE_PLANE] = Z,
        at[l.default.SHAPE_OBB | l.default.SHAPE_FRUSTUM] = K,
        at[l.default.SHAPE_OBB | l.default.SHAPE_FRUSTUM_ACCURATE] = Q;
        var ot = at;
        i.default = ot,
        e.exports = i.default
    }
    ), {
        "../../renderer/gfx": 315,
        "../../renderer/memop/recycle-pool": 330,
        "../value-types": 282,
        "./aabb": 144,
        "./distance": 145,
        "./enums": 146,
        "./ray": 153,
        "./triangle": 155
    }],
    150: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types"), s = (n = t("./enums")) && n.__esModule ? n : {
            default: n
        }, a = (function() {
            function t(t, e, i, n, a, o) {
                void 0 === t && (t = 0),
                void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === a && (a = 0),
                void 0 === o && (o = -1),
                this.s = void 0,
                this.e = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_LINE,
                this.s = new r.Vec3(t,e,i),
                this.e = new r.Vec3(n,a,o)
            }
            return t.create = function(e, i, n, r, s, a) {
                return new t(e,i,n,r,s,a)
            }
            ,
            t.clone = function(e) {
                return new t(e.s.x,e.s.y,e.s.z,e.e.x,e.e.y,e.e.z)
            }
            ,
            t.copy = function(t, e) {
                return r.Vec3.copy(t.s, e.s),
                r.Vec3.copy(t.e, e.e),
                t
            }
            ,
            t.fromPoints = function(t, e, i) {
                return r.Vec3.copy(t.s, e),
                r.Vec3.copy(t.e, i),
                t
            }
            ,
            t.set = function(t, e, i, n, r, s, a) {
                return t.s.x = e,
                t.s.y = i,
                t.s.z = n,
                t.e.x = r,
                t.e.y = s,
                t.e.z = a,
                t
            }
            ,
            t.len = function(t) {
                return r.Vec3.distance(t.s, t.e)
            }
            ,
            t.prototype.length = function() {
                return r.Vec3.distance(this.s, this.e)
            }
            ,
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146
    }],
    151: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types"), s = (n = t("./enums")) && n.__esModule ? n : {
            default: n
        };
        function a(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var o = new r.Vec3
          , l = new r.Vec3
          , h = new r.Mat3
          , c = (function() {
            function t(t, e, i, n, a, o, l, h, c, u, _, f, d, p, m) {
                void 0 === t && (t = 0),
                void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 1),
                void 0 === a && (a = 1),
                void 0 === o && (o = 1),
                void 0 === l && (l = 1),
                void 0 === h && (h = 0),
                void 0 === c && (c = 0),
                void 0 === u && (u = 0),
                void 0 === _ && (_ = 1),
                void 0 === f && (f = 0),
                void 0 === d && (d = 0),
                void 0 === p && (p = 0),
                void 0 === m && (m = 1),
                this.center = void 0,
                this.halfExtents = void 0,
                this.orientation = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_OBB,
                this.center = new r.Vec3(t,e,i),
                this.halfExtents = new r.Vec3(n,a,o),
                this.orientation = new r.Mat3(l,h,c,u,_,f,d,p,m)
            }
            t.create = function(e, i, n, r, s, a, o, l, h, c, u, _, f, d, p) {
                return new t(e,i,n,r,s,a,o,l,h,c,u,_,f,d,p)
            }
            ,
            t.clone = function(e) {
                var i = e.orientation.m;
                return new t(e.center.x,e.center.y,e.center.z,e.halfExtents.x,e.halfExtents.y,e.halfExtents.z,i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8])
            }
            ,
            t.copy = function(t, e) {
                return r.Vec3.copy(t.center, e.center),
                r.Vec3.copy(t.halfExtents, e.halfExtents),
                r.Mat3.copy(t.orientation, e.orientation),
                t
            }
            ,
            t.fromPoints = function(t, e, i) {
                return r.Vec3.multiplyScalar(t.center, r.Vec3.add(o, e, i), .5),
                r.Vec3.multiplyScalar(t.halfExtents, r.Vec3.subtract(l, i, e), .5),
                r.Mat3.identity(t.orientation),
                t
            }
            ,
            t.set = function(t, e, i, n, s, a, o, l, h, c, u, _, f, d, p, m) {
                return r.Vec3.set(t.center, e, i, n),
                r.Vec3.set(t.halfExtents, s, a, o),
                r.Mat3.set(t.orientation, l, h, c, u, _, f, d, p, m),
                t
            }
            ;
            var e, i, n = t.prototype;
            return n.getBoundary = function(t, e) {
                var i, n, s, a, l;
                i = o,
                n = this.halfExtents,
                s = this.orientation,
                a = h.m,
                l = s.m,
                a[0] = Math.abs(l[0]),
                a[1] = Math.abs(l[1]),
                a[2] = Math.abs(l[2]),
                a[3] = Math.abs(l[3]),
                a[4] = Math.abs(l[4]),
                a[5] = Math.abs(l[5]),
                a[6] = Math.abs(l[6]),
                a[7] = Math.abs(l[7]),
                a[8] = Math.abs(l[8]),
                r.Vec3.transformMat3(i, n, h),
                r.Vec3.subtract(t, this.center, o),
                r.Vec3.add(e, this.center, o)
            }
            ,
            n.transform = function(t, e, i, n, s) {
                r.Vec3.transformMat4(s.center, this.center, t),
                r.Mat3.fromQuat(s.orientation, i),
                r.Vec3.multiply(s.halfExtents, this.halfExtents, n)
            }
            ,
            n.translateAndRotate = function(t, e, i) {
                r.Vec3.transformMat4(i.center, this.center, t),
                r.Mat3.fromQuat(i.orientation, e)
            }
            ,
            n.setScale = function(t, e) {
                r.Vec3.multiply(e.halfExtents, this.halfExtents, t)
            }
            ,
            e = t,
            (i = [{
                key: "type",
                get: function() {
                    return this._type
                }
            }]) && a(e.prototype, i),
            t
        }
        )();
        i.default = c,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146
    }],
    152: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types"), s = (n = t("./enums")) && n.__esModule ? n : {
            default: n
        }, a = new r.Vec3(0,0,0), o = new r.Vec3(0,0,0), l = cc.mat4(), h = cc.v4(), c = (function() {
            function t(t, e, i, n) {
                void 0 === t && (t = 0),
                void 0 === e && (e = 1),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                this.n = void 0,
                this.d = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_PLANE,
                this.n = new r.Vec3(t,e,i),
                this.d = n
            }
            return t.create = function(e, i, n, r) {
                return new t(e,i,n,r)
            }
            ,
            t.clone = function(e) {
                return new t(e.n.x,e.n.y,e.n.z,e.d)
            }
            ,
            t.copy = function(t, e) {
                return r.Vec3.copy(t.n, e.n),
                t.d = e.d,
                t
            }
            ,
            t.fromPoints = function(t, e, i, n) {
                return r.Vec3.subtract(a, i, e),
                r.Vec3.subtract(o, n, e),
                r.Vec3.normalize(t.n, r.Vec3.cross(t.n, a, o)),
                t.d = r.Vec3.dot(t.n, e),
                t
            }
            ,
            t.set = function(t, e, i, n, r) {
                return t.n.x = e,
                t.n.y = i,
                t.n.z = n,
                t.d = r,
                t
            }
            ,
            t.fromNormalAndPoint = function(t, e, i) {
                return r.Vec3.copy(t.n, e),
                t.d = r.Vec3.dot(e, i),
                t
            }
            ,
            t.normalize = function(t, e) {
                var i = e.n.len();
                return r.Vec3.normalize(t.n, e.n),
                i > 0 && (t.d = e.d / i),
                t
            }
            ,
            t.prototype.transform = function(t) {
                r.Mat4.invert(l, t),
                r.Mat4.transpose(l, l),
                r.Vec4.set(h, this.n.x, this.n.y, this.n.z, this.d),
                r.Vec4.transformMat4(h, h, l),
                r.Vec3.set(this.n, h.x, h.y, h.z),
                this.d = h.w
            }
            ,
            t
        }
        )();
        i.default = c,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146
    }],
    153: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types"), s = (n = t("./enums")) && n.__esModule ? n : {
            default: n
        }, a = (function() {
            function t(t, e, i, n, a, o) {
                void 0 === t && (t = 0),
                void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === a && (a = 0),
                void 0 === o && (o = -1),
                this.o = void 0,
                this.d = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_RAY,
                this.o = new r.Vec3(t,e,i),
                this.d = new r.Vec3(n,a,o)
            }
            return t.create = function(e, i, n, r, s, a) {
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 0),
                void 0 === s && (s = 0),
                void 0 === a && (a = 1),
                new t(e,i,n,r,s,a)
            }
            ,
            t.clone = function(e) {
                return new t(e.o.x,e.o.y,e.o.z,e.d.x,e.d.y,e.d.z)
            }
            ,
            t.copy = function(t, e) {
                return r.Vec3.copy(t.o, e.o),
                r.Vec3.copy(t.d, e.d),
                t
            }
            ,
            t.fromPoints = function(t, e, i) {
                return r.Vec3.copy(t.o, e),
                r.Vec3.normalize(t.d, r.Vec3.subtract(t.d, i, e)),
                t
            }
            ,
            t.set = function(t, e, i, n, r, s, a) {
                return t.o.x = e,
                t.o.y = i,
                t.o.z = n,
                t.d.x = r,
                t.d.y = s,
                t.d.z = a,
                t
            }
            ,
            t.prototype.computeHit = function(t, e) {
                r.Vec3.normalize(t, this.d),
                r.Vec3.scaleAndAdd(t, this.o, t, e)
            }
            ,
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146
    }],
    154: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types"), s = (n = t("./enums")) && n.__esModule ? n : {
            default: n
        }, a = new r.Vec3, o = (function() {
            function t(t, e, i, n) {
                void 0 === t && (t = 0),
                void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 1),
                this.center = void 0,
                this.radius = void 0,
                this._type = void 0,
                this._type = s.default.SHAPE_SPHERE,
                this.center = new r.Vec3(t,e,i),
                this.radius = n
            }
            t.create = function(e, i, n, r) {
                return new t(e,i,n,r)
            }
            ,
            t.clone = function(e) {
                return new t(e.center.x,e.center.y,e.center.z,e.radius)
            }
            ,
            t.copy = function(t, e) {
                return r.Vec3.copy(t.center, e.center),
                t.radius = e.radius,
                t
            }
            ,
            t.fromPoints = function(t, e, i) {
                return r.Vec3.multiplyScalar(t.center, r.Vec3.add(a, e, i), .5),
                t.radius = .5 * r.Vec3.subtract(a, i, e).len(),
                t
            }
            ,
            t.set = function(t, e, i, n, r) {
                return t.center.x = e,
                t.center.y = i,
                t.center.z = n,
                t.radius = r,
                t
            }
            ;
            var e = t.prototype;
            return e.clone = function() {
                return t.clone(this)
            }
            ,
            e.copy = function(e) {
                return t.copy(this, e)
            }
            ,
            e.getBoundary = function(t, e) {
                r.Vec3.set(t, this.center.x - this.radius, this.center.y - this.radius, this.center.z - this.radius),
                r.Vec3.set(e, this.center.x + this.radius, this.center.y + this.radius, this.center.z + this.radius)
            }
            ,
            e.transform = function(t, e, i, n, s) {
                r.Vec3.transformMat4(s.center, this.center, t),
                s.radius = this.radius * n.maxAxis()
            }
            ,
            e.translateAndRotate = function(t, e, i) {
                r.Vec3.transformMat4(i.center, this.center, t)
            }
            ,
            e.setScale = function(t, e) {
                e.radius = this.radius * t.maxAxis()
            }
            ,
            t
        }
        )();
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./enums": 146
    }],
    155: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = s(t("../value-types/vec3"))
          , r = s(t("./enums"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = (function() {
            function t(t, e, i, s, a, o, l, h, c) {
                this.a = void 0,
                this.b = void 0,
                this.c = void 0,
                this._type = void 0,
                this.a = new n.default(t,e,i),
                this.b = new n.default(s,a,o),
                this.c = new n.default(l,h,c),
                this._type = r.default.SHAPE_TRIANGLE
            }
            return t.create = function(e, i, n, r, s, a, o, l, h) {
                return new t(e,i,n,r,s,a,o,l,h)
            }
            ,
            t.clone = function(e) {
                return new t(e.a.x,e.a.y,e.a.z,e.b.x,e.b.y,e.b.z,e.c.x,e.c.y,e.c.z)
            }
            ,
            t.copy = function(t, e) {
                return n.default.copy(t.a, e.a),
                n.default.copy(t.b, e.b),
                n.default.copy(t.c, e.c),
                t
            }
            ,
            t.fromPoints = function(t, e, i, r) {
                return n.default.copy(t.a, e),
                n.default.copy(t.b, i),
                n.default.copy(t.c, r),
                t
            }
            ,
            t.set = function(t, e, i, n, r, s, a, o, l, h) {
                return t.a.x = e,
                t.a.y = i,
                t.a.z = n,
                t.b.x = r,
                t.b.y = s,
                t.b.z = a,
                t.c.x = o,
                t.c.y = l,
                t.c.z = h,
                t
            }
            ,
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../value-types/vec3": 292,
        "./enums": 146
    }],
    156: [(function(t, e) {
        "use strict";
        var i = t("../components/CCRenderComponent")
          , n = t("../assets/material/CCMaterial")
          , r = t("./types")
          , s = r.LineCap
          , a = r.LineJoin
          , o = cc.Class({
            name: "cc.Graphics",
            extends: i,
            editor: !1,
            ctor: function() {
                this._impl = new o._Impl(this)
            },
            properties: {
                _lineWidth: 2,
                _strokeColor: cc.Color.BLACK,
                _lineJoin: a.MITER,
                _lineCap: s.BUTT,
                _fillColor: cc.Color.WHITE,
                _miterLimit: 10,
                lineWidth: {
                    get: function() {
                        return this._lineWidth
                    },
                    set: function(t) {
                        this._lineWidth = t,
                        this._impl.lineWidth = t
                    }
                },
                lineJoin: {
                    get: function() {
                        return this._lineJoin
                    },
                    set: function(t) {
                        this._lineJoin = t,
                        this._impl.lineJoin = t
                    },
                    type: a
                },
                lineCap: {
                    get: function() {
                        return this._lineCap
                    },
                    set: function(t) {
                        this._lineCap = t,
                        this._impl.lineCap = t
                    },
                    type: s
                },
                strokeColor: {
                    get: function() {
                        return this._strokeColor
                    },
                    set: function(t) {
                        this._impl.strokeColor = this._strokeColor = cc.color(t)
                    }
                },
                fillColor: {
                    get: function() {
                        return this._fillColor
                    },
                    set: function(t) {
                        this._impl.fillColor = this._fillColor = cc.color(t)
                    }
                },
                miterLimit: {
                    get: function() {
                        return this._miterLimit
                    },
                    set: function(t) {
                        this._miterLimit = t,
                        this._impl.miterLimit = t
                    }
                }
            },
            statics: {
                LineJoin: a,
                LineCap: s
            },
            onRestore: function() {
                this._impl || (this._impl = new o._Impl(this))
            },
            onDestroy: function() {
                this.clear(!0),
                this._super(),
                this._impl = null
            },
            _getDefaultMaterial: function() {
                return n.getBuiltinMaterial("2d-graphics")
            },
            _updateMaterial: function() {
                var t = this._materials[0];
                t && (void 0 !== t.getDefine("CC_USE_MODEL") && t.define("CC_USE_MODEL", !0),
                void 0 !== t.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && t.define("CC_SUPPORT_standard_derivatives", !0))
            },
            moveTo: function(t, e) {
                this._impl.moveTo(t, e)
            },
            lineTo: function(t, e) {
                this._impl.lineTo(t, e)
            },
            bezierCurveTo: function(t, e, i, n, r, s) {
                this._impl.bezierCurveTo(t, e, i, n, r, s)
            },
            quadraticCurveTo: function(t, e, i, n) {
                this._impl.quadraticCurveTo(t, e, i, n)
            },
            arc: function(t, e, i, n, r, s) {
                this._impl.arc(t, e, i, n, r, s)
            },
            ellipse: function(t, e, i, n) {
                this._impl.ellipse(t, e, i, n)
            },
            circle: function(t, e, i) {
                this._impl.circle(t, e, i)
            },
            rect: function(t, e, i, n) {
                this._impl.rect(t, e, i, n)
            },
            roundRect: function(t, e, i, n, r) {
                this._impl.roundRect(t, e, i, n, r)
            },
            fillRect: function(t, e, i, n) {
                this.rect(t, e, i, n),
                this.fill()
            },
            clear: function(t) {
                this._impl.clear(t),
                this._assembler && this._assembler.clear(t)
            },
            close: function() {
                this._impl.close()
            },
            stroke: function() {
                this._assembler || this._resetAssembler(),
                this._assembler.stroke(this)
            },
            fill: function() {
                this._assembler || this._resetAssembler(),
                this._assembler.fill(this)
            }
        });
        cc.Graphics = e.exports = o,
        cc.Graphics.Types = r,
        cc.Graphics.Helper = t("./helper")
    }
    ), {
        "../assets/material/CCMaterial": 80,
        "../components/CCRenderComponent": 115,
        "./helper": 157,
        "./types": 159
    }],
    157: [(function(t, e) {
        "use strict";
        var i = t("./types").PointFlags
          , n = Math.PI
          , r = Math.min
          , s = Math.max
          , a = Math.cos
          , o = Math.sin
          , l = Math.abs
          , h = Math.sign
          , c = .5522847493;
        e.exports = {
            arc: function(t, e, i, h, c, u, _) {
                var f, d, p, m = 0, y = 0, v = 0, g = 0, A = 0, x = 0, b = 0, C = 0, T = 0, S = 0, w = 0, E = 0, M = 0;
                if (y = u - c,
                _ = _ || !1)
                    if (l(y) >= 2 * n)
                        y = 2 * n;
                    else
                        for (; y < 0; )
                            y += 2 * n;
                else if (l(y) >= 2 * n)
                    y = 2 * -n;
                else
                    for (; y > 0; )
                        y -= 2 * n;
                for (p = 0 | s(1, r(l(y) / (.5 * n) + .5, 5)),
                v = l(4 / 3 * (1 - a(f = y / p / 2)) / o(f)),
                _ || (v = -v),
                d = 0; d <= p; d++)
                    x = e + (g = a(m = c + y * (d / p))) * h,
                    b = i + (A = o(m)) * h,
                    C = -A * h * v,
                    T = g * h * v,
                    0 === d ? t.moveTo(x, b) : t.bezierCurveTo(S + E, w + M, x - C, b - T, x, b),
                    S = x,
                    w = b,
                    E = C,
                    M = T
            },
            ellipse: function(t, e, i, n, r) {
                t.moveTo(e - n, i),
                t.bezierCurveTo(e - n, i + r * c, e - n * c, i + r, e, i + r),
                t.bezierCurveTo(e + n * c, i + r, e + n, i + r * c, e + n, i),
                t.bezierCurveTo(e + n, i - r * c, e + n * c, i - r, e, i - r),
                t.bezierCurveTo(e - n * c, i - r, e - n, i - r * c, e - n, i),
                t.close()
            },
            roundRect: function(t, e, i, n, s, a) {
                if (a < .1)
                    t.rect(e, i, n, s);
                else {
                    var o = r(a, .5 * l(n)) * h(n)
                      , u = r(a, .5 * l(s)) * h(s);
                    t.moveTo(e, i + u),
                    t.lineTo(e, i + s - u),
                    t.bezierCurveTo(e, i + s - u * (1 - c), e + o * (1 - c), i + s, e + o, i + s),
                    t.lineTo(e + n - o, i + s),
                    t.bezierCurveTo(e + n - o * (1 - c), i + s, e + n, i + s - u * (1 - c), e + n, i + s - u),
                    t.lineTo(e + n, i + u),
                    t.bezierCurveTo(e + n, i + u * (1 - c), e + n - o * (1 - c), i, e + n - o, i),
                    t.lineTo(e + o, i),
                    t.bezierCurveTo(e + o * (1 - c), i, e, i + u * (1 - c), e, i + u),
                    t.close()
                }
            },
            tesselateBezier: function t(e, n, r, s, a, o, h, c, u, _, f) {
                var d, p, m, y, v, g, A, x, b, C, T, S, w, E, M, D;
                _ > 10 || (v = .5 * (o + c),
                g = .5 * (h + u),
                A = .5 * ((d = .5 * (n + s)) + (m = .5 * (s + o))),
                x = .5 * ((p = .5 * (r + a)) + (y = .5 * (a + h))),
                ((M = l((s - c) * (E = u - r) - (a - u) * (w = c - n))) + (D = l((o - c) * E - (h - u) * w))) * (M + D) < e._tessTol * (w * w + E * E) ? e._addPoint(c, u, 0 === f ? f | i.PT_BEVEL : f) : (t(e, n, r, d, p, A, x, T = .5 * (A + (b = .5 * (m + v))), S = .5 * (x + (C = .5 * (y + g))), _ + 1, 0),
                t(e, T, S, b, C, v, g, c, u, _ + 1, f)))
            }
        }
    }
    ), {
        "./types": 159
    }],
    158: [(function(t) {
        "use strict";
        t("./graphics")
    }
    ), {
        "./graphics": 156
    }],
    159: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            BUTT: 0,
            ROUND: 1,
            SQUARE: 2
        })
          , n = cc.Enum({
            BEVEL: 0,
            ROUND: 1,
            MITER: 2
        })
          , r = cc.Enum({
            PT_CORNER: 1,
            PT_LEFT: 2,
            PT_BEVEL: 4,
            PT_INNERBEVEL: 8
        });
        e.exports = {
            LineCap: i,
            LineJoin: n,
            PointFlags: r
        }
    }
    ), {}],
    160: [(function(t) {
        "use strict";
        t("./platform"),
        t("./assets"),
        t("./CCNode"),
        t("./CCPrivateNode"),
        t("./CCScene"),
        t("./components"),
        t("./graphics"),
        t("./collider"),
        t("./collider/CCIntersection"),
        t("./physics"),
        t("./camera/CCCamera"),
        t("./geom-utils"),
        t("./mesh"),
        t("./3d"),
        t("./base-ui/CCWidgetManager")
    }
    ), {
        "./3d": void 0,
        "./CCNode": 29,
        "./CCPrivateNode": 30,
        "./CCScene": 31,
        "./assets": 78,
        "./base-ui/CCWidgetManager": 89,
        "./camera/CCCamera": 90,
        "./collider": 98,
        "./collider/CCIntersection": 96,
        "./components": 132,
        "./geom-utils": 148,
        "./graphics": 158,
        "./mesh": 163,
        "./physics": 178,
        "./platform": 211
    }],
    161: [(function(t, e) {
        "use strict";
        var i = s(t("../../renderer/core/input-assembler"))
          , n = s(t("../../renderer/gfx"))
          , r = t("./mesh-data");
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("../renderer")
          , o = t("../event/event-target");
        function l(t, e, i) {
            t[e] = i._val
        }
        function h(t, e, i) {
            t[e] = i.x,
            t[e + 1] = i.y
        }
        function c(t, e, i) {
            t[e] = i.x,
            t[e + 1] = i.y,
            t[e + 2] = i.z
        }
        var u, _ = {
            5120: "getInt8",
            5121: "getUint8",
            5122: "getInt16",
            5123: "getUint16",
            5124: "getInt32",
            5125: "getUint32",
            5126: "getFloat32"
        }, f = {
            5120: "setInt8",
            5121: "setUint8",
            5122: "setInt16",
            5123: "setUint16",
            5124: "setInt32",
            5125: "setUint32",
            5126: "setFloat32"
        }, d = (u = new ArrayBuffer(2),
        new DataView(u).setInt16(0, 256, !0),
        256 === new Int16Array(u)[0]), p = cc.Class({
            name: "cc.Mesh",
            extends: cc.Asset,
            mixins: [o],
            properties: {
                _nativeAsset: {
                    override: !0,
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = ArrayBuffer.isView(t) ? t.buffer : t,
                        this.initWithBuffer()
                    }
                },
                _vertexBundles: {
                    default: null,
                    type: r.VertexBundle
                },
                _primitives: {
                    default: null,
                    Primitive: r.Primitive
                },
                _minPos: cc.v3(),
                _maxPos: cc.v3(),
                subMeshes: {
                    get: function() {
                        return this._subMeshes
                    },
                    set: function(t) {
                        this._subMeshes = t
                    }
                },
                subDatas: {
                    get: function() {
                        return this._subDatas
                    }
                }
            },
            ctor: function() {
                this._subMeshes = [],
                this._subDatas = [],
                this.loaded = !1
            },
            initWithBuffer: function() {
                this._subMeshes.length = 0;
                for (var t = this._primitives, e = 0; e < t.length; e++) {
                    var s = t[e]
                      , o = s.data
                      , l = new Uint8Array(this._buffer,o.offset,o.length)
                      , h = this._vertexBundles[s.vertexBundleIndices[0]]
                      , c = h.data
                      , u = new n.default.VertexFormat(h.formats)
                      , _ = new Uint8Array(this._buffer,c.offset,c.length)
                      , f = this._canVertexFormatBatch(u)
                      , d = new r.MeshData;
                    d.vData = _,
                    d.iData = l,
                    d.vfm = u,
                    d.offset = c.offset,
                    d.canBatch = f,
                    this._subDatas.push(d);
                    var p = new n.default.VertexBuffer(a.device,u,n.default.USAGE_STATIC,_)
                      , m = new n.default.IndexBuffer(a.device,s.indexUnit,n.default.USAGE_STATIC,l);
                    this._subMeshes.push(new i.default(p,m))
                }
                this.loaded = !0,
                this.emit("load")
            },
            _canVertexFormatBatch: function(t) {
                var e = t._attr2el[n.default.ATTR_POSITION];
                return !e || e.type === n.default.ATTR_TYPE_FLOAT32 && t._bytes % 4 == 0
            },
            init: function(t, e, s, o) {
                void 0 === s && (s = !1),
                void 0 === o && (o = 0);
                var l = new Uint8Array(t._bytes * e)
                  , h = new r.MeshData;
                h.vData = l,
                h.vfm = t,
                h.vDirty = !0,
                h.canBatch = this._canVertexFormatBatch(t);
                var c = new n.default.VertexBuffer(a.device,t,s ? n.default.USAGE_DYNAMIC : n.default.USAGE_STATIC,l);
                h.vb = c,
                this._subMeshes[o] = new i.default(h.vb);
                var u = this._subDatas[o];
                u && (u.vb && u.vb.destroy(),
                u.ib && u.ib.destroy()),
                this._subDatas[o] = h,
                this.loaded = !0,
                this.emit("load"),
                this.emit("init-format")
            },
            setVertices: function(t, e, i) {
                i = i || 0;
                var r = this._subDatas[i]
                  , s = r.vfm.element(t);
                if (!s)
                    return cc.warn("Cannot find " + t + " attribute in vertex defines.");
                var a, o = "number" == typeof e[0], u = s.num, _ = o ? e.length / u | 0 : e.length;
                r.vData.byteLength < _ * s.stride && r.setVData(new Uint8Array(_ * r.vfm._bytes));
                var f = 4;
                t === n.default.ATTR_COLOR ? o ? (a = r.getVData(),
                f = 1) : a = r.getVData(Uint32Array) : a = r.getVData(Float32Array);
                var d = s.stride / f
                  , p = s.offset / f;
                if (o)
                    for (var m = 0, y = e.length / u; m < y; m++)
                        for (var v = m * u, g = m * d + p, A = 0; A < u; A++)
                            a[g + A] = e[v + A];
                else {
                    var x;
                    x = t === n.default.ATTR_COLOR ? l : 2 === u ? h : c;
                    for (var b = 0, C = e.length; b < C; b++)
                        x(a, b * d + p, e[b])
                }
                r.vDirty = !0
            },
            setIndices: function(t, e, i) {
                e = e || 0;
                var r = t;
                t instanceof Uint16Array ? r = new Uint8Array(t.buffer,t.byteOffset,t.byteLength) : Array.isArray(t) && (r = new Uint16Array(t),
                r = new Uint8Array(r.buffer,r.byteOffset,r.byteLength));
                var s = i ? n.default.USAGE_DYNAMIC : n.default.USAGE_STATIC
                  , o = this._subDatas[e];
                if (o.ib)
                    o.iData = r,
                    o.iDirty = !0;
                else {
                    o.iData = r;
                    var l = new n.default.IndexBuffer(a.device,n.default.INDEX_FMT_UINT16,s,r,r.byteLength / n.default.IndexBuffer.BYTES_PER_INDEX[n.default.INDEX_FMT_UINT16]);
                    o.ib = l,
                    this._subMeshes[e]._indexBuffer = o.ib
                }
            },
            setPrimitiveType: function(t, e) {
                e = e || 0,
                this._subMeshes[e] ? this._subMeshes[e]._primitiveType = t : cc.warn("Do not have sub mesh at index " + e)
            },
            clear: function() {
                this._subMeshes.length = 0;
                for (var t = this._subDatas, e = 0, i = t.length; e < i; e++) {
                    var n = t[e].vb;
                    n && n.destroy();
                    var r = t[e].ib;
                    r && r.destroy()
                }
                t.length = 0
            },
            setBoundingBox: function(t, e) {
                this._minPos = t,
                this._maxPos = e
            },
            destroy: function() {
                this.clear()
            },
            _uploadData: function() {
                for (var t = this._subDatas, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    if (n.vDirty) {
                        var r = n.vb
                          , s = n.vData;
                        r.update(0, s),
                        n.vDirty = !1
                    }
                    if (n.iDirty) {
                        var a = n.ib
                          , o = n.iData;
                        a.update(0, o),
                        n.iDirty = !1
                    }
                }
            },
            _getAttrMeshData: function(t, e) {
                var i = this._subDatas[t];
                if (!i)
                    return [];
                var n = i.vfm
                  , r = n.element(e);
                if (!r)
                    return [];
                i.attrDatas || (i.attrDatas = {});
                var s = i.attrDatas
                  , a = s[e];
                if (a)
                    return a;
                a = s[e] = [];
                for (var o = i.vData, l = new DataView(o.buffer,o.byteOffset,o.byteLength), h = r.stride, c = r.offset, u = r.num, f = r.bytes / u, p = _[r.type], m = o.byteLength / n._bytes, y = 0; y < m; y++)
                    for (var v = y * h + c, g = 0; g < u; g++) {
                        var A = l[p](v + g * f, d);
                        a.push(A)
                    }
                return a
            },
            copyAttribute: function(t, e, i, n, r) {
                var s = !1
                  , a = this._subDatas[t];
                if (!a)
                    return s;
                var o = a.vfm
                  , l = o.element(e);
                if (!l)
                    return s;
                var h = f[l.type];
                if (!h)
                    return s;
                var c = this._getAttrMeshData(t, e)
                  , u = a.vData.byteLength / o._bytes
                  , _ = l.bytes / l.num;
                if (c.length > 0) {
                    for (var p = new DataView(i,r), m = n, y = l.num, v = 0; v < u; ++v)
                        for (var g = v * y, A = 0; A < y; ++A) {
                            var x = g + A
                              , b = m * v + _ * A;
                            p[h](b, c[x], d)
                        }
                    s = !0
                }
                return s
            },
            copyIndices: function(t, e) {
                var i = this._subDatas[t];
                if (!i)
                    return !1;
                for (var r = i.iData, s = r.length / 2, a = new DataView(r.buffer,r.byteOffset,r.byteLength), o = _[n.default.INDEX_FMT_UINT8], l = 0; l < s; ++l)
                    e[l] = a[o](2 * l);
                return !0
            }
        });
        cc.Mesh = e.exports = p
    }
    ), {
        "../../renderer/core/input-assembler": 305,
        "../../renderer/gfx": 315,
        "../event/event-target": 140,
        "../renderer": 224,
        "./mesh-data": 164
    }],
    162: [(function(t, e) {
        "use strict";
        var i = s(t("../../renderer/gfx"))
          , n = (s(t("../../renderer/core/input-assembler")),
        s(t("../geom-utils/aabb")))
          , r = (s(t("../value-types/vec3")),
        s(t("../value-types/mat4")),
        s(t("../assets/material/material-variant")));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("../components/CCRenderComponent")
          , o = t("./CCMesh")
          , l = t("../renderer/render-flow")
          , h = (t("../renderer"),
        t("../assets/material/CCMaterial"))
          , c = cc.Enum({
            OFF: 0,
            ON: 1
        })
          , u = cc.Class({
            name: "cc.MeshRenderer",
            extends: a,
            editor: !1,
            properties: {
                _mesh: {
                    default: null,
                    type: o
                },
                _receiveShadows: !1,
                _shadowCastingMode: c.OFF,
                _enableAutoBatch: !1,
                mesh: {
                    get: function() {
                        return this._mesh
                    },
                    set: function(t) {
                        this._mesh !== t && (this._setMesh(t),
                        t ? (this.markForRender(!0),
                        this.node._renderFlag |= l.FLAG_TRANSFORM) : this.disableRender())
                    },
                    type: o,
                    animatable: !1
                },
                textures: {
                    default: [],
                    type: cc.Texture2D,
                    visible: !1
                },
                receiveShadows: {
                    get: function() {
                        return this._receiveShadows
                    },
                    set: function(t) {
                        this._receiveShadows = t,
                        this._updateReceiveShadow()
                    },
                    animatable: !1
                },
                shadowCastingMode: {
                    get: function() {
                        return this._shadowCastingMode
                    },
                    set: function(t) {
                        this._shadowCastingMode = t,
                        this._updateCastShadow()
                    },
                    type: c,
                    animatable: !1
                },
                enableAutoBatch: {
                    get: function() {
                        return this._enableAutoBatch
                    },
                    set: function(t) {
                        this._enableAutoBatch = t
                    }
                }
            },
            statics: {
                ShadowCastingMode: c
            },
            ctor: function() {
                this._boundingBox = cc.geomUtils && new n.default
            },
            onEnable: function() {
                var t = this;
                this._super(),
                this._mesh && !this._mesh.loaded ? (this.disableRender(),
                this._mesh.once("load", (function() {
                    t.isValid && (t._setMesh(t._mesh),
                    t.markForRender(!0))
                }
                )),
                cc.assetManager.postLoadNative(this._mesh)) : this._setMesh(this._mesh),
                this._updateRenderNode(),
                this._updateMaterial()
            },
            onDestroy: function() {
                this._setMesh(null),
                cc.pool.assembler.put(this._assembler)
            },
            _updateRenderNode: function() {
                this._assembler.setRenderNode(this.node)
            },
            _setMesh: function(t) {
                cc.geomUtils && t && n.default.fromPoints(this._boundingBox, t._minPos, t._maxPos),
                this._mesh && this._mesh.off("init-format", this._updateMeshAttribute, this),
                t && t.on("init-format", this._updateMeshAttribute, this),
                this._mesh = t,
                this._assembler && (this._assembler._worldDatas = {}),
                this._updateMeshAttribute()
            },
            _getDefaultMaterial: function() {
                return h.getBuiltinMaterial("unlit")
            },
            _validateRender: function() {
                var t = this._mesh;
                t && t._subDatas.length > 0 || this.disableRender()
            },
            _updateMaterial: function() {
                var t = this.textures;
                if (t && t.length > 0)
                    for (var e = this._getDefaultMaterial(), i = 0; i < t.length; i++) {
                        var n = this._materials[i];
                        n && n._uuid !== e._uuid || (n || (n = r.default.create(e, this),
                        this.setMaterial(i, n)),
                        n.setProperty("diffuseTexture", t[i]))
                    }
                this._updateReceiveShadow(),
                this._updateCastShadow(),
                this._updateMeshAttribute()
            },
            _updateReceiveShadow: function() {
                for (var t = this.getMaterials(), e = 0; e < t.length; e++)
                    t[e].define("CC_USE_SHADOW_MAP", this._receiveShadows, void 0, !0)
            },
            _updateCastShadow: function() {
                for (var t = this.getMaterials(), e = 0; e < t.length; e++)
                    t[e].define("CC_CASTING_SHADOW", this._shadowCastingMode === c.ON, void 0, !0)
            },
            _updateMeshAttribute: function() {
                var t = this._mesh && this._mesh.subDatas;
                if (t)
                    for (var e = this.getMaterials(), n = 0; n < e.length && t[n]; n++) {
                        var r = t[n].vfm
                          , s = e[n];
                        s.define("CC_USE_ATTRIBUTE_COLOR", !!r.element(i.default.ATTR_COLOR), void 0, !0),
                        s.define("CC_USE_ATTRIBUTE_UV0", !!r.element(i.default.ATTR_UV0), void 0, !0),
                        s.define("CC_USE_ATTRIBUTE_NORMAL", !!r.element(i.default.ATTR_NORMAL), void 0, !0),
                        s.define("CC_USE_ATTRIBUTE_TANGENT", !!r.element(i.default.ATTR_TANGENT), void 0, !0)
                    }
            },
            _checkBacth: function() {}
        });
        cc.MeshRenderer = e.exports = u
    }
    ), {
        "../../renderer/core/input-assembler": 305,
        "../../renderer/gfx": 315,
        "../assets/material/CCMaterial": 80,
        "../assets/material/material-variant": 87,
        "../components/CCRenderComponent": 115,
        "../geom-utils/aabb": 144,
        "../renderer": 224,
        "../renderer/render-flow": 225,
        "../value-types/mat4": 284,
        "../value-types/vec3": 292,
        "./CCMesh": 161
    }],
    163: [(function(t) {
        "use strict";
        t("./CCMesh"),
        t("./CCMeshRenderer"),
        t("./mesh-renderer")
    }
    ), {
        "./CCMesh": 161,
        "./CCMeshRenderer": 162,
        "./mesh-renderer": 165
    }],
    164: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.MeshData = h,
        i.Primitive = i.VertexBundle = i.VertexFormat = i.BufferRange = void 0;
        var n, r = (n = t("../../renderer/gfx")) && n.__esModule ? n : {
            default: n
        }, s = cc.Class({
            name: "cc.BufferRange",
            properties: {
                offset: 0,
                length: 0
            }
        });
        i.BufferRange = s;
        var a = cc.Class({
            name: "cc.mesh.VertexFormat",
            properties: {
                name: "",
                type: -1,
                num: -1,
                normalize: !1
            }
        });
        i.VertexFormat = a;
        var o = cc.Class({
            name: "cc.mesh.VertexBundle",
            properties: {
                data: {
                    default: null,
                    type: s
                },
                formats: {
                    default: [],
                    type: a
                },
                verticesCount: 0
            }
        });
        i.VertexBundle = o;
        var l = cc.Class({
            name: "cc.mesh.Primitive",
            properties: {
                vertexBundleIndices: {
                    default: [],
                    type: cc.Float
                },
                data: {
                    default: null,
                    type: s
                },
                indexUnit: r.default.INDEX_FMT_UINT16,
                topology: r.default.PT_TRIANGLES
            }
        });
        function h() {
            this.vData = null,
            this.float32VData = null,
            this.uint32VData = null,
            this.iData = null,
            this.uint16IData = null,
            this.vfm = null,
            this.offset = 0,
            this.vb = null,
            this.ib = null,
            this.vDirty = !1,
            this.iDirty = !1,
            this.enable = !0
        }
        i.Primitive = l,
        h.prototype.setVData = function(t) {
            this.vData = t,
            this.float32VData = null,
            this.uint32VData = null
        }
        ,
        h.prototype.getVData = function(t) {
            return t === Float32Array ? (this.float32VData || (this.float32VData = new Float32Array(this.vData.buffer,this.vData.byteOffset,this.vData.byteLength / 4)),
            this.float32VData) : t === Uint32Array ? (this.uint32VData || (this.uint32VData = new Uint32Array(this.vData.buffer,this.vData.byteOffset,this.vData.byteLength / 4)),
            this.uint32VData) : this.vData
        }
        ,
        h.prototype.getIData = function(t) {
            return t === Uint16Array ? (this.uint16IData || (this.uint16IData = new Uint16Array(this.iData.buffer,this.iData.byteOffset,this.iData.byteLength / 2)),
            this.uint16IData) : this.iData
        }
    }
    ), {
        "../../renderer/gfx": 315
    }],
    165: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("../renderer/assembler"))
          , r = a(t("../../renderer/gfx"))
          , s = a(t("../value-types/vec3"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            return (o = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var l = t("./CCMeshRenderer")
          , h = new s.default
          , c = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            o(e, i);
            var a = n.prototype;
            return a.init = function(e) {
                t.prototype.init.call(this, e),
                this._worldDatas = {},
                this._renderNode = null
            }
            ,
            a.setRenderNode = function(t) {
                this._renderNode = t
            }
            ,
            a.fillBuffers = function(t, e) {
                if (t.mesh) {
                    t.mesh._uploadData();
                    for (var i = e.cullingMask === t.node._cullingMask, n = t.enableAutoBatch, s = t._materials, a = t.mesh._subMeshes, o = t.mesh.subDatas, l = 0; l < a.length; l++) {
                        var h = a[l]
                          , c = o[l]
                          , u = s[l] || s[0];
                        n && c.canBatch && h._primitiveType === r.default.PT_TRIANGLES ? (i && u.getHash() === e.material.getHash() || e._flush(),
                        e.material = u,
                        e.cullingMask = t.node._cullingMask,
                        e.node = e._dummyNode,
                        this._fillBuffer(t, c, e, l)) : (e._flush(),
                        e.material = u,
                        e.cullingMask = t.node._cullingMask,
                        e.node = this._renderNode,
                        e._flushIA(h))
                    }
                }
            }
            ,
            a._fillBuffer = function(t, e, i, n) {
                var r = e.getVData(Float32Array)
                  , s = e.vfm
                  , a = r.byteLength / s._bytes | 0
                  , o = e.getIData(Uint16Array)
                  , l = o.length
                  , h = i.getBuffer("mesh", s)
                  , c = h.request(a, l)
                  , u = c.indiceOffset
                  , _ = c.byteOffset >> 2
                  , f = c.vertexOffset
                  , d = h._vData
                  , p = h._iData;
                !i.worldMatDirty && this._worldDatas[n] || this._updateWorldVertices(n, a, r, s, t.node._worldMatrix),
                d.set(this._worldDatas[n], _);
                for (var m = 0; m < l; m++)
                    p[u + m] = f + o[m]
            }
            ,
            a._updateWorldVertices = function(t, e, i, n, a) {
                var o = this._worldDatas[t];
                o || (o = this._worldDatas[t] = new Float32Array(i.length)).set(i);
                for (var l = n._bytes / 4, c = n._elements, u = 0, _ = c.length; u < _; u++) {
                    var f = c[u]
                      , d = f.offset / 4;
                    if (f.name === r.default.ATTR_POSITION || f.name === r.default.ATTR_NORMAL)
                        for (var p = f.name === r.default.ATTR_NORMAL ? s.default.transformMat4Normal : s.default.transformMat4, m = 0; m < e; m++) {
                            var y = m * l + d;
                            h.x = i[y],
                            h.y = i[y + 1],
                            h.z = i[y + 2],
                            p(h, h, a),
                            o[y] = h.x,
                            o[y + 1] = h.y,
                            o[y + 2] = h.z
                        }
                }
            }
            ,
            a._drawDebugDatas = function(t, e, i) {
                var n = t._debugDatas[i];
                if (n)
                    for (var r = 0; r < n.length; r++) {
                        var s = n[r];
                        if (s) {
                            var a = s.material;
                            e.material = a,
                            e._flushIA(s.ia)
                        }
                    }
            }
            ,
            n
        }
        )(n.default);
        i.default = c,
        n.default.register(l, c),
        e.exports = i.default
    }
    ), {
        "../../renderer/gfx": 315,
        "../renderer/assembler": 221,
        "../value-types/vec3": 292,
        "./CCMeshRenderer": 162
    }],
    166: [(function(t, e) {
        "use strict";
        var i = t("./component-scheduler")
          , n = t("./platform/CCObject").Flags
          , r = t("./platform/js")
          , s = n.IsPreloadStarted
          , a = n.IsOnLoadStarted
          , o = n.IsOnLoadCalled
          , l = n.Deactivating
          , h = cc.Class({
            extends: i.LifeCycleInvoker,
            add: function(t) {
                this._zero.array.push(t)
            },
            remove: function(t) {
                this._zero.fastRemove(t)
            },
            cancelInactive: function(t) {
                i.LifeCycleInvoker.stableRemoveInactive(this._zero, t)
            },
            invoke: function() {
                this._invoke(this._zero),
                this._zero.array.length = 0
            }
        })
          , c = i.createInvokeImpl("c.__preload();")
          , u = i.createInvokeImpl("c.onLoad();c._objFlags|=" + o, !1, o)
          , _ = new r.Pool(4);
        function f(t, e, i) {
            e ? t._removeComponent(e) : r.array.removeAt(t._components, i)
        }
        function d() {
            this._activatingStack = []
        }
        _.get = function() {
            var t = this._get() || {
                preload: new h(c),
                onLoad: new i.OneOffInvoker(u),
                onEnable: new i.OneOffInvoker(i.invokeOnEnable)
            };
            t.preload._zero.i = -1;
            var e = t.onLoad;
            return e._zero.i = -1,
            e._neg.i = -1,
            e._pos.i = -1,
            (e = t.onEnable)._zero.i = -1,
            e._neg.i = -1,
            e._pos.i = -1,
            t
        }
        ;
        var p = cc.Class({
            ctor: d,
            reset: d,
            _activateNodeRecursively: function(t, e, i, n) {
                if (t._objFlags & l)
                    cc.errorID(3816, t.name);
                else {
                    t._activeInHierarchy = !0;
                    for (var r = t._components.length, s = 0; s < r; ++s) {
                        var a = t._components[s];
                        a instanceof cc.Component ? this.activateComp(a, e, i, n) : (f(t, a, s),
                        --s,
                        --r)
                    }
                    t._childArrivalOrder = t._children.length;
                    for (var o = 0, h = t._children.length; o < h; ++o) {
                        var c = t._children[o];
                        c._localZOrder = 4294901760 & c._localZOrder | o + 1,
                        c._active && this._activateNodeRecursively(c, e, i, n)
                    }
                    t._onPostActivated(!0)
                }
            },
            _deactivateNodeRecursively: function(t) {
                t._objFlags |= l,
                t._activeInHierarchy = !1;
                for (var e = t._components.length, i = 0; i < e; ++i) {
                    var n = t._components[i];
                    if (n._enabled && (cc.director._compScheduler.disableComp(n),
                    t._activeInHierarchy))
                        return void (t._objFlags &= ~l)
                }
                for (var r = 0, s = t._children.length; r < s; ++r) {
                    var a = t._children[r];
                    if (a._activeInHierarchy && (this._deactivateNodeRecursively(a),
                    t._activeInHierarchy))
                        return void (t._objFlags &= ~l)
                }
                t._onPostActivated(!1),
                t._objFlags &= ~l
            },
            activateNode: function(t, e) {
                if (e) {
                    var i = _.get();
                    this._activatingStack.push(i),
                    this._activateNodeRecursively(t, i.preload, i.onLoad, i.onEnable),
                    i.preload.invoke(),
                    i.onLoad.invoke(),
                    i.onEnable.invoke(),
                    this._activatingStack.pop(),
                    _.put(i)
                } else {
                    this._deactivateNodeRecursively(t);
                    for (var n = this._activatingStack, r = 0; r < n.length; r++) {
                        var o = n[r];
                        o.preload.cancelInactive(s),
                        o.onLoad.cancelInactive(a),
                        o.onEnable.cancelInactive()
                    }
                }
                t.emit("active-in-hierarchy-changed", t)
            },
            activateComp: function(t, e, i, n) {
                if (cc.isValid(t, !0) && (t._objFlags & s || (t._objFlags |= s,
                t.__preload && (e ? e.add(t) : t.__preload())),
                t._objFlags & a || (t._objFlags |= a,
                t.onLoad ? i ? i.add(t) : (t.onLoad(),
                t._objFlags |= o) : t._objFlags |= o),
                t._enabled)) {
                    if (!t.node._activeInHierarchy)
                        return;
                    cc.director._compScheduler.enableComp(t, n)
                }
            },
            destroyComp: function(t) {
                cc.director._compScheduler.disableComp(t),
                t.onDestroy && t._objFlags & o && t.onDestroy()
            },
            resetComp: !1
        });
        e.exports = p
    }
    ), {
        "./component-scheduler": 99,
        "./platform/CCObject": 199,
        "./platform/js": 214,
        "./utils/misc": 267
    }],
    167: [(function(t, e) {
        "use strict";
        var i = t("./CCPhysicsTypes").PTM_RATIO
          , n = t("./CCPhysicsTypes").ContactType
          , r = []
          , s = [cc.v2(), cc.v2()]
          , a = new b2.WorldManifold
          , o = {
            points: [],
            separations: [],
            normal: cc.v2()
        };
        function l() {
            this.localPoint = cc.v2(),
            this.normalImpulse = 0,
            this.tangentImpulse = 0
        }
        var h = [new l, new l]
          , c = (new b2.Manifold,
        {
            type: 0,
            localPoint: cc.v2(),
            localNormal: cc.v2(),
            points: []
        })
          , u = {
            normalImpulses: [],
            tangentImpulses: []
        };
        function _() {}
        _.prototype.init = function(t) {
            this.colliderA = t.GetFixtureA().collider,
            this.colliderB = t.GetFixtureB().collider,
            this.disabled = !1,
            this.disabledOnce = !1,
            this._impulse = null,
            this._inverted = !1,
            this._b2contact = t,
            t._contact = this
        }
        ,
        _.prototype.reset = function() {
            this.setTangentSpeed(0),
            this.resetFriction(),
            this.resetRestitution(),
            this.colliderA = null,
            this.colliderB = null,
            this.disabled = !1,
            this._impulse = null,
            this._b2contact._contact = null,
            this._b2contact = null
        }
        ,
        _.prototype.getWorldManifold = function() {
            var t = o.points
              , e = o.separations
              , n = o.normal;
            this._b2contact.GetWorldManifold(a);
            var r = a.points
              , l = a.separations
              , h = this._b2contact.GetManifold().pointCount;
            t.length = e.length = h;
            for (var c = 0; c < h; c++) {
                var u = s[c];
                u.x = r[c].x * i,
                u.y = r[c].y * i,
                t[c] = u,
                e[c] = l[c] * i
            }
            return n.x = a.normal.x,
            n.y = a.normal.y,
            this._inverted && (n.x *= -1,
            n.y *= -1),
            o
        }
        ,
        _.prototype.getManifold = function() {
            for (var t = c.points, e = c.localNormal, n = c.localPoint, r = this._b2contact.GetManifold(), s = r.points, a = t.length = r.pointCount, o = 0; o < a; o++) {
                var l = h[o]
                  , u = s[o];
                l.localPoint.x = u.localPoint.x * i,
                l.localPoint.Y = u.localPoint.Y * i,
                l.normalImpulse = u.normalImpulse * i,
                l.tangentImpulse = u.tangentImpulse,
                t[o] = l
            }
            return n.x = r.localPoint.x * i,
            n.y = r.localPoint.y * i,
            e.x = r.localNormal.x,
            e.y = r.localNormal.y,
            c.type = r.type,
            this._inverted && (e.x *= -1,
            e.y *= -1),
            c
        }
        ,
        _.prototype.getImpulse = function() {
            var t = this._impulse;
            if (!t)
                return null;
            for (var e = u.normalImpulses, n = u.tangentImpulses, r = t.count, s = 0; s < r; s++)
                e[s] = t.normalImpulses[s] * i,
                n[s] = t.tangentImpulses[s];
            return n.length = e.length = r,
            u
        }
        ,
        _.prototype.emit = function(t) {
            var e;
            switch (t) {
            case n.BEGIN_CONTACT:
                e = "onBeginContact";
                break;
            case n.END_CONTACT:
                e = "onEndContact";
                break;
            case n.PRE_SOLVE:
                e = "onPreSolve";
                break;
            case n.POST_SOLVE:
                e = "onPostSolve"
            }
            var i, r, s, a, o = this.colliderA, l = this.colliderB, h = o.body, c = l.body;
            if (h.enabledContactListener)
                for (i = h.node._components,
                this._inverted = !1,
                r = 0,
                s = i.length; r < s; r++)
                    (a = i[r])[e] && a[e](this, o, l);
            if (c.enabledContactListener)
                for (i = c.node._components,
                this._inverted = !0,
                r = 0,
                s = i.length; r < s; r++)
                    (a = i[r])[e] && a[e](this, l, o);
            (this.disabled || this.disabledOnce) && (this.setEnabled(!1),
            this.disabledOnce = !1)
        }
        ,
        _.get = function(t) {
            var e;
            return (e = 0 === r.length ? new cc.PhysicsContact : r.pop()).init(t),
            e
        }
        ,
        _.put = function(t) {
            var e = t._contact;
            e && (r.push(e),
            e.reset())
        }
        ;
        var f = _.prototype;
        f.setEnabled = function(t) {
            this._b2contact.SetEnabled(t)
        }
        ,
        f.isTouching = function() {
            return this._b2contact.IsTouching()
        }
        ,
        f.setTangentSpeed = function(t) {
            this._b2contact.SetTangentSpeed(t / i)
        }
        ,
        f.getTangentSpeed = function() {
            return this._b2contact.GetTangentSpeed() * i
        }
        ,
        f.setFriction = function(t) {
            this._b2contact.SetFriction(t)
        }
        ,
        f.getFriction = function() {
            return this._b2contact.GetFriction()
        }
        ,
        f.resetFriction = function() {
            return this._b2contact.ResetFriction()
        }
        ,
        f.setRestitution = function(t) {
            this._b2contact.SetRestitution(t)
        }
        ,
        f.getRestitution = function() {
            return this._b2contact.GetRestitution()
        }
        ,
        f.resetRestitution = function() {
            return this._b2contact.ResetRestitution()
        }
        ,
        _.ContactType = n,
        cc.PhysicsContact = e.exports = _
    }
    ), {
        "./CCPhysicsTypes": 169
    }],
    168: [(function(t, e) {
        "use strict";
        var i = t("./CCPhysicsTypes")
          , n = i.ContactType
          , r = i.BodyType
          , s = i.RayCastType
          , a = i.DrawBits
          , o = i.PTM_RATIO
          , l = (i.ANGLE_TO_PHYSICS_ANGLE,
        i.PHYSICS_ANGLE_TO_ANGLE)
          , h = t("./utils").convertToNodeRotation
          , c = t("./platform/CCPhysicsDebugDraw")
          , u = new b2.AABB
          , _ = new b2.Vec2
          , f = new b2.Vec2
          , d = cc.v2()
          , p = cc.Class({
            mixins: [cc.EventTarget],
            statics: {
                DrawBits: a,
                PTM_RATIO: o,
                VELOCITY_ITERATIONS: 10,
                POSITION_ITERATIONS: 10,
                FIXED_TIME_STEP: 1 / 60,
                MAX_ACCUMULATOR: .2
            },
            ctor: function() {
                this._debugDrawFlags = 0,
                this._debugDrawer = null,
                this._world = null,
                this._bodies = [],
                this._joints = [],
                this._contactMap = {},
                this._contactID = 0,
                this._delayEvents = [],
                this._accumulator = 0,
                cc.director._scheduler && cc.director._scheduler.enableForTarget(this),
                this.enabledAccumulator = !1
            },
            pushDelayEvent: function(t, e, i) {
                this._steping ? this._delayEvents.push({
                    target: t,
                    func: e,
                    args: i
                }) : t[e].apply(t, i)
            },
            update: function(t) {
                var e = this._world;
                if (e && this.enabled) {
                    this.emit("before-step"),
                    this._steping = !0;
                    var i = p.VELOCITY_ITERATIONS
                      , n = p.POSITION_ITERATIONS;
                    if (this.enabledAccumulator) {
                        this._accumulator += t;
                        var r = p.FIXED_TIME_STEP
                          , s = p.MAX_ACCUMULATOR;
                        for (this._accumulator > s && (this._accumulator = s); this._accumulator > r; )
                            e.Step(r, i, n),
                            this._accumulator -= r
                    } else {
                        var a = 1 / cc.game.config.frameRate;
                        e.Step(a, i, n)
                    }
                    this.debugDrawFlags && (this._checkDebugDrawValid(),
                    this._debugDrawer.clear(),
                    e.DrawDebugData()),
                    this._steping = !1;
                    for (var o = this._delayEvents, l = 0, h = o.length; l < h; l++) {
                        var c = o[l];
                        c.target[c.func].apply(c.target, c.args)
                    }
                    o.length = 0,
                    this._syncNode()
                }
            },
            testPoint: function(t) {
                var e = _.x = t.x / o
                  , i = _.y = t.y / o
                  , n = .2 / o;
                u.lowerBound.x = e - n,
                u.lowerBound.y = i - n,
                u.upperBound.x = e + n,
                u.upperBound.y = i + n;
                var r = this._aabbQueryCallback;
                r.init(_),
                this._world.QueryAABB(r, u);
                var s = r.getFixture();
                return s ? s.collider : null
            },
            testAABB: function(t) {
                u.lowerBound.x = t.xMin / o,
                u.lowerBound.y = t.yMin / o,
                u.upperBound.x = t.xMax / o,
                u.upperBound.y = t.yMax / o;
                var e = this._aabbQueryCallback;
                return e.init(),
                this._world.QueryAABB(e, u),
                e.getFixtures().map((function(t) {
                    return t.collider
                }
                ))
            },
            rayCast: function(t, e, i) {
                if (t.equals(e))
                    return [];
                i = i || s.Closest,
                _.x = t.x / o,
                _.y = t.y / o,
                f.x = e.x / o,
                f.y = e.y / o;
                var n = this._raycastQueryCallback;
                n.init(i),
                this._world.RayCast(n, _, f);
                var r = n.getFixtures();
                if (r.length > 0) {
                    for (var a = n.getPoints(), l = n.getNormals(), h = n.getFractions(), c = [], u = 0, d = r.length; u < d; u++) {
                        var p = r[u]
                          , m = p.collider;
                        if (i === s.AllClosest) {
                            var y = c.find((function(t) {
                                return t.collider === m
                            }
                            ));
                            if (y) {
                                h[u] < y.fraction && (y.fixtureIndex = m._getFixtureIndex(p),
                                y.point.x = a[u].x * o,
                                y.point.y = a[u].y * o,
                                y.normal.x = l[u].x,
                                y.normal.y = l[u].y,
                                y.fraction = h[u]);
                                continue
                            }
                        }
                        c.push({
                            collider: m,
                            fixtureIndex: m._getFixtureIndex(p),
                            point: cc.v2(a[u].x * o, a[u].y * o),
                            normal: cc.v2(l[u]),
                            fraction: h[u]
                        })
                    }
                    return c
                }
                return []
            },
            syncPosition: function() {
                for (var t = this._bodies, e = 0; e < t.length; e++)
                    t[e].syncPosition()
            },
            syncRotation: function() {
                for (var t = this._bodies, e = 0; e < t.length; e++)
                    t[e].syncRotation()
            },
            _registerContactFixture: function(t) {
                this._contactListener.registerContactFixture(t)
            },
            _unregisterContactFixture: function(t) {
                this._contactListener.unregisterContactFixture(t)
            },
            _addBody: function(t, e) {
                var i = this._world
                  , n = t.node;
                i && n && (t._b2Body = i.CreateBody(e),
                t._b2Body.body = t,
                this._bodies.push(t))
            },
            _removeBody: function(t) {
                var e = this._world;
                e && (t._b2Body.body = null,
                e.DestroyBody(t._b2Body),
                t._b2Body = null,
                cc.js.array.remove(this._bodies, t))
            },
            _addJoint: function(t, e) {
                var i = this._world.CreateJoint(e);
                i && (i._joint = t,
                t._joint = i,
                this._joints.push(t))
            },
            _removeJoint: function(t) {
                t._isValid() && this._world.DestroyJoint(t._joint),
                t._joint && (t._joint._joint = null),
                cc.js.array.remove(this._joints, t)
            },
            _initCallback: function() {
                if (this._world) {
                    if (!this._contactListener) {
                        var t = new cc.PhysicsContactListener;
                        t.setBeginContact(this._onBeginContact),
                        t.setEndContact(this._onEndContact),
                        t.setPreSolve(this._onPreSolve),
                        t.setPostSolve(this._onPostSolve),
                        this._world.SetContactListener(t),
                        this._contactListener = t,
                        this._aabbQueryCallback = new cc.PhysicsAABBQueryCallback,
                        this._raycastQueryCallback = new cc.PhysicsRayCastCallback
                    }
                } else
                    cc.warn("Please init PhysicsManager first")
            },
            _init: function() {
                this.enabled = !0,
                this.debugDrawFlags = a.e_shapeBit
            },
            _getWorld: function() {
                return this._world
            },
            _syncNode: function() {
                for (var t = this._bodies, e = 0, i = t.length; e < i; e++) {
                    var n = t[e]
                      , s = n.node
                      , a = n._b2Body
                      , c = a.GetPosition();
                    d.x = c.x * o,
                    d.y = c.y * o;
                    var u = a.GetAngle() * l;
                    null !== s.parent.parent && (d = s.parent.convertToNodeSpaceAR(d),
                    u = h(s.parent, u));
                    var _ = s._eventMask;
                    s._eventMask = 0,
                    s.position = d,
                    s.angle = -u,
                    s._eventMask = _,
                    n.type === r.Animated && n.resetVelocity()
                }
            },
            _onBeginContact: function(t) {
                cc.PhysicsContact.get(t).emit(n.BEGIN_CONTACT)
            },
            _onEndContact: function(t) {
                var e = t._contact;
                e && (e.emit(n.END_CONTACT),
                cc.PhysicsContact.put(t))
            },
            _onPreSolve: function(t) {
                var e = t._contact;
                e && e.emit(n.PRE_SOLVE)
            },
            _onPostSolve: function(t, e) {
                var i = t._contact;
                i && (i._impulse = e,
                i.emit(n.POST_SOLVE),
                i._impulse = null)
            },
            _checkDebugDrawValid: function() {
                if (!this._debugDrawer || !this._debugDrawer.isValid) {
                    var t = new cc.Node("PHYSICS_MANAGER_DEBUG_DRAW");
                    t.zIndex = cc.macro.MAX_ZINDEX,
                    cc.game.addPersistRootNode(t),
                    this._debugDrawer = t.addComponent(cc.Graphics);
                    var e = new c(this._debugDrawer);
                    e.SetFlags(this.debugDrawFlags),
                    this._world.SetDebugDraw(e)
                }
            }
        });
        cc.js.getset(p.prototype, "enabled", (function() {
            return this._enabled
        }
        ), (function(t) {
            if (t && !this._world) {
                var e = new b2.World(new b2.Vec2(0,-10));
                e.SetAllowSleeping(!0),
                this._world = e,
                this._initCallback()
            }
            this._enabled = t
        }
        )),
        cc.js.getset(p.prototype, "debugDrawFlags", (function() {
            return this._debugDrawFlags
        }
        ), (function(t) {
            t && !this._debugDrawFlags ? this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = !0) : !t && this._debugDrawFlags && this._debugDrawer && this._debugDrawer.node && (this._debugDrawer.node.active = !1),
            t && (this._checkDebugDrawValid(),
            this._world.m_debugDraw.SetFlags(t)),
            this._debugDrawFlags = t,
            t && (this._checkDebugDrawValid(),
            this._world.m_debugDraw.SetFlags(t))
        }
        )),
        cc.js.getset(p.prototype, "gravity", (function() {
            if (this._world) {
                var t = this._world.GetGravity();
                return cc.v2(t.x * o, t.y * o)
            }
            return cc.v2()
        }
        ), (function(t) {
            this._world && this._world.SetGravity(new b2.Vec2(t.x / o,t.y / o))
        }
        )),
        cc.PhysicsManager = e.exports = p
    }
    ), {
        "./CCPhysicsTypes": 169,
        "./platform/CCPhysicsDebugDraw": 190,
        "./utils": 192
    }],
    169: [(function(t, e) {
        "use strict";
        var i = cc.Enum({
            Static: 0,
            Kinematic: 1,
            Dynamic: 2,
            Animated: 3
        });
        cc.RigidBodyType = i;
        var n = cc.Enum({
            Closest: 0,
            Any: 1,
            AllClosest: 2,
            All: 3
        });
        cc.RayCastType = n,
        e.exports = {
            BodyType: i,
            ContactType: {
                BEGIN_CONTACT: "begin-contact",
                END_CONTACT: "end-contact",
                PRE_SOLVE: "pre-solve",
                POST_SOLVE: "post-solve"
            },
            RayCastType: n,
            DrawBits: b2.DrawFlags,
            PTM_RATIO: 32,
            ANGLE_TO_PHYSICS_ANGLE: -Math.PI / 180,
            PHYSICS_ANGLE_TO_ANGLE: -180 / Math.PI
        }
    }
    ), {}],
    170: [(function(t, e) {
        "use strict";
        function i(t, e) {
            var i = e.length;
            return e[t < 0 ? i - -t % i : t % i]
        }
        function n(t, e, n) {
            for (var r = []; e < t; )
                e += n.length;
            for (; t <= e; ++t)
                r.push(i(t, n));
            return r
        }
        function r(t, e, n) {
            if (s(t, n)) {
                if (l(i(t, n), i(t - 1, n), i(e, n)) && h(i(t, n), i(t + 1, n), i(e, n)))
                    return !1
            } else if (h(i(t, n), i(t + 1, n), i(e, n)) || l(i(t, n), i(t - 1, n), i(e, n)))
                return !1;
            if (s(e, n)) {
                if (l(i(e, n), i(e - 1, n), i(t, n)) && h(i(e, n), i(e + 1, n), i(t, n)))
                    return !1
            } else if (h(i(e, n), i(e + 1, n), i(t, n)) || l(i(e, n), i(e - 1, n), i(t, n)))
                return !1;
            for (var r = 0; r < n.length; ++r)
                if ((r + 1) % n.length != t && r != t && (r + 1) % n.length != e && r != e) {
                    var a = cc.v2();
                    if (p(i(t, n), i(e, n), i(r, n), i(r + 1, n), a))
                        return !1
                }
            return !0
        }
        function s(t, e) {
            return a(t, e)
        }
        function a(t, e, n) {
            if (void 0 === n) {
                var r = t
                  , s = e;
                t = i(r - 1, s),
                e = i(r, s),
                n = i(r + 1, s)
            }
            return m(t, e, n) < 0
        }
        function o(t, e, i) {
            return m(t, e, i) > 0
        }
        function l(t, e, i) {
            return m(t, e, i) >= 0
        }
        function h(t, e, i) {
            return m(t, e, i) <= 0
        }
        function c(t, e) {
            var i = e.x - t.x
              , n = e.y - t.y;
            return i * i + n * n
        }
        function u(t) {
            _(t) || t.reverse()
        }
        function _(t) {
            return t.length < 3 || f(t) > 0
        }
        function f(t) {
            var e, i = 0;
            for (e = 0; e < t.length; e++) {
                var n = (e + 1) % t.length;
                i += t[e].x * t[n].y,
                i -= t[e].y * t[n].x
            }
            return i / 2
        }
        function d(t, e, i, n) {
            var r, s = cc.v2(), a = e.y - t.y, o = t.x - e.x, l = a * t.x + o * t.y, h = n.y - i.y, c = i.x - n.x, u = h * i.x + c * i.y, _ = a * c - h * o;
            return r = _,
            0,
            Math.abs(r - 0) <= 1e-6 || (s.x = (c * l - o * u) / _,
            s.y = (a * u - h * l) / _),
            s
        }
        function p(t, e, i, n, r) {
            if (t == i || t == n || e == i || e == n)
                return !1;
            var s = t.x
              , a = t.y
              , o = e.x
              , l = e.y
              , h = i.x
              , c = i.y
              , u = n.x
              , _ = n.y;
            if (Math.max(s, o) < Math.min(h, u) || Math.max(h, u) < Math.min(s, o))
                return !1;
            if (Math.max(a, l) < Math.min(c, _) || Math.max(c, _) < Math.min(a, l))
                return !1;
            var f = (u - h) * (a - c) - (_ - c) * (s - h)
              , d = (o - s) * (a - c) - (l - a) * (s - h)
              , p = (_ - c) * (o - s) - (u - h) * (l - a);
            return !(Math.abs(p) < 1e-6) && (d /= p,
            0 < (f /= p) && f < 1 && 0 < d && d < 1 && (r.x = s + f * (o - s),
            r.y = a + f * (l - a),
            !0))
        }
        function m(t, e, i) {
            return t.x * (e.y - i.y) + e.x * (i.y - t.y) + i.x * (t.y - e.y)
        }
        e.exports = {
            ConvexPartition: function t(e) {
                u(e);
                for (var _, f, p, m, y, v, g = [], A = cc.v2(), x = cc.v2(), b = 0, C = 0, T = 0; T < e.length; ++T)
                    if (s(T, e)) {
                        f = p = 1e8;
                        for (var S = 0; S < e.length; ++S)
                            o(i(T - 1, e), i(T, e), i(S, e)) && h(i(T - 1, e), i(T, e), i(S - 1, e)) && (m = d(i(T - 1, e), i(T, e), i(S, e), i(S - 1, e)),
                            a(i(T + 1, e), i(T, e), m) && (_ = c(i(T, e), m)) < f && (f = _,
                            A = m,
                            b = S)),
                            o(i(T + 1, e), i(T, e), i(S + 1, e)) && h(i(T + 1, e), i(T, e), i(S, e)) && (m = d(i(T + 1, e), i(T, e), i(S, e), i(S + 1, e)),
                            o(i(T - 1, e), i(T, e), m) && (_ = c(i(T, e), m)) < p && (p = _,
                            C = S,
                            x = m));
                        if (b == (C + 1) % e.length) {
                            var w = A.add(x).div(2);
                            (y = n(T, C, e)).push(w),
                            (v = n(b, T, e)).push(w)
                        } else {
                            for (var E = 0, M = b; C < b; )
                                C += e.length;
                            for (S = b; S <= C; ++S)
                                if (r(T, S, e)) {
                                    var D = 1 / (c(i(T, e), i(S, e)) + 1);
                                    s(S, e) ? h(i(S - 1, e), i(S, e), i(T, e)) && l(i(S + 1, e), i(S, e), i(T, e)) ? D += 3 : D += 2 : D += 1,
                                    D > E && (M = S,
                                    E = D)
                                }
                            y = n(T, M, e),
                            v = n(M, T, e)
                        }
                        return (g = g.concat(t(y))).concat(t(v))
                    }
                for (g.push(e),
                T = g.length - 1; T >= 0; T--)
                    0 == g[T].length && g.splice(T, 0);
                return g
            },
            ForceCounterClockWise: u,
            IsCounterClockWise: _
        }
    }
    ), {}],
    171: [(function(t, e) {
        "use strict";
        var i = t("../CCNode").EventType
          , n = t("./CCPhysicsTypes").PTM_RATIO
          , r = t("./CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , s = t("./CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE
          , a = t("./utils").getWorldRotation
          , o = t("./CCPhysicsTypes").BodyType
          , l = new b2.Vec2
          , h = new b2.Vec2
          , c = cc.Vec2.ZERO
          , u = cc.Class({
            name: "cc.RigidBody",
            extends: cc.Component,
            editor: !1,
            properties: {
                _type: o.Dynamic,
                _allowSleep: !0,
                _gravityScale: 1,
                _linearDamping: 0,
                _angularDamping: 0,
                _linearVelocity: cc.v2(0, 0),
                _angularVelocity: 0,
                _fixedRotation: !1,
                enabled: {
                    get: function() {
                        return this._enabled
                    },
                    set: function() {
                        cc.warnID(8200)
                    },
                    visible: !1,
                    override: !0
                },
                enabledContactListener: {
                    default: !1,
                    tooltip: !1
                },
                bullet: {
                    default: !1,
                    tooltip: !1
                },
                type: {
                    type: o,
                    tooltip: !1,
                    get: function() {
                        return this._type
                    },
                    set: function(t) {
                        this._type = t,
                        this._b2Body && (t === o.Animated ? this._b2Body.SetType(o.Kinematic) : this._b2Body.SetType(t))
                    }
                },
                allowSleep: {
                    tooltip: !1,
                    get: function() {
                        return this._b2Body ? this._b2Body.IsSleepingAllowed() : this._allowSleep
                    },
                    set: function(t) {
                        this._allowSleep = t,
                        this._b2Body && this._b2Body.SetSleepingAllowed(t)
                    }
                },
                gravityScale: {
                    tooltip: !1,
                    get: function() {
                        return this._gravityScale
                    },
                    set: function(t) {
                        this._gravityScale = t,
                        this._b2Body && this._b2Body.SetGravityScale(t)
                    }
                },
                linearDamping: {
                    tooltip: !1,
                    get: function() {
                        return this._linearDamping
                    },
                    set: function(t) {
                        this._linearDamping = t,
                        this._b2Body && this._b2Body.SetLinearDamping(this._linearDamping)
                    }
                },
                angularDamping: {
                    tooltip: !1,
                    get: function() {
                        return this._angularDamping
                    },
                    set: function(t) {
                        this._angularDamping = t,
                        this._b2Body && this._b2Body.SetAngularDamping(t)
                    }
                },
                linearVelocity: {
                    tooltip: !1,
                    type: cc.Vec2,
                    get: function() {
                        var t = this._linearVelocity;
                        if (this._b2Body) {
                            var e = this._b2Body.GetLinearVelocity();
                            t.x = e.x * n,
                            t.y = e.y * n
                        }
                        return t
                    },
                    set: function(t) {
                        this._linearVelocity = t;
                        var e = this._b2Body;
                        if (e) {
                            var i = e.m_linearVelocity;
                            i.Set(t.x / n, t.y / n),
                            e.SetLinearVelocity(i)
                        }
                    }
                },
                angularVelocity: {
                    tooltip: !1,
                    get: function() {
                        return this._b2Body ? this._b2Body.GetAngularVelocity() * s : this._angularVelocity
                    },
                    set: function(t) {
                        this._angularVelocity = t,
                        this._b2Body && this._b2Body.SetAngularVelocity(t * r)
                    }
                },
                fixedRotation: {
                    tooltip: !1,
                    get: function() {
                        return this._fixedRotation
                    },
                    set: function(t) {
                        this._fixedRotation = t,
                        this._b2Body && this._b2Body.SetFixedRotation(t)
                    }
                },
                awake: {
                    visible: !1,
                    tooltip: !1,
                    get: function() {
                        return !!this._b2Body && this._b2Body.IsAwake()
                    },
                    set: function(t) {
                        this._b2Body && this._b2Body.SetAwake(t)
                    }
                },
                awakeOnLoad: {
                    default: !0,
                    tooltip: !1,
                    animatable: !1
                },
                active: {
                    visible: !1,
                    get: function() {
                        return !!this._b2Body && this._b2Body.IsActive()
                    },
                    set: function(t) {
                        this._b2Body && this._b2Body.SetActive(t)
                    }
                }
            },
            getLocalPoint: function(t, e) {
                if (e = e || cc.v2(),
                this._b2Body) {
                    l.Set(t.x / n, t.y / n);
                    var i = this._b2Body.GetLocalPoint(l, e);
                    e.x = i.x * n,
                    e.y = i.y * n
                }
                return e
            },
            getWorldPoint: function(t, e) {
                if (e = e || cc.v2(),
                this._b2Body) {
                    l.Set(t.x / n, t.y / n);
                    var i = this._b2Body.GetWorldPoint(l, e);
                    e.x = i.x * n,
                    e.y = i.y * n
                }
                return e
            },
            getWorldVector: function(t, e) {
                if (e = e || cc.v2(),
                this._b2Body) {
                    l.Set(t.x / n, t.y / n);
                    var i = this._b2Body.GetWorldVector(l, e);
                    e.x = i.x * n,
                    e.y = i.y * n
                }
                return e
            },
            getLocalVector: function(t, e) {
                if (e = e || cc.v2(),
                this._b2Body) {
                    l.Set(t.x / n, t.y / n);
                    var i = this._b2Body.GetLocalVector(l, e);
                    e.x = i.x * n,
                    e.y = i.y * n
                }
                return e
            },
            getWorldPosition: function(t) {
                if (t = t || cc.v2(),
                this._b2Body) {
                    var e = this._b2Body.GetPosition();
                    t.x = e.x * n,
                    t.y = e.y * n
                }
                return t
            },
            getWorldRotation: function() {
                return this._b2Body ? this._b2Body.GetAngle() * s : 0
            },
            getLocalCenter: function(t) {
                if (t = t || cc.v2(),
                this._b2Body) {
                    var e = this._b2Body.GetLocalCenter();
                    t.x = e.x * n,
                    t.y = e.y * n
                }
                return t
            },
            getWorldCenter: function(t) {
                if (t = t || cc.v2(),
                this._b2Body) {
                    var e = this._b2Body.GetWorldCenter();
                    t.x = e.x * n,
                    t.y = e.y * n
                }
                return t
            },
            getLinearVelocityFromWorldPoint: function(t, e) {
                if (e = e || cc.v2(),
                this._b2Body) {
                    l.Set(t.x / n, t.y / n);
                    var i = this._b2Body.GetLinearVelocityFromWorldPoint(l, e);
                    e.x = i.x * n,
                    e.y = i.y * n
                }
                return e
            },
            getMass: function() {
                return this._b2Body ? this._b2Body.GetMass() : 0
            },
            getInertia: function() {
                return this._b2Body ? this._b2Body.GetInertia() * n * n : 0
            },
            getJointList: function() {
                if (!this._b2Body)
                    return [];
                var t = []
                  , e = this._b2Body.GetJointList();
                if (!e)
                    return [];
                t.push(e.joint._joint);
                for (var i = e.prev; i; )
                    t.push(i.joint._joint),
                    i = i.prev;
                for (var n = e.next; n; )
                    t.push(n.joint._joint),
                    n = n.next;
                return t
            },
            applyForce: function(t, e, i) {
                this._b2Body && (l.Set(t.x / n, t.y / n),
                h.Set(e.x / n, e.y / n),
                this._b2Body.ApplyForce(l, h, i))
            },
            applyForceToCenter: function(t, e) {
                this._b2Body && (l.Set(t.x / n, t.y / n),
                this._b2Body.ApplyForceToCenter(l, e))
            },
            applyTorque: function(t, e) {
                this._b2Body && this._b2Body.ApplyTorque(t / n, e)
            },
            applyLinearImpulse: function(t, e, i) {
                this._b2Body && (l.Set(t.x / n, t.y / n),
                h.Set(e.x / n, e.y / n),
                this._b2Body.ApplyLinearImpulse(l, h, i))
            },
            applyAngularImpulse: function(t, e) {
                this._b2Body && this._b2Body.ApplyAngularImpulse(t / n / n, e)
            },
            syncPosition: function(t) {
                var e = this._b2Body;
                if (e) {
                    var i, r = this.node.convertToWorldSpaceAR(c);
                    if ((i = this.type === o.Animated ? e.GetLinearVelocity() : e.GetPosition()).x = r.x / n,
                    i.y = r.y / n,
                    this.type === o.Animated && t) {
                        var s = e.GetPosition()
                          , a = cc.game.config.frameRate;
                        i.x = (i.x - s.x) * a,
                        i.y = (i.y - s.y) * a,
                        e.SetAwake(!0),
                        e.SetLinearVelocity(i)
                    } else
                        e.SetTransformVec(i, e.GetAngle())
                }
            },
            syncRotation: function(t) {
                var e = this._b2Body;
                if (e) {
                    var i = r * a(this.node);
                    if (this.type === o.Animated && t) {
                        var n = e.GetAngle()
                          , s = cc.game.config.frameRate;
                        e.SetAwake(!0),
                        e.SetAngularVelocity((i - n) * s)
                    } else
                        e.SetTransformVec(e.GetPosition(), i)
                }
            },
            resetVelocity: function() {
                var t = this._b2Body;
                if (t) {
                    var e = t.m_linearVelocity;
                    e.Set(0, 0),
                    t.SetLinearVelocity(e),
                    t.SetAngularVelocity(0)
                }
            },
            onEnable: function() {
                this._init()
            },
            onDisable: function() {
                this._destroy()
            },
            _registerNodeEvents: function() {
                var t = this.node;
                t.on(i.POSITION_CHANGED, this._onNodePositionChanged, this),
                t.on(i.ROTATION_CHANGED, this._onNodeRotationChanged, this),
                t.on(i.SCALE_CHANGED, this._onNodeScaleChanged, this)
            },
            _unregisterNodeEvents: function() {
                var t = this.node;
                t.off(i.POSITION_CHANGED, this._onNodePositionChanged, this),
                t.off(i.ROTATION_CHANGED, this._onNodeRotationChanged, this),
                t.off(i.SCALE_CHANGED, this._onNodeScaleChanged, this)
            },
            _onNodePositionChanged: function() {
                this.syncPosition(!0)
            },
            _onNodeRotationChanged: function() {
                this.syncRotation(!0)
            },
            _onNodeScaleChanged: function() {
                if (this._b2Body)
                    for (var t = this.getComponents(cc.PhysicsCollider), e = 0; e < t.length; e++)
                        t[e].apply()
            },
            _init: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
            },
            _destroy: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
            },
            __init: function() {
                if (!this._inited) {
                    this._registerNodeEvents();
                    var t = new b2.BodyDef;
                    this.type === o.Animated ? t.type = o.Kinematic : t.type = this.type,
                    t.allowSleep = this.allowSleep,
                    t.gravityScale = this.gravityScale,
                    t.linearDamping = this.linearDamping,
                    t.angularDamping = this.angularDamping;
                    var e = this.linearVelocity;
                    t.linearVelocity = new b2.Vec2(e.x / n,e.y / n),
                    t.angularVelocity = this.angularVelocity * r,
                    t.fixedRotation = this.fixedRotation,
                    t.bullet = this.bullet;
                    var i = this.node
                      , s = i.convertToWorldSpaceAR(c);
                    t.position = new b2.Vec2(s.x / n,s.y / n),
                    t.angle = -Math.PI / 180 * a(i),
                    t.awake = this.awakeOnLoad,
                    cc.director.getPhysicsManager()._addBody(this, t),
                    this._inited = !0
                }
            },
            __destroy: function() {
                this._inited && (cc.director.getPhysicsManager()._removeBody(this),
                this._unregisterNodeEvents(),
                this._inited = !1)
            },
            _getBody: function() {
                return this._b2Body
            }
        });
        cc.RigidBody = e.exports = u
    }
    ), {
        "../CCNode": 29,
        "./CCPhysicsTypes": 169,
        "./utils": 192
    }],
    172: [(function(t) {
        "use strict";
        var e = t("../../../external/box2d/box2d");
        for (var i in window.b2 = {},
        e)
            if (-1 === i.indexOf("b2_")) {
                var n = i.replace("b2", "");
                b2[n] = e[i]
            }
        b2.maxPolygonVertices = 8
    }
    ), {
        "../../../external/box2d/box2d": 377
    }],
    173: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.PhysicsBoxCollider",
            extends: cc.PhysicsCollider,
            mixins: [cc.Collider.Box],
            editor: {
                menu: !1,
                requireComponent: cc.RigidBody
            },
            _createShape: function(t) {
                var e = Math.abs(t.x)
                  , n = Math.abs(t.y)
                  , r = this.size.width / 2 / i * e
                  , s = this.size.height / 2 / i * n
                  , a = this.offset.x / i * e
                  , o = this.offset.y / i * n
                  , l = new b2.PolygonShape;
                return l.SetAsBox(r, s, new b2.Vec2(a,o), 0),
                l
            }
        });
        cc.PhysicsBoxCollider = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    174: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.PhysicsChainCollider",
            extends: cc.PhysicsCollider,
            editor: {
                menu: !1,
                inspector: !1,
                requireComponent: cc.RigidBody
            },
            properties: {
                loop: !1,
                points: {
                    default: function() {
                        return [cc.v2(-50, 0), cc.v2(50, 0)]
                    },
                    type: [cc.Vec2]
                },
                threshold: {
                    default: 1,
                    serializable: !1,
                    visible: !1
                }
            },
            _createShape: function(t) {
                for (var e = new b2.ChainShape, n = this.points, r = [], s = 0; s < n.length; s++) {
                    var a = n[s];
                    r.push(new b2.Vec2(a.x / i * t.x,a.y / i * t.y))
                }
                return this.loop ? e.CreateLoop(r, r.length) : e.CreateChain(r, r.length),
                e
            },
            resetInEditor: !1,
            resetPointsByContour: !1
        });
        cc.PhysicsChainCollider = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    175: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.PhysicsCircleCollider",
            extends: cc.PhysicsCollider,
            mixins: [cc.Collider.Circle],
            editor: {
                menu: !1,
                requireComponent: cc.RigidBody
            },
            _createShape: function(t) {
                var e = Math.abs(t.x)
                  , n = Math.abs(t.y)
                  , r = this.offset.x / i * e
                  , s = this.offset.y / i * n
                  , a = new b2.CircleShape;
                return a.m_radius = this.radius / i * e,
                a.m_p = new b2.Vec2(r,s),
                a
            }
        });
        cc.PhysicsCircleCollider = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    176: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../utils").getWorldScale
          , r = new b2.AABB
          , s = cc.Class({
            name: "cc.PhysicsCollider",
            extends: cc.Collider,
            ctor: function() {
                this._fixtures = [],
                this._shapes = [],
                this._inited = !1,
                this._rect = cc.rect()
            },
            properties: {
                _density: 1,
                _sensor: !1,
                _friction: .2,
                _restitution: 0,
                density: {
                    tooltip: !1,
                    get: function() {
                        return this._density
                    },
                    set: function(t) {
                        this._density = t
                    }
                },
                sensor: {
                    tooltip: !1,
                    get: function() {
                        return this._sensor
                    },
                    set: function(t) {
                        this._sensor = t
                    }
                },
                friction: {
                    tooltip: !1,
                    get: function() {
                        return this._friction
                    },
                    set: function(t) {
                        this._friction = t
                    }
                },
                restitution: {
                    tooltip: !1,
                    get: function() {
                        return this._restitution
                    },
                    set: function(t) {
                        this._restitution = t
                    }
                },
                body: {
                    default: null,
                    type: cc.RigidBody,
                    visible: !1
                }
            },
            onDisable: function() {
                this._destroy()
            },
            onEnable: function() {
                this._init()
            },
            start: function() {
                this._init()
            },
            _getFixtureIndex: function(t) {
                return this._fixtures.indexOf(t)
            },
            _init: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
            },
            _destroy: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
            },
            __init: function() {
                if (!this._inited) {
                    var t = this.body || this.getComponent(cc.RigidBody);
                    if (t) {
                        var e = t._getBody();
                        if (e) {
                            var i = t.node
                              , r = n(i);
                            this._scale = r;
                            var s = 0 === r.x && 0 === r.y ? [] : this._createShape(r);
                            s instanceof Array || (s = [s]);
                            for (var a = 1 << i.groupIndex, o = 0, l = cc.game.collisionMatrix[i.groupIndex], h = 0; h < l.length; h++)
                                l[h] && (o |= 1 << h);
                            for (var c = {
                                categoryBits: a,
                                maskBits: o,
                                groupIndex: 0
                            }, u = cc.director.getPhysicsManager(), _ = 0; _ < s.length; _++) {
                                var f = s[_]
                                  , d = new b2.FixtureDef;
                                d.density = this.density,
                                d.isSensor = this.sensor,
                                d.friction = this.friction,
                                d.restitution = this.restitution,
                                d.shape = f,
                                d.filter = c;
                                var p = e.CreateFixture(d);
                                p.collider = this,
                                t.enabledContactListener && u._registerContactFixture(p),
                                this._shapes.push(f),
                                this._fixtures.push(p)
                            }
                            this.body = t,
                            this._inited = !0
                        }
                    }
                }
            },
            __destroy: function() {
                if (this._inited) {
                    for (var t = this._fixtures, e = this.body._getBody(), i = cc.director.getPhysicsManager(), n = t.length - 1; n >= 0; n--) {
                        var r = t[n];
                        r.collider = null,
                        i._unregisterContactFixture(r),
                        e && e.DestroyFixture(r)
                    }
                    this.body = null,
                    this._fixtures.length = 0,
                    this._shapes.length = 0,
                    this._inited = !1
                }
            },
            _createShape: function() {},
            apply: function() {
                this._destroy(),
                this._init()
            },
            getAABB: function() {
                for (var t = 1e7, e = 1e7, n = -1e7, s = -1e7, a = this.body._getBody().GetTransform(), o = this._fixtures, l = 0; l < o.length; l++)
                    for (var h = o[l].GetShape(), c = h.GetChildCount(), u = 0; u < c; u++)
                        h.ComputeAABB(r, a, u),
                        r.lowerBound.x < t && (t = r.lowerBound.x),
                        r.lowerBound.y < e && (e = r.lowerBound.y),
                        r.upperBound.x > n && (n = r.upperBound.x),
                        r.upperBound.y > s && (s = r.upperBound.y);
                t *= i,
                e *= i,
                n *= i,
                s *= i;
                var _ = this._rect;
                return _.x = t,
                _.y = e,
                _.width = n - t,
                _.height = s - e,
                _
            }
        });
        cc.PhysicsCollider = e.exports = s
    }
    ), {
        "../CCPhysicsTypes": 169,
        "../utils": 192
    }],
    177: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPolygonSeparator")
          , r = cc.Class({
            name: "cc.PhysicsPolygonCollider",
            extends: cc.PhysicsCollider,
            mixins: [cc.Collider.Polygon],
            editor: {
                menu: !1,
                inspector: !1,
                requireComponent: cc.RigidBody
            },
            _createShape: function(t) {
                var e = []
                  , r = this.points;
                r.length > 0 && r[0].equals(r[r.length - 1]) && (r.length -= 1);
                for (var s = n.ConvexPartition(r), a = this.offset, o = 0; o < s.length; o++) {
                    for (var l = s[o], h = null, c = [], u = null, _ = 0, f = l.length; _ < f; _++) {
                        h || (h = new b2.PolygonShape);
                        var d = l[_]
                          , p = (d.x + a.x) / i * t.x
                          , m = (d.y + a.y) / i * t.y
                          , y = new b2.Vec2(p,m);
                        c.push(y),
                        u || (u = y),
                        c.length === b2.maxPolygonVertices && (h.Set(c, c.length),
                        e.push(h),
                        h = null,
                        _ < f - 1 && (c = [u, c[c.length - 1]]))
                    }
                    h && (h.Set(c, c.length),
                    e.push(h))
                }
                return e
            }
        });
        cc.PhysicsPolygonCollider = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169,
        "../CCPolygonSeparator": 170
    }],
    178: [(function(t) {
        "use strict";
        t("./box2d-adapter"),
        t("./CCPhysicsManager"),
        t("./CCRigidBody"),
        t("./CCPhysicsContact"),
        t("./collider/CCPhysicsCollider"),
        t("./collider/CCPhysicsChainCollider"),
        t("./collider/CCPhysicsCircleCollider"),
        t("./collider/CCPhysicsBoxCollider"),
        t("./collider/CCPhysicsPolygonCollider"),
        t("./joint/CCJoint"),
        t("./joint/CCDistanceJoint"),
        t("./joint/CCRevoluteJoint"),
        t("./joint/CCMouseJoint"),
        t("./joint/CCMotorJoint"),
        t("./joint/CCPrismaticJoint"),
        t("./joint/CCWeldJoint"),
        t("./joint/CCWheelJoint"),
        t("./joint/CCRopeJoint"),
        t("./platform/CCPhysicsContactListner"),
        t("./platform/CCPhysicsAABBQueryCallback"),
        t("./platform/CCPhysicsRayCastCallback")
    }
    ), {
        "./CCPhysicsContact": 167,
        "./CCPhysicsManager": 168,
        "./CCRigidBody": 171,
        "./box2d-adapter": 172,
        "./collider/CCPhysicsBoxCollider": 173,
        "./collider/CCPhysicsChainCollider": 174,
        "./collider/CCPhysicsCircleCollider": 175,
        "./collider/CCPhysicsCollider": 176,
        "./collider/CCPhysicsPolygonCollider": 177,
        "./joint/CCDistanceJoint": 179,
        "./joint/CCJoint": 180,
        "./joint/CCMotorJoint": 181,
        "./joint/CCMouseJoint": 182,
        "./joint/CCPrismaticJoint": 183,
        "./joint/CCRevoluteJoint": 184,
        "./joint/CCRopeJoint": 185,
        "./joint/CCWeldJoint": 186,
        "./joint/CCWheelJoint": 187,
        "./platform/CCPhysicsAABBQueryCallback": 188,
        "./platform/CCPhysicsContactListner": 189,
        "./platform/CCPhysicsRayCastCallback": 191
    }],
    179: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.DistanceJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _distance: 1,
                _frequency: 0,
                _dampingRatio: 0,
                distance: {
                    tooltip: !1,
                    get: function() {
                        return this._distance
                    },
                    set: function(t) {
                        this._distance = t,
                        this._joint && this._joint.SetLength(t)
                    }
                },
                frequency: {
                    tooltip: !1,
                    get: function() {
                        return this._frequency
                    },
                    set: function(t) {
                        this._frequency = t,
                        this._joint && this._joint.SetFrequency(t)
                    }
                },
                dampingRatio: {
                    tooltip: !1,
                    get: function() {
                        return this._dampingRatio
                    },
                    set: function(t) {
                        this._dampingRatio = t,
                        this._joint && this._joint.SetDampingRatio(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.DistanceJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.length = this.distance / i,
                t.dampingRatio = this.dampingRatio,
                t.frequencyHz = this.frequency,
                t
            }
        });
        cc.DistanceJoint = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    180: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.Joint",
            extends: cc.Component,
            editor: {
                requireComponent: cc.RigidBody
            },
            properties: {
                anchor: {
                    default: cc.v2(0, 0),
                    tooltip: !1
                },
                connectedAnchor: {
                    default: cc.v2(0, 0),
                    tooltip: !1
                },
                connectedBody: {
                    default: null,
                    type: cc.RigidBody,
                    tooltip: !1
                },
                collideConnected: {
                    default: !1,
                    tooltip: !1
                }
            },
            onDisable: function() {
                this._destroy()
            },
            onEnable: function() {
                this._init()
            },
            start: function() {
                this._init()
            },
            apply: function() {
                this._destroy(),
                this._init()
            },
            getWorldAnchor: function() {
                if (this._joint) {
                    var t = this._joint.GetAnchorA();
                    return cc.v2(t.x * i, t.y * i)
                }
                return cc.Vec2.ZERO
            },
            getWorldConnectedAnchor: function() {
                if (this._joint) {
                    var t = this._joint.GetAnchorB();
                    return cc.v2(t.x * i, t.y * i)
                }
                return cc.Vec2.ZERO
            },
            getReactionForce: function(t) {
                var e = cc.v2();
                return this._joint ? this._joint.GetReactionForce(t, e) : e
            },
            getReactionTorque: function(t) {
                return this._joint ? this._joint.GetReactionTorque(t) : 0
            },
            _init: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__init", [])
            },
            _destroy: function() {
                cc.director.getPhysicsManager().pushDelayEvent(this, "__destroy", [])
            },
            __init: function() {
                if (!this._inited && (this.body = this.getComponent(cc.RigidBody),
                this._isValid())) {
                    var t = this._createJointDef();
                    if (!t)
                        return;
                    t.bodyA = this.body._getBody(),
                    t.bodyB = this.connectedBody._getBody(),
                    t.collideConnected = this.collideConnected,
                    cc.director.getPhysicsManager()._addJoint(this, t),
                    this._inited = !0
                }
            },
            __destroy: function() {
                this._inited && (cc.director.getPhysicsManager()._removeJoint(this),
                this._joint = null,
                this._inited = !1)
            },
            _createJointDef: function() {
                return null
            },
            _isValid: function() {
                return this.body && this.body._getBody() && this.connectedBody && this.connectedBody._getBody()
            }
        });
        cc.Joint = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    181: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , r = cc.Class({
            name: "cc.MotorJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _linearOffset: cc.v2(0, 0),
                _angularOffset: 0,
                _maxForce: 1,
                _maxTorque: 1,
                _correctionFactor: .3,
                anchor: {
                    tooltip: !1,
                    default: cc.v2(0, 0),
                    override: !0,
                    visible: !1
                },
                connectedAnchor: {
                    tooltip: !1,
                    default: cc.v2(0, 0),
                    override: !0,
                    visible: !1
                },
                linearOffset: {
                    tooltip: !1,
                    get: function() {
                        return this._linearOffset
                    },
                    set: function(t) {
                        this._linearOffset = t,
                        this._joint && this._joint.SetLinearOffset(new b2.Vec2(t.x / i,t.y / i))
                    }
                },
                angularOffset: {
                    tooltip: !1,
                    get: function() {
                        return this._angularOffset
                    },
                    set: function(t) {
                        this._angularOffset = t,
                        this._joint && this._joint.SetAngularOffset(t)
                    }
                },
                maxForce: {
                    tooltip: !1,
                    get: function() {
                        return this._maxForce
                    },
                    set: function(t) {
                        this._maxForce = t,
                        this._joint && this._joint.SetMaxForce(t)
                    }
                },
                maxTorque: {
                    tooltip: !1,
                    get: function() {
                        return this._maxTorque
                    },
                    set: function(t) {
                        this._maxTorque = t,
                        this._joint && this._joint.SetMaxTorque(t)
                    }
                },
                correctionFactor: {
                    tooltip: !1,
                    get: function() {
                        return this._correctionFactor
                    },
                    set: function(t) {
                        this._correctionFactor = t,
                        this._joint && this._joint.SetCorrectionFactor(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.MotorJointDef;
                return t.linearOffset = new b2.Vec2(this.linearOffset.x / i,this.linearOffset.y / i),
                t.angularOffset = this.angularOffset * n,
                t.maxForce = this.maxForce,
                t.maxTorque = this.maxTorque,
                t.correctionFactor = this.correctionFactor,
                t
            }
        });
        cc.MotorJoint = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    182: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = new b2.Vec2
          , r = cc.Class({
            name: "cc.MouseJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _target: 1,
                _frequency: 5,
                _dampingRatio: .7,
                _maxForce: 0,
                connectedBody: {
                    default: null,
                    type: cc.RigidBody,
                    visible: !1,
                    override: !0
                },
                collideConnected: {
                    default: !0,
                    visible: !1,
                    override: !0
                },
                anchor: {
                    tooltip: !1,
                    default: cc.v2(0, 0),
                    override: !0,
                    visible: !1
                },
                connectedAnchor: {
                    tooltip: !1,
                    default: cc.v2(0, 0),
                    override: !0,
                    visible: !1
                },
                mouseRegion: {
                    tooltip: !1,
                    default: null,
                    type: cc.Node
                },
                target: {
                    tooltip: !1,
                    visible: !1,
                    get: function() {
                        return this._target
                    },
                    set: function(t) {
                        this._target = t,
                        this._joint && (n.x = t.x / i,
                        n.y = t.y / i,
                        this._joint.SetTarget(n))
                    }
                },
                frequency: {
                    tooltip: !1,
                    get: function() {
                        return this._frequency
                    },
                    set: function(t) {
                        this._frequency = t,
                        this._joint && this._joint.SetFrequency(t)
                    }
                },
                dampingRatio: {
                    tooltip: !1,
                    get: function() {
                        return this._dampingRatio
                    },
                    set: function(t) {
                        this._dampingRatio = t,
                        this._joint && this._joint.SetDampingRatio(t)
                    }
                },
                maxForce: {
                    tooltip: !1,
                    visible: !1,
                    get: function() {
                        return this._maxForce
                    },
                    set: function(t) {
                        this._maxForce = t,
                        this._joint && this._joint.SetMaxForce(t)
                    }
                }
            },
            onLoad: function() {
                var t = this.mouseRegion || this.node;
                t.on(cc.Node.EventType.TOUCH_START, this.onTouchBegan, this),
                t.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this),
                t.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this),
                t.on(cc.Node.EventType.TOUCH_CANCEL, this.onTouchEnd, this)
            },
            onEnable: function() {},
            start: function() {},
            onTouchBegan: function(t) {
                var e = cc.director.getPhysicsManager()
                  , i = this._pressPoint = t.touch.getLocation();
                cc.Camera && cc.Camera.main && (i = cc.Camera.main.getScreenToWorldPoint(i));
                var n = e.testPoint(i);
                n && ((this.connectedBody = n.body).awake = !0,
                this.maxForce = 1e3 * this.connectedBody.getMass(),
                this.target = i,
                this._init())
            },
            onTouchMove: function(t) {
                this._pressPoint = t.touch.getLocation()
            },
            onTouchEnd: function() {
                this._destroy(),
                this._pressPoint = null
            },
            _createJointDef: function() {
                var t = new b2.MouseJointDef;
                return n.x = this.target.x / i,
                n.y = this.target.y / i,
                t.target = n,
                t.maxForce = this.maxForce,
                t.dampingRatio = this.dampingRatio,
                t.frequencyHz = this.frequency,
                t
            },
            update: function() {
                if (this._pressPoint && this._isValid()) {
                    var t = cc.Camera.findCamera(this.node);
                    this.target = t ? t.getScreenToWorldPoint(this._pressPoint) : this._pressPoint
                }
            }
        });
        cc.MouseJoint = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    183: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , r = cc.Class({
            name: "cc.PrismaticJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                localAxisA: {
                    default: cc.v2(1, 0),
                    tooltip: !1
                },
                referenceAngle: {
                    default: 0,
                    tooltip: !1
                },
                enableLimit: {
                    default: !1,
                    tooltip: !1
                },
                enableMotor: {
                    default: !1,
                    tooltip: !1
                },
                lowerLimit: {
                    default: 0,
                    tooltip: !1
                },
                upperLimit: {
                    default: 0,
                    tooltip: !1
                },
                _maxMotorForce: 0,
                _motorSpeed: 0,
                maxMotorForce: {
                    tooltip: !1,
                    get: function() {
                        return this._maxMotorForce
                    },
                    set: function(t) {
                        this._maxMotorForce = t,
                        this._joint && this._joint.SetMaxMotorForce(t)
                    }
                },
                motorSpeed: {
                    tooltip: !1,
                    get: function() {
                        return this._motorSpeed
                    },
                    set: function(t) {
                        this._motorSpeed = t,
                        this._joint && this._joint.SetMotorSpeed(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.PrismaticJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.localAxisA = new b2.Vec2(this.localAxisA.x,this.localAxisA.y),
                t.referenceAngle = this.referenceAngle * n,
                t.enableLimit = this.enableLimit,
                t.lowerTranslation = this.lowerLimit / i,
                t.upperTranslation = this.upperLimit / i,
                t.enableMotor = this.enableMotor,
                t.maxMotorForce = this.maxMotorForce,
                t.motorSpeed = this.motorSpeed,
                t
            }
        });
        cc.PrismaticJoint = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    184: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , r = t("../CCPhysicsTypes").PHYSICS_ANGLE_TO_ANGLE
          , s = cc.Class({
            name: "cc.RevoluteJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _maxMotorTorque: 0,
                _motorSpeed: 0,
                _enableLimit: !1,
                _enableMotor: !1,
                referenceAngle: {
                    default: 0,
                    tooltip: !1
                },
                lowerAngle: {
                    default: 0,
                    tooltip: !1
                },
                upperAngle: {
                    default: 0,
                    tooltip: !1
                },
                maxMotorTorque: {
                    tooltip: !1,
                    get: function() {
                        return this._maxMotorTorque
                    },
                    set: function(t) {
                        this._maxMotorTorque = t,
                        this._joint && this._joint.SetMaxMotorTorque(t)
                    }
                },
                motorSpeed: {
                    tooltip: !1,
                    get: function() {
                        return this._motorSpeed
                    },
                    set: function(t) {
                        this._motorSpeed = t,
                        this._joint && this._joint.SetMotorSpeed(t * n)
                    }
                },
                enableLimit: {
                    tooltip: !1,
                    get: function() {
                        return this._enableLimit
                    },
                    set: function(t) {
                        this._enableLimit = t,
                        this._joint && this._joint.EnableLimit(t)
                    }
                },
                enableMotor: {
                    tooltip: !1,
                    get: function() {
                        return this._enableMotor
                    },
                    set: function(t) {
                        this._enableMotor = t,
                        this._joint && this._joint.EnableMotor(t)
                    }
                }
            },
            getJointAngle: function() {
                return this._joint ? this._joint.GetJointAngle() * r : 0
            },
            setLimits: function(t, e) {
                if (this._joint)
                    return this._joint.SetLimits(t * n, e * n)
            },
            _createJointDef: function() {
                var t = new b2.RevoluteJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.lowerAngle = this.upperAngle * n,
                t.upperAngle = this.lowerAngle * n,
                t.maxMotorTorque = this.maxMotorTorque,
                t.motorSpeed = this.motorSpeed * n,
                t.enableLimit = this.enableLimit,
                t.enableMotor = this.enableMotor,
                t.referenceAngle = this.referenceAngle * n,
                t
            }
        });
        cc.RevoluteJoint = e.exports = s
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    185: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.Class({
            name: "cc.RopeJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _maxLength: 1,
                maxLength: {
                    tooltip: !1,
                    get: function() {
                        return this._maxLength
                    },
                    set: function(t) {
                        this._maxLength = t,
                        this._joint && this._joint.SetMaxLength(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.RopeJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.maxLength = this.maxLength / i,
                t
            }
        });
        cc.RopeJoint = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    186: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , r = cc.Class({
            name: "cc.WeldJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                referenceAngle: {
                    default: 0,
                    tooltip: !1
                },
                _frequency: 0,
                _dampingRatio: 0,
                frequency: {
                    tooltip: !1,
                    get: function() {
                        return this._frequency
                    },
                    set: function(t) {
                        this._frequency = t,
                        this._joint && this._joint.SetFrequency(t)
                    }
                },
                dampingRatio: {
                    tooltip: !1,
                    get: function() {
                        return this._dampingRatio
                    },
                    set: function(t) {
                        this._dampingRatio = t,
                        this._joint && this._joint.SetDampingRatio(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.WeldJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.referenceAngle = this.referenceAngle * n,
                t.frequencyHz = this.frequency,
                t.dampingRatio = this.dampingRatio,
                t
            }
        });
        cc.WeldJoint = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    187: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = t("../CCPhysicsTypes").ANGLE_TO_PHYSICS_ANGLE
          , r = cc.Class({
            name: "cc.WheelJoint",
            extends: cc.Joint,
            editor: !1,
            properties: {
                _maxMotorTorque: 0,
                _motorSpeed: 0,
                _enableMotor: !1,
                _frequency: 2,
                _dampingRatio: .7,
                localAxisA: {
                    default: cc.v2(1, 0),
                    tooltip: !1
                },
                maxMotorTorque: {
                    tooltip: !1,
                    get: function() {
                        return this._maxMotorTorque
                    },
                    set: function(t) {
                        this._maxMotorTorque = t,
                        this._joint && this._joint.SetMaxMotorTorque(t)
                    }
                },
                motorSpeed: {
                    tooltip: !1,
                    get: function() {
                        return this._motorSpeed
                    },
                    set: function(t) {
                        this._motorSpeed = t,
                        this._joint && this._joint.SetMotorSpeed(t * n)
                    }
                },
                enableMotor: {
                    tooltip: !1,
                    get: function() {
                        return this._enableMotor
                    },
                    set: function(t) {
                        this._enableMotor = t,
                        this._joint && this._joint.EnableMotor(t)
                    }
                },
                frequency: {
                    tooltip: !1,
                    get: function() {
                        return this._frequency
                    },
                    set: function(t) {
                        this._frequency = t,
                        this._joint && this._joint.SetSpringFrequencyHz(t)
                    }
                },
                dampingRatio: {
                    tooltip: !1,
                    get: function() {
                        return this._dampingRatio
                    },
                    set: function(t) {
                        this._dampingRatio = t,
                        this._joint && this._joint.SetDampingRatio(t)
                    }
                }
            },
            _createJointDef: function() {
                var t = new b2.WheelJointDef;
                return t.localAnchorA = new b2.Vec2(this.anchor.x / i,this.anchor.y / i),
                t.localAnchorB = new b2.Vec2(this.connectedAnchor.x / i,this.connectedAnchor.y / i),
                t.localAxisA = new b2.Vec2(this.localAxisA.x,this.localAxisA.y),
                t.maxMotorTorque = this.maxMotorTorque,
                t.motorSpeed = this.motorSpeed * n,
                t.enableMotor = this.enableMotor,
                t.dampingRatio = this.dampingRatio,
                t.frequencyHz = this.frequency,
                t
            }
        });
        cc.WheelJoint = e.exports = r
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    188: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").BodyType;
        function n() {
            this._point = new b2.Vec2,
            this._isPoint = !1,
            this._fixtures = []
        }
        n.prototype.init = function(t) {
            t ? (this._isPoint = !0,
            this._point.x = t.x,
            this._point.y = t.y) : this._isPoint = !1,
            this._fixtures.length = 0
        }
        ,
        n.prototype.ReportFixture = function(t) {
            if (t.GetBody().GetType() === i.Dynamic)
                if (this._isPoint) {
                    if (t.TestPoint(this._point))
                        return this._fixtures.push(t),
                        !1
                } else
                    this._fixtures.push(t);
            return !0
        }
        ,
        n.prototype.getFixture = function() {
            return this._fixtures[0]
        }
        ,
        n.prototype.getFixtures = function() {
            return this._fixtures
        }
        ,
        cc.PhysicsAABBQueryCallback = e.exports = n
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    189: [(function(t, e) {
        "use strict";
        function i() {
            this._contactFixtures = []
        }
        i.prototype.setBeginContact = function(t) {
            this._BeginContact = t
        }
        ,
        i.prototype.setEndContact = function(t) {
            this._EndContact = t
        }
        ,
        i.prototype.setPreSolve = function(t) {
            this._PreSolve = t
        }
        ,
        i.prototype.setPostSolve = function(t) {
            this._PostSolve = t
        }
        ,
        i.prototype.BeginContact = function(t) {
            if (this._BeginContact) {
                var e = t.GetFixtureA()
                  , i = t.GetFixtureB()
                  , n = this._contactFixtures;
                t._shouldReport = !1,
                -1 === n.indexOf(e) && -1 === n.indexOf(i) || (t._shouldReport = !0,
                this._BeginContact(t))
            }
        }
        ,
        i.prototype.EndContact = function(t) {
            this._EndContact && t._shouldReport && (t._shouldReport = !1,
            this._EndContact(t))
        }
        ,
        i.prototype.PreSolve = function(t, e) {
            this._PreSolve && t._shouldReport && this._PreSolve(t, e)
        }
        ,
        i.prototype.PostSolve = function(t, e) {
            this._PostSolve && t._shouldReport && this._PostSolve(t, e)
        }
        ,
        i.prototype.registerContactFixture = function(t) {
            this._contactFixtures.push(t)
        }
        ,
        i.prototype.unregisterContactFixture = function(t) {
            cc.js.array.remove(this._contactFixtures, t)
        }
        ,
        cc.PhysicsContactListener = e.exports = i
    }
    ), {}],
    190: [(function(t, e) {
        "use strict";
        var i = t("../CCPhysicsTypes").PTM_RATIO
          , n = cc.v2()
          , r = cc.Color.GREEN
          , s = cc.Color.RED;
        function a(t) {
            b2.Draw.call(this),
            this._drawer = t,
            this._xf = this._dxf = new b2.Transform
        }
        cc.js.extend(a, b2.Draw),
        cc.js.mixin(a.prototype, {
            _DrawPolygon: function(t, e) {
                for (var r = this._drawer, s = 0; s < e; s++) {
                    b2.Transform.MulXV(this._xf, t[s], n);
                    var a = n.x * i
                      , o = n.y * i;
                    0 === s ? r.moveTo(a, o) : r.lineTo(a, o)
                }
                r.close()
            },
            DrawPolygon: function(t, e, i) {
                this._applyStrokeColor(i),
                this._DrawPolygon(t, e),
                this._drawer.stroke()
            },
            DrawSolidPolygon: function(t, e, i) {
                this._applyFillColor(i),
                this._DrawPolygon(t, e),
                this._drawer.fill(),
                this._drawer.stroke()
            },
            _DrawCircle: function(t, e) {
                var n = this._xf.p;
                this._drawer.circle((t.x + n.x) * i, (t.y + n.y) * i, e * i)
            },
            DrawCircle: function(t, e, i) {
                this._applyStrokeColor(i),
                this._DrawCircle(t, e),
                this._drawer.stroke()
            },
            DrawSolidCircle: function(t, e, i, n) {
                this._applyFillColor(n),
                this._DrawCircle(t, e),
                this._drawer.fill()
            },
            DrawSegment: function(t, e, r) {
                var s = this._drawer;
                if (t.x === e.x && t.y === e.y)
                    return this._applyFillColor(r),
                    this._DrawCircle(t, 2 / i),
                    void s.fill();
                this._applyStrokeColor(r),
                b2.Transform.MulXV(this._xf, t, n),
                s.moveTo(n.x * i, n.y * i),
                b2.Transform.MulXV(this._xf, e, n),
                s.lineTo(n.x * i, n.y * i),
                s.stroke()
            },
            DrawTransform: function(t) {
                var e = this._drawer;
                e.strokeColor = s,
                n.x = n.y = 0,
                b2.Transform.MulXV(t, n, n),
                e.moveTo(n.x * i, n.y * i),
                n.x = 1,
                n.y = 0,
                b2.Transform.MulXV(t, n, n),
                e.lineTo(n.x * i, n.y * i),
                e.stroke(),
                e.strokeColor = r,
                n.x = n.y = 0,
                b2.Transform.MulXV(t, n, n),
                e.moveTo(n.x * i, n.y * i),
                n.x = 0,
                n.y = 1,
                b2.Transform.MulXV(t, n, n),
                e.lineTo(n.x * i, n.y * i),
                e.stroke()
            },
            DrawPoint: function() {},
            _applyStrokeColor: function(t) {
                var e = this._drawer.strokeColor;
                e.r = 255 * t.r,
                e.g = 255 * t.g,
                e.b = 255 * t.b,
                e.a = 150,
                this._drawer.strokeColor = e
            },
            _applyFillColor: function(t) {
                var e = this._drawer.fillColor;
                e.r = 255 * t.r,
                e.g = 255 * t.g,
                e.b = 255 * t.b,
                e.a = 150,
                this._drawer.fillColor = e
            },
            PushTransform: function(t) {
                this._xf = t
            },
            PopTransform: function() {
                this._xf = this._dxf
            }
        }),
        e.exports = a
    }
    ), {
        "../CCPhysicsTypes": 169
    }],
    191: [(function(t, e) {
        "use strict";
        function i() {
            this._type = 0,
            this._fixtures = [],
            this._points = [],
            this._normals = [],
            this._fractions = []
        }
        i.prototype.init = function(t) {
            this._type = t,
            this._fixtures.length = 0,
            this._points.length = 0,
            this._normals.length = 0,
            this._fractions.length = 0
        }
        ,
        i.prototype.ReportFixture = function(t, e, i, n) {
            return 0 === this._type ? (this._fixtures[0] = t,
            this._points[0] = e,
            this._normals[0] = i,
            this._fractions[0] = n,
            n) : (this._fixtures.push(t),
            this._points.push(cc.v2(e)),
            this._normals.push(cc.v2(i)),
            this._fractions.push(n),
            1 === this._type ? 0 : this._type >= 2 ? 1 : n)
        }
        ,
        i.prototype.getFixtures = function() {
            return this._fixtures
        }
        ,
        i.prototype.getPoints = function() {
            return this._points
        }
        ,
        i.prototype.getNormals = function() {
            return this._normals
        }
        ,
        i.prototype.getFractions = function() {
            return this._fractions
        }
        ,
        cc.PhysicsRayCastCallback = e.exports = i
    }
    ), {}],
    192: [(function(t, e) {
        "use strict";
        e.exports = {
            getWorldRotation: function(t) {
                for (var e = t.angle, i = t.parent; i.parent; )
                    e += i.angle,
                    i = i.parent;
                return -e
            },
            getWorldScale: function(t) {
                for (var e = t.scaleX, i = t.scaleY, n = t.parent; n.parent; )
                    e *= n.scaleX,
                    i *= n.scaleY,
                    n = n.parent;
                return cc.v2(e, i)
            },
            convertToNodeRotation: function(t, e) {
                e -= -t.angle;
                for (var i = t.parent; i.parent; )
                    e -= -i.angle,
                    i = i.parent;
                return e
            }
        }
    }
    ), {}],
    193: [(function(t, e) {
        "use strict";
        var i = t("./js")
          , n = t("./CCEnum")
          , r = t("./utils")
          , s = (r.isPlainEmptyObj_DEV,
        r.cloneable_DEV,
        t("./attribute"))
          , a = s.DELIMETER
          , o = t("./preprocess-class");
        t("./requiring-frame");
        var l = ["name", "extends", "mixins", "ctor", "__ctor__", "properties", "statics", "editor", "__ES6__"];
        function h(t, e) {
            t.indexOf(e) < 0 && t.push(e)
        }
        var c = {
            datas: null,
            push: function(t) {
                if (this.datas)
                    this.datas.push(t);
                else {
                    this.datas = [t];
                    var e = this;
                    setTimeout((function() {
                        e.init()
                    }
                    ), 0)
                }
            },
            init: function() {
                var t = this.datas;
                if (t) {
                    for (var e = 0; e < t.length; ++e) {
                        var n = t[e]
                          , r = n.cls
                          , s = n.props;
                        "function" == typeof s && (s = s());
                        var a = i.getClassName(r);
                        s ? E(r, a, s, r.$super, n.mixins) : cc.errorID(3633, a)
                    }
                    this.datas = null
                }
            }
        };
        function u(t, e) {
            h(t.__props__, e)
        }
        function _(t, e, i, n) {
            var r = n.default;
            s.setClassAttr(t, i, "default", r),
            u(t, i),
            B(t, n, 0, i)
        }
        function f(t, e, n, r, a) {
            var o = r.get
              , l = r.set
              , h = t.prototype
              , c = !Object.getOwnPropertyDescriptor(h, n);
            o && (B(t, r, 0, n),
            s.setClassAttr(t, n, "serializable", !1),
            a || i.get(h, n, o, c, c)),
            l && (a || i.set(h, n, l, c, c))
        }
        function d(t) {
            return "function" == typeof t ? t() : t
        }
        function p(t, e, n) {
            for (var r in e)
                t.hasOwnProperty(r) || n && !n(r) || Object.defineProperty(t, r, i.getPropertyDescriptor(e, r))
        }
        function m(t, e, n, r) {
            var a, o, l = r.__ctor__, h = r.ctor, c = r.__ES6__;
            c ? (a = [h],
            o = h) : (a = l ? [l] : T(e, n, r),
            o = C(a, e, t, r),
            i.value(o, "extend", (function(t) {
                return t.extends = this,
                M(t)
            }
            ), !0)),
            i.value(o, "__ctors__", a.length > 0 ? a : null, !0);
            var u = o.prototype;
            if (e && (c || (i.extend(o, e),
            u = o.prototype),
            o.$super = e),
            n) {
                for (var _ = n.length - 1; _ >= 0; _--) {
                    var f = n[_];
                    p(u, f.prototype),
                    p(o, f, (function(t) {
                        return f.hasOwnProperty(t) && !0
                    }
                    )),
                    M._isCCClass(f) && p(s.getClassAttrs(o), s.getClassAttrs(f))
                }
                u.constructor = o
            }
            return c || (u.__initProps__ = b),
            i.setClassName(t, o),
            o
        }
        function y(t, e, n, r) {
            var s = cc.Component
              , a = cc._RF.peek();
            if (a && i.isChildClassOf(e, s)) {
                if (i.isChildClassOf(a.cls, s))
                    return cc.errorID(3615),
                    null;
                t = t || a.script
            }
            var o = m(t, e, n, r);
            if (a)
                if (i.isChildClassOf(e, s)) {
                    var l = a.uuid;
                    l && i._setClassId(l, o),
                    a.cls = o
                } else
                    i.isChildClassOf(a.cls, s) || (a.cls = o);
            return o
        }
        function v(t) {
            for (var e = i.getClassName(t), n = t.constructor, r = "new " + e + "(", s = 0; s < n.__props__.length; s++) {
                r += t[n.__props__[s]],
                s < n.__props__.length - 1 && (r += ",")
            }
            return r + ")"
        }
        function g(t) {
            return JSON.stringify(t).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029")
        }
        function A(t, e) {
            for (var i = [], n = "", r = 0; r < e.length; r++) {
                var s = e[r]
                  , o = s + a + "default";
                if (o in t) {
                    var l, h;
                    l = x.test(s) ? "this." + s + "=" : "this[" + g(s) + "]=";
                    var c = t[o];
                    if ("object" == typeof c && c)
                        h = c instanceof cc.ValueType ? v(c) : Array.isArray(c) ? "[]" : "{}";
                    else if ("function" == typeof c) {
                        var u = i.length;
                        i.push(c),
                        h = "F[" + u + "]()"
                    } else
                        h = "string" == typeof c ? g(c) : c;
                    n += l = l + h + ";\n"
                }
            }
            return 0 === i.length ? Function(n) : Function("F", "return (function(){\n" + n + "})")(i)
        }
        var x = /^[A-Za-z_$][0-9A-Za-z_$]*$/;
        function b(t) {
            var e = s.getClassAttrs(t)
              , i = t.__props__;
            null === i && (c.init(),
            i = t.__props__);
            var n = A(e, i);
            t.prototype.__initProps__ = n,
            n.call(this)
        }
        var C = function(t, e, i, n) {
            var r = "return function CCClass(){\n";
            e && w(e, n) && (r += "this._super=null;\n"),
            r += "this.__initProps__(CCClass);\n";
            var s = t.length;
            if (s > 0) {
                var a = "].apply(this,arguments);\n";
                if (1 === s)
                    r += "CCClass.__ctors__[0" + a;
                else {
                    r += "var cs=CCClass.__ctors__;\n";
                    for (var o = 0; o < s; o++)
                        r += "cs[" + o + a
                }
            }
            return r += "}",
            Function(r)()
        };
        function T(t, e, i) {
            for (var n, r = [], s = [t].concat(e), a = 0; a < s.length; a++) {
                var o = s[a];
                if (o)
                    for (var l = (n = o,
                    M._isCCClass(n) ? n.__ctors__ || [] : [n]), c = 0; c < l.length; c++)
                        h(r, l[c])
            }
            var u = i.ctor;
            return u && r.push(u),
            r
        }
        var S = /xyz/.test((function() {
            xyz
        }
        )) ? /\b\._super\b/ : /.*/;
        function w(t, e) {
            var n = !1;
            for (var r in e)
                if (!(l.indexOf(r) >= 0)) {
                    var s = e[r];
                    if ("function" == typeof s) {
                        var a = i.getPropertyDescriptor(t.prototype, r);
                        if (a) {
                            var o = a.value;
                            if ("function" == typeof o) {
                                S.test(s) && (n = !0,
                                e[r] = (function(t, e) {
                                    return function() {
                                        var i = this._super;
                                        this._super = t;
                                        var n = e.apply(this, arguments);
                                        return this._super = i,
                                        n
                                    }
                                }
                                )(o, s));
                                continue
                            }
                        }
                    }
                }
            return n
        }
        function E(t, e, i, n, r, l) {
            if (t.__props__ = [],
            n && n.__props__ && (t.__props__ = n.__props__.slice()),
            r)
                for (var h = 0; h < r.length; ++h) {
                    var c = r[h];
                    c.__props__ && (t.__props__ = t.__props__.concat(c.__props__.filter((function(e) {
                        return t.__props__.indexOf(e) < 0
                    }
                    ))))
                }
            if (i)
                for (var u in o.preprocessAttrs(i, e, t, l),
                i) {
                    var d = i[u];
                    "default"in d ? _(t, 0, u, d) : f(t, 0, u, d, l)
                }
            var p = s.getClassAttrs(t);
            t.__values__ = t.__props__.filter((function(t) {
                return !1 !== p[t + a + "serializable"]
            }
            ))
        }
        function M(t) {
            var e = (t = t || {}).name
              , n = t.extends
              , r = t.mixins
              , s = y(e, n, r, t);
            e || (e = cc.js.getClassName(s)),
            s._sealed = !0,
            n && (n._sealed = !1);
            var a = t.properties;
            "function" == typeof a || n && null === n.__props__ || r && r.some((function(t) {
                return null === t.__props__
            }
            )) ? (c.push({
                cls: s,
                props: a,
                mixins: r
            }),
            s.__props__ = s.__values__ = null) : E(s, e, a, n, t.mixins, t.__ES6__);
            var h, u = t.statics;
            if (u)
                for (h in u)
                    s[h] = u[h];
            for (var _ in t)
                if (!(l.indexOf(_) >= 0)) {
                    var f = t[_];
                    o.validateMethodWithProps(f, _, e, s, n) && i.value(s.prototype, _, f, !0, !0)
                }
            var d = t.editor;
            return d && cc.Component._registerEditorProps(s, d),
            s
        }
        /xyz/.test((function() {
            xyz
        }
        )),
        M._isCCClass = function(t) {
            return t && t.hasOwnProperty("__ctors__")
        }
        ,
        M._fastDefine = function(t, e, n) {
            i.setClassName(t, e);
            for (var r = e.__props__ = e.__values__ = Object.keys(n), o = s.getClassAttrs(e), l = 0; l < r.length; l++) {
                var h = r[l];
                o[h + a + "visible"] = !1,
                o[h + a + "default"] = n[h]
            }
        }
        ,
        M.Attr = s,
        M.attr = s.attr,
        M.getInheritanceChain = function(t) {
            for (var e = []; t = i.getSuper(t); )
                t !== Object && e.push(t);
            return e
        }
        ;
        var D = {
            Integer: "Number",
            Float: "Number",
            Boolean: "Boolean",
            String: "String"
        };
        function B(t, e, i, r) {
            var o = null
              , l = "";
            function h() {
                return l = r + a,
                o = s.getClassAttrs(t)
            }
            var c = e.type;
            c && (D[c] ? (o || h())[l + "type"] = c : "Object" === c || (c === s.ScriptUuid ? ((o || h())[l + "type"] = "Script",
            o[l + "ctor"] = cc.ScriptAsset) : "object" == typeof c ? n.isEnum(c) && ((o || h())[l + "type"] = "Enum",
            o[l + "enumList"] = n.getList(c)) : "function" == typeof c && ((o || h())[l + "type"] = "Object",
            o[l + "ctor"] = c)));
            function u(t, i) {
                if (t in e) {
                    var n = e[t];
                    typeof n === i && ((o || h())[l + t] = n)
                }
            }
            e.editorOnly && ((o || h())[l + "editorOnly"] = !0),
            !1 === e.serializable && ((o || h())[l + "serializable"] = !1),
            u("formerlySerializedAs", "string");
            var _ = e.range;
            _ && Array.isArray(_) && _.length >= 2 && ((o || h())[l + "min"] = _[0],
            o[l + "max"] = _[1],
            _.length > 2 && (o[l + "step"] = _[2])),
            u("min", "number"),
            u("max", "number"),
            u("step", "number"),
            u("userData", "object")
        }
        cc.Class = M,
        e.exports = {
            isArray: function(t) {
                return t = d(t),
                Array.isArray(t)
            },
            fastDefine: M._fastDefine,
            getNewValueTypeCode: v,
            IDENTIFIER_RE: x,
            escapeForJS: g,
            getDefault: d
        }
    }
    ), {
        "./CCEnum": 195,
        "./attribute": 205,
        "./js": 214,
        "./preprocess-class": 215,
        "./requiring-frame": 216,
        "./utils": 217
    }],
    194: [(function(t, e) {
        "use strict";
        t("./CCClass");
        var i = t("./preprocess-class")
          , n = t("./js")
          , r = "__ccclassCache__";
        function s(t) {
            return t
        }
        function a(t, e) {
            return t[e] || (t[e] = {})
        }
        function o(t) {
            return function(e) {
                return "function" == typeof e ? t(e) : function(i) {
                    return t(i, e)
                }
            }
        }
        function l(t, e) {
            return function(t) {
                return function(i) {
                    return e(i, t)
                }
            }
        }
        var h = l.bind(null, !1);
        function c() {
            return l.bind(null, !1)
        }
        var u = c()
          , _ = c();
        function f(t) {
            return a(t, r)
        }
        function d(t) {
            var e;
            try {
                e = t()
            } catch (i) {
                return t
            }
            return "object" != typeof e || null === e ? e : t
        }
        function p(t) {
            var e;
            try {
                e = new t
            } catch (i) {
                return {}
            }
            return e
        }
        function m(t, e, r, s, a, o) {
            var l, h = a && (a.get || a.set);
            s && (l = i.getFullFormOfProperty(s, h));
            var c = e[r]
              , u = n.mixin(c || {}, l || s || {});
            if (h)
                a.get && (u.get = a.get),
                a.set && (u.set = a.set);
            else {
                var _ = void 0;
                if (a)
                    a.initializer && (_ = d(a.initializer));
                else {
                    var f = o.default || (o.default = p(t));
                    f.hasOwnProperty(r) && (_ = f[r])
                }
                u.default = _
            }
            e[r] = u
        }
        var y = o((function(t, e) {
            var i = n.getSuper(t);
            i === Object && (i = null);
            var s = {
                name: e,
                extends: i,
                ctor: t,
                __ES6__: !0
            }
              , a = t[r];
            if (a) {
                var o = a.proto;
                o && n.mixin(s, o),
                t[r] = void 0
            }
            return cc.Class(s)
        }
        ));
        function v(t, e, i) {
            return t((function(t, n) {
                var r = f(t);
                if (r) {
                    var s = void 0 !== i ? i : n
                      , o = a(r, "proto");
                    a(o, "editor")[e] = s
                }
            }
            ), e)
        }
        function g(t) {
            return t(s)
        }
        var A = g(o)
          , x = v(h, "requireComponent")
          , b = g(u)
          , C = v(_, "executionOrder")
          , T = g(o)
          , S = g(o)
          , w = g(u)
          , E = g(u)
          , M = g(u);
        cc._decorator = e.exports = {
            ccclass: y,
            property: function(t, e, i) {
                var n = null;
                function r(t, e, i) {
                    var r = f(t.constructor);
                    if (r) {
                        var s = a(r, "proto")
                          , o = a(s, "properties");
                        m(t.constructor, o, e, n, i, r)
                    }
                }
                if (void 0 === e)
                    return n = t,
                    r;
                r(t, e, i)
            },
            executeInEditMode: A,
            requireComponent: x,
            menu: b,
            executionOrder: C,
            disallowMultiple: T,
            playOnFocus: S,
            inspector: w,
            icon: E,
            help: M,
            mixins: function() {
                for (var t = [], e = 0; e < arguments.length; e++)
                    t[e] = arguments[e];
                return function(e) {
                    var i = f(e);
                    i && (a(i, "proto").mixins = t)
                }
            }
        }
    }
    ), {
        "./CCClass": 193,
        "./js": 214,
        "./preprocess-class": 215,
        "./utils": 217
    }],
    195: [(function(t, e) {
        "use strict";
        var i = t("./js");
        function n(t) {
            if ("__enums__"in t)
                return t;
            i.value(t, "__enums__", null, !0);
            for (var e = -1, n = Object.keys(t), r = 0; r < n.length; r++) {
                var s = n[r]
                  , a = t[s];
                if (-1 === a)
                    a = ++e,
                    t[s] = a;
                else if ("number" == typeof a)
                    e = a;
                else if ("string" == typeof a && Number.isInteger(parseFloat(s)))
                    continue;
                var o = "" + a;
                s !== o && i.value(t, o, s)
            }
            return t
        }
        n.isEnum = function(t) {
            return t && t.hasOwnProperty("__enums__")
        }
        ,
        n.getList = function(t) {
            if (t.__enums__)
                return t.__enums__;
            var e = t.__enums__ = [];
            for (var i in t) {
                var n = t[i];
                Number.isInteger(n) && e.push({
                    name: i,
                    value: n
                })
            }
            return e.sort((function(t, e) {
                return t.value - e.value
            }
            )),
            e
        }
        ,
        e.exports = cc.Enum = n
    }
    ), {
        "./js": 214
    }],
    196: [(function(t) {
        "use strict";
        var e, i = t("../event-manager"), n = t("./CCInputManager");
        cc.Acceleration = function(t, e, i, n) {
            this.x = t || 0,
            this.y = e || 0,
            this.z = i || 0,
            this.timestamp = n || 0
        }
        ,
        n.setAccelerometerEnabled = function(t) {
            var e = this;
            if (e._accelEnabled !== t) {
                e._accelEnabled = t;
                var i = cc.director.getScheduler();
                i.enableForTarget(e),
                e._accelEnabled ? (e._registerAccelerometerEvent(),
                e._accelCurTime = 0,
                i.scheduleUpdate(e)) : (e._unregisterAccelerometerEvent(),
                e._accelCurTime = 0,
                i.unscheduleUpdate(e))
            }
        }
        ,
        n.setAccelerometerInterval = function(t) {
            this._accelInterval !== t && (this._accelInterval = t)
        }
        ,
        n._registerKeyboardEvent = function() {
            cc.game.canvas.addEventListener("keydown", (function(t) {
                i.dispatchEvent(new cc.Event.EventKeyboard(t.keyCode,!0)),
                t.stopPropagation(),
                t.preventDefault()
            }
            ), !1),
            cc.game.canvas.addEventListener("keyup", (function(t) {
                i.dispatchEvent(new cc.Event.EventKeyboard(t.keyCode,!1)),
                t.stopPropagation(),
                t.preventDefault()
            }
            ), !1)
        }
        ,
        n._registerAccelerometerEvent = function() {
            var t = window
              , i = this;
            i._acceleration = new cc.Acceleration,
            i._accelDeviceEvent = t.DeviceMotionEvent || t.DeviceOrientationEvent,
            cc.sys.browserType === cc.sys.BROWSER_TYPE_MOBILE_QQ && (i._accelDeviceEvent = window.DeviceOrientationEvent);
            var n = i._accelDeviceEvent === t.DeviceMotionEvent ? "devicemotion" : "deviceorientation"
              , r = navigator.userAgent;
            (/Android/.test(r) || /Adr/.test(r) && cc.sys.browserType === cc.BROWSER_TYPE_UC) && (i._minus = -1),
            e = i.didAccelerate.bind(i),
            t.addEventListener(n, e, !1)
        }
        ,
        n._unregisterAccelerometerEvent = function() {
            var t = window
              , i = this._accelDeviceEvent === t.DeviceMotionEvent ? "devicemotion" : "deviceorientation";
            e && t.removeEventListener(i, e, !1)
        }
        ,
        n.didAccelerate = function(t) {
            var e = this
              , i = window;
            if (e._accelEnabled) {
                var n, r, s, a = e._acceleration;
                if (e._accelDeviceEvent === window.DeviceMotionEvent) {
                    var o = t.accelerationIncludingGravity;
                    n = e._accelMinus * o.x * .1,
                    r = e._accelMinus * o.y * .1,
                    s = .1 * o.z
                } else
                    n = t.gamma / 90 * .981,
                    r = -t.beta / 90 * .981,
                    s = t.alpha / 90 * .981;
                if (cc.view._isRotated) {
                    var l = n;
                    n = -r,
                    r = l
                }
                a.x = n,
                a.y = r,
                a.z = s,
                a.timestamp = t.timeStamp || Date.now();
                var h = a.x;
                90 === i.orientation ? (a.x = -a.y,
                a.y = h) : -90 === i.orientation ? (a.x = a.y,
                a.y = -h) : 180 === i.orientation && (a.x = -a.x,
                a.y = -a.y),
                cc.sys.os === cc.sys.OS_ANDROID && cc.sys.browserType !== cc.sys.BROWSER_TYPE_MOBILE_QQ && (a.x = -a.x,
                a.y = -a.y)
            }
        }
    }
    ), {
        "../event-manager": 138,
        "./CCInputManager": 197
    }],
    197: [(function(t, e) {
        "use strict";
        var i = t("./CCMacro")
          , n = t("./CCSys")
          , r = t("../event-manager")
          , s = i.TOUCH_TIMEOUT
          , a = cc.v2()
          , o = {
            _mousePressed: !1,
            _isRegisterEvent: !1,
            _preTouchPoint: cc.v2(0, 0),
            _prevMousePoint: cc.v2(0, 0),
            _preTouchPool: [],
            _preTouchPoolPointer: 0,
            _touches: [],
            _touchesIntegerDict: {},
            _indexBitsUsed: 0,
            _maxTouches: 8,
            _accelEnabled: !1,
            _accelInterval: .2,
            _accelMinus: 1,
            _accelCurTime: 0,
            _acceleration: null,
            _accelDeviceEvent: null,
            _canvasBoundingRect: {
                left: 0,
                top: 0,
                adjustedLeft: 0,
                adjustedTop: 0,
                width: 0,
                height: 0
            },
            _getUnUsedIndex: function() {
                for (var t = this._indexBitsUsed, e = cc.sys.now(), i = 0; i < this._maxTouches; i++) {
                    if (!(1 & t))
                        return this._indexBitsUsed |= 1 << i,
                        i;
                    var n = this._touches[i];
                    if (e - n._lastModified > s)
                        return this._removeUsedIndexBit(i),
                        delete this._touchesIntegerDict[n.getID()],
                        i;
                    t >>= 1
                }
                return -1
            },
            _removeUsedIndexBit: function(t) {
                if (!(t < 0 || t >= this._maxTouches)) {
                    var e = 1 << t;
                    e = ~e,
                    this._indexBitsUsed &= e
                }
            },
            _glView: null,
            _updateCanvasBoundingRect: function() {
                var t = cc.game.canvas
                  , e = this._canvasBoundingRect
                  , i = document.documentElement
                  , n = window.pageXOffset - i.clientLeft
                  , r = window.pageYOffset - i.clientTop;
                if (t.getBoundingClientRect) {
                    var s = t.getBoundingClientRect();
                    e.left = s.left + n,
                    e.top = s.top + r,
                    e.width = s.width,
                    e.height = s.height
                } else
                    t instanceof HTMLCanvasElement ? (e.left = n,
                    e.top = r,
                    e.width = t.width,
                    e.height = t.height) : (e.left = n,
                    e.top = r,
                    e.width = parseInt(t.style.width),
                    e.height = parseInt(t.style.height))
            },
            handleTouchesBegin: function(t) {
                for (var e, i, s, a = [], o = this._touchesIntegerDict, l = n.now(), h = 0, c = t.length; h < c; h++)
                    if (null == o[s = (e = t[h]).getID()]) {
                        var u = this._getUnUsedIndex();
                        if (-1 === u) {
                            cc.logID(2300, u);
                            continue
                        }
                        (i = this._touches[u] = new cc.Touch(e._point.x,e._point.y,e.getID()))._lastModified = l,
                        i._setPrevPoint(e._prevPoint),
                        o[s] = u,
                        a.push(i)
                    }
                if (a.length > 0) {
                    this._glView._convertTouchesWithScale(a);
                    var _ = new cc.Event.EventTouch(a);
                    _._eventCode = cc.Event.EventTouch.BEGAN,
                    r.dispatchEvent(_)
                }
            },
            handleTouchesMove: function(t) {
                for (var e, i, s, a = [], o = this._touches, l = n.now(), h = 0, c = t.length; h < c; h++)
                    s = (e = t[h]).getID(),
                    null != (i = this._touchesIntegerDict[s]) && o[i] && (o[i]._setPoint(e._point),
                    o[i]._setPrevPoint(e._prevPoint),
                    o[i]._lastModified = l,
                    a.push(o[i]));
                if (a.length > 0) {
                    this._glView._convertTouchesWithScale(a);
                    var u = new cc.Event.EventTouch(a);
                    u._eventCode = cc.Event.EventTouch.MOVED,
                    r.dispatchEvent(u)
                }
            },
            handleTouchesEnd: function(t) {
                var e = this.getSetOfTouchesEndOrCancel(t);
                if (e.length > 0) {
                    this._glView._convertTouchesWithScale(e);
                    var i = new cc.Event.EventTouch(e);
                    i._eventCode = cc.Event.EventTouch.ENDED,
                    r.dispatchEvent(i)
                }
                this._preTouchPool.length = 0
            },
            handleTouchesCancel: function(t) {
                var e = this.getSetOfTouchesEndOrCancel(t);
                if (e.length > 0) {
                    this._glView._convertTouchesWithScale(e);
                    var i = new cc.Event.EventTouch(e);
                    i._eventCode = cc.Event.EventTouch.CANCELED,
                    r.dispatchEvent(i)
                }
                this._preTouchPool.length = 0
            },
            getSetOfTouchesEndOrCancel: function(t) {
                for (var e, i, n, r = [], s = this._touches, a = this._touchesIntegerDict, o = 0, l = t.length; o < l; o++)
                    null != (i = a[n = (e = t[o]).getID()]) && s[i] && (s[i]._setPoint(e._point),
                    s[i]._setPrevPoint(e._prevPoint),
                    r.push(s[i]),
                    this._removeUsedIndexBit(i),
                    delete a[n]);
                return r
            },
            getPreTouch: function(t) {
                for (var e = null, i = this._preTouchPool, n = t.getID(), r = i.length - 1; r >= 0; r--)
                    if (i[r].getID() === n) {
                        e = i[r];
                        break
                    }
                return e || (e = t),
                e
            },
            setPreTouch: function(t) {
                for (var e = !1, i = this._preTouchPool, n = t.getID(), r = i.length - 1; r >= 0; r--)
                    if (i[r].getID() === n) {
                        i[r] = t,
                        e = !0;
                        break
                    }
                e || (i.length <= 50 ? i.push(t) : (i[this._preTouchPoolPointer] = t,
                this._preTouchPoolPointer = (this._preTouchPoolPointer + 1) % 50))
            },
            getTouchByXY: function(t, e, i) {
                var n = this._preTouchPoint
                  , r = this._glView.convertToLocationInView(t, e, i)
                  , s = new cc.Touch(r.x,r.y,0);
                return s._setPrevPoint(n.x, n.y),
                n.x = r.x,
                n.y = r.y,
                s
            },
            getMouseEvent: function(t, e, i) {
                var n = this._prevMousePoint
                  , r = new cc.Event.EventMouse(i);
                return r._setPrevCursor(n.x, n.y),
                n.x = t.x,
                n.y = t.y,
                this._glView._convertMouseToLocationInView(n, e),
                r.setLocation(n.x, n.y),
                r
            },
            getPointByEvent: function(t, e) {
                return cc.sys.browserType !== cc.sys.BROWSER_TYPE_QQ && cc.sys.browserType !== cc.sys.BROWSER_TYPE_UC && cc.sys.browserType !== cc.sys.BROWSER_TYPE_SAFARI || this._updateCanvasBoundingRect(),
                null != t.pageX ? {
                    x: t.pageX,
                    y: t.pageY
                } : (e.left -= document.body.scrollLeft,
                e.top -= document.body.scrollTop,
                {
                    x: t.clientX,
                    y: t.clientY
                })
            },
            getTouchesByEvent: function(t, e) {
                for (var i, r, s, o = [], l = this._glView, h = this._preTouchPoint, c = t.changedTouches.length, u = 0; u < c; u++)
                    if (i = t.changedTouches[u]) {
                        var _;
                        _ = n.BROWSER_TYPE_FIREFOX === n.browserType ? l.convertToLocationInView(i.pageX, i.pageY, e, a) : l.convertToLocationInView(i.clientX, i.clientY, e, a),
                        null != i.identifier ? (r = new cc.Touch(_.x,_.y,i.identifier),
                        s = this.getPreTouch(r).getLocation(),
                        r._setPrevPoint(s.x, s.y),
                        this.setPreTouch(r)) : (r = new cc.Touch(_.x,_.y))._setPrevPoint(h.x, h.y),
                        h.x = _.x,
                        h.y = _.y,
                        o.push(r)
                    }
                return o
            },
            registerSystemEvent: function(t) {
                if (!this._isRegisterEvent) {
                    this._glView = cc.view;
                    var e = this
                      , i = this._canvasBoundingRect;
                    window.addEventListener("resize", this._updateCanvasBoundingRect.bind(this));
                    var s = n.isMobile
                      , a = "mouse"in n.capabilities
                      , o = "touches"in n.capabilities;
                    if (a) {
                        s || (window.addEventListener("mousedown", (function() {
                            e._mousePressed = !0
                        }
                        ), !1),
                        window.addEventListener("mouseup", (function(t) {
                            if (e._mousePressed) {
                                e._mousePressed = !1;
                                var n = e.getPointByEvent(t, i);
                                if (!cc.rect(i.left, i.top, i.width, i.height).contains(n)) {
                                    e.handleTouchesEnd([e.getTouchByXY(n.x, n.y, i)]);
                                    var s = e.getMouseEvent(n, i, cc.Event.EventMouse.UP);
                                    s.setButton(t.button),
                                    r.dispatchEvent(s)
                                }
                            }
                        }
                        ), !1));
                        for (var l = cc.Event.EventMouse, h = [!s && ["mousedown", l.DOWN, function(i, n, r, s) {
                            e._mousePressed = !0,
                            e.handleTouchesBegin([e.getTouchByXY(r.x, r.y, s)]),
                            t.focus()
                        }
                        ], !s && ["mouseup", l.UP, function(t, i, n, r) {
                            e._mousePressed = !1,
                            e.handleTouchesEnd([e.getTouchByXY(n.x, n.y, r)])
                        }
                        ], !s && ["mousemove", l.MOVE, function(t, i, n, r) {
                            e.handleTouchesMove([e.getTouchByXY(n.x, n.y, r)]),
                            e._mousePressed || i.setButton(null)
                        }
                        ], ["mousewheel", l.SCROLL, function(t, e) {
                            e.setScrollData(0, t.wheelDelta)
                        }
                        ], ["DOMMouseScroll", l.SCROLL, function(t, e) {
                            e.setScrollData(0, -120 * t.detail)
                        }
                        ]], c = 0; c < h.length; ++c) {
                            var u = h[c];
                            u && (function() {
                                var n = u[0]
                                  , s = u[1]
                                  , a = u[2];
                                t.addEventListener(n, (function(t) {
                                    var n = e.getPointByEvent(t, i)
                                      , o = e.getMouseEvent(n, i, s);
                                    o.setButton(t.button),
                                    a(t, o, n, i),
                                    r.dispatchEvent(o),
                                    t.stopPropagation(),
                                    t.preventDefault()
                                }
                                ), !1)
                            }
                            )()
                        }
                    }
                    if (window.navigator.msPointerEnabled) {
                        var _ = {
                            MSPointerDown: e.handleTouchesBegin,
                            MSPointerMove: e.handleTouchesMove,
                            MSPointerUp: e.handleTouchesEnd,
                            MSPointerCancel: e.handleTouchesCancel
                        }
                          , f = function(n) {
                            var r = _[n];
                            t.addEventListener(n, (function(t) {
                                var n = document.documentElement;
                                i.adjustedLeft = i.left - n.scrollLeft,
                                i.adjustedTop = i.top - n.scrollTop,
                                r.call(e, [e.getTouchByXY(t.clientX, t.clientY, i)]),
                                t.stopPropagation()
                            }
                            ), !1)
                        };
                        for (var d in _)
                            f(d)
                    }
                    if (o) {
                        var p = {
                            touchstart: function(i) {
                                e.handleTouchesBegin(i),
                                t.focus()
                            },
                            touchmove: function(t) {
                                e.handleTouchesMove(t)
                            },
                            touchend: function(t) {
                                e.handleTouchesEnd(t)
                            },
                            touchcancel: function(t) {
                                e.handleTouchesCancel(t)
                            }
                        }
                          , m = function(n) {
                            var r = p[n];
                            t.addEventListener(n, (function(t) {
                                if (t.changedTouches) {
                                    var n = document.body;
                                    i.adjustedLeft = i.left - (n.scrollLeft || window.scrollX || 0),
                                    i.adjustedTop = i.top - (n.scrollTop || window.scrollY || 0),
                                    r(e.getTouchesByEvent(t, i)),
                                    t.stopPropagation(),
                                    t.preventDefault()
                                }
                            }
                            ), !1)
                        };
                        for (var y in p)
                            m(y)
                    }
                    this._registerKeyboardEvent(),
                    this._isRegisterEvent = !0
                }
            },
            _registerKeyboardEvent: function() {},
            _registerAccelerometerEvent: function() {},
            update: function(t) {
                this._accelCurTime > this._accelInterval && (this._accelCurTime -= this._accelInterval,
                r.dispatchEvent(new cc.Event.EventAcceleration(this._acceleration))),
                this._accelCurTime += t
            }
        };
        e.exports = cc.internal.inputManager = o
    }
    ), {
        "../event-manager": 138,
        "./CCMacro": 198,
        "./CCSys": 202
    }],
    198: [(function(t, e) {
        "use strict";
        cc.macro = {
            RAD: Math.PI / 180,
            DEG: 180 / Math.PI,
            REPEAT_FOREVER: Number.MAX_VALUE - 1,
            FLT_EPSILON: 1.192092896e-7,
            MIN_ZINDEX: -Math.pow(2, 15),
            MAX_ZINDEX: Math.pow(2, 15) - 1,
            ONE: 1,
            ZERO: 0,
            SRC_ALPHA: 770,
            SRC_ALPHA_SATURATE: 776,
            SRC_COLOR: 768,
            DST_ALPHA: 772,
            DST_COLOR: 774,
            ONE_MINUS_SRC_ALPHA: 771,
            ONE_MINUS_SRC_COLOR: 769,
            ONE_MINUS_DST_ALPHA: 773,
            ONE_MINUS_DST_COLOR: 775,
            ONE_MINUS_CONSTANT_ALPHA: 32772,
            ONE_MINUS_CONSTANT_COLOR: 32770,
            ORIENTATION_PORTRAIT: 1,
            ORIENTATION_LANDSCAPE: 2,
            ORIENTATION_AUTO: 3,
            DENSITYDPI_DEVICE: "device-dpi",
            DENSITYDPI_HIGH: "high-dpi",
            DENSITYDPI_MEDIUM: "medium-dpi",
            DENSITYDPI_LOW: "low-dpi",
            FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX: !0,
            DIRECTOR_STATS_POSITION: cc.v2(0, 0),
            ENABLE_STACKABLE_ACTIONS: !0,
            TOUCH_TIMEOUT: 5e3,
            BATCH_VERTEX_COUNT: 2e4,
            ENABLE_TILEDMAP_CULLING: !0,
            ENABLE_TRANSPARENT_CANVAS: !1,
            ENABLE_WEBGL_ANTIALIAS: !1,
            ENABLE_CULLING: !1,
            CLEANUP_IMAGE_CACHE: !1,
            SHOW_MESH_WIREFRAME: !1,
            SHOW_MESH_NORMAL: !1,
            ENABLE_MULTI_TOUCH: !0,
            ALLOW_IMAGE_BITMAP: !cc.sys.isMobile,
            ENABLE_NATIVE_TTF_RENDERER: !0
        },
        Object.defineProperty(cc.macro, "ROTATE_ACTION_CCW", {
            set: function(t) {
                cc.RotateTo && cc.RotateBy && (cc.RotateTo._reverse = cc.RotateBy._reverse = t)
            }
        }),
        cc.macro.SUPPORT_TEXTURE_FORMATS = [".pkm", ".pvr", ".webp", ".jpg", ".jpeg", ".bmp", ".png"],
        cc.macro.KEY = {
            none: 0,
            back: 6,
            menu: 18,
            backspace: 8,
            tab: 9,
            enter: 13,
            shift: 16,
            ctrl: 17,
            alt: 18,
            pause: 19,
            capslock: 20,
            escape: 27,
            space: 32,
            pageup: 33,
            pagedown: 34,
            end: 35,
            home: 36,
            left: 37,
            up: 38,
            right: 39,
            down: 40,
            select: 41,
            insert: 45,
            Delete: 46,
            0: 48,
            1: 49,
            2: 50,
            3: 51,
            4: 52,
            5: 53,
            6: 54,
            7: 55,
            8: 56,
            9: 57,
            a: 65,
            b: 66,
            c: 67,
            d: 68,
            e: 69,
            f: 70,
            g: 71,
            h: 72,
            i: 73,
            j: 74,
            k: 75,
            l: 76,
            m: 77,
            n: 78,
            o: 79,
            p: 80,
            q: 81,
            r: 82,
            s: 83,
            t: 84,
            u: 85,
            v: 86,
            w: 87,
            x: 88,
            y: 89,
            z: 90,
            num0: 96,
            num1: 97,
            num2: 98,
            num3: 99,
            num4: 100,
            num5: 101,
            num6: 102,
            num7: 103,
            num8: 104,
            num9: 105,
            "*": 106,
            "+": 107,
            "-": 109,
            numdel: 110,
            "/": 111,
            f1: 112,
            f2: 113,
            f3: 114,
            f4: 115,
            f5: 116,
            f6: 117,
            f7: 118,
            f8: 119,
            f9: 120,
            f10: 121,
            f11: 122,
            f12: 123,
            numlock: 144,
            scrolllock: 145,
            ";": 186,
            semicolon: 186,
            equal: 187,
            "=": 187,
            ",": 188,
            comma: 188,
            dash: 189,
            ".": 190,
            period: 190,
            forwardslash: 191,
            grave: 192,
            "[": 219,
            openbracket: 219,
            backslash: 220,
            "]": 221,
            closebracket: 221,
            quote: 222,
            dpadLeft: 1e3,
            dpadRight: 1001,
            dpadUp: 1003,
            dpadDown: 1004,
            dpadCenter: 1005
        },
        cc.macro.ImageFormat = cc.Enum({
            JPG: 0,
            PNG: 1,
            TIFF: 2,
            WEBP: 3,
            PVR: 4,
            ETC: 5,
            S3TC: 6,
            ATITC: 7,
            TGA: 8,
            RAWDATA: 9,
            UNKNOWN: 10
        }),
        cc.macro.BlendFactor = cc.Enum({
            ONE: 1,
            ZERO: 0,
            SRC_ALPHA: 770,
            SRC_COLOR: 768,
            DST_ALPHA: 772,
            DST_COLOR: 774,
            ONE_MINUS_SRC_ALPHA: 771,
            ONE_MINUS_SRC_COLOR: 769,
            ONE_MINUS_DST_ALPHA: 773,
            ONE_MINUS_DST_COLOR: 775
        }),
        cc.macro.TextAlignment = cc.Enum({
            LEFT: 0,
            CENTER: 1,
            RIGHT: 2
        }),
        cc.macro.VerticalTextAlignment = cc.Enum({
            TOP: 0,
            CENTER: 1,
            BOTTOM: 2
        }),
        e.exports = cc.macro
    }
    ), {}],
    199: [(function(t, e) {
        "use strict";
        var i = t("./js")
          , n = t("./CCClass")
          , r = 1;
        function s() {
            this._name = "",
            this._objFlags = 0
        }
        n.fastDefine("cc.Object", s, {
            _name: "",
            _objFlags: 0
        }),
        i.value(s, "Flags", {
            Destroyed: r,
            DontSave: 8,
            EditorOnly: 16,
            Dirty: 32,
            DontDestroy: 64,
            PersistentMask: -4192741,
            Destroying: 128,
            Deactivating: 256,
            LockedInEditor: 512,
            HideInHierarchy: 1024,
            IsPreloadStarted: 8192,
            IsOnLoadStarted: 32768,
            IsOnLoadCalled: 16384,
            IsOnEnableCalled: 2048,
            IsStartCalled: 65536,
            IsEditorOnEnableCalled: 4096,
            IsPositionLocked: 1 << 21,
            IsRotationLocked: 1 << 17,
            IsScaleLocked: 1 << 18,
            IsAnchorLocked: 1 << 19,
            IsSizeLocked: 1 << 20
        });
        var a = [];
        i.value(s, "_deferredDestroy", (function() {
            for (var t = a.length, e = 0; e < t; ++e) {
                var i = a[e];
                i._objFlags & r || i._destroyImmediate()
            }
            t === a.length ? a.length = 0 : a.splice(0, t)
        }
        ));
        var o = s.prototype;
        function l(t, e) {
            var i, r = t instanceof cc._BaseNode || t instanceof cc.Component, s = r ? "_id" : null, a = {};
            for (i in t)
                if (t.hasOwnProperty(i)) {
                    if (i === s)
                        continue;
                    switch (typeof t[i]) {
                    case "string":
                        a[i] = "";
                        break;
                    case "object":
                    case "function":
                        a[i] = null
                    }
                }
            if (cc.Class._isCCClass(e))
                for (var o = cc.Class.Attr.getClassAttrs(e), l = e.__props__, h = 0; h < l.length; h++) {
                    var c = (i = l[h]) + cc.Class.Attr.DELIMETER + "default";
                    if (c in o) {
                        if (r && "_id" === i)
                            continue;
                        switch (typeof o[c]) {
                        case "string":
                            a[i] = "";
                            break;
                        case "object":
                        case "function":
                            a[i] = null;
                            break;
                        case "undefined":
                            a[i] = void 0
                        }
                    }
                }
            var u = "";
            for (i in a) {
                var _;
                _ = n.IDENTIFIER_RE.test(i) ? "o." + i + "=" : "o[" + n.escapeForJS(i) + "]=";
                var f = a[i];
                "" === f && (f = '""'),
                u += _ + f + ";\n"
            }
            return Function("o", u)
        }
        i.getset(o, "name", (function() {
            return this._name
        }
        ), (function(t) {
            this._name = t
        }
        ), !0),
        i.get(o, "isValid", (function() {
            return !(this._objFlags & r)
        }
        ), !0),
        o.destroy = function() {
            return this._objFlags & r ? (cc.warnID(5e3),
            !1) : !(4 & this._objFlags || (this._objFlags |= 4,
            a.push(this),
            0))
        }
        ,
        o._destruct = function() {
            var t = this.constructor
              , e = t.__destruct__;
            e || (e = l(this, t),
            i.value(t, "__destruct__", e, !0)),
            e(this)
        }
        ,
        o._onPreDestroy = null,
        o._destroyImmediate = function() {
            this._objFlags & r ? cc.errorID(5e3) : (this._onPreDestroy && this._onPreDestroy(),
            this._destruct(),
            this._objFlags |= r)
        }
        ,
        o._deserialize = null,
        cc.isValid = function(t, e) {
            return "object" == typeof t ? !(!t || t._objFlags & (e ? 4 | r : r)) : void 0 !== t
        }
        ,
        cc.Object = e.exports = s
    }
    ), {
        "./CCClass": 193,
        "./js": 214
    }],
    200: [(function(t, e) {
        "use strict";
        var i = t("../platform/js");
        cc.SAXParser = function() {
            window.DOMParser ? (this._isSupportDOMParser = !0,
            this._parser = new DOMParser) : (this._isSupportDOMParser = !1,
            this._parser = null)
        }
        ,
        cc.SAXParser.prototype = {
            constructor: cc.SAXParser,
            parse: function(t) {
                return this._parseXML(t)
            },
            _parseXML: function(t) {
                var e;
                return this._isSupportDOMParser ? e = this._parser.parseFromString(t, "text/xml") : ((e = new ActiveXObject("Microsoft.XMLDOM")).async = "false",
                e.loadXML(t)),
                e
            }
        },
        cc.PlistParser = function() {
            cc.SAXParser.call(this)
        }
        ,
        i.extend(cc.PlistParser, cc.SAXParser),
        i.mixin(cc.PlistParser.prototype, {
            parse: function(t) {
                var e = this._parseXML(t)
                  , i = e.documentElement;
                if ("plist" !== i.tagName)
                    return cc.warnID(5100),
                    {};
                for (var n = null, r = 0, s = i.childNodes.length; r < s && 1 !== (n = i.childNodes[r]).nodeType; r++)
                    ;
                return e = null,
                this._parseNode(n)
            },
            _parseNode: function(t) {
                var e = null
                  , i = t.tagName;
                if ("dict" === i)
                    e = this._parseDict(t);
                else if ("array" === i)
                    e = this._parseArray(t);
                else if ("string" === i)
                    if (1 === t.childNodes.length)
                        e = t.firstChild.nodeValue;
                    else {
                        e = "";
                        for (var n = 0; n < t.childNodes.length; n++)
                            e += t.childNodes[n].nodeValue
                    }
                else
                    "false" === i ? e = !1 : "true" === i ? e = !0 : "real" === i ? e = parseFloat(t.firstChild.nodeValue) : "integer" === i && (e = parseInt(t.firstChild.nodeValue, 10));
                return e
            },
            _parseArray: function(t) {
                for (var e = [], i = 0, n = t.childNodes.length; i < n; i++) {
                    var r = t.childNodes[i];
                    1 === r.nodeType && e.push(this._parseNode(r))
                }
                return e
            },
            _parseDict: function(t) {
                for (var e = {}, i = null, n = 0, r = t.childNodes.length; n < r; n++) {
                    var s = t.childNodes[n];
                    1 === s.nodeType && ("key" === s.tagName ? i = s.firstChild.nodeValue : e[i] = this._parseNode(s))
                }
                return e
            }
        }),
        cc.saxParser = new cc.SAXParser,
        cc.plistParser = new cc.PlistParser,
        e.exports = {
            saxParser: cc.saxParser,
            plistParser: cc.plistParser
        }
    }
    ), {
        "../platform/js": 214
    }],
    201: [(function() {
        "use strict";
        cc.screen = {
            _supportsFullScreen: !1,
            _onfullscreenchange: null,
            _onfullscreenerror: null,
            _preOnFullScreenChange: null,
            _preOnFullScreenError: null,
            _preOnTouch: null,
            _touchEvent: "",
            _fn: null,
            _fnMap: [["requestFullscreen", "exitFullscreen", "fullscreenchange", "fullscreenEnabled", "fullscreenElement", "fullscreenerror"], ["requestFullScreen", "exitFullScreen", "fullScreenchange", "fullScreenEnabled", "fullScreenElement", "fullscreenerror"], ["webkitRequestFullScreen", "webkitCancelFullScreen", "webkitfullscreenchange", "webkitIsFullScreen", "webkitCurrentFullScreenElement", "webkitfullscreenerror"], ["mozRequestFullScreen", "mozCancelFullScreen", "mozfullscreenchange", "mozFullScreen", "mozFullScreenElement", "mozfullscreenerror"], ["msRequestFullscreen", "msExitFullscreen", "MSFullscreenChange", "msFullscreenEnabled", "msFullscreenElement", "msfullscreenerror"]],
            init: function() {
                this._fn = {};
                var t, e, i, n, r = this._fnMap;
                for (t = 0,
                e = r.length; t < e; t++)
                    if ((i = r[t]) && void 0 !== document[i[1]]) {
                        for (t = 0,
                        n = i.length; t < n; t++)
                            this._fn[r[0][t]] = i[t];
                        break
                    }
                this._supportsFullScreen = void 0 !== this._fn.requestFullscreen,
                this._touchEvent = "ontouchend"in window ? "touchend" : "mousedown"
            },
            fullScreen: function() {
                return !!this._supportsFullScreen && !!(document[this._fn.fullscreenElement] || document[this._fn.webkitFullscreenElement] || document[this._fn.mozFullScreenElement])
            },
            requestFullScreen: function(t, e, i) {
                if (t && "video" === t.tagName.toLowerCase()) {
                    if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser && t.readyState > 0)
                        return void (t.webkitEnterFullscreen && t.webkitEnterFullscreen());
                    t.setAttribute("x5-video-player-fullscreen", "true")
                }
                if (this._supportsFullScreen) {
                    if (t = t || document.documentElement,
                    e) {
                        var n = this._fn.fullscreenchange;
                        this._onfullscreenchange && document.removeEventListener(n, this._onfullscreenchange),
                        this._onfullscreenchange = e,
                        document.addEventListener(n, e, !1)
                    }
                    if (i) {
                        var r = this._fn.fullscreenerror;
                        this._onfullscreenerror && document.removeEventListener(r, this._onfullscreenerror),
                        this._onfullscreenerror = i,
                        document.addEventListener(r, i, {
                            once: !0
                        })
                    }
                    var s = t[this._fn.requestFullscreen]();
                    void 0 === document[this._fn.fullscreenerror] && window.Promise && s instanceof Promise && s.catch((function() {}
                    ))
                }
            },
            exitFullScreen: function(t) {
                if (t && "video" === t.tagName.toLowerCase()) {
                    if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser)
                        return void (t.webkitExitFullscreen && t.webkitExitFullscreen());
                    t.setAttribute("x5-video-player-fullscreen", "false")
                }
                return !this._supportsFullScreen || document[this._fn.exitFullscreen]()
            },
            autoFullScreen: function(t, e) {
                t = t || document.body,
                this._ensureFullScreen(t, e),
                this.requestFullScreen(t, e)
            },
            disableAutoFullScreen: function(t) {
                var e = cc.game.canvas || t
                  , i = this._touchEvent;
                this._preOnTouch && (e.removeEventListener(i, this._preOnTouch),
                this._preOnTouch = null)
            },
            _ensureFullScreen: function(t, e) {
                var i = this
                  , n = cc.game.canvas || t
                  , r = this._fn.fullscreenerror
                  , s = this._touchEvent;
                function a() {
                    i._preOnFullScreenError = null,
                    i._preOnTouch && n.removeEventListener(s, i._preOnTouch),
                    i._preOnTouch = function() {
                        i._preOnTouch = null,
                        i.requestFullScreen(t, e)
                    }
                    ,
                    n.addEventListener(s, i._preOnTouch, {
                        once: !0
                    })
                }
                this._preOnFullScreenError && t.removeEventListener(r, this._preOnFullScreenError),
                this._preOnFullScreenError = a,
                t.addEventListener(r, a, {
                    once: !0
                })
            }
        },
        cc.screen.init()
    }
    ), {}],
    202: [(function(t, e) {
        "use strict";
        window._CCSettings && _CCSettings.platform;
        var i = "undefined" == typeof window ? global : window
          , n = cc && cc.sys ? cc.sys : (function() {
            cc.sys = {};
            var t, e, n = cc.sys;
            if (n.LANGUAGE_ENGLISH = "en",
            n.LANGUAGE_CHINESE = "zh",
            n.LANGUAGE_FRENCH = "fr",
            n.LANGUAGE_ITALIAN = "it",
            n.LANGUAGE_GERMAN = "de",
            n.LANGUAGE_SPANISH = "es",
            n.LANGUAGE_DUTCH = "du",
            n.LANGUAGE_RUSSIAN = "ru",
            n.LANGUAGE_KOREAN = "ko",
            n.LANGUAGE_JAPANESE = "ja",
            n.LANGUAGE_HUNGARIAN = "hu",
            n.LANGUAGE_PORTUGUESE = "pt",
            n.LANGUAGE_ARABIC = "ar",
            n.LANGUAGE_NORWEGIAN = "no",
            n.LANGUAGE_POLISH = "pl",
            n.LANGUAGE_TURKISH = "tr",
            n.LANGUAGE_UKRAINIAN = "uk",
            n.LANGUAGE_ROMANIAN = "ro",
            n.LANGUAGE_BULGARIAN = "bg",
            n.LANGUAGE_UNKNOWN = "unknown",
            n.OS_IOS = "iOS",
            n.OS_ANDROID = "Android",
            n.OS_WINDOWS = "Windows",
            n.OS_MARMALADE = "Marmalade",
            n.OS_LINUX = "Linux",
            n.OS_BADA = "Bada",
            n.OS_BLACKBERRY = "Blackberry",
            n.OS_OSX = "OS X",
            n.OS_WP8 = "WP8",
            n.OS_WINRT = "WINRT",
            n.OS_UNKNOWN = "Unknown",
            n.UNKNOWN = -1,
            n.WIN32 = 0,
            n.LINUX = 1,
            n.MACOS = 2,
            n.ANDROID = 3,
            n.IPHONE = 4,
            n.IPAD = 5,
            n.BLACKBERRY = 6,
            n.NACL = 7,
            n.EMSCRIPTEN = 8,
            n.TIZEN = 9,
            n.WINRT = 10,
            n.WP8 = 11,
            n.MOBILE_BROWSER = 100,
            n.DESKTOP_BROWSER = 101,
            n.EDITOR_PAGE = 102,
            n.EDITOR_CORE = 103,
            n.WECHAT_GAME = 104,
            n.QQ_PLAY = 105,
            n.FB_PLAYABLE_ADS = 106,
            n.BAIDU_GAME = 107,
            n.VIVO_GAME = 108,
            n.OPPO_GAME = 109,
            n.HUAWEI_GAME = 110,
            n.XIAOMI_GAME = 111,
            n.JKW_GAME = 112,
            n.ALIPAY_GAME = 113,
            n.WECHAT_GAME_SUB = 114,
            n.BAIDU_GAME_SUB = 115,
            n.QTT_GAME = 116,
            n.BYTEDANCE_GAME = 117,
            n.BYTEDANCE_GAME_SUB = 118,
            n.LINKSURE = 119,
            n.BROWSER_TYPE_WECHAT = "wechat",
            n.BROWSER_TYPE_ANDROID = "androidbrowser",
            n.BROWSER_TYPE_IE = "ie",
            n.BROWSER_TYPE_EDGE = "edge",
            n.BROWSER_TYPE_QQ = "qqbrowser",
            n.BROWSER_TYPE_MOBILE_QQ = "mqqbrowser",
            n.BROWSER_TYPE_UC = "ucbrowser",
            n.BROWSER_TYPE_UCBS = "ucbs",
            n.BROWSER_TYPE_360 = "360browser",
            n.BROWSER_TYPE_BAIDU_APP = "baiduboxapp",
            n.BROWSER_TYPE_BAIDU = "baidubrowser",
            n.BROWSER_TYPE_MAXTHON = "maxthon",
            n.BROWSER_TYPE_OPERA = "opera",
            n.BROWSER_TYPE_OUPENG = "oupeng",
            n.BROWSER_TYPE_MIUI = "miuibrowser",
            n.BROWSER_TYPE_FIREFOX = "firefox",
            n.BROWSER_TYPE_SAFARI = "safari",
            n.BROWSER_TYPE_CHROME = "chrome",
            n.BROWSER_TYPE_LIEBAO = "liebao",
            n.BROWSER_TYPE_QZONE = "qzone",
            n.BROWSER_TYPE_SOUGOU = "sogou",
            n.BROWSER_TYPE_HUAWEI = "huawei",
            n.BROWSER_TYPE_UNKNOWN = "unknown",
            n.isNative = !1,
            n.isBrowser = "object" == typeof window && "object" == typeof document && !0,
            n.glExtension = function(t) {
                return !!cc.renderer.device.ext(t)
            }
            ,
            n.getMaxJointMatrixSize = function() {
                if (!n._maxJointMatrixSize) {
                    var t = cc.game._renderContext
                      , e = Math.floor(t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS) / 4) - 10;
                    n._maxJointMatrixSize = e < 50 ? 0 : 50
                }
                return n._maxJointMatrixSize
            }
            ,
            n.getSafeAreaRect = function() {
                var t = cc.view.getVisibleSize();
                return cc.rect(0, 0, t.width, t.height)
            }
            ,
            i.__globalAdapter && i.__globalAdapter.adaptSys)
                i.__globalAdapter.adaptSys(n);
            else {
                var r = window
                  , s = r.navigator
                  , a = document
                  , o = a.documentElement
                  , l = s.userAgent.toLowerCase();
                n.isMobile = /mobile|android|iphone|ipad/.test(l),
                "undefined" != typeof FbPlayableAd ? n.platform = n.FB_PLAYABLE_ADS : n.platform = n.isMobile ? n.MOBILE_BROWSER : n.DESKTOP_BROWSER;
                var h = s.language;
                h = h || s.browserLanguage,
                n.languageCode = h.toLowerCase(),
                h = h ? h.split("-")[0] : n.LANGUAGE_ENGLISH,
                n.language = h;
                var c = !1
                  , u = !1
                  , _ = ""
                  , f = 0
                  , d = /android\s*(\d+(?:\.\d+)*)/i.exec(l) || /android\s*(\d+(?:\.\d+)*)/i.exec(s.platform);
                d && (c = !0,
                _ = d[1] || "",
                f = parseInt(_) || 0),
                (d = /(iPad|iPhone|iPod).*OS ((\d+_?){2,3})/i.exec(l)) ? (u = !0,
                _ = d[2] || "",
                f = parseInt(_) || 0) : (/(iPhone|iPad|iPod)/.exec(s.platform) || "MacIntel" === s.platform && s.maxTouchPoints && s.maxTouchPoints > 1) && (u = !0,
                _ = "",
                f = 0);
                var p = n.OS_UNKNOWN;
                -1 !== s.appVersion.indexOf("Win") ? p = n.OS_WINDOWS : u ? p = n.OS_IOS : -1 !== s.appVersion.indexOf("Mac") ? p = n.OS_OSX : -1 !== s.appVersion.indexOf("X11") && -1 === s.appVersion.indexOf("Linux") ? p = n.OS_UNIX : c ? p = n.OS_ANDROID : -1 === s.appVersion.indexOf("Linux") && -1 === l.indexOf("ubuntu") || (p = n.OS_LINUX),
                n.os = p,
                n.osVersion = _,
                n.osMainVersion = f,
                n.browserType = n.BROWSER_TYPE_UNKNOWN,
                (function() {
                    var t = /mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i.exec(l) || /qq|ucbrowser|ubrowser|edge|HuaweiBrowser/i.exec(l) || /chrome|safari|firefox|trident|opera|opr\/|oupeng/i.exec(l)
                      , e = t ? t[0].toLowerCase() : n.BROWSER_TYPE_UNKNOWN;
                    "safari" === e && c ? e = n.BROWSER_TYPE_ANDROID : "qq" === e && l.match(/android.*applewebkit/i) && (e = n.BROWSER_TYPE_ANDROID);
                    var i = {
                        micromessenger: n.BROWSER_TYPE_WECHAT,
                        trident: n.BROWSER_TYPE_IE,
                        edge: n.BROWSER_TYPE_EDGE,
                        "360 aphone": n.BROWSER_TYPE_360,
                        mxbrowser: n.BROWSER_TYPE_MAXTHON,
                        "opr/": n.BROWSER_TYPE_OPERA,
                        ubrowser: n.BROWSER_TYPE_UC,
                        huaweibrowser: n.BROWSER_TYPE_HUAWEI
                    };
                    "qqbrowser" !== e && "mqqbrowser" !== e || l.match(/wechat|micromessenger/i) && (e = n.BROWSER_TYPE_WECHAT),
                    n.browserType = i[e] || e
                }
                )(),
                n.browserVersion = "",
                (e = l.match(/(mqqbrowser|micromessenger|qqbrowser|sogou|qzone|liebao|maxthon|uc|ucbs|360 aphone|360|baiduboxapp|baidu|maxthon|mxbrowser|miui(?:.hybrid)?)(mobile)?(browser)?\/?([\d.]+)/i)) || (e = l.match(/(qq|chrome|safari|firefox|trident|opera|opr\/|oupeng)(mobile)?(browser)?\/?([\d.]+)/i)),
                n.browserVersion = e ? e[4] : "";
                var m = window.innerWidth || document.documentElement.clientWidth
                  , y = window.innerHeight || document.documentElement.clientHeight
                  , v = window.devicePixelRatio || 1;
                n.windowPixelResolution = {
                    width: v * m,
                    height: v * y
                },
                n._checkWebGLRenderMode = function() {
                    if (cc.game.renderType !== cc.game.RENDER_TYPE_WEBGL)
                        throw new Error("This feature supports WebGL render mode only.")
                }
                ;
                var g = document.createElement("canvas");
                try {
                    var A = n.localStorage = r.localStorage;
                    A.setItem("storage", ""),
                    A.removeItem("storage"),
                    A = null
                } catch (M) {
                    var x = function() {
                        cc.warnID(5200)
                    };
                    n.localStorage = {
                        getItem: x,
                        setItem: x,
                        removeItem: x,
                        clear: x
                    }
                }
                var b = g.toDataURL("image/webp").startsWith("data:image/webp")
                  , C = !!g.getContext("2d")
                  , T = !1;
                r.WebGLRenderingContext && (T = !0);
                var S, w = n.capabilities = {
                    canvas: C,
                    opengl: T,
                    webp: b,
                    imageBitmap: !1
                };
                "undefined" != typeof createImageBitmap && "undefined" != typeof Blob && (g.width = g.height = 2,
                createImageBitmap(g, {}).then((function(t) {
                    w.imageBitmap = !0,
                    t.close && t.close()
                }
                )).catch((function() {}
                ))),
                (void 0 !== o.ontouchstart || void 0 !== a.ontouchstart || s.msPointerEnabled) && (w.touches = !0),
                void 0 !== o.onmouseup && (w.mouse = !0),
                void 0 !== o.onkeyup && (w.keyboard = !0),
                (r.DeviceMotionEvent || r.DeviceOrientationEvent) && (w.accelerometer = !0),
                (function() {
                    n.browserVersion;
                    var t = !!(window.AudioContext || window.webkitAudioContext || window.mozAudioContext);
                    S = {
                        ONLY_ONE: !1,
                        WEB_AUDIO: t,
                        DELAY_CREATE_CTX: !1
                    },
                    n.os === n.OS_IOS && (S.USE_LOADER_EVENT = "loadedmetadata"),
                    n.browserType === n.BROWSER_TYPE_FIREFOX && (S.DELAY_CREATE_CTX = !0,
                    S.USE_LOADER_EVENT = "canplay"),
                    n.os === n.OS_ANDROID && n.browserType === n.BROWSER_TYPE_UC && (S.ONE_SOURCE = !0)
                }
                )();
                try {
                    S.WEB_AUDIO && (S.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext),
                    S.DELAY_CREATE_CTX && setTimeout((function() {
                        S.context = new (window.AudioContext || window.webkitAudioContext || window.mozAudioContext)
                    }
                    ), 0))
                } catch (D) {
                    S.WEB_AUDIO = !1,
                    cc.logID(5201)
                }
                var E = [];
                (t = document.createElement("audio")).canPlayType && (t.canPlayType('audio/ogg; codecs="vorbis"') && E.push(".ogg"),
                t.canPlayType("audio/mpeg") && E.push(".mp3"),
                t.canPlayType('audio/wav; codecs="1"') && E.push(".wav"),
                t.canPlayType("audio/mp4") && E.push(".mp4"),
                t.canPlayType("audio/x-m4a") && E.push(".m4a")),
                S.format = E,
                n.__audioSupport = S
            }
            return n.NetworkType = {
                NONE: 0,
                LAN: 1,
                WWAN: 2
            },
            n.getNetworkType = function() {
                return n.NetworkType.LAN
            }
            ,
            n.getBatteryLevel = function() {
                return 1
            }
            ,
            n.garbageCollect = function() {}
            ,
            n.restartVM = function() {}
            ,
            n.isObjectValid = function(t) {
                return !!t
            }
            ,
            n.dump = function() {
                var t = "";
                t += "isMobile : " + this.isMobile + "\r\n",
                t += "language : " + this.language + "\r\n",
                t += "browserType : " + this.browserType + "\r\n",
                t += "browserVersion : " + this.browserVersion + "\r\n",
                t += "capabilities : " + JSON.stringify(this.capabilities) + "\r\n",
                t += "os : " + this.os + "\r\n",
                t += "osVersion : " + this.osVersion + "\r\n",
                t += "platform : " + this.platform + "\r\n",
                t += "Using " + (cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WEBGL" : "CANVAS") + " renderer.\r\n",
                cc.log(t)
            }
            ,
            n.openURL = function(t) {
                window.open(t)
            }
            ,
            n.now = function() {
                return Date.now ? Date.now() : +new Date
            }
            ,
            n
        }
        )();
        e.exports = n
    }
    ), {}],
    203: [(function(t, e) {
        "use strict";
        var i = t("../event/event-target")
          , n = t("../platform/js")
          , r = t("../renderer");
        t("../platform/CCClass");
        var s = {
            init: function() {
                this.html = document.getElementsByTagName("html")[0]
            },
            availWidth: function(t) {
                return t && t !== this.html ? t.clientWidth : window.innerWidth
            },
            availHeight: function(t) {
                return t && t !== this.html ? t.clientHeight : window.innerHeight
            },
            meta: {
                width: "device-width"
            },
            adaptationType: cc.sys.browserType
        };
        switch (cc.sys.os === cc.sys.OS_IOS && (s.adaptationType = cc.sys.BROWSER_TYPE_SAFARI),
        s.adaptationType) {
        case cc.sys.BROWSER_TYPE_SAFARI:
        case cc.sys.BROWSER_TYPE_SOUGOU:
        case cc.sys.BROWSER_TYPE_UC:
            s.meta["minimal-ui"] = "true",
            s.availWidth = function(t) {
                return t.clientWidth
            }
            ,
            s.availHeight = function(t) {
                return t.clientHeight
            }
        }
        var a = null
          , o = function() {
            i.call(this);
            var t = this
              , e = cc.ContainerStrategy
              , n = cc.ContentStrategy;
            s.init(this),
            t._frameSize = cc.size(0, 0),
            t._designResolutionSize = cc.size(0, 0),
            t._originalDesignResolutionSize = cc.size(0, 0),
            t._scaleX = 1,
            t._scaleY = 1,
            t._viewportRect = cc.rect(0, 0, 0, 0),
            t._visibleRect = cc.rect(0, 0, 0, 0),
            t._autoFullScreen = !1,
            t._devicePixelRatio = 1,
            t._maxPixelRatio = 2,
            t._retinaEnabled = !1,
            t._resizeCallback = null,
            t._resizing = !1,
            t._resizeWithBrowserSize = !1,
            t._orientationChanging = !0,
            t._isRotated = !1,
            t._orientation = cc.macro.ORIENTATION_AUTO,
            t._isAdjustViewport = !0,
            t._antiAliasEnabled = !1,
            t._resolutionPolicy = null,
            t._rpExactFit = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME,n.EXACT_FIT),
            t._rpShowAll = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME,n.SHOW_ALL),
            t._rpNoBorder = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME,n.NO_BORDER),
            t._rpFixedHeight = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME,n.FIXED_HEIGHT),
            t._rpFixedWidth = new cc.ResolutionPolicy(e.EQUAL_TO_FRAME,n.FIXED_WIDTH),
            cc.game.once(cc.game.EVENT_ENGINE_INITED, this.init, this)
        };
        cc.js.extend(o, i),
        cc.js.mixin(o.prototype, {
            init: function() {
                this._initFrameSize();
                var t = cc.game.canvas.width
                  , e = cc.game.canvas.height;
                this._designResolutionSize.width = t,
                this._designResolutionSize.height = e,
                this._originalDesignResolutionSize.width = t,
                this._originalDesignResolutionSize.height = e,
                this._viewportRect.width = t,
                this._viewportRect.height = e,
                this._visibleRect.width = t,
                this._visibleRect.height = e,
                cc.winSize.width = this._visibleRect.width,
                cc.winSize.height = this._visibleRect.height,
                cc.visibleRect && cc.visibleRect.init(this._visibleRect)
            },
            _resizeEvent: function(t) {
                var e;
                e = this.setDesignResolutionSize ? this : cc.view;
                var i = cc.sys;
                if (i.browserType !== i.BROWSER_TYPE_UC || i.os !== i.OS_IOS) {
                    var n = e._frameSize.width
                      , r = e._frameSize.height
                      , s = e._isRotated;
                    if (cc.sys.isMobile) {
                        var a = cc.game.container.style
                          , o = a.margin;
                        a.margin = "0",
                        a.display = "none",
                        e._initFrameSize(),
                        a.margin = o,
                        a.display = "block"
                    } else
                        e._initFrameSize();
                    if (!0 === t || e._isRotated !== s || e._frameSize.width !== n || e._frameSize.height !== r) {
                        var l = e._originalDesignResolutionSize.width
                          , h = e._originalDesignResolutionSize.height;
                        e._resizing = !0,
                        l > 0 && e.setDesignResolutionSize(l, h, e._resolutionPolicy),
                        e._resizing = !1,
                        e.emit("canvas-resize"),
                        e._resizeCallback && e._resizeCallback.call()
                    }
                } else
                    setTimeout((function() {
                        e._resizeEvent(t)
                    }
                    ), 0)
            },
            _orientationChange: function() {
                cc.view._orientationChanging = !0,
                cc.view._resizeEvent(),
                cc.sys.browserType === cc.sys.BROWSER_TYPE_SAFARI && cc.sys.isMobile && setTimeout((function() {
                    window.innerHeight > window.innerWidth && window.scrollTo(0, 1)
                }
                ), 500)
            },
            _resize: function() {
                cc.view._resizeEvent(!1)
            },
            resizeWithBrowserSize: function(t) {
                t ? this._resizeWithBrowserSize || (this._resizeWithBrowserSize = !0,
                window.addEventListener("resize", this._resize),
                window.addEventListener("orientationchange", this._orientationChange)) : this._resizeWithBrowserSize && (this._resizeWithBrowserSize = !1,
                window.removeEventListener("resize", this._resize),
                window.removeEventListener("orientationchange", this._orientationChange))
            },
            setResizeCallback: function(t) {
                "function" != typeof t && null != t || (this._resizeCallback = t)
            },
            setOrientation: function(t) {
                if ((t &= cc.macro.ORIENTATION_AUTO) && this._orientation !== t) {
                    this._orientation = t;
                    var e = this._originalDesignResolutionSize.width
                      , i = this._originalDesignResolutionSize.height;
                    this.setDesignResolutionSize(e, i, this._resolutionPolicy)
                }
            },
            _initFrameSize: function() {
                var t = this._frameSize
                  , e = s.availWidth(cc.game.frame)
                  , i = s.availHeight(cc.game.frame)
                  , n = e >= i;
                !cc.sys.isMobile || n && this._orientation & cc.macro.ORIENTATION_LANDSCAPE || !n && this._orientation & cc.macro.ORIENTATION_PORTRAIT ? (t.width = e,
                t.height = i,
                cc.game.container.style["-webkit-transform"] = "rotate(0deg)",
                cc.game.container.style.transform = "rotate(0deg)",
                this._isRotated = !1) : (t.width = i,
                t.height = e,
                cc.game.container.style["-webkit-transform"] = "rotate(90deg)",
                cc.game.container.style.transform = "rotate(90deg)",
                cc.game.container.style["-webkit-transform-origin"] = "0px 0px 0px",
                cc.game.container.style.transformOrigin = "0px 0px 0px",
                this._isRotated = !0),
                this._orientationChanging && setTimeout((function() {
                    cc.view._orientationChanging = !1
                }
                ), 1e3)
            },
            _setViewportMeta: function(t, e) {
                var i = document.getElementById("cocosMetaElement");
                i && e && document.head.removeChild(i);
                var n, r, s, a = document.getElementsByName("viewport"), o = a ? a[0] : null;
                for (r in n = o ? o.content : "",
                (i = i || document.createElement("meta")).id = "cocosMetaElement",
                i.name = "viewport",
                i.content = "",
                t)
                    -1 == n.indexOf(r) ? n += "," + r + "=" + t[r] : e && (s = new RegExp(r + "s*=s*[^,]+"),
                    n = n.replace(s, r + "=" + t[r]));
                /^,/.test(n) && (n = n.substr(1)),
                i.content = n,
                o && (o.content = n),
                document.head.appendChild(i)
            },
            _adjustViewportMeta: function() {
                this._isAdjustViewport && (this._setViewportMeta(s.meta, !1),
                this._isAdjustViewport = !1)
            },
            adjustViewportMeta: function(t) {
                this._isAdjustViewport = t
            },
            enableRetina: function(t) {
                this._retinaEnabled = !!t
            },
            isRetinaEnabled: function() {
                return this._retinaEnabled
            },
            enableAntiAlias: function(t) {
                if (cc.warnID(9200),
                this._antiAliasEnabled !== t)
                    if (this._antiAliasEnabled = t,
                    cc.game.renderType === cc.game.RENDER_TYPE_WEBGL)
                        cc.assetManager.assets.forEach((function(e) {
                            if (e instanceof cc.Texture2D) {
                                var i = cc.Texture2D.Filter;
                                t ? e.setFilters(i.LINEAR, i.LINEAR) : e.setFilters(i.NEAREST, i.NEAREST)
                            }
                        }
                        ));
                    else if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
                        var e = cc.game.canvas.getContext("2d");
                        e.imageSmoothingEnabled = t,
                        e.mozImageSmoothingEnabled = t
                    }
            },
            isAntiAliasEnabled: function() {
                return this._antiAliasEnabled
            },
            enableAutoFullScreen: function(t) {
                t && t !== this._autoFullScreen && cc.sys.isMobile ? (this._autoFullScreen = !0,
                cc.screen.autoFullScreen(cc.game.frame)) : (this._autoFullScreen = !1,
                cc.screen.disableAutoFullScreen(cc.game.frame))
            },
            isAutoFullScreenEnabled: function() {
                return this._autoFullScreen
            },
            setCanvasSize: function(t, e) {
                var i = cc.game.canvas
                  , n = cc.game.container;
                i.width = t * this._devicePixelRatio,
                i.height = e * this._devicePixelRatio,
                i.style.width = t + "px",
                i.style.height = e + "px",
                n.style.width = t + "px",
                n.style.height = e + "px",
                this._resizeEvent()
            },
            getCanvasSize: function() {
                return cc.size(cc.game.canvas.width, cc.game.canvas.height)
            },
            getFrameSize: function() {
                return cc.size(this._frameSize.width, this._frameSize.height)
            },
            setFrameSize: function(t, e) {
                this._frameSize.width = t,
                this._frameSize.height = e,
                cc.game.frame.style.width = t + "px",
                cc.game.frame.style.height = e + "px",
                this._resizeEvent(!0)
            },
            getVisibleSize: function() {
                return cc.size(this._visibleRect.width, this._visibleRect.height)
            },
            getVisibleSizeInPixel: function() {
                return cc.size(this._visibleRect.width * this._scaleX, this._visibleRect.height * this._scaleY)
            },
            getVisibleOrigin: function() {
                return cc.v2(this._visibleRect.x, this._visibleRect.y)
            },
            getVisibleOriginInPixel: function() {
                return cc.v2(this._visibleRect.x * this._scaleX, this._visibleRect.y * this._scaleY)
            },
            getResolutionPolicy: function() {
                return this._resolutionPolicy
            },
            setResolutionPolicy: function(t) {
                var e = this;
                if (t instanceof cc.ResolutionPolicy)
                    e._resolutionPolicy = t;
                else {
                    var i = cc.ResolutionPolicy;
                    t === i.EXACT_FIT && (e._resolutionPolicy = e._rpExactFit),
                    t === i.SHOW_ALL && (e._resolutionPolicy = e._rpShowAll),
                    t === i.NO_BORDER && (e._resolutionPolicy = e._rpNoBorder),
                    t === i.FIXED_HEIGHT && (e._resolutionPolicy = e._rpFixedHeight),
                    t === i.FIXED_WIDTH && (e._resolutionPolicy = e._rpFixedWidth)
                }
            },
            setDesignResolutionSize: function(t, e, i) {
                if (t > 0 && e > 0) {
                    this.setResolutionPolicy(i);
                    var n = this._resolutionPolicy;
                    if (n && n.preApply(this),
                    cc.sys.isMobile && this._adjustViewportMeta(),
                    this._orientationChanging = !0,
                    this._resizing || this._initFrameSize(),
                    n) {
                        this._originalDesignResolutionSize.width = this._designResolutionSize.width = t,
                        this._originalDesignResolutionSize.height = this._designResolutionSize.height = e;
                        var s = n.apply(this, this._designResolutionSize);
                        if (s.scale && 2 === s.scale.length && (this._scaleX = s.scale[0],
                        this._scaleY = s.scale[1]),
                        s.viewport) {
                            var a = this._viewportRect
                              , o = this._visibleRect
                              , l = s.viewport;
                            a.x = l.x,
                            a.y = l.y,
                            a.width = l.width,
                            a.height = l.height,
                            o.x = 0,
                            o.y = 0,
                            o.width = l.width / this._scaleX,
                            o.height = l.height / this._scaleY
                        }
                        n.postApply(this),
                        cc.winSize.width = this._visibleRect.width,
                        cc.winSize.height = this._visibleRect.height,
                        cc.visibleRect && cc.visibleRect.init(this._visibleRect),
                        r.updateCameraViewport(),
                        cc.internal.inputManager._updateCanvasBoundingRect(),
                        this.emit("design-resolution-changed")
                    } else
                        cc.logID(2201)
                } else
                    cc.errorID(2200)
            },
            getDesignResolutionSize: function() {
                return cc.size(this._designResolutionSize.width, this._designResolutionSize.height)
            },
            setRealPixelResolution: function(t, e, i) {
                this._setViewportMeta({
                    width: t
                }, !0),
                document.documentElement.style.width = t + "px",
                document.body.style.width = t + "px",
                document.body.style.left = "0px",
                document.body.style.top = "0px",
                this.setDesignResolutionSize(t, e, i)
            },
            setViewportInPoints: function(t, e, i, n) {
                var r = this._scaleX
                  , s = this._scaleY;
                cc.game._renderContext.viewport(t * r + this._viewportRect.x, e * s + this._viewportRect.y, i * r, n * s)
            },
            setScissorInPoints: function(t, e, i, n) {
                var r = this._scaleX
                  , s = this._scaleY
                  , o = Math.ceil(t * r + this._viewportRect.x)
                  , l = Math.ceil(e * s + this._viewportRect.y)
                  , h = Math.ceil(i * r)
                  , c = Math.ceil(n * s)
                  , u = cc.game._renderContext;
                if (!a) {
                    var _ = u.getParameter(u.SCISSOR_BOX);
                    a = cc.rect(_[0], _[1], _[2], _[3])
                }
                a.x === o && a.y === l && a.width === h && a.height === c || (a.x = o,
                a.y = l,
                a.width = h,
                a.height = c,
                u.scissor(o, l, h, c))
            },
            isScissorEnabled: function() {
                return cc.game._renderContext.isEnabled(gl.SCISSOR_TEST)
            },
            getScissorRect: function() {
                if (!a) {
                    var t = gl.getParameter(gl.SCISSOR_BOX);
                    a = cc.rect(t[0], t[1], t[2], t[3])
                }
                var e = 1 / this._scaleX
                  , i = 1 / this._scaleY;
                return cc.rect((a.x - this._viewportRect.x) * e, (a.y - this._viewportRect.y) * i, a.width * e, a.height * i)
            },
            getViewportRect: function() {
                return this._viewportRect
            },
            getScaleX: function() {
                return this._scaleX
            },
            getScaleY: function() {
                return this._scaleY
            },
            getDevicePixelRatio: function() {
                return this._devicePixelRatio
            },
            convertToLocationInView: function(t, e, i, n) {
                var r = n || cc.v2()
                  , s = i.adjustedLeft ? i.adjustedLeft : i.left
                  , a = i.adjustedTop ? i.adjustedTop : i.top
                  , o = this._devicePixelRatio * (t - s)
                  , l = this._devicePixelRatio * (a + i.height - e);
                return this._isRotated ? (r.x = cc.game.canvas.width - l,
                r.y = o) : (r.x = o,
                r.y = l),
                r
            },
            _convertMouseToLocationInView: function(t, e) {
                var i = this._viewportRect;
                t.x = (this._devicePixelRatio * (t.x - e.left) - i.x) / this._scaleX,
                t.y = (this._devicePixelRatio * (e.top + e.height - t.y) - i.y) / this._scaleY
            },
            _convertPointWithScale: function(t) {
                var e = this._viewportRect;
                t.x = (t.x - e.x) / this._scaleX,
                t.y = (t.y - e.y) / this._scaleY
            },
            _convertTouchesWithScale: function(t) {
                for (var e, i, n, r = this._viewportRect, s = this._scaleX, a = this._scaleY, o = 0; o < t.length; o++)
                    i = (e = t[o])._point,
                    n = e._prevPoint,
                    i.x = (i.x - r.x) / s,
                    i.y = (i.y - r.y) / a,
                    n.x = (n.x - r.x) / s,
                    n.y = (n.y - r.y) / a
            }
        }),
        cc.ContainerStrategy = cc.Class({
            name: "ContainerStrategy",
            preApply: function() {},
            apply: function() {},
            postApply: function() {},
            _setupContainer: function(t, e, i) {
                var n = cc.game.canvas;
                this._setupStyle(t, e, i);
                var r = t._devicePixelRatio = 1;
                t.isRetinaEnabled() && (r = t._devicePixelRatio = Math.min(t._maxPixelRatio, window.devicePixelRatio || 1)),
                n.width = e * r,
                n.height = i * r
            },
            _setupStyle: function(t, e, i) {
                var n = cc.game.canvas
                  , r = cc.game.container;
                cc.sys.os === cc.sys.OS_ANDROID && (document.body.style.width = (t._isRotated ? i : e) + "px",
                document.body.style.height = (t._isRotated ? e : i) + "px"),
                r.style.width = n.style.width = e + "px",
                r.style.height = n.style.height = i + "px"
            },
            _fixContainer: function() {
                document.body.insertBefore(cc.game.container, document.body.firstChild);
                var t = document.body.style;
                t.width = window.innerWidth + "px",
                t.height = window.innerHeight + "px",
                t.overflow = "hidden";
                var e = cc.game.container.style;
                e.position = "fixed",
                e.left = e.top = "0px",
                document.body.scrollTop = 0
            }
        }),
        cc.ContentStrategy = cc.Class({
            name: "ContentStrategy",
            ctor: function() {
                this._result = {
                    scale: [1, 1],
                    viewport: null
                }
            },
            _buildResult: function(t, e, i, n, r, s) {
                Math.abs(t - i) < 2 && (i = t),
                Math.abs(e - n) < 2 && (n = e);
                var a = cc.rect((t - i) / 2, (e - n) / 2, i, n);
                return cc.game.renderType,
                cc.game.RENDER_TYPE_CANVAS,
                this._result.scale = [r, s],
                this._result.viewport = a,
                this._result
            },
            preApply: function() {},
            apply: function() {
                return {
                    scale: [1, 1]
                }
            },
            postApply: function() {}
        }),
        (function() {
            var t = cc.Class({
                name: "EqualToFrame",
                extends: cc.ContainerStrategy,
                apply: function(t) {
                    var e = t._frameSize.height
                      , i = cc.game.container.style;
                    this._setupContainer(t, t._frameSize.width, t._frameSize.height),
                    t._isRotated ? i.margin = "0 0 0 " + e + "px" : i.margin = "0px",
                    i.padding = "0px"
                }
            })
              , e = cc.Class({
                name: "ProportionalToFrame",
                extends: cc.ContainerStrategy,
                apply: function(t, e) {
                    var i, n, r = t._frameSize.width, s = t._frameSize.height, a = cc.game.container.style, o = e.width, l = e.height, h = r / o, c = s / l;
                    h < c ? (i = r,
                    n = l * h) : (i = o * c,
                    n = s);
                    var u = Math.round((r - i) / 2)
                      , _ = Math.round((s - n) / 2);
                    i = r - 2 * u,
                    n = s - 2 * _,
                    this._setupContainer(t, i, n),
                    t._isRotated ? a.margin = "0 0 0 " + s + "px" : a.margin = "0px",
                    a.paddingLeft = u + "px",
                    a.paddingRight = u + "px",
                    a.paddingTop = _ + "px",
                    a.paddingBottom = _ + "px"
                }
            })
              , i = (cc.Class({
                name: "EqualToWindow",
                extends: t,
                preApply: function(t) {
                    this._super(t),
                    cc.game.frame = document.documentElement
                },
                apply: function(t) {
                    this._super(t),
                    this._fixContainer()
                }
            }),
            cc.Class({
                name: "ProportionalToWindow",
                extends: e,
                preApply: function(t) {
                    this._super(t),
                    cc.game.frame = document.documentElement
                },
                apply: function(t, e) {
                    this._super(t, e),
                    this._fixContainer()
                }
            }),
            cc.Class({
                name: "OriginalContainer",
                extends: cc.ContainerStrategy,
                apply: function(t) {
                    this._setupContainer(t, cc.game.canvas.width, cc.game.canvas.height)
                }
            }))
              , n = ("undefined" == typeof window ? global : window).__globalAdapter;
            n && (n.adaptContainerStrategy && n.adaptContainerStrategy(cc.ContainerStrategy.prototype),
            n.adaptView && n.adaptView(o.prototype)),
            cc.ContainerStrategy.EQUAL_TO_FRAME = new t,
            cc.ContainerStrategy.PROPORTION_TO_FRAME = new e,
            cc.ContainerStrategy.ORIGINAL_CONTAINER = new i;
            var r = cc.Class({
                name: "ExactFit",
                extends: cc.ContentStrategy,
                apply: function(t, e) {
                    var i = cc.game.canvas.width
                      , n = cc.game.canvas.height
                      , r = i / e.width
                      , s = n / e.height;
                    return this._buildResult(i, n, i, n, r, s)
                }
            })
              , s = cc.Class({
                name: "ShowAll",
                extends: cc.ContentStrategy,
                apply: function(t, e) {
                    var i, n, r = cc.game.canvas.width, s = cc.game.canvas.height, a = e.width, o = e.height, l = r / a, h = s / o, c = 0;
                    return l < h ? (i = r,
                    n = o * (c = l)) : (i = a * (c = h),
                    n = s),
                    this._buildResult(r, s, i, n, c, c)
                }
            })
              , a = cc.Class({
                name: "NoBorder",
                extends: cc.ContentStrategy,
                apply: function(t, e) {
                    var i, n, r, s = cc.game.canvas.width, a = cc.game.canvas.height, o = e.width, l = e.height, h = s / o, c = a / l;
                    return h < c ? (n = o * (i = c),
                    r = a) : (n = s,
                    r = l * (i = h)),
                    this._buildResult(s, a, n, r, i, i)
                }
            })
              , l = cc.Class({
                name: "FixedHeight",
                extends: cc.ContentStrategy,
                apply: function(t, e) {
                    var i = cc.game.canvas.width
                      , n = cc.game.canvas.height
                      , r = n / e.height
                      , s = i
                      , a = n;
                    return this._buildResult(i, n, s, a, r, r)
                }
            })
              , h = cc.Class({
                name: "FixedWidth",
                extends: cc.ContentStrategy,
                apply: function(t, e) {
                    var i = cc.game.canvas.width
                      , n = cc.game.canvas.height
                      , r = i / e.width
                      , s = i
                      , a = n;
                    return this._buildResult(i, n, s, a, r, r)
                }
            });
            cc.ContentStrategy.EXACT_FIT = new r,
            cc.ContentStrategy.SHOW_ALL = new s,
            cc.ContentStrategy.NO_BORDER = new a,
            cc.ContentStrategy.FIXED_HEIGHT = new l,
            cc.ContentStrategy.FIXED_WIDTH = new h
        }
        )(),
        cc.ResolutionPolicy = cc.Class({
            name: "cc.ResolutionPolicy",
            ctor: function(t, e) {
                this._containerStrategy = null,
                this._contentStrategy = null,
                this.setContainerStrategy(t),
                this.setContentStrategy(e)
            },
            preApply: function(t) {
                this._containerStrategy.preApply(t),
                this._contentStrategy.preApply(t)
            },
            apply: function(t, e) {
                return this._containerStrategy.apply(t, e),
                this._contentStrategy.apply(t, e)
            },
            postApply: function(t) {
                this._containerStrategy.postApply(t),
                this._contentStrategy.postApply(t)
            },
            setContainerStrategy: function(t) {
                t instanceof cc.ContainerStrategy && (this._containerStrategy = t)
            },
            setContentStrategy: function(t) {
                t instanceof cc.ContentStrategy && (this._contentStrategy = t)
            }
        }),
        n.get(cc.ResolutionPolicy.prototype, "canvasSize", (function() {
            return cc.v2(cc.game.canvas.width, cc.game.canvas.height)
        }
        )),
        cc.ResolutionPolicy.EXACT_FIT = 0,
        cc.ResolutionPolicy.NO_BORDER = 1,
        cc.ResolutionPolicy.SHOW_ALL = 2,
        cc.ResolutionPolicy.FIXED_HEIGHT = 3,
        cc.ResolutionPolicy.FIXED_WIDTH = 4,
        cc.ResolutionPolicy.UNKNOWN = 5,
        cc.view = new o,
        cc.winSize = cc.size(),
        e.exports = cc.view
    }
    ), {
        "../event/event-target": 140,
        "../platform/CCClass": 193,
        "../platform/js": 214,
        "../renderer": 224
    }],
    204: [(function() {
        "use strict";
        cc.visibleRect = {
            topLeft: cc.v2(0, 0),
            topRight: cc.v2(0, 0),
            top: cc.v2(0, 0),
            bottomLeft: cc.v2(0, 0),
            bottomRight: cc.v2(0, 0),
            bottom: cc.v2(0, 0),
            center: cc.v2(0, 0),
            left: cc.v2(0, 0),
            right: cc.v2(0, 0),
            width: 0,
            height: 0,
            init: function(t) {
                var e = this.width = t.width
                  , i = this.height = t.height
                  , n = t.x
                  , r = t.y
                  , s = r + i
                  , a = n + e;
                this.topLeft.x = n,
                this.topLeft.y = s,
                this.topRight.x = a,
                this.topRight.y = s,
                this.top.x = n + e / 2,
                this.top.y = s,
                this.bottomLeft.x = n,
                this.bottomLeft.y = r,
                this.bottomRight.x = a,
                this.bottomRight.y = r,
                this.bottom.x = n + e / 2,
                this.bottom.y = r,
                this.center.x = n + e / 2,
                this.center.y = r + i / 2,
                this.left.x = n,
                this.left.y = r + i / 2,
                this.right.x = a,
                this.right.y = r + i / 2
            }
        }
    }
    ), {}],
    205: [(function(t, e) {
        "use strict";
        var i = t("./js")
          , n = (t("./utils").isPlainEmptyObj_DEV,
        "$_$");
        function r(t, e) {
            var n = e ? Object.create(e) : {};
            return i.value(t, "__attrs__", n),
            n
        }
        function s(t) {
            if ("function" != typeof t)
                return r(t, a(t.constructor));
            for (var e, i = cc.Class.getInheritanceChain(t), n = i.length - 1; n >= 0; n--) {
                var s = i[n];
                s.hasOwnProperty("__attrs__") && s.__attrs__ || r(s, (e = i[n + 1]) && e.__attrs__)
            }
            return r(t, (e = i[0]) && e.__attrs__),
            t.__attrs__
        }
        function a(t) {
            return t.hasOwnProperty("__attrs__") && t.__attrs__ || s(t)
        }
        function o(t, e) {
            this.name = t,
            this.default = e
        }
        o.prototype.toString = function() {
            return this.name
        }
        ,
        cc.Integer = new o("Integer",0),
        cc.Float = new o("Float",0),
        cc.Boolean = new o("Boolean",!1),
        cc.String = new o("String",""),
        e.exports = {
            PrimitiveType: o,
            attr: function(t, e) {
                var i = a(t)
                  , r = e + n
                  , s = {};
                for (var o in i)
                    o.startsWith(r) && (s[o.slice(r.length)] = i[o]);
                return s
            },
            getClassAttrs: a,
            setClassAttr: function(t, e, i, r) {
                a(t)[e + n + i] = r
            },
            DELIMETER: n,
            getTypeChecker_ET: !1,
            getObjTypeChecker_ET: !1,
            ScriptUuid: {}
        }
    }
    ), {
        "./CCClass": 193,
        "./js": 214,
        "./utils": 217
    }],
    206: [(function(t, e) {
        "use strict";
        var i = t("./js")
          , n = i.array.fastRemoveAt;
        function r() {}
        function s() {
            this.callback = r,
            this.target = void 0,
            this.once = !1
        }
        s.prototype.set = function(t, e, i) {
            this.callback = t,
            this.target = e,
            this.once = !!i
        }
        ;
        var a = new i.Pool(function(t) {
            return t.callback = r,
            t.target = void 0,
            t.once = !1,
            !0
        }
        ,32);
        function o() {
            this.callbackInfos = [],
            this.isInvoking = !1,
            this.containCanceled = !1
        }
        a.get = function() {
            return this._get() || new s
        }
        ;
        var l = o.prototype;
        l.removeByCallback = function(t) {
            for (var e = 0; e < this.callbackInfos.length; ++e) {
                var i = this.callbackInfos[e];
                i && i.callback === t && (a.put(i),
                n(this.callbackInfos, e),
                --e)
            }
        }
        ,
        l.removeByTarget = function(t) {
            for (var e = 0; e < this.callbackInfos.length; ++e) {
                var i = this.callbackInfos[e];
                i && i.target === t && (a.put(i),
                n(this.callbackInfos, e),
                --e)
            }
        }
        ,
        l.cancel = function(t) {
            var e = this.callbackInfos[t];
            e && (a.put(e),
            this.callbackInfos[t] = null),
            this.containCanceled = !0
        }
        ,
        l.cancelAll = function() {
            for (var t = 0; t < this.callbackInfos.length; t++) {
                var e = this.callbackInfos[t];
                e && (a.put(e),
                this.callbackInfos[t] = null)
            }
            this.containCanceled = !0
        }
        ,
        l.purgeCanceled = function() {
            for (var t = this.callbackInfos.length - 1; t >= 0; --t)
                this.callbackInfos[t] || n(this.callbackInfos, t);
            this.containCanceled = !1
        }
        ,
        l.clear = function() {
            this.cancelAll(),
            this.callbackInfos.length = 0,
            this.isInvoking = !1,
            this.containCanceled = !1
        }
        ;
        var h = new i.Pool(function(t) {
            return t.callbackInfos = [],
            t.isInvoking = !1,
            t.containCanceled = !1,
            !0
        }
        ,16);
        function c() {
            this._callbackTable = i.createMap(!0)
        }
        h.get = function() {
            return this._get() || new o
        }
        ,
        (l = c.prototype).on = function(t, e, i, n) {
            var r = this._callbackTable[t];
            r || (r = this._callbackTable[t] = h.get());
            var s = a.get();
            s.set(e, i, n),
            r.callbackInfos.push(s)
        }
        ,
        l.hasEventListener = function(t, e, i) {
            var n = this._callbackTable[t];
            if (!n)
                return !1;
            var r = n.callbackInfos;
            if (!e) {
                if (n.isInvoking) {
                    for (var s = 0; s < r.length; ++s)
                        if (r[s])
                            return !0;
                    return !1
                }
                return r.length > 0
            }
            for (var a = 0; a < r.length; ++a) {
                var o = r[a];
                if (o && o.callback === e && o.target === i)
                    return !0
            }
            return !1
        }
        ,
        l.removeAll = function(t) {
            if ("string" == typeof t) {
                var e = this._callbackTable[t];
                e && (e.isInvoking ? e.cancelAll() : (e.clear(),
                h.put(e),
                delete this._callbackTable[t]))
            } else if (t)
                for (var i in this._callbackTable) {
                    var n = this._callbackTable[i];
                    if (n.isInvoking)
                        for (var r = n.callbackInfos, s = 0; s < r.length; ++s) {
                            var a = r[s];
                            a && a.target === t && n.cancel(s)
                        }
                    else
                        n.removeByTarget(t)
                }
        }
        ,
        l.off = function(t, e, i) {
            var r = this._callbackTable[t];
            if (r)
                for (var s = r.callbackInfos, o = 0; o < s.length; ++o) {
                    var l = s[o];
                    if (l && l.callback === e && l.target === i) {
                        r.isInvoking ? r.cancel(o) : (n(s, o),
                        a.put(l));
                        break
                    }
                }
        }
        ,
        l.emit = function(t, e, i, n, r, s) {
            var a = this._callbackTable[t];
            if (a) {
                var o = !a.isInvoking;
                a.isInvoking = !0;
                for (var l = a.callbackInfos, h = 0, c = l.length; h < c; ++h) {
                    var u = l[h];
                    if (u) {
                        var _ = u.target
                          , f = u.callback;
                        u.once && this.off(t, f, _),
                        _ ? f.call(_, e, i, n, r, s) : f(e, i, n, r, s)
                    }
                }
                o && (a.isInvoking = !1,
                a.containCanceled && a.purgeCanceled())
            }
        }
        ,
        e.exports = c
    }
    ), {
        "./js": 214
    }],
    207: [(function(t, e) {
        "use strict";
        function i(t, e) {
            for (var n = 0; n < e.length; n++) {
                var r = e[n];
                Array.isArray(r) ? i(t, r) : t.push(r)
            }
        }
        e.exports = {
            flattenCodeArray: function(t) {
                var e = [];
                return i(e, t),
                e.join("")
            }
        }
    }
    ), {}],
    208: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = O,
        i.unpackJSONs = function(t, e) {
            if (t[0] < 1)
                throw new Error(cc.debug.getError(5304, t[0]));
            I(t, !0, e),
            P(t);
            for (var i = new L(t[0]), n = t[1], r = t[2], s = t[3], a = t[4], o = t[v], l = 0; l < o.length; ++l)
                o[l].unshift(i, n, r, s, a);
            return o
        }
        ,
        i.packCustomObjData = function(t, e, i) {
            return [1, f, f, [t], f, i ? [e, -1] : [e], [0], f, [], [], []]
        }
        ,
        i.hasNativeDep = function(t) {
            var e = t[5]
              , i = e[e.length - 1];
            return "number" == typeof i && i < 0
        }
        ,
        i.getDependUuidList = function(t) {
            var e = t[1];
            return t[10].map((function(t) {
                return e[t]
            }
            ))
        }
        ;
        var n = _(t("./js"))
          , r = _(t("../value-types/vec2"))
          , s = _(t("../value-types/vec3"))
          , a = _(t("../value-types/vec4"))
          , o = _(t("../value-types/color"))
          , l = _(t("../value-types/size"))
          , h = _(t("../value-types/rect"))
          , c = _(t("../value-types/quat"))
          , u = _(t("../value-types/mat4"));
        function _(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var f = 0
          , d = [r.default, s.default, a.default, c.default, o.default, l.default, h.default, u.default];
        function p(t, e) {
            t.x = e[1],
            t.y = e[2],
            t.z = e[3],
            t.w = e[4]
        }
        var m = [function(t, e) {
            t.x = e[1],
            t.y = e[2]
        }
        , function(t, e) {
            t.x = e[1],
            t.y = e[2],
            t.z = e[3]
        }
        , p, p, function(t, e) {
            t._val = e[1]
        }
        , function(t, e) {
            t.width = e[1],
            t.height = e[2]
        }
        , function(t, e) {
            t.x = e[1],
            t.y = e[2],
            t.width = e[3],
            t.height = e[4]
        }
        , function(t, e) {
            u.default.fromArray(t, e, 1)
        }
        ]
          , y = 0
          , v = 5
          , g = (function() {
            function t() {
                this.uuidObjList = null,
                this.uuidPropList = null,
                this.uuidList = null
            }
            var e = t.prototype;
            return e.init = function(t) {
                this.uuidObjList = t[8],
                this.uuidPropList = t[9],
                this.uuidList = t[10]
            }
            ,
            e.reset = function() {
                this.uuidList = null,
                this.uuidObjList = null,
                this.uuidPropList = null
            }
            ,
            e.push = function(t, e, i) {
                this.uuidObjList.push(t),
                this.uuidPropList.push(e),
                this.uuidList.push(i)
            }
            ,
            t
        }
        )();
        function A(t, e, i) {
            for (var n = t.length - 1, r = 0, s = 3 * t[n]; r < s; r += 3) {
                var a = t[r]
                  , o = e[t[r + 2]]
                  , l = t[r + 1];
                l >= 0 ? a[i[l]] = o : a[~l] = o
            }
            for (; r < n; r += 3) {
                var h = e[t[r]]
                  , c = e[t[r + 2]]
                  , u = t[r + 1];
                u >= 0 ? h[i[u]] = c : h[~u] = c
            }
        }
        function x(t, e) {
            for (var i = t[4][e[0]], n = i[0], r = new (0,
            n[0]), s = n[1], a = n[2], o = i[i.length - 1], l = 1; l < o; ++l)
                r[s[i[l]]] = e[l];
            for (; l < e.length; ++l) {
                var h = s[i[l]]
                  , c = n[i[l] + a];
                (0,
                E[c])(t, r, h, e[l])
            }
            return r
        }
        function b(t, e, i) {
            var r = new e;
            return r._deserialize ? r._deserialize(i, t[0]) : cc.errorID(5303, n.default.getClassName(e)),
            r
        }
        function C(t, e, i, n) {
            n >= 0 ? e[i] = t[5][n] : t[7][3 * ~n] = e
        }
        function T(t) {
            return function(e, i, n, r) {
                i[n] = r;
                for (var s = 0; s < r.length; ++s)
                    t(e, r, s, r[s])
            }
        }
        function S(t, e, i, n) {
            e[i] = null,
            t[8][n] = e
        }
        function w(t, e, i, n) {
            e[i] = x(t, n)
        }
        g.pool = new n.default.Pool(function(t) {
            t.reset()
        }
        ,5),
        g.pool.get = function() {
            return this._get() || new g
        }
        ;
        var E = new Array(13);
        function M(t) {
            var e = t[5]
              , i = t[6]
              , n = 0 === i ? 0 : i.length
              , r = e[e.length - 1]
              , s = e.length - n;
            "number" != typeof r ? r = 0 : (r < 0 && (r = ~r),
            --s);
            for (var a = 0; a < s; ++a)
                e[a] = x(t, e[a]);
            for (var o = t[3], l = 0; l < n; ++l,
            ++a) {
                var h = i[l]
                  , c = e[a];
                if (h >= 0) {
                    var u = o[h];
                    e[a] = b(t, u, c)
                } else
                    (0,
                    E[h = ~h])(t, e, a, c)
            }
            return r
        }
        function D(t, e) {
            return t || O.reportMissingClass(e),
            Object
        }
        function B(t, e, i, n, r, s) {
            var a = t(e);
            if (!a) {
                if (r)
                    return void (i[n] = (function(e, i, n) {
                        return function() {
                            var r = t(n) || D(s, n);
                            return e[i] = r,
                            new r
                        }
                    }
                    )(i, n, e));
                a = D(s, e)
            }
            i[n] = a
        }
        function I(t, e, i) {
            for (var r = i || n.default._getClassById, s = t[3], a = 0; a < s.length; ++a) {
                var o = s[a];
                "string" != typeof o ? B(r, o[0], o, y, e, i) : B(r, o, s, a, e, i)
            }
        }
        function P(t) {
            var e = t[4];
            if (e)
                for (var i = t[3], n = 0; n < e.length; ++n) {
                    var r = e[n];
                    r[0] = i[r[0]]
                }
        }
        function R(t) {
            for (var e = t[5], i = t[2], n = t[1], r = t[8], s = t[9], a = t[10], o = 0; o < r.length; ++o) {
                var l = r[o];
                "number" == typeof l && (r[o] = e[l]);
                var h = s[o];
                "number" == typeof h && (h = h >= 0 ? i[h] : ~h,
                s[o] = h);
                var c = a[o];
                "number" == typeof c && (a[o] = n[c])
            }
        }
        function O(t, e, i) {
            "string" == typeof t && (t = JSON.parse(t));
            var n = !e;
            (e = e || g.pool.get()).init(t),
            i = i || {};
            var r = t[0]
              , s = !1;
            if ("object" == typeof r && (s = r.preprocessed,
            r = r.version),
            r < 1)
                throw new Error(cc.debug.getError(5304, r));
            i._version = r,
            i.result = e,
            t[0] = i,
            s || (I(t, !1, i.classFinder),
            P(t)),
            cc.game._isCloning = !0;
            var a = t[5]
              , o = M(t);
            return cc.game._isCloning = !1,
            t[7] && A(t[7], a, t[2]),
            R(t),
            n && g.pool.put(e),
            a[o]
        }
        E[0] = function(t, e, i, n) {
            e[i] = n
        }
        ,
        E[1] = C,
        E[2] = T(C),
        E[3] = T(S),
        E[4] = w,
        E[5] = function(t, e, i, n) {
            m[n[0]](e[i], n)
        }
        ,
        E[6] = S,
        E[7] = function(t, e, i, n) {
            e[i].set(n)
        }
        ,
        E[8] = function(t, e, i, n) {
            var r = new d[n[0]];
            m[n[0]](r, n),
            e[i] = r
        }
        ,
        E[9] = T(w),
        E[10] = function(t, e, i, n) {
            var r = t[3][n[0]];
            e[i] = b(t, r, n[1])
        }
        ,
        E[11] = function(t, e, i, n) {
            var r = n[0];
            e[i] = r;
            for (var s = 1; s < n.length; s += 3) {
                var a = n[s]
                  , o = n[s + 1]
                  , l = n[s + 2];
                (0,
                E[o])(t, r, a, l)
            }
        }
        ,
        E[12] = function(t, e, i, n) {
            var r = n[0];
            e[i] = r;
            for (var s = 0; s < r.length; ++s) {
                var a = r[s]
                  , o = n[s + 1];
                0 !== o && (0,
                E[o])(t, r, s, a)
            }
        }
        ,
        O.Details = g;
        var L = function(t) {
            this.preprocessed = !0,
            this.version = t
        }
    }
    ), {
        "../value-types/color": 281,
        "../value-types/mat4": 284,
        "../value-types/quat": 285,
        "../value-types/rect": 286,
        "../value-types/size": 287,
        "../value-types/vec2": 291,
        "../value-types/vec3": 292,
        "../value-types/vec4": 293,
        "./js": 214
    }],
    209: [(function(t) {
        "use strict";
        var e, i = (e = t("./deserialize-compiled")) && e.__esModule ? e : {
            default: e
        };
        i.default.reportMissingClass = function(t) {
            cc.warnID(5302, t)
        }
        ,
        cc.deserialize = i.default
    }
    ), {
        "./deserialize-compiled": 208,
        "./deserialize-editor": void 0
    }],
    210: [(function(t, e) {
        "use strict";
        var i = ".";
        function n(t) {
            this.id = 0 | 998 * Math.random(),
            this.prefix = t ? t + i : ""
        }
        n.prototype.getNewId = function() {
            return this.prefix + ++this.id
        }
        ,
        n.global = new n("global"),
        e.exports = n
    }
    ), {}],
    211: [(function(t) {
        "use strict";
        t("./js"),
        t("./CCClass"),
        t("./CCClassDecorator"),
        t("./CCEnum"),
        t("./CCObject"),
        t("./callbacks-invoker"),
        t("./deserialize"),
        t("./instantiate"),
        t("./instantiate-jit"),
        t("./requiring-frame"),
        t("./CCSys"),
        t("./CCMacro"),
        t("./CCVisibleRect")
    }
    ), {
        "./CCClass": 193,
        "./CCClassDecorator": 194,
        "./CCEnum": 195,
        "./CCMacro": 198,
        "./CCObject": 199,
        "./CCSys": 202,
        "./CCVisibleRect": 204,
        "./callbacks-invoker": 206,
        "./deserialize": 209,
        "./instantiate": 213,
        "./instantiate-jit": 212,
        "./js": 214,
        "./requiring-frame": 216
    }],
    212: [(function(t, e) {
        "use strict";
        var i = t("./CCObject")
          , n = i.Flags.Destroyed
          , r = i.Flags.PersistentMask
          , s = t("./attribute")
          , a = t("./js")
          , o = t("./CCClass")
          , l = t("./compiler")
          , h = s.DELIMETER + "default"
          , c = o.IDENTIFIER_RE
          , u = o.escapeForJS
          , _ = "var "
          , f = "o"
          , d = "t"
          , p = {
            "cc.Node": "cc.Node",
            "cc.Sprite": "cc.Sprite",
            "cc.Label": "cc.Label",
            "cc.Button": "cc.Button",
            "cc.Widget": "cc.Widget",
            "cc.Animation": "cc.Animation",
            "cc.ClickEvent": !1,
            "cc.PrefabInfo": !1
        };
        try {
            !Float32Array.name && (Float32Array.name = "Float32Array"),
            !Float64Array.name && (Float64Array.name = "Float64Array"),
            !Int8Array.name && (Int8Array.name = "Int8Array"),
            !Int16Array.name && (Int16Array.name = "Int16Array"),
            !Int32Array.name && (Int32Array.name = "Int32Array"),
            !Uint8Array.name && (Uint8Array.name = "Uint8Array"),
            !Uint16Array.name && (Uint16Array.name = "Uint16Array"),
            !Uint32Array.name && (Uint32Array.name = "Uint32Array"),
            !Uint8ClampedArray.name && (Uint8ClampedArray.name = "Uint8ClampedArray")
        } catch (S) {}
        function m(t) {
            if (t === Float32Array)
                return "Float32Array";
            if (t === Float64Array)
                return "Float64Array";
            if (t === Int8Array)
                return "Int8Array";
            if (t === Int16Array)
                return "Int16Array";
            if (t === Int32Array)
                return "Int32Array";
            if (t === Uint8Array)
                return "Uint8Array";
            if (t === Uint16Array)
                return "Uint16Array";
            if (t === Uint32Array)
                return "Uint32Array";
            if (t === Uint8ClampedArray)
                return "Uint8ClampedArray";
            throw new Error("Unknown TypedArray to instantiate: " + t)
        }
        function y(t, e) {
            this.varName = t,
            this.expression = e
        }
        function v(t, e) {
            return e instanceof y ? new y(e.varName,t + e.expression) : t + e
        }
        function g(t, e, i) {
            Array.isArray(i) ? (i[0] = v(e, i[0]),
            t.push(i)) : t.push(v(e, i) + ";")
        }
        function A(t) {
            this._exps = [],
            this._targetExp = t
        }
        function x(t, e) {
            if ("function" == typeof t)
                try {
                    t = t()
                } catch (S) {
                    return !1
                }
            if (t === e)
                return !0;
            if (t && e && "object" == typeof t && "object" == typeof e && t.constructor === e.constructor)
                if (t instanceof cc.ValueType) {
                    if (t.equals(e))
                        return !0
                } else {
                    if (Array.isArray(t))
                        return 0 === t.length && 0 === e.length;
                    if (t.constructor === Object)
                        return a.isEmptyObject(t) && a.isEmptyObject(e)
                }
            return !1
        }
        function b(t) {
            return c.test(t) ? "." + t : "[" + u(t) + "]"
        }
        function C(t, e) {
            var i;
            this.parent = e,
            this.objsToClear_iN$t = [],
            this.codeArray = [],
            this.objs = [],
            this.funcs = [],
            this.funcModuleCache = a.createMap(),
            a.mixin(this.funcModuleCache, p),
            this.globalVariables = [],
            this.globalVariableId = 0,
            this.localVariableId = 0,
            this.codeArray.push(_ + f + "," + d + ";", "if(R){", f + "=R;", "}else{", f + "=R=new " + this.getFuncModule(t.constructor, !0) + "();", "}"),
            a.value(t, "_iN$t", {
                globalVar: "R"
            }, !0),
            this.objsToClear_iN$t.push(t),
            this.enumerateObject(this.codeArray, t),
            this.globalVariables.length > 0 && (i = _ + this.globalVariables.join(",") + ";");
            var n = l.flattenCodeArray(["return (function(R){", i || [], this.codeArray, "return o;", "})"]);
            this.result = Function("O", "F", n)(this.objs, this.funcs);
            for (var r = 0, s = this.objsToClear_iN$t.length; r < s; ++r)
                this.objsToClear_iN$t[r]._iN$t = null;
            this.objsToClear_iN$t.length = 0
        }
        y.prototype.toString = function() {
            return _ + this.varName + "=" + this.expression + ";"
        }
        ,
        A.prototype.append = function(t, e) {
            this._exps.push([t, e])
        }
        ,
        A.prototype.writeCode = function(t) {
            var e;
            if (this._exps.length > 1)
                t.push(d + "=" + this._targetExp + ";"),
                e = d;
            else {
                if (1 !== this._exps.length)
                    return;
                e = this._targetExp
            }
            for (var i = 0; i < this._exps.length; i++) {
                var n = this._exps[i];
                g(t, e + b(n[0]) + "=", n[1])
            }
        }
        ,
        A.pool = new a.Pool(function(t) {
            t._exps.length = 0,
            t._targetExp = null
        }
        ,1),
        A.pool.get = function(t) {
            var e = this._get() || new A;
            return e._targetExp = t,
            e
        }
        ;
        var T = C.prototype;
        T.getFuncModule = function(t, e) {
            var i = a.getClassName(t);
            if (i) {
                var n = this.funcModuleCache[i];
                if (n)
                    return n;
                if (void 0 === n) {
                    var r = -1 !== i.indexOf(".");
                    if (r)
                        try {
                            if (r = t === Function("return " + i)())
                                return this.funcModuleCache[i] = i,
                                i
                        } catch (S) {}
                }
            }
            var s = this.funcs.indexOf(t);
            s < 0 && (s = this.funcs.length,
            this.funcs.push(t));
            var o = "F[" + s + "]";
            return e && (o = "(" + o + ")"),
            this.funcModuleCache[i] = o,
            o
        }
        ,
        T.getObjRef = function(t) {
            var e = this.objs.indexOf(t);
            return e < 0 && (e = this.objs.length,
            this.objs.push(t)),
            "O[" + e + "]"
        }
        ,
        T.setValueType = function(t, e, i, n) {
            var r = A.pool.get(n)
              , s = e.constructor.__props__;
            s || (s = Object.keys(e));
            for (var a = 0; a < s.length; a++) {
                var o = s[a]
                  , l = i[o];
                if (e[o] !== l) {
                    var h = this.enumerateField(i, o, l);
                    r.append(o, h)
                }
            }
            r.writeCode(t),
            A.pool.put(r)
        }
        ,
        T.enumerateCCClass = function(t, e, i) {
            for (var n = i.__values__, r = s.getClassAttrs(i), a = 0; a < n.length; a++) {
                var l = n[a]
                  , c = e[l]
                  , u = r[l + h];
                if (!x(u, c))
                    if ("object" == typeof c && c instanceof cc.ValueType && (u = o.getDefault(u)) && u.constructor === c.constructor) {
                        var _ = f + b(l);
                        this.setValueType(t, u, c, _)
                    } else
                        this.setObjProp(t, e, l, c)
            }
        }
        ,
        T.instantiateArray = function(t) {
            if (0 === t.length)
                return "[]";
            var e = "a" + ++this.localVariableId
              , i = [new y(e,"new Array(" + t.length + ")")];
            a.value(t, "_iN$t", {
                globalVar: "",
                source: i
            }, !0),
            this.objsToClear_iN$t.push(t);
            for (var n = 0; n < t.length; ++n)
                g(i, e + "[" + n + "]=", this.enumerateField(t, n, t[n]));
            return i
        }
        ,
        T.instantiateTypedArray = function(t) {
            var e = t.constructor.name || m(t.constructor);
            if (0 === t.length)
                return "new " + e;
            var i = "a" + ++this.localVariableId
              , n = [new y(i,"new " + e + "(" + t.length + ")")];
            t._iN$t = {
                globalVar: "",
                source: n
            },
            this.objsToClear_iN$t.push(t);
            for (var r = 0; r < t.length; ++r)
                0 !== t[r] && g(n, i + "[" + r + "]=", t[r]);
            return n
        }
        ,
        T.enumerateField = function(t, e, n) {
            if ("object" == typeof n && n) {
                var s = n._iN$t;
                if (s) {
                    var a = s.globalVar;
                    if (!a) {
                        a = s.globalVar = "v" + ++this.globalVariableId,
                        this.globalVariables.push(a);
                        var o = s.source[0];
                        s.source[0] = v(a + "=", o)
                    }
                    return a
                }
                return ArrayBuffer.isView(n) ? this.instantiateTypedArray(n) : Array.isArray(n) ? this.instantiateArray(n) : this.instantiateObj(n)
            }
            return "function" == typeof n ? this.getFuncModule(n) : "string" == typeof n ? u(n) : ("_objFlags" === e && t instanceof i && (n &= r),
            n)
        }
        ,
        T.setObjProp = function(t, e, i, n) {
            g(t, f + b(i) + "=", this.enumerateField(e, i, n))
        }
        ,
        T.enumerateObject = function(t, e) {
            var i = e.constructor;
            if (cc.Class._isCCClass(i))
                this.enumerateCCClass(t, e, i);
            else
                for (var n in e)
                    if (e.hasOwnProperty(n) && (95 !== n.charCodeAt(0) || 95 !== n.charCodeAt(1) || "__type__" === n)) {
                        var r = e[n];
                        "object" == typeof r && r && r === e._iN$t || this.setObjProp(t, e, n, r)
                    }
        }
        ,
        T.instantiateObj = function(t) {
            if (t instanceof cc.ValueType)
                return o.getNewValueTypeCode(t);
            if (t instanceof cc.Asset)
                return this.getObjRef(t);
            if (t._objFlags & n)
                return null;
            var e, i = t.constructor;
            if (cc.Class._isCCClass(i)) {
                if (this.parent)
                    if (this.parent instanceof cc.Component) {
                        if (t instanceof cc._BaseNode || t instanceof cc.Component)
                            return this.getObjRef(t)
                    } else if (this.parent instanceof cc._BaseNode)
                        if (t instanceof cc._BaseNode) {
                            if (!t.isChildOf(this.parent))
                                return this.getObjRef(t)
                        } else if (t instanceof cc.Component && !t.node.isChildOf(this.parent))
                            return this.getObjRef(t);
                e = new y(f,"new " + this.getFuncModule(i, !0) + "()")
            } else if (i === Object)
                e = new y(f,"{}");
            else {
                if (i)
                    return this.getObjRef(t);
                e = new y(f,"Object.create(null)")
            }
            var r = [e];
            return a.value(t, "_iN$t", {
                globalVar: "",
                source: r
            }, !0),
            this.objsToClear_iN$t.push(t),
            this.enumerateObject(r, t),
            ["(function(){", r, "return o;})();"]
        }
        ,
        e.exports = {
            compile: function(t) {
                return new C(t,t instanceof cc._BaseNode && t).result
            },
            equalsToDefault: x
        }
    }
    ), {
        "./CCClass": 193,
        "./CCObject": 199,
        "./attribute": 205,
        "./compiler": 207,
        "./js": 214
    }],
    213: [(function(t, e) {
        "use strict";
        var i = t("./CCObject")
          , n = t("../value-types/value-type")
          , r = i.Flags.Destroyed
          , s = i.Flags.PersistentMask
          , a = t("./utils").isDomNode
          , o = t("./js");
        function l(t, e) {
            if (!e) {
                if ("object" != typeof t || Array.isArray(t))
                    return null;
                if (!t)
                    return null;
                if (!cc.isValid(t))
                    return null
            }
            var n;
            if (t instanceof i) {
                if (t._instantiate)
                    return cc.game._isCloning = !0,
                    n = t._instantiate(null, !0),
                    cc.game._isCloning = !1,
                    n;
                if (t instanceof cc.Asset)
                    return null
            }
            return cc.game._isCloning = !0,
            n = c(t),
            cc.game._isCloning = !1,
            n
        }
        var h = [];
        function c(t, e) {
            if (Array.isArray(t))
                return null;
            if (a && a(t))
                return null;
            var i;
            _(t, i = t._iN$t ? t._iN$t : t.constructor ? new (0,
            t.constructor) : Object.create(null), e);
            for (var n = 0, r = h.length; n < r; ++n)
                h[n]._iN$t = null;
            return h.length = 0,
            i
        }
        function u(t, e, i, r) {
            for (var s = t.__values__, a = 0; a < s.length; a++) {
                var o = s[a]
                  , l = e[o];
                if ("object" == typeof l && l) {
                    var h = i[o];
                    h instanceof n && h.constructor === l.constructor ? h.set(l) : i[o] = l._iN$t || f(l, r)
                } else
                    i[o] = l
            }
        }
        function _(t, e, n) {
            o.value(t, "_iN$t", e, !0),
            h.push(t);
            var r = t.constructor;
            if (cc.Class._isCCClass(r))
                u(r, t, e, n);
            else
                for (var a in t)
                    if (t.hasOwnProperty(a) && (95 !== a.charCodeAt(0) || 95 !== a.charCodeAt(1) || "__type__" === a)) {
                        var l = t[a];
                        if ("object" == typeof l && l) {
                            if (l === e)
                                continue;
                            e[a] = l._iN$t || f(l, n)
                        } else
                            e[a] = l
                    }
            t instanceof i && (e._objFlags &= s)
        }
        function f(t, e) {
            if (t instanceof n)
                return t.clone();
            if (t instanceof cc.Asset)
                return t;
            var i;
            if (ArrayBuffer.isView(t)) {
                var s = t.length;
                i = new t.constructor(s),
                t._iN$t = i,
                h.push(t);
                for (var a = 0; a < s; ++a)
                    i[a] = t[a];
                return i
            }
            if (Array.isArray(t)) {
                var l = t.length;
                i = new Array(l),
                o.value(t, "_iN$t", i, !0),
                h.push(t);
                for (var c = 0; c < l; ++c) {
                    var u = t[c];
                    i[c] = "object" == typeof u && u ? u._iN$t || f(u, e) : u
                }
                return i
            }
            if (t._objFlags & r)
                return null;
            var d = t.constructor;
            if (cc.Class._isCCClass(d)) {
                if (e)
                    if (e instanceof cc.Component) {
                        if (t instanceof cc._BaseNode || t instanceof cc.Component)
                            return t
                    } else if (e instanceof cc._BaseNode)
                        if (t instanceof cc._BaseNode) {
                            if (!t.isChildOf(e))
                                return t
                        } else if (t instanceof cc.Component && !t.node.isChildOf(e))
                            return t;
                i = new d
            } else if (d === Object)
                i = {};
            else {
                if (d)
                    return t;
                i = Object.create(null)
            }
            return _(t, i, e),
            i
        }
        l._clone = c,
        cc.instantiate = l,
        e.exports = l
    }
    ), {
        "../value-types/value-type": 290,
        "./CCObject": 199,
        "./js": 214,
        "./utils": 217
    }],
    214: [(function(t, e) {
        "use strict";
        var i = new (t("./id-generater"))("TmpCId.");
        function n(t, e) {
            for (; t; ) {
                var i = Object.getOwnPropertyDescriptor(t, e);
                if (i)
                    return i;
                t = Object.getPrototypeOf(t)
            }
            return null
        }
        function r(t, e, i) {
            var r = n(e, t);
            Object.defineProperty(i, t, r)
        }
        var s = {
            isNumber: function(t) {
                return "number" == typeof t || t instanceof Number
            },
            isString: function(t) {
                return "string" == typeof t || t instanceof String
            },
            addon: function(t) {
                t = t || {};
                for (var e = 1, i = arguments.length; e < i; e++) {
                    var n = arguments[e];
                    if (n) {
                        if ("object" != typeof n) {
                            cc.errorID(5402, n);
                            continue
                        }
                        for (var s in n)
                            s in t || r(s, n, t)
                    }
                }
                return t
            },
            mixin: function(t) {
                t = t || {};
                for (var e = 1, i = arguments.length; e < i; e++) {
                    var n = arguments[e];
                    if (n) {
                        if ("object" != typeof n) {
                            cc.errorID(5403, n);
                            continue
                        }
                        for (var s in n)
                            r(s, n, t)
                    }
                }
                return t
            },
            extend: function(t, e) {
                for (var i in e)
                    e.hasOwnProperty(i) && (t[i] = e[i]);
                return t.prototype = Object.create(e.prototype, {
                    constructor: {
                        value: t,
                        writable: !0,
                        configurable: !0
                    }
                }),
                t
            },
            getSuper: function(t) {
                var e = t.prototype
                  , i = e && Object.getPrototypeOf(e);
                return i && i.constructor
            },
            isChildClassOf: function(t, e) {
                if (t && e) {
                    if ("function" != typeof t)
                        return !1;
                    if ("function" != typeof e)
                        return !1;
                    if (t === e)
                        return !0;
                    for (; ; ) {
                        if (!(t = s.getSuper(t)))
                            return !1;
                        if (t === e)
                            return !0
                    }
                }
                return !1
            },
            clear: function(t) {
                for (var e = Object.keys(t), i = 0; i < e.length; i++)
                    delete t[e[i]]
            },
            isEmptyObject: function(t) {
                for (var e in t)
                    return !1;
                return !0
            },
            getPropertyDescriptor: n
        }
          , a = {
            value: void 0,
            enumerable: !1,
            writable: !1,
            configurable: !0
        };
        s.value = function(t, e, i, n, r) {
            a.value = i,
            a.writable = n,
            a.enumerable = r,
            Object.defineProperty(t, e, a),
            a.value = void 0
        }
        ;
        var o = {
            get: null,
            set: null,
            enumerable: !1
        };
        s.getset = function(t, e, i, n, r, s) {
            "function" != typeof n && (r = n,
            n = void 0),
            o.get = i,
            o.set = n,
            o.enumerable = r,
            o.configurable = s,
            Object.defineProperty(t, e, o),
            o.get = null,
            o.set = null
        }
        ;
        var l = {
            get: null,
            enumerable: !1,
            configurable: !1
        };
        s.get = function(t, e, i, n, r) {
            l.get = i,
            l.enumerable = n,
            l.configurable = r,
            Object.defineProperty(t, e, l),
            l.get = null
        }
        ;
        var h = {
            set: null,
            enumerable: !1,
            configurable: !1
        };
        s.set = function(t, e, i, n, r) {
            h.set = i,
            h.enumerable = n,
            h.configurable = r,
            Object.defineProperty(t, e, h),
            h.set = null
        }
        ,
        s.getClassName = function(t) {
            if ("function" == typeof t) {
                var e = t.prototype;
                if (e && e.hasOwnProperty("__classname__") && e.__classname__)
                    return e.__classname__;
                var i = "";
                if (t.name && (i = t.name),
                t.toString) {
                    var n, r = t.toString();
                    (n = "[" === r.charAt(0) ? r.match(/\[\w+\s*(\w+)\]/) : r.match(/function\s*(\w+)/)) && 2 === n.length && (i = n[1])
                }
                return "Object" !== i ? i : ""
            }
            return t && t.constructor ? s.getClassName(t.constructor) : ""
        }
        ,
        (function() {
            var t = {}
              , e = {};
            function n(t, e, i) {
                return s.getset(s, e, (function() {
                    return Object.assign({}, i)
                }
                ), (function(t) {
                    s.clear(i),
                    Object.assign(i, t)
                }
                )),
                function(e, n) {
                    if (n.prototype.hasOwnProperty(t) && delete i[n.prototype[t]],
                    s.value(n.prototype, t, e),
                    e) {
                        var r = i[e];
                        if (r && r !== n) {
                            var a = "A Class already exists with the same " + t + ' : "' + e + '".';
                            cc.error(a)
                        } else
                            i[e] = n
                    }
                }
            }
            s._setClassId = n("__cid__", "_registeredClassIds", t);
            var r = n("__classname__", "_registeredClassNames", e);
            s.setClassName = function(t, e) {
                if (r(t, e),
                !e.prototype.hasOwnProperty("__cid__")) {
                    var n = t || i.getNewId();
                    n && s._setClassId(n, e)
                }
            }
            ,
            s.unregisterClass = function() {
                for (var i = 0; i < arguments.length; i++) {
                    var n = arguments[i].prototype
                      , r = n.__cid__;
                    r && delete t[r];
                    var s = n.__classname__;
                    s && delete e[s]
                }
            }
            ,
            s._getClassById = function(e) {
                return t[e]
            }
            ,
            s.getClassByName = function(t) {
                return e[t]
            }
            ,
            s._getClassId = function(t, e) {
                if (e = void 0 === e || e,
                "function" == typeof t && t.prototype.hasOwnProperty("__cid__"))
                    return t.prototype.__cid__;
                if (t && t.constructor) {
                    var i = t.constructor.prototype;
                    if (i && i.hasOwnProperty("__cid__"))
                        return t.__cid__
                }
                return ""
            }
        }
        )(),
        s.obsolete = function(t, e, i, n) {
            var r = /([^.]+)$/
              , a = r.exec(e)[0]
              , o = r.exec(i)[0];
            function l() {
                return this[o]
            }
            n ? s.getset(t, a, l, (function(t) {
                this[o] = t
            }
            )) : s.get(t, a, l)
        }
        ,
        s.obsoletes = function(t, e, i, n) {
            for (var r in i) {
                var a = i[r];
                s.obsolete(t, e + "." + r, a, n)
            }
        }
        ;
        var c = /(%d)|(%s)/
          , u = /%s/;
        function _(t, e) {
            t.splice(e, 1)
        }
        function f(t, e) {
            var i = t.indexOf(e);
            return i >= 0 && (_(t, i),
            !0)
        }
        function d(t, e) {
            void 0 === e && (e = t,
            t = null),
            this.get = null,
            this.count = 0,
            this._pool = new Array(e),
            this._cleanup = t
        }
        s.formatStr = function() {
            var t = arguments.length;
            if (0 === t)
                return "";
            var e = arguments[0];
            if (1 === t)
                return "" + e;
            var i = "string" == typeof e && c.test(e);
            if (i)
                for (var n = 1; n < t; ++n) {
                    var r = arguments[n]
                      , s = "number" == typeof r ? c : u;
                    if (s.test(e)) {
                        var a = "" + r;
                        e = e.replace(s, a)
                    } else
                        e += " " + r
                }
            else
                for (var o = 1; o < t; ++o)
                    e += " " + arguments[o];
            return e
        }
        ,
        s.shiftArguments = function() {
            for (var t = arguments.length - 1, e = new Array(t), i = 0; i < t; ++i)
                e[i] = arguments[i + 1];
            return e
        }
        ,
        s.createMap = function(t) {
            var e = Object.create(null);
            return t && (e["."] = !0,
            e["/"] = !0,
            delete e["."],
            delete e["/"]),
            e
        }
        ,
        s.array = {
            remove: f,
            fastRemove: function(t, e) {
                var i = t.indexOf(e);
                i >= 0 && (t[i] = t[t.length - 1],
                --t.length)
            },
            removeAt: _,
            fastRemoveAt: function(t, e) {
                var i = t.length;
                e < 0 || e >= i || (t[e] = t[i - 1],
                t.length = i - 1)
            },
            contains: function(t, e) {
                return t.indexOf(e) >= 0
            },
            verifyType: function(t, e) {
                if (t && t.length > 0)
                    for (var i = 0; i < t.length; i++)
                        if (!(t[i]instanceof e))
                            return cc.logID(1300),
                            !1;
                return !0
            },
            removeArray: function(t, e) {
                for (var i = 0, n = e.length; i < n; i++)
                    f(t, e[i])
            },
            appendObjectsAt: function(t, e, i) {
                return t.splice.apply(t, [i, 0].concat(e)),
                t
            },
            copy: function(t) {
                var e, i = t.length, n = new Array(i);
                for (e = 0; e < i; e += 1)
                    n[e] = t[e];
                return n
            },
            MutableForwardIterator: t("../utils/mutable-forward-iterator")
        },
        d.prototype._get = function() {
            if (this.count > 0) {
                --this.count;
                var t = this._pool[this.count];
                return this._pool[this.count] = null,
                t
            }
            return null
        }
        ,
        d.prototype.put = function(t) {
            var e = this._pool;
            if (this.count < e.length) {
                if (this._cleanup && !1 === this._cleanup(t))
                    return;
                e[this.count] = t,
                ++this.count
            }
        }
        ,
        d.prototype.resize = function(t) {
            t >= 0 && (this._pool.length = t,
            this.count > t && (this.count = t))
        }
        ,
        s.Pool = d,
        cc.js = s,
        e.exports = s
    }
    ), {
        "../utils/mutable-forward-iterator": 268,
        "./id-generater": 210
    }],
    215: [(function(t, e, i) {
        "use strict";
        var n = t("./js")
          , r = t("./attribute")
          , s = {
            default: {},
            serializable: {},
            editorOnly: {},
            formerlySerializedAs: {}
        };
        function a(t, e, i, n) {
            if (!t.get && !t.set && t.hasOwnProperty("default")) {
                var r = "_N$" + e;
                t.get = function() {
                    return this[r]
                }
                ,
                t.set = function(t) {
                    var e = this[r];
                    this[r] = t,
                    i.call(this, e)
                }
                ;
                var a = {};
                for (var o in n[r] = a,
                s) {
                    var l = s[o];
                    t.hasOwnProperty(o) && (a[o] = t[o],
                    l.canUsedInGet || delete t[o])
                }
            }
        }
        function o(t, e, i, n) {
            if (Array.isArray(e)) {
                if (!(e.length > 0))
                    return cc.errorID(5508, i, n);
                t.type = e = e[0]
            }
            "function" == typeof e && (e === String ? t.type = cc.String : e === Boolean ? t.type = cc.Boolean : e === Number && (t.type = cc.Float))
        }
        function l(t, e, i) {
            var n = t ? {
                _short: !0
            } : {
                _short: !0,
                default: e
            };
            return i && (n.type = i),
            n
        }
        i.getFullFormOfProperty = function(t, e) {
            return t && t.constructor === Object ? null : Array.isArray(t) && t.length > 0 ? l(e, [], t) : "function" == typeof t ? l(e, n.isChildClassOf(t, cc.ValueType) ? new t : null, t) : t instanceof r.PrimitiveType ? l(e, t.default) : l(e, t)
        }
        ,
        i.preprocessAttrs = function(t, e) {
            for (var n in t) {
                var r = t[n]
                  , s = i.getFullFormOfProperty(r, !1);
                if (s && (r = t[n] = s),
                r) {
                    var l = r.notify;
                    l && a(r, n, l, t),
                    "type"in r && o(r, r.type, e, n)
                }
            }
        }
        ,
        i.validateMethodWithProps = function(t) {
            return "function" == typeof t || null === t
        }
    }
    ), {
        "./CCClass": 193,
        "./attribute": 205,
        "./js": 214
    }],
    216: [(function() {
        "use strict";
        var t = [];
        cc._RF = {
            push: function(e, i, n) {
                void 0 === n && (n = i,
                i = ""),
                t.push({
                    uuid: i,
                    script: n,
                    module: e,
                    exports: e.exports,
                    beh: null
                })
            },
            pop: function() {
                var e = t.pop()
                  , i = e.module
                  , n = i.exports;
                if (n === e.exports) {
                    for (var r in n)
                        return;
                    i.exports = n = e.cls
                }
            },
            peek: function() {
                return t[t.length - 1]
            }
        }
    }
    ), {}],
    217: [(function(t, e) {
        "use strict";
        t("./js"),
        e.exports = {
            contains: function(t, e) {
                if ("function" == typeof t.contains)
                    return t.contains(e);
                if ("function" == typeof t.compareDocumentPosition)
                    return !!(16 & t.compareDocumentPosition(e));
                var i = e.parentNode;
                if (i)
                    do {
                        if (i === t)
                            return !0;
                        i = i.parentNode
                    } while (null !== i);return !1
            },
            isDomNode: "object" == typeof window && ("function" == typeof Node ? function(t) {
                return t instanceof Node
            }
            : function(t) {
                return t && "object" == typeof t && "number" == typeof t.nodeType && "string" == typeof t.nodeName
            }
            ),
            callInNextTick: function(t, e, i) {
                t && setTimeout((function() {
                    t(e, i)
                }
                ), 0)
            }
        }
    }
    ), {
        "./js": 214
    }],
    218: [(function(t) {
        "use strict";
        t("./platform/js"),
        t("./value-types"),
        t("./utils"),
        t("./platform/CCInputManager"),
        t("./platform/CCInputExtension"),
        t("./event"),
        t("./platform/CCSys"),
        t("./platform/CCMacro"),
        t("./asset-manager"),
        t("./CCDirector"),
        t("./renderer"),
        t("./platform/CCView"),
        t("./platform/CCScreen"),
        t("./CCScheduler"),
        t("./event-manager")
    }
    ), {
        "./CCDirector": 27,
        "./CCScheduler": 32,
        "./asset-manager": 50,
        "./event": 142,
        "./event-manager": 138,
        "./platform/CCInputExtension": 196,
        "./platform/CCInputManager": 197,
        "./platform/CCMacro": 198,
        "./platform/CCScreen": 201,
        "./platform/CCSys": 202,
        "./platform/CCView": 203,
        "./platform/js": 214,
        "./renderer": 224,
        "./utils": 266,
        "./value-types": 282
    }],
    219: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("./assembler"))
          , r = a(t("./utils/dynamic-atlas/manager"))
          , s = a(t("./webgl/render-data"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function l(t) {
            if (void 0 === t)
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return t
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        t("../value-types");
        var c = (function(t) {
            var e, i;
            function n() {
                var e;
                return (e = t.call(this) || this)._renderData = new s.default,
                e._renderData.init(l(e)),
                e.initData(),
                e.initLocal(),
                e
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i);
            var a, c, u = n.prototype;
            return u.initData = function() {
                this._renderData.createQuadData(0, this.verticesFloats, this.indicesCount)
            }
            ,
            u.initLocal = function() {
                this._local = [],
                this._local.length = 4
            }
            ,
            u.updateColor = function(t, e) {
                var i = this._renderData.uintVDatas[0];
                if (i) {
                    e = null != e ? e : t.node.color._val;
                    for (var n = this.floatsPerVert, r = this.colorOffset, s = i.length; r < s; r += n)
                        i[r] = e
                }
            }
            ,
            u.getBuffer = function() {
                return cc.renderer._handle._meshBuffer
            }
            ,
            u.updateWorldVerts = function(t) {
                var e = this._local
                  , i = this._renderData.vDatas[0]
                  , n = t.node._worldMatrix.m
                  , r = n[0]
                  , s = n[1]
                  , a = n[4]
                  , o = n[5]
                  , l = n[12]
                  , h = n[13]
                  , c = e[0]
                  , u = e[2]
                  , _ = e[1]
                  , f = e[3]
                  , d = this.floatsPerVert
                  , p = 0;
                if (1 === r && 0 === s && 0 === a && 1 === o)
                    i[p] = c + l,
                    i[p + 1] = _ + h,
                    i[p += d] = u + l,
                    i[p + 1] = _ + h,
                    i[p += d] = c + l,
                    i[p + 1] = f + h,
                    i[p += d] = u + l,
                    i[p + 1] = f + h;
                else {
                    var m = r * c
                      , y = r * u
                      , v = s * c
                      , g = s * u
                      , A = a * _
                      , x = a * f
                      , b = o * _
                      , C = o * f;
                    i[p] = m + A + l,
                    i[p + 1] = v + b + h,
                    i[p += d] = y + A + l,
                    i[p + 1] = g + b + h,
                    i[p += d] = m + x + l,
                    i[p + 1] = v + C + h,
                    i[p += d] = y + x + l,
                    i[p + 1] = g + C + h
                }
            }
            ,
            u.fillBuffers = function(t, e) {
                e.worldMatDirty && this.updateWorldVerts(t);
                var i = this._renderData
                  , n = i.vDatas[0]
                  , r = i.iDatas[0]
                  , s = this.getBuffer(e)
                  , a = s.request(this.verticesCount, this.indicesCount)
                  , o = a.byteOffset >> 2
                  , l = s._vData;
                n.length + o > l.length ? l.set(n.subarray(0, l.length - o), o) : l.set(n, o);
                for (var h = s._iData, c = a.indiceOffset, u = a.vertexOffset, _ = 0, f = r.length; _ < f; _++)
                    h[c++] = u + r[_]
            }
            ,
            u.packToDynamicAtlas = function(t, e) {
                if (!e._original && r.default && e._texture.packable) {
                    var i = r.default.insertSpriteFrame(e);
                    i && e._setDynamicAtlasFrame(i)
                }
                var n = t._materials[0];
                n && n.getProperty("texture") !== e._texture && (t._vertsDirty = !0,
                t._updateMaterial())
            }
            ,
            a = n,
            (c = [{
                key: "verticesFloats",
                get: function() {
                    return this.verticesCount * this.floatsPerVert
                }
            }]) && o(a.prototype, c),
            n
        }
        )(n.default);
        i.default = c,
        cc.js.addon(c.prototype, {
            floatsPerVert: 5,
            verticesCount: 4,
            indicesCount: 6,
            uvOffset: 2,
            colorOffset: 4
        }),
        cc.Assembler2D = c,
        e.exports = i.default
    }
    ), {
        "../value-types": 282,
        "./assembler": 221,
        "./utils/dynamic-atlas/manager": 227,
        "./webgl/render-data": 254
    }],
    220: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../utils/pool")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = 0;
        function o(t) {
            return Object.getOwnPropertyDescriptor(t, "__assemblerId__") || (t.__assemblerId__ = ++a),
            t.__assemblerId__
        }
        var l = new (function(t) {
            var e, i;
            function n() {
                for (var e, i = arguments.length, n = new Array(i), r = 0; r < i; r++)
                    n[r] = arguments[r];
                return (e = t.call.apply(t, [this].concat(n)) || this)._pool = {},
                e
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.put = function(t) {
                if (t && this.enabled) {
                    var e = o(t.constructor)
                      , i = this._pool;
                    i[e] || (i[e] = []),
                    this.count > this.maxSize || (this._clean(t),
                    i[e].push(t),
                    this.count++)
                }
            }
            ,
            r.get = function(t) {
                var e;
                if (this.enabled) {
                    var i = this._pool
                      , n = o(t);
                    e = i[n] && i[n].pop()
                }
                return e ? this.count-- : e = new t,
                e
            }
            ,
            r.clear = function() {
                this._pool = {},
                this.count = 0
            }
            ,
            r._clean = function(t) {
                t._renderComp = null
            }
            ,
            n
        }(r.default));
        r.default.register("assembler", l);
        var h = l;
        i.default = h,
        e.exports = i.default
    }
    ), {
        "../utils/pool": 269
    }],
    221: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("./webgl/vertex-format"), s = (n = t("./assembler-pool")) && n.__esModule ? n : {
            default: n
        }, a = (function() {
            function t() {
                this._extendNative && this._extendNative()
            }
            var e = t.prototype;
            return e.init = function(t) {
                this._renderComp = t
            }
            ,
            e.updateRenderData = function() {}
            ,
            e.fillBuffers = function() {}
            ,
            e.getVfmt = function() {
                return r.vfmtPosUvColor
            }
            ,
            t
        }
        )();
        i.default = a,
        a.register = function(t, e) {
            t.__assembler__ = e
        }
        ,
        a.init = function(t) {
            for (var e = t.constructor, i = e.__assembler__; !i; ) {
                if (!(e = e.$super))
                    return void cc.warn("Can not find assembler for render component : [" + cc.js.getClassName(t) + "]");
                i = e.__assembler__
            }
            if (i.getConstructor && (i = i.getConstructor(t)),
            !t._assembler || t._assembler.constructor !== i) {
                var n = s.default.get(i);
                n.init(t),
                t._assembler = n
            }
        }
        ,
        cc.Assembler = a,
        e.exports = i.default
    }
    ), {
        "./assembler-pool": 220,
        "./webgl/vertex-format": 256
    }],
    222: [(function(t, e) {
        "use strict";
        var i = function(t) {
            var e;
            try {
                e = t.getContext("2d")
            } catch (i) {
                return void console.error(i)
            }
            this._canvas = t,
            this._ctx = e,
            this._caps = {},
            this._stats = {
                drawcalls: 0
            },
            this._vx = this._vy = this._vw = this._vh = 0,
            this._sx = this._sy = this._sw = this._sh = 0
        };
        i.prototype._restoreTexture = function() {}
        ,
        i.prototype.setViewport = function(t, e, i, n) {
            this._vx === t && this._vy === e && this._vw === i && this._vh === n || (this._vx = t,
            this._vy = e,
            this._vw = i,
            this._vh = n)
        }
        ,
        i.prototype.setScissor = function(t, e, i, n) {
            this._sx === t && this._sy === e && this._sw === i && this._sh === n || (this._sx = t,
            this._sy = e,
            this._sw = i,
            this._sh = n)
        }
        ,
        i.prototype.clear = function(t) {
            var e = this._ctx;
            e.clearRect(this._vx, this._vy, this._vw, this._vh),
            !t || 0 === t[0] && 0 === t[1] && 0 === t[2] || (e.fillStyle = "rgb(" + t[0] + "," + t[1] + "," + t[2] + ")",
            e.globalAlpha = t[3],
            e.fillRect(this._vx, this._vy, this._vw, this._vh))
        }
        ,
        i.prototype.resetDrawCalls = function() {
            this._stats.drawcalls = 0
        }
        ,
        i.prototype.getDrawCalls = function() {
            return this._stats.drawcalls
        }
        ,
        e.exports = i
    }
    ), {}],
    223: [(function(t, e) {
        "use strict";
        var i = function(t, e) {
            this._device = t,
            this._width = 4,
            this._height = 4,
            this._image = null,
            e && (void 0 !== e.width && (this._width = e.width),
            void 0 !== e.height && (this._height = e.height),
            this.updateImage(e))
        };
        i.prototype.update = function(t) {
            this.updateImage(t)
        }
        ,
        i.prototype.updateImage = function(t) {
            if (t.images && t.images[0]) {
                var e = t.images[0];
                e && e !== this._image && (this._image = e)
            }
        }
        ,
        i.prototype.destroy = function() {
            this._image = null
        }
        ,
        e.exports = i
    }
    ), {}],
    224: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("../../renderer/gfx"))
          , r = a(t("../../renderer/core/input-assembler"))
          , s = a(t("../../renderer/core/pass"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var o = cc.renderer = {
            Texture2D: null,
            InputAssembler: r.default,
            Pass: s.default,
            renderEngine: null,
            canvas: null,
            device: null,
            scene: null,
            drawCalls: 0,
            _handle: null,
            _cameraNode: null,
            _camera: null,
            _forward: null,
            _flow: null,
            initWebGL: function(e, i) {
                t("./webgl/assemblers");
                var r = t("./webgl/model-batcher");
                this.Texture2D = n.default.Texture2D,
                this.canvas = e,
                this._flow = cc.RenderFlow;
                var s = t("../../renderer/scene/scene")
                  , a = t("../../renderer/renderers/forward-renderer");
                this.device = new n.default.Device(e,i),
                this.scene = new s;
                var o, l = (o = this.device,
                {
                    defaultTexture: new n.default.Texture2D(o,{
                        images: [],
                        width: 128,
                        height: 128,
                        wrapS: n.default.WRAP_REPEAT,
                        wrapT: n.default.WRAP_REPEAT,
                        format: n.default.TEXTURE_FMT_RGB8,
                        genMipmaps: !1
                    }),
                    programTemplates: [],
                    programChunks: {}
                });
                this._forward = new a(this.device,l),
                this._handle = new r(this.device,this.scene),
                this._flow.init(this._handle, this._forward)
            },
            initCanvas: function(e) {
                var i = t("./canvas")
                  , n = t("./canvas/Texture2D")
                  , r = t("./canvas/Device");
                this.Device = r,
                this.Texture2D = n,
                this.canvas = e,
                this.device = new r(e),
                this._camera = {
                    a: 1,
                    b: 0,
                    c: 0,
                    d: 1,
                    tx: 0,
                    ty: 0
                },
                this._handle = new i.RenderComponentHandle(this.device,this._camera),
                this._forward = new i.ForwardRenderer,
                this._flow = cc.RenderFlow,
                this._flow.init(this._handle, this._forward)
            },
            updateCameraViewport: function() {
                if (cc.director) {
                    var t = cc.director.getScene();
                    t && t.setScale(1, 1, 1)
                }
                if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
                    var e = cc.view.getViewportRect();
                    this.device.setViewport(e.x, e.y, e.width, e.height),
                    this._camera.a = cc.view.getScaleX(),
                    this._camera.d = cc.view.getScaleY(),
                    this._camera.tx = e.x,
                    this._camera.ty = e.y + e.height
                }
            },
            render: function(t, e) {
                this.device.resetDrawCalls(),
                t && (this._flow.render(t, e),
                this.drawCalls = this.device.getDrawCalls())
            },
            clear: function() {
                this._handle.reset(),
                this._forward.clear()
            }
        };
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../../renderer/core/input-assembler": 305,
        "../../renderer/core/pass": 306,
        "../../renderer/gfx": 315,
        "../../renderer/renderers/forward-renderer": 334,
        "../../renderer/scene/scene": 337,
        "./canvas": void 0,
        "./canvas/Device": 222,
        "./canvas/Texture2D": 223,
        "./webgl/assemblers": 236,
        "./webgl/model-batcher": 252
    }],
    225: [(function(t, e) {
        "use strict";
        var i, n, r = 0, s = 1 << r++, a = 1 << r++, o = 1 << r++, l = 1 << r++, h = o | l, c = 1 << r++, u = 1 << r++, _ = 1 << r++, f = u | _, d = 1 << r++, p = 1 << r++, m = 1 << r++, y = 1 << r++, v = 0;
        function g() {
            this._func = S,
            this._next = null
        }
        var A = g.prototype;
        A._doNothing = function() {}
        ,
        A._localTransform = function(t) {
            t._updateLocalMatrix(),
            t._renderFlag &= ~o,
            this._next._func(t)
        }
        ,
        A._worldTransform = function(t) {
            i.worldMatDirty++;
            var e = t._matrix
              , n = t._trs
              , r = e.m;
            r[12] = n[0],
            r[13] = n[1],
            r[14] = n[2],
            t._mulMat(t._worldMatrix, t._parent._worldMatrix, e),
            t._renderFlag &= ~l,
            this._next._func(t),
            i.worldMatDirty--
        }
        ,
        A._opacity = function(t) {
            i.parentOpacityDirty++,
            this._next._func(t),
            t._renderFlag &= ~u,
            i.parentOpacityDirty--
        }
        ,
        A._color = function(t) {
            var e = t._renderComponent;
            e && e._updateColor(),
            t._renderFlag &= ~_,
            this._next._func(t)
        }
        ,
        A._updateRenderData = function(t) {
            var e = t._renderComponent;
            e._assembler.updateRenderData(e),
            t._renderFlag &= ~c,
            this._next._func(t)
        }
        ,
        A._render = function(t) {
            var e = t._renderComponent;
            e._checkBacth(i, t._cullingMask),
            e._assembler.fillBuffers(e, i),
            this._next._func(t)
        }
        ,
        A._children = function(t) {
            for (var e = v, n = i, r = n.parentOpacity, s = n.parentOpacity *= t._opacity / 255, a = (n.worldMatDirty ? l : 0) | (n.parentOpacityDirty ? f : 0), o = t._children, h = 0, c = o.length; h < c; h++) {
                var u = o[h];
                if (u._renderFlag |= a,
                u._activeInHierarchy && 0 !== u._opacity) {
                    v = u._cullingMask = 0 === u.groupIndex ? e : 1 << u.groupIndex;
                    var _ = u._color._val;
                    u._color._fastSetA(u._opacity * s),
                    b[u._renderFlag]._func(u),
                    u._color._val = _
                }
            }
            n.parentOpacity = r,
            this._next._func(t)
        }
        ,
        A._postRender = function(t) {
            var e = t._renderComponent;
            e._checkBacth(i, t._cullingMask),
            e._assembler.postFillBuffers(e, i),
            this._next._func(t)
        }
        ;
        var x = new g;
        x._func = x._doNothing,
        x._next = x;
        var b = {};
        function C(t, e) {
            var i = new g;
            switch (i._next = e || x,
            t) {
            case s:
            case a:
                i._func = i._doNothing;
                break;
            case o:
                i._func = i._localTransform;
                break;
            case l:
                i._func = i._worldTransform;
                break;
            case u:
                i._func = i._opacity;
                break;
            case _:
                i._func = i._color;
                break;
            case c:
                i._func = i._updateRenderData;
                break;
            case d:
                i._func = i._render;
                break;
            case p:
                i._func = i._children;
                break;
            case m:
                i._func = i._postRender
            }
            return i
        }
        function T(t) {
            for (var e = null, i = y; i > 0; )
                i & t && (e = C(i, e)),
                i >>= 1;
            return e
        }
        function S(t) {
            var e = t._renderFlag;
            (b[e] = T(e))._func(t)
        }
        g.flows = b,
        g.createFlow = C;
        var w = [];
        g.registerValidate = function(t) {
            t._inValidateList || (w.push(t),
            t._inValidateList = !0)
        }
        ,
        g.validateRenderers = function() {
            for (var t = 0, e = w.length; t < e; t++) {
                var i = w[t];
                i.isValid && (i.enabledInHierarchy ? i._validateRender() : i.disableRender(),
                i._inValidateList = !1)
            }
            w.length = 0
        }
        ,
        g.visitRootNode = function(t) {
            g.validateRenderers();
            var e = v;
            v = t._cullingMask,
            t._renderFlag & l ? (i.worldMatDirty++,
            t._calculWorldMatrix(),
            t._renderFlag &= ~l,
            b[t._renderFlag]._func(t),
            i.worldMatDirty--) : b[t._renderFlag]._func(t),
            v = e
        }
        ,
        g.render = function(t, e) {
            i.reset(),
            i.walking = !0,
            g.visitRootNode(t),
            i.terminate(),
            i.walking = !1,
            n.render(i._renderScene, e)
        }
        ,
        g.renderCamera = function(t, e) {
            i.reset(),
            i.walking = !0,
            g.visitRootNode(e),
            i.terminate(),
            i.walking = !1,
            n.renderCamera(t, i._renderScene)
        }
        ,
        g.init = function(t, e) {
            i = t,
            n = e,
            b[0] = x;
            for (var r = 1; r < y; r++)
                b[r] = new g
        }
        ,
        g.getBachther = function() {
            return i
        }
        ,
        g.FLAG_DONOTHING = s,
        g.FLAG_BREAK_FLOW = a,
        g.FLAG_LOCAL_TRANSFORM = o,
        g.FLAG_WORLD_TRANSFORM = l,
        g.FLAG_TRANSFORM = h,
        g.FLAG_OPACITY = u,
        g.FLAG_COLOR = _,
        g.FLAG_OPACITY_COLOR = f,
        g.FLAG_UPDATE_RENDER_DATA = c,
        g.FLAG_RENDER = d,
        g.FLAG_CHILDREN = p,
        g.FLAG_POST_RENDER = m,
        g.FLAG_FINAL = y,
        e.exports = cc.RenderFlow = g
    }
    ), {}],
    226: [(function(t, e) {
        "use strict";
        var i = t("../../../assets/CCRenderTexture")
          , n = 2;
        function r(t, e) {
            var r = new i;
            r.initWithSize(t, e),
            r.update(),
            this._texture = r,
            this._x = n,
            this._y = n,
            this._nexty = n,
            this._width = t,
            this._height = e,
            this._innerTextureInfos = {},
            this._innerSpriteFrames = [],
            this._count = 0
        }
        r.DEFAULT_HASH = (new i)._getHash(),
        cc.js.mixin(r.prototype, {
            insertSpriteFrame: function(t) {
                var e = t._rect
                  , i = t._texture
                  , r = this._innerTextureInfos[i._id]
                  , s = e.x
                  , a = e.y;
                if (r)
                    s += r.x,
                    a += r.y;
                else {
                    var o = i.width
                      , l = i.height;
                    if (this._x + o + n > this._width && (this._x = n,
                    this._y = this._nexty),
                    this._y + l + n > this._nexty && (this._nexty = this._y + l + n),
                    this._nexty > this._height)
                        return null;
                    cc.dynamicAtlasManager.textureBleeding && ((o <= 8 || l <= 8) && (this._texture.drawTextureAt(i, this._x - 1, this._y - 1),
                    this._texture.drawTextureAt(i, this._x - 1, this._y + 1),
                    this._texture.drawTextureAt(i, this._x + 1, this._y - 1),
                    this._texture.drawTextureAt(i, this._x + 1, this._y + 1)),
                    this._texture.drawTextureAt(i, this._x - 1, this._y),
                    this._texture.drawTextureAt(i, this._x + 1, this._y),
                    this._texture.drawTextureAt(i, this._x, this._y - 1),
                    this._texture.drawTextureAt(i, this._x, this._y + 1)),
                    this._texture.drawTextureAt(i, this._x, this._y),
                    this._innerTextureInfos[i._id] = {
                        x: this._x,
                        y: this._y,
                        texture: i
                    },
                    this._count++,
                    s += this._x,
                    a += this._y,
                    this._x += o + n,
                    this._dirty = !0
                }
                var h = {
                    x: s,
                    y: a,
                    texture: this._texture
                };
                return this._innerSpriteFrames.push(t),
                h
            },
            update: function() {
                this._dirty && (this._texture.update(),
                this._dirty = !1)
            },
            deleteInnerTexture: function(t) {
                t && this._innerTextureInfos[t._id] && (delete this._innerTextureInfos[t._id],
                this._count--)
            },
            isEmpty: function() {
                return this._count <= 0
            },
            reset: function() {
                this._x = n,
                this._y = n,
                this._nexty = n;
                for (var t = this._innerSpriteFrames, e = 0, i = t.length; e < i; e++) {
                    var r = t[e];
                    r.isValid && r._resetDynamicAtlasFrame()
                }
                this._innerSpriteFrames.length = 0,
                this._innerTextureInfos = {}
            },
            destroy: function() {
                this.reset(),
                this._texture.destroy()
            }
        }),
        e.exports = r
    }
    ), {
        "../../../assets/CCRenderTexture": 70
    }],
    227: [(function(t, e) {
        "use strict";
        var i = t("./atlas")
          , n = []
          , r = -1
          , s = 5
          , a = 2048
          , o = 512
          , l = !0;
        function h() {
            var t = n[++r];
            return t || (t = new i(a,a),
            n.push(t)),
            t
        }
        function c() {
            _.reset()
        }
        var u = !1
          , _ = {
            Atlas: i,
            get enabled() {
                return u
            },
            set enabled(t) {
                u !== t && (t ? (this.reset(),
                cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, c)) : cc.director.off(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, c),
                u = t)
            },
            get maxAtlasCount() {
                return s
            },
            set maxAtlasCount(t) {
                s = t
            },
            get atlasCount() {
                return n.length
            },
            get textureBleeding() {
                return l
            },
            set textureBleeding(t) {
                l = t
            },
            get textureSize() {
                return a
            },
            set textureSize(t) {
                a = t
            },
            get maxFrameSize() {
                return o
            },
            set maxFrameSize(t) {
                o = t
            },
            insertSpriteFrame: function(t) {
                if (!u || r === s || !t || t._original)
                    return null;
                if (!t._texture.packable)
                    return null;
                var e = n[r];
                e || (e = h());
                var i = e.insertSpriteFrame(t);
                return i || r === s ? i : (e = h()).insertSpriteFrame(t)
            },
            reset: function() {
                for (var t = 0, e = n.length; t < e; t++)
                    n[t].destroy();
                n.length = 0,
                r = -1
            },
            deleteAtlasSpriteFrame: function(t) {
                if (t._original) {
                    var e = t._original._texture;
                    this.deleteAtlasTexture(e)
                }
            },
            deleteAtlasTexture: function(t) {
                if (t)
                    for (var e = n.length - 1; e >= 0; e--)
                        n[e].deleteInnerTexture(t),
                        n[e].isEmpty() && (n[e].destroy(),
                        n.splice(e, 1),
                        r--)
            },
            showDebug: !1,
            update: function() {
                if (this.enabled)
                    for (var t = 0; t <= r; t++)
                        n[t].update()
            }
        };
        e.exports = cc.dynamicAtlasManager = _
    }
    ), {
        "./atlas": 226
    }],
    228: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../assembler-2d")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("../../../utils/text-utils")
          , o = t("../../../platform/CCMacro")
          , l = t("../../../components/CCLabel").Overflow
          , h = t("../utils").shareLabelInfo
          , c = function() {
            this.char = "",
            this.valid = !0,
            this.x = 0,
            this.y = 0,
            this.line = 0,
            this.hash = ""
        }
          , u = cc.rect()
          , _ = null
          , f = []
          , d = []
          , p = []
          , m = []
          , y = null
          , v = 0
          , g = 0
          , A = 0
          , x = 0
          , b = 0
          , C = 1
          , T = null
          , S = cc.size()
          , w = ""
          , E = 0
          , M = 0
          , D = 0
          , B = 0
          , I = 0
          , P = 0
          , R = 0
          , O = !1
          , L = 0
          , F = 0
          , V = 0
          , N = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.updateRenderData = function(t) {
                t._vertsDirty && _ !== t && (_ = t,
                this._reserveQuads(t, t.string.toString().length),
                this._updateFontFamily(t),
                this._updateProperties(t),
                this._updateLabelInfo(t),
                this._updateContent(),
                this.updateWorldVerts(t),
                _._actualFontSize = E,
                _.node.setContentSize(S),
                _._vertsDirty = !1,
                _ = null,
                this._resetProperties())
            }
            ,
            r._updateFontScale = function() {
                C = E / M
            }
            ,
            r._updateFontFamily = function(t) {
                var e = t.font;
                T = e.spriteFrame,
                y = e._fntConfig,
                h.fontAtlas = e._fontDefDictionary,
                this.packToDynamicAtlas(t, T)
            }
            ,
            r._updateLabelInfo = function() {
                h.hash = "",
                h.margin = 0
            }
            ,
            r._updateProperties = function(t) {
                w = t.string.toString(),
                E = t.fontSize,
                M = y ? y.fontSize : t.fontSize,
                D = t.horizontalAlign,
                B = t.verticalAlign,
                I = t.spacingX,
                R = t.overflow,
                P = t._lineHeight,
                S.width = t.node.width,
                S.height = t.node.height,
                R === l.NONE ? (O = !1,
                S.width += 2 * h.margin,
                S.height += 2 * h.margin) : R === l.RESIZE_HEIGHT ? (O = !0,
                S.height += 2 * h.margin) : O = t.enableWrapText,
                h.lineHeight = P,
                h.fontSize = E,
                this._setupBMFontOverflowMetrics()
            }
            ,
            r._resetProperties = function() {
                y = null,
                T = null,
                h.hash = "",
                h.margin = 0
            }
            ,
            r._updateContent = function() {
                this._updateFontScale(),
                this._computeHorizontalKerningForText(),
                this._alignText()
            }
            ,
            r._computeHorizontalKerningForText = function() {
                var t, e = w, i = e.length, n = f;
                if (y && (t = y.kerningDict),
                t && !cc.js.isEmptyObject(t))
                    for (var r = -1, s = 0; s < i; ++s) {
                        var a = e.charCodeAt(s)
                          , o = t[r << 16 | 65535 & a] || 0;
                        n[s] = s < i - 1 ? o : 0,
                        r = a
                    }
                else
                    n.length = 0
            }
            ,
            r._multilineTextWrap = function(t) {
                for (var e = w.length, i = 0, n = 0, r = 0, s = 0, o = 0, c = 0, u = 0, _ = null, d = cc.v2(0, 0), m = 0; m < e; ) {
                    var A = w.charAt(m);
                    if ("\n" !== A) {
                        for (var T = t(w, m, e), E = c, M = u, D = o, B = n, N = !1, k = 0; k < T; ++k) {
                            var G = m + k;
                            if ("\r" !== (A = w.charAt(G)))
                                if (_ = h.fontAtlas.getLetterDefinitionForChar(A, h)) {
                                    var U = B + _.offsetX * C - h.margin;
                                    if (O && V > 0 && n > 0 && U + _.w * C > V && !a.isUnicodeSpace(A)) {
                                        p.push(o),
                                        o = 0,
                                        i++,
                                        n = 0,
                                        r -= P * this._getFontScale() + 0,
                                        N = !0;
                                        break
                                    }
                                    d.x = U,
                                    d.y = r - _.offsetY * C + h.margin,
                                    this._recordLetterInfo(d, A, G, i),
                                    G + 1 < f.length && G < e - 1 && (B += f[G + 1]),
                                    B += _.xAdvance * C + I - 2 * h.margin,
                                    D = d.x + _.w * C - h.margin,
                                    E < d.y && (E = d.y),
                                    M > d.y - _.h * C && (M = d.y - _.h * C)
                                } else {
                                    this._recordPlaceholderInfo(G, A);
                                    var z = "";
                                    y && (z = y.atlasName),
                                    console.log("Can't find letter definition in texture atlas " + z + " for letter:" + A)
                                }
                            else
                                this._recordPlaceholderInfo(G, A)
                        }
                        N || (n = B,
                        c < E && (c = E),
                        u > M && (u = M),
                        s < (o = D) && (s = o),
                        m += T)
                    } else
                        p.push(o),
                        o = 0,
                        i++,
                        n = 0,
                        r -= P * this._getFontScale() + 0,
                        this._recordPlaceholderInfo(m, A),
                        m++
                }
                return p.push(o),
                g = (v = i + 1) * P * this._getFontScale(),
                v > 1 && (g += 0 * (v - 1)),
                S.width = L,
                S.height = F,
                L <= 0 && (S.width = parseFloat(s.toFixed(2)) + 2 * h.margin),
                F <= 0 && (S.height = parseFloat(g.toFixed(2)) + 2 * h.margin),
                x = S.height,
                b = 0,
                R !== l.CLAMP && (c > 0 && (x = S.height + c),
                u < -g && (b = g + u)),
                !0
            }
            ,
            r._getFirstCharLen = function() {
                return 1
            }
            ,
            r._getFontScale = function() {
                return R === l.SHRINK ? C : 1
            }
            ,
            r._getFirstWordLen = function(t, e, i) {
                var n = t.charAt(e);
                if (a.isUnicodeCJK(n) || "\n" === n || a.isUnicodeSpace(n))
                    return 1;
                var r = 1
                  , s = h.fontAtlas.getLetterDefinitionForChar(n, h);
                if (!s)
                    return r;
                for (var o = s.xAdvance * C + I, l = e + 1; l < i && (n = t.charAt(l),
                s = h.fontAtlas.getLetterDefinitionForChar(n, h)); ++l) {
                    if (o + s.offsetX * C + s.w * C > V && !a.isUnicodeSpace(n) && V > 0)
                        return r;
                    if (o += s.xAdvance * C + I,
                    "\n" === n || a.isUnicodeSpace(n) || a.isUnicodeCJK(n))
                        break;
                    r++
                }
                return r
            }
            ,
            r._multilineTextWrapByWord = function() {
                return this._multilineTextWrap(this._getFirstWordLen)
            }
            ,
            r._multilineTextWrapByChar = function() {
                return this._multilineTextWrap(this._getFirstCharLen)
            }
            ,
            r._recordPlaceholderInfo = function(t, e) {
                if (t >= d.length) {
                    var i = new c;
                    d.push(i)
                }
                d[t].char = e,
                d[t].hash = e.charCodeAt(0) + h.hash,
                d[t].valid = !1
            }
            ,
            r._recordLetterInfo = function(t, e, i, n) {
                if (i >= d.length) {
                    var r = new c;
                    d.push(r)
                }
                var s = e.charCodeAt(0) + h.hash;
                d[i].line = n,
                d[i].char = e,
                d[i].hash = s,
                d[i].valid = h.fontAtlas.getLetter(s).valid,
                d[i].x = t.x,
                d[i].y = t.y
            }
            ,
            r._alignText = function() {
                g = 0,
                p.length = 0,
                this._multilineTextWrapByWord(),
                this._computeAlignmentOffset(),
                R === l.SHRINK && E > 0 && this._isVerticalClamp() && this._shrinkLabelToContentSize(this._isVerticalClamp),
                this._updateQuads() || R === l.SHRINK && this._shrinkLabelToContentSize(this._isHorizontalClamp)
            }
            ,
            r._scaleFontSizeDown = function(t) {
                var e = !0;
                t || (t = .1,
                e = !1),
                E = t,
                e && this._updateContent()
            }
            ,
            r._shrinkLabelToContentSize = function(t) {
                for (var e = 0, i = 0 | E, n = 0; e < i; ) {
                    var r = n = e + i + 1 >> 1;
                    if (r <= 0)
                        break;
                    C = r / M,
                    this._multilineTextWrapByWord(),
                    this._computeAlignmentOffset(),
                    t() ? i = n - 1 : e = n
                }
                var s = e;
                s >= 0 && this._scaleFontSizeDown(s)
            }
            ,
            r._isVerticalClamp = function() {
                return g > S.height
            }
            ,
            r._isHorizontalClamp = function() {
                for (var t = !1, e = 0, i = w.length; e < i; ++e) {
                    var n = d[e];
                    if (n.valid) {
                        var r = h.fontAtlas.getLetter(n.hash)
                          , s = n.x + r.w * C
                          , a = n.line;
                        if (L > 0)
                            if (O) {
                                if (p[a] > S.width && (s > S.width || s < 0)) {
                                    t = !0;
                                    break
                                }
                            } else if (s > S.width) {
                                t = !0;
                                break
                            }
                    }
                }
                return t
            }
            ,
            r._isHorizontalClamped = function(t, e) {
                var i = p[e]
                  , n = t > S.width || t < 0;
                return O ? i > S.width && n : n
            }
            ,
            r._updateQuads = function() {
                var t = T ? T._texture : h.fontAtlas.getTexture()
                  , e = _.node;
                this.verticesCount = this.indicesCount = 0,
                this._renderData && (this._renderData.dataLength = 0);
                for (var i = S, n = e._anchorPoint.x * i.width, r = e._anchorPoint.y * i.height, s = !0, a = 0, o = w.length; a < o; ++a) {
                    var c = d[a];
                    if (c.valid) {
                        var f = h.fontAtlas.getLetter(c.hash);
                        u.height = f.h,
                        u.width = f.w,
                        u.x = f.u,
                        u.y = f.v;
                        var p = c.y + A;
                        if (F > 0) {
                            if (p > x) {
                                var y = p - x;
                                u.y += y,
                                u.height -= y,
                                p -= y
                            }
                            p - f.h * C < b && R === l.CLAMP && (u.height = p < b ? 0 : (p - b) / C)
                        }
                        var v = c.line
                          , g = c.x + f.w / 2 * C + m[v];
                        if (L > 0 && this._isHorizontalClamped(g, v))
                            if (R === l.CLAMP)
                                u.width = 0;
                            else if (R === l.SHRINK) {
                                if (S.width > f.w) {
                                    s = !1;
                                    break
                                }
                                u.width = 0
                            }
                        if (u.height > 0 && u.width > 0) {
                            var E = this._determineRect(u)
                              , M = c.x + m[c.line];
                            this.appendQuad(_, t, u, E, M - n, p - r, C)
                        }
                    }
                }
                return this._quadsUpdated(_),
                s
            }
            ,
            r._determineRect = function(t) {
                var e = T.isRotated()
                  , i = T._originalSize
                  , n = T._rect
                  , r = T._offset
                  , s = r.x + (i.width - n.width) / 2
                  , a = r.y - (i.height - n.height) / 2;
                if (e) {
                    var o = t.x;
                    t.x = n.x + n.height - t.y - t.height - a,
                    t.y = o + n.y - s,
                    t.y < 0 && (t.height = t.height + a)
                } else
                    t.x += n.x - s,
                    t.y += n.y + a;
                return e
            }
            ,
            r._computeAlignmentOffset = function() {
                switch (m.length = 0,
                D) {
                case o.TextAlignment.LEFT:
                    for (var t = 0; t < v; ++t)
                        m.push(0);
                    break;
                case o.TextAlignment.CENTER:
                    for (var e = 0, i = p.length; e < i; e++)
                        m.push((S.width - p[e]) / 2);
                    break;
                case o.TextAlignment.RIGHT:
                    for (var n = 0, r = p.length; n < r; n++)
                        m.push(S.width - p[n])
                }
                if (A = S.height,
                B !== o.VerticalTextAlignment.TOP) {
                    var s = S.height - g + P * this._getFontScale() - M * C;
                    B === o.VerticalTextAlignment.BOTTOM ? A -= s : A -= s / 2
                }
            }
            ,
            r._setupBMFontOverflowMetrics = function() {
                var t = S.width
                  , e = S.height;
                R === l.RESIZE_HEIGHT && (e = 0),
                R === l.NONE && (t = 0,
                e = 0),
                L = t,
                F = e,
                V = t
            }
            ,
            r.updateWorldVerts = function() {}
            ,
            r.appendQuad = function() {}
            ,
            r._quadsUpdated = function() {}
            ,
            r._reserveQuads = function() {}
            ,
            n
        }
        )(r.default);
        i.default = N,
        e.exports = i.default
    }
    ), {
        "../../../components/CCLabel": 107,
        "../../../platform/CCMacro": 198,
        "../../../utils/text-utils": 274,
        "../../assembler-2d": 219,
        "../utils": 232
    }],
    229: [(function(t, e) {
        "use strict";
        function i() {
            this._rect = null,
            this.uv = [],
            this._texture = null,
            this._original = null
        }
        i.prototype = {
            constructor: i,
            getRect: function() {
                return cc.rect(this._rect)
            },
            setRect: function(t) {
                this._rect = t,
                this._texture && this._calculateUV()
            },
            _setDynamicAtlasFrame: function(t) {
                t && (this._original = {
                    _texture: this._texture,
                    _x: this._rect.x,
                    _y: this._rect.y
                },
                this._texture = t.texture,
                this._rect.x = t.x,
                this._rect.y = t.y,
                this._calculateUV())
            },
            _resetDynamicAtlasFrame: function() {
                this._original && (this._rect.x = this._original._x,
                this._rect.y = this._original._y,
                this._texture = this._original._texture,
                this._original = null,
                this._calculateUV())
            },
            _refreshTexture: function(t) {
                this._texture = t,
                this._rect = cc.rect(0, 0, t.width, t.height),
                this._calculateUV()
            },
            _calculateUV: function() {
                var t = this._rect
                  , e = this._texture
                  , i = this.uv
                  , n = e.width
                  , r = e.height
                  , s = 0 === n ? 0 : t.x / n
                  , a = 0 === n ? 0 : (t.x + t.width) / n
                  , o = 0 === r ? 0 : (t.y + t.height) / r
                  , l = 0 === r ? 0 : t.y / r;
                i[0] = s,
                i[1] = o,
                i[2] = a,
                i[3] = o,
                i[4] = s,
                i[5] = l,
                i[6] = a,
                i[7] = l
            }
        },
        e.exports = i
    }
    ), {}],
    230: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../webgl/assemblers/label/2d/bmfont")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("../../../components/CCLabel")
          , o = t("../../../components/CCLabelOutline")
          , l = t("../../../utils/text-utils")
          , h = t("../../../components/CCComponent")
          , c = t("../../../assets/CCRenderTexture")
          , u = cc.js.isChildClassOf(o, h)
          , _ = t("../utils").getFontFamily
          , f = t("../utils").shareLabelInfo
          , d = cc.BitmapFont.FontLetterDefinition
          , p = cc.BitmapFont.FontAtlas
          , m = cc.Color.WHITE
          , y = 0
          , v = (1 / 255).toFixed(3);
        function g(t, e) {
            this._texture = null,
            this._labelInfo = e,
            this._char = t,
            this._hash = null,
            this._data = null,
            this._canvas = null,
            this._context = null,
            this._width = 0,
            this._height = 0,
            this._offsetY = 0,
            this._hash = t.charCodeAt(0) + e.hash
        }
        function A(t, e) {
            var i = new c;
            i.initWithSize(t, e),
            i.update(),
            this._fontDefDictionary = new p(i),
            this._x = y,
            this._y = y,
            this._nexty = y,
            this._width = t,
            this._height = e,
            cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, this.beforeSceneLoad, this)
        }
        g.prototype = {
            constructor: g,
            updateRenderData: function() {
                this._updateProperties(),
                this._updateTexture()
            },
            _updateProperties: function() {
                this._texture = new cc.Texture2D,
                this._data = a._canvasPool.get(),
                this._canvas = this._data.canvas,
                this._context = this._data.context,
                this._context.font = this._labelInfo.fontDesc;
                var t = l.safeMeasureText(this._context, this._char, this._labelInfo.fontDesc)
                  , e = 2 * this._labelInfo.margin + 2;
                this._width = parseFloat(t.toFixed(2)) + e,
                this._height = (1 + l.BASELINE_RATIO) * this._labelInfo.fontSize + e,
                this._offsetY = -this._labelInfo.fontSize * l.BASELINE_RATIO / 2,
                this._canvas.width !== this._width && (this._canvas.width = this._width),
                this._canvas.height !== this._height && (this._canvas.height = this._height),
                this._texture.initWithElement(this._canvas)
            },
            _updateTexture: function() {
                var t = this._context
                  , e = this._labelInfo
                  , i = this._canvas.width
                  , n = this._canvas.height
                  , r = this._labelInfo.fontSize
                  , s = i / 2
                  , a = n / 2 + r * l.MIDDLE_RATIO + r * l.BASELINE_OFFSET
                  , o = e.color;
                if (t.lineJoin = "round",
                t.textAlign = "center",
                t.clearRect(0, 0, i, n),
                t.fillStyle = "rgba(" + o.r + ", " + o.g + ", " + o.b + ", " + v + ")",
                t.fillRect(0, 0, i, n),
                t.font = e.fontDesc,
                t.fillStyle = "rgba(" + o.r + ", " + o.g + ", " + o.b + ", 1)",
                e.isOutlined && e.margin > 0) {
                    var h = e.out || m;
                    t.strokeStyle = "rgba(" + h.r + ", " + h.g + ", " + h.b + ", " + h.a / 255 + ")",
                    t.lineWidth = 2 * e.margin,
                    t.strokeText(this._char, s, a)
                }
                t.fillText(this._char, s, a),
                this._texture.handleLoadedTexture()
            },
            destroy: function() {
                this._texture.destroy(),
                this._texture = null,
                a._canvasPool.put(this._data)
            }
        },
        cc.js.mixin(A.prototype, {
            insertLetterTexture: function(t) {
                var e = t._texture
                  , i = e.width
                  , n = e.height;
                if (this._x + i + y > this._width && (this._x = y,
                this._y = this._nexty),
                this._y + n > this._nexty && (this._nexty = this._y + n + y),
                this._nexty > this._height)
                    return null;
                this._fontDefDictionary._texture.drawTextureAt(e, this._x, this._y),
                this._dirty = !0;
                var r = new d;
                return r.u = this._x + 1,
                r.v = this._y + 1,
                r.texture = this._fontDefDictionary._texture,
                r.valid = !0,
                r.w = t._width - 2,
                r.h = t._height - 2,
                r.xAdvance = r.w,
                r.offsetY = t._offsetY,
                this._x += i + y,
                this._fontDefDictionary.addLetterDefinitions(t._hash, r),
                r
            },
            update: function() {
                this._dirty && (this._fontDefDictionary._texture.update(),
                this._dirty = !1)
            },
            reset: function() {
                this._x = y,
                this._y = y,
                this._nexty = y;
                for (var t = this._fontDefDictionary._letterDefinitions, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    n.isValid && n.destroy()
                }
                this._fontDefDictionary.clear()
            },
            destroy: function() {
                this.reset(),
                this._fontDefDictionary._texture.destroy(),
                this._fontDefDictionary._texture = null
            },
            beforeSceneLoad: function() {
                this.clearAllCache()
            },
            clearAllCache: function() {
                this.destroy();
                var t = new c;
                t.initWithSize(this._width, this._height),
                t.update(),
                this._fontDefDictionary._texture = t
            },
            getLetter: function(t) {
                return this._fontDefDictionary._letterDefinitions[t]
            },
            getTexture: function() {
                return this._fontDefDictionary.getTexture()
            },
            getLetterDefinitionForChar: function(t, e) {
                var i = t.charCodeAt(0) + e.hash
                  , n = this._fontDefDictionary._letterDefinitions[i];
                if (!n) {
                    var r = new g(t,e);
                    r.updateRenderData(),
                    n = this.insertLetterTexture(r),
                    r.destroy()
                }
                return n
            }
        });
        var x = null
          , b = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r._getAssemblerData = function() {
                return x || (x = new A(2048,2048),
                cc.Label._shareAtlas = x),
                x.getTexture()
            }
            ,
            r._updateFontFamily = function(t) {
                f.fontAtlas = x,
                f.fontFamily = _(t);
                var e = u && t.getComponent(o);
                e && e.enabled ? (f.isOutlined = !0,
                f.margin = e.width,
                f.out = e.color.clone(),
                f.out.a = e.color.a * t.node.color.a / 255) : (f.isOutlined = !1,
                f.margin = 0)
            }
            ,
            r._updateLabelInfo = function(t) {
                var e, i, n;
                f.fontDesc = this._getFontDesc(),
                f.color = t.node.color,
                f.hash = (i = (e = f).color.toHEX(),
                n = "",
                e.isOutlined && e.margin > 0 && (n = n + e.margin + e.out.toHEX()),
                "" + e.fontSize + e.fontFamily + i + n)
            }
            ,
            r._getFontDesc = function() {
                return f.fontSize.toString() + "px " + f.fontFamily
            }
            ,
            r._computeHorizontalKerningForText = function() {}
            ,
            r._determineRect = function() {
                return !1
            }
            ,
            n
        }
        )(r.default);
        i.default = b,
        e.exports = i.default
    }
    ), {
        "../../../assets/CCRenderTexture": 70,
        "../../../components/CCComponent": 105,
        "../../../components/CCLabel": 107,
        "../../../components/CCLabelOutline": 108,
        "../../../utils/text-utils": 274,
        "../../webgl/assemblers/label/2d/bmfont": 237,
        "../utils": 232
    }],
    231: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../assembler-2d")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a, o = t("../../../utils/text-utils"), l = t("../../../platform/CCMacro"), h = t("../../../components/CCLabel"), c = t("../../../components/CCLabelOutline"), u = t("../../../components/CCLabelShadow"), _ = h.Overflow, f = t("../utils").deleteFromDynamicAtlas, d = t("../utils").getFontFamily, p = (1 / 255).toFixed(3), m = null, y = null, v = null, g = "", A = "", x = 0, b = 0, C = [], T = cc.Size.ZERO, S = 0, w = 0, E = 0, M = null, D = "", B = _.NONE, I = !1, P = !1, R = null, O = cc.Color.WHITE, L = null, F = cc.Color.BLACK, V = cc.rect(), N = cc.Size.ZERO, k = cc.Size.ZERO, G = !1, U = !1, z = !1, H = 0, W = cc.Vec2.ZERO, j = 0, X = ["left", "center", "right"], Y = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r._getAssemblerData = function() {
                return (a = h._canvasPool.get()).canvas.width = a.canvas.height = 1,
                a
            }
            ,
            r._resetAssemblerData = function(t) {
                t && h._canvasPool.put(t)
            }
            ,
            r.updateRenderData = function(e) {
                t.prototype.updateRenderData.call(this, e),
                e._vertsDirty && (this._updateProperties(e),
                this._calculateLabelFont(),
                this._updateLabelDimensions(),
                this._updateTexture(e),
                this._calDynamicAtlas(e),
                e._actualFontSize = x,
                e.node.setContentSize(k),
                this.updateVerts(e),
                e._vertsDirty = !1,
                m = null,
                y = null,
                v = null)
            }
            ,
            r.updateVerts = function() {}
            ,
            r._updatePaddingRect = function() {
                var t = 0
                  , e = 0
                  , i = 0
                  , n = 0
                  , r = 0;
                if (N.width = N.height = 0,
                R && (t = e = i = n = r = R.width,
                N.width = N.height = 2 * r),
                L) {
                    var s = L.blur + r;
                    i = Math.max(i, -L._offset.x + s),
                    n = Math.max(n, L._offset.x + s),
                    t = Math.max(t, L._offset.y + s),
                    e = Math.max(e, -L._offset.y + s)
                }
                if (U) {
                    var a = b * Math.tan(.20943951);
                    n += a,
                    N.width += a
                }
                V.x = i,
                V.y = t,
                V.width = i + n,
                V.height = t + e
            }
            ,
            r._updateProperties = function(t) {
                var e = t._assemblerData;
                m = e.context,
                y = e.canvas,
                v = t._frame._original ? t._frame._original._texture : t._frame._texture,
                A = t.string.toString(),
                x = t._fontSize,
                b = x,
                H = t.underlineHeight || b / 8,
                B = t.overflow,
                T.width = t.node.width,
                T.height = t.node.height,
                k = t.node.getContentSize(),
                S = t._lineHeight,
                w = t.horizontalAlign,
                E = t.verticalAlign,
                M = t.node.color,
                G = t.enableBold,
                U = t.enableItalic,
                z = t.enableUnderline,
                D = d(t),
                P = t.srcBlendFactor === cc.macro.BlendFactor.ONE,
                I = B !== _.NONE && (B === _.RESIZE_HEIGHT || t.enableWrapText),
                (R = (R = c && t.getComponent(c)) && R.enabled && R.width > 0 ? R : null) && O.set(R.color),
                (L = (L = u && t.getComponent(u)) && L.enabled ? L : null) && (F.set(L.color),
                F.a = F.a * t.node.color.a / 255),
                this._updatePaddingRect()
            }
            ,
            r._calculateFillTextStartPosition = function() {
                var t = 0;
                w === l.TextAlignment.RIGHT ? t = T.width - V.width : w === l.TextAlignment.CENTER && (t = (T.width - V.width) / 2);
                var e = this._getLineHeight() * (C.length - 1)
                  , i = x * (1 - o.BASELINE_RATIO / 2);
                if (E !== l.VerticalTextAlignment.TOP) {
                    var n = e + V.height + x - T.height;
                    E === l.VerticalTextAlignment.BOTTOM ? i -= n += o.BASELINE_RATIO / 2 * x : i -= n / 2
                }
                return i += o.BASELINE_OFFSET * x,
                cc.v2(t + V.x, i + V.y)
            }
            ,
            r._setupOutline = function() {
                m.strokeStyle = "rgba(" + O.r + ", " + O.g + ", " + O.b + ", " + O.a / 255 + ")",
                m.lineWidth = 2 * R.width
            }
            ,
            r._setupShadow = function() {
                m.shadowColor = "rgba(" + F.r + ", " + F.g + ", " + F.b + ", " + F.a / 255 + ")",
                m.shadowBlur = L.blur,
                m.shadowOffsetX = L.offset.x,
                m.shadowOffsetY = -L.offset.y
            }
            ,
            r._drawTextEffect = function(t, e) {
                if (L || R || z) {
                    var i = C.length > 1 && L
                      , n = this._measureText(m, g)
                      , r = 0
                      , s = 0;
                    L && this._setupShadow(),
                    R && this._setupOutline();
                    for (var a = 0; a < C.length; ++a)
                        r = t.x,
                        s = t.y + a * e,
                        i && (R && m.strokeText(C[a], r, s),
                        m.fillText(C[a], r, s)),
                        z && (j = n(C[a]),
                        w === l.TextAlignment.RIGHT ? W.x = t.x - j : w === l.TextAlignment.CENTER ? W.x = t.x - j / 2 : W.x = t.x,
                        W.y = s + b / 8,
                        m.fillRect(W.x, W.y, j, H));
                    i && (m.shadowColor = "transparent")
                }
            }
            ,
            r._updateTexture = function() {
                if (m.clearRect(0, 0, y.width, y.height),
                m.lineJoin = "round",
                P)
                    m.fillStyle = "rgba(" + M.r + ", " + M.g + ", " + M.b + ", " + M.a / 255 + ")";
                else {
                    var t = R ? O : M;
                    m.fillStyle = "rgba(" + t.r + ", " + t.g + ", " + t.b + ", " + p + ")",
                    m.fillRect(0, 0, y.width, y.height),
                    m.fillStyle = "rgba(" + M.r + ", " + M.g + ", " + M.b + ", 1)"
                }
                var e = this._calculateFillTextStartPosition()
                  , i = this._getLineHeight()
                  , n = e.x
                  , r = 0;
                this._drawTextEffect(e, i);
                for (var s = 0; s < C.length; ++s)
                    r = e.y + s * i,
                    R && m.strokeText(C[s], n, r),
                    m.fillText(C[s], n, r);
                L && (m.shadowColor = "transparent"),
                v.handleLoadedTexture()
            }
            ,
            r._calDynamicAtlas = function(t) {
                if (t.cacheMode === h.CacheMode.BITMAP) {
                    var e = t._frame;
                    f(t, e),
                    e._original || e.setRect(cc.rect(0, 0, y.width, y.height)),
                    this.packToDynamicAtlas(t, e)
                }
            }
            ,
            r._updateLabelDimensions = function() {
                T.width = Math.min(T.width, 2048),
                T.height = Math.min(T.height, 2048);
                var t = !1;
                y.width !== T.width && (y.width = T.width,
                t = !0),
                y.height !== T.height && (y.height = T.height,
                t = !0),
                t && (m.font = g),
                m.textAlign = X[w]
            }
            ,
            r._getFontDesc = function() {
                var t = x.toString() + "px ";
                return t += D,
                G && (t = "bold " + t),
                U && (t = "italic " + t),
                t
            }
            ,
            r._getLineHeight = function() {
                return 0 | (0 === S ? x : S * x / b)
            }
            ,
            r._calculateParagraphLength = function(t, e) {
                for (var i = [], n = 0; n < t.length; ++n) {
                    var r = o.safeMeasureText(e, t[n], g);
                    i.push(r)
                }
                return i
            }
            ,
            r._measureText = function(t, e) {
                return function(i) {
                    return o.safeMeasureText(t, i, e)
                }
            }
            ,
            r._calculateShrinkFont = function(t) {
                var e = this._calculateParagraphLength(t, m)
                  , i = 0
                  , n = 0
                  , r = 0;
                if (I) {
                    var s = k.width
                      , a = k.height;
                    if (s < 0 || a < 0)
                        return;
                    n = a + 1;
                    for (var l = 0, h = 0 | x + 1, c = 0; l < h; ) {
                        if ((c = l + h + 1 >> 1) <= 0) {
                            cc.logID(4003);
                            break
                        }
                        x = c,
                        g = this._getFontDesc(),
                        m.font = g;
                        var u = this._getLineHeight();
                        for (n = 0,
                        i = 0; i < t.length; ++i) {
                            var _ = o.safeMeasureText(m, t[i], g);
                            n += o.fragmentText(t[i], _, s, this._measureText(m, g)).length * u
                        }
                        n > a ? h = c - 1 : l = c
                    }
                    0 === l ? cc.logID(4003) : (x = l,
                    g = this._getFontDesc(),
                    m.font = g)
                } else {
                    for (n = t.length * this._getLineHeight(),
                    i = 0; i < t.length; ++i)
                        r < e[i] && (r = e[i]);
                    var f = (T.width - V.width) / r
                      , d = T.height / n;
                    x = b * Math.min(1, f, d) | 0,
                    g = this._getFontDesc(),
                    m.font = g
                }
            }
            ,
            r._calculateWrapText = function(t) {
                if (I) {
                    C = [];
                    for (var e = k.width, i = 0; i < t.length; ++i) {
                        var n = o.safeMeasureText(m, t[i], g)
                          , r = o.fragmentText(t[i], n, e, this._measureText(m, g));
                        C = C.concat(r)
                    }
                }
            }
            ,
            r._calculateLabelFont = function() {
                var t = A.split("\n");
                switch (C = t,
                g = this._getFontDesc(),
                m.font = g,
                B) {
                case _.NONE:
                    for (var e = 0, i = 0, n = 0; n < t.length; ++n) {
                        var r = o.safeMeasureText(m, t[n], g);
                        e = e > r ? e : r
                    }
                    i = (C.length + o.BASELINE_RATIO) * this._getLineHeight();
                    var s = parseFloat(e.toFixed(2))
                      , a = parseFloat(i.toFixed(2));
                    T.width = s + V.width,
                    T.height = a + V.height,
                    k.width = s + N.width,
                    k.height = a + N.height;
                    break;
                case _.SHRINK:
                    this._calculateShrinkFont(t),
                    this._calculateWrapText(t);
                    break;
                case _.CLAMP:
                    this._calculateWrapText(t);
                    break;
                case _.RESIZE_HEIGHT:
                    this._calculateWrapText(t);
                    var l = (C.length + o.BASELINE_RATIO) * this._getLineHeight();
                    T.height = l + V.height,
                    k.height = l + N.height
                }
            }
            ,
            n
        }
        )(r.default);
        i.default = Y,
        e.exports = i.default
    }
    ), {
        "../../../components/CCLabel": 107,
        "../../../components/CCLabelOutline": 108,
        "../../../components/CCLabelShadow": 109,
        "../../../platform/CCMacro": 198,
        "../../../utils/text-utils": 274,
        "../../assembler-2d": 219,
        "../utils": 232
    }],
    232: [(function(t, e) {
        "use strict";
        var i = t("./dynamic-atlas/manager")
          , n = cc.Color.WHITE
          , r = {
            fontAtlas: null,
            fontSize: 0,
            lineHeight: 0,
            hAlign: 0,
            vAlign: 0,
            hash: "",
            fontFamily: "",
            fontDesc: "Arial",
            color: n,
            isOutlined: !1,
            out: n,
            margin: 0
        };
        e.exports = {
            deleteFromDynamicAtlas: function(t, e) {
                e && e._original && i && (i.deleteAtlasSpriteFrame(e),
                e._resetDynamicAtlasFrame())
            },
            getFontFamily: function(t) {
                return t.useSystemFont ? t.fontFamily || "Arial" : t.font ? t.font._nativeAsset ? t.font._nativeAsset : (cc.assetManager.postLoadNative(t.font, (function() {
                    t.isValid && t.setVertsDirty()
                }
                )),
                "Arial") : "Arial"
            },
            shareLabelInfo: r
        }
    }
    ), {
        "./dynamic-atlas/manager": 227
    }],
    233: [(function(t, e) {
        "use strict";
        function i(t, e, i) {
            i = i || 2;
            var r, a, o, l, h, u, _, f = e && e.length, d = f ? e[0] * i : t.length, p = n(t, 0, d, i, !0), m = [];
            if (!p)
                return m;
            if (f && (p = c(t, e, p, i)),
            t.length > 80 * i) {
                r = o = t[0],
                a = l = t[1];
                for (var y = i; y < d; y += i)
                    (h = t[y]) < r && (r = h),
                    (u = t[y + 1]) < a && (a = u),
                    h > o && (o = h),
                    u > l && (l = u);
                _ = Math.max(o - r, l - a)
            }
            return s(p, m, i, r, a, _),
            m
        }
        function n(t, e, i, n, r) {
            var s, a;
            if (r === B(t, e, i, n) > 0)
                for (s = e; s < i; s += n)
                    a = E(s, t[s], t[s + 1], a);
            else
                for (s = i - n; s >= e; s -= n)
                    a = E(s, t[s], t[s + 1], a);
            return a && x(a, a.next) && (M(a),
            a = a.next),
            a
        }
        function r(t, e) {
            if (!t)
                return t;
            e || (e = t);
            var i, n = t;
            do {
                if (i = !1,
                n.steiner || !x(n, n.next) && 0 !== A(n.prev, n, n.next))
                    n = n.next;
                else {
                    if (M(n),
                    (n = e = n.prev) === n.next)
                        return null;
                    i = !0
                }
            } while (i || n !== e);return e
        }
        function s(t, e, i, n, c, u, _) {
            if (t) {
                !_ && u && d(t, n, c, u);
                for (var f, p, m = t; t.prev !== t.next; )
                    if (f = t.prev,
                    p = t.next,
                    u ? o(t, n, c, u) : a(t))
                        e.push(f.i / i),
                        e.push(t.i / i),
                        e.push(p.i / i),
                        M(t),
                        t = p.next,
                        m = p.next;
                    else if ((t = p) === m) {
                        _ ? 1 === _ ? s(t = l(t, e, i), e, i, n, c, u, 2) : 2 === _ && h(t, e, i, n, c, u) : s(r(t), e, i, n, c, u, 1);
                        break
                    }
            }
        }
        function a(t) {
            var e = t.prev
              , i = t
              , n = t.next;
            if (A(e, i, n) >= 0)
                return !1;
            for (var r = t.next.next; r !== t.prev; ) {
                if (v(e.x, e.y, i.x, i.y, n.x, n.y, r.x, r.y) && A(r.prev, r, r.next) >= 0)
                    return !1;
                r = r.next
            }
            return !0
        }
        function o(t, e, i, n) {
            var r = t.prev
              , s = t
              , a = t.next;
            if (A(r, s, a) >= 0)
                return !1;
            for (var o = r.x < s.x ? r.x < a.x ? r.x : a.x : s.x < a.x ? s.x : a.x, l = r.y < s.y ? r.y < a.y ? r.y : a.y : s.y < a.y ? s.y : a.y, h = r.x > s.x ? r.x > a.x ? r.x : a.x : s.x > a.x ? s.x : a.x, c = r.y > s.y ? r.y > a.y ? r.y : a.y : s.y > a.y ? s.y : a.y, u = m(o, l, e, i, n), _ = m(h, c, e, i, n), f = t.nextZ; f && f.z <= _; ) {
                if (f !== t.prev && f !== t.next && v(r.x, r.y, s.x, s.y, a.x, a.y, f.x, f.y) && A(f.prev, f, f.next) >= 0)
                    return !1;
                f = f.nextZ
            }
            for (f = t.prevZ; f && f.z >= u; ) {
                if (f !== t.prev && f !== t.next && v(r.x, r.y, s.x, s.y, a.x, a.y, f.x, f.y) && A(f.prev, f, f.next) >= 0)
                    return !1;
                f = f.prevZ
            }
            return !0
        }
        function l(t, e, i) {
            var n = t;
            do {
                var r = n.prev
                  , s = n.next.next;
                !x(r, s) && b(r, n, n.next, s) && T(r, s) && T(s, r) && (e.push(r.i / i),
                e.push(n.i / i),
                e.push(s.i / i),
                M(n),
                M(n.next),
                n = t = s),
                n = n.next
            } while (n !== t);return n
        }
        function h(t, e, i, n, a, o) {
            var l = t;
            do {
                for (var h = l.next.next; h !== l.prev; ) {
                    if (l.i !== h.i && g(l, h)) {
                        var c = w(l, h);
                        return l = r(l, l.next),
                        c = r(c, c.next),
                        s(l, e, i, n, a, o),
                        void s(c, e, i, n, a, o)
                    }
                    h = h.next
                }
                l = l.next
            } while (l !== t)
        }
        function c(t, e, i, s) {
            var a, o, l, h = [];
            for (a = 0,
            o = e.length; a < o; a++)
                (l = n(t, e[a] * s, a < o - 1 ? e[a + 1] * s : t.length, s, !1)) === l.next && (l.steiner = !0),
                h.push(y(l));
            for (h.sort(u),
            a = 0; a < h.length; a++)
                _(h[a], i),
                i = r(i, i.next);
            return i
        }
        function u(t, e) {
            return t.x - e.x
        }
        function _(t, e) {
            if (e = f(t, e)) {
                var i = w(e, t);
                r(i, i.next)
            }
        }
        function f(t, e) {
            var i, n = e, r = t.x, s = t.y, a = -1 / 0;
            do {
                if (s <= n.y && s >= n.next.y) {
                    var o = n.x + (s - n.y) * (n.next.x - n.x) / (n.next.y - n.y);
                    if (o <= r && o > a) {
                        if (a = o,
                        o === r) {
                            if (s === n.y)
                                return n;
                            if (s === n.next.y)
                                return n.next
                        }
                        i = n.x < n.next.x ? n : n.next
                    }
                }
                n = n.next
            } while (n !== e);if (!i)
                return null;
            if (r === a)
                return i.prev;
            var l, h = i, c = i.x, u = i.y, _ = 1 / 0;
            for (n = i.next; n !== h; )
                r >= n.x && n.x >= c && v(s < u ? r : a, s, c, u, s < u ? a : r, s, n.x, n.y) && ((l = Math.abs(s - n.y) / (r - n.x)) < _ || l === _ && n.x > i.x) && T(n, t) && (i = n,
                _ = l),
                n = n.next;
            return i
        }
        function d(t, e, i, n) {
            var r = t;
            do {
                null === r.z && (r.z = m(r.x, r.y, e, i, n)),
                r.prevZ = r.prev,
                r.nextZ = r.next,
                r = r.next
            } while (r !== t);r.prevZ.nextZ = null,
            r.prevZ = null,
            p(r)
        }
        function p(t) {
            var e, i, n, r, s, a, o, l, h = 1;
            do {
                for (i = t,
                t = null,
                s = null,
                a = 0; i; ) {
                    for (a++,
                    n = i,
                    o = 0,
                    e = 0; e < h && (o++,
                    n = n.nextZ); e++)
                        ;
                    for (l = h; o > 0 || l > 0 && n; )
                        0 === o ? (r = n,
                        n = n.nextZ,
                        l--) : 0 !== l && n ? i.z <= n.z ? (r = i,
                        i = i.nextZ,
                        o--) : (r = n,
                        n = n.nextZ,
                        l--) : (r = i,
                        i = i.nextZ,
                        o--),
                        s ? s.nextZ = r : t = r,
                        r.prevZ = s,
                        s = r;
                    i = n
                }
                s.nextZ = null,
                h *= 2
            } while (a > 1);return t
        }
        function m(t, e, i, n, r) {
            return (t = 1431655765 & ((t = 858993459 & ((t = 252645135 & ((t = 16711935 & ((t = 32767 * (t - i) / r) | t << 8)) | t << 4)) | t << 2)) | t << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = 32767 * (e - n) / r) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1
        }
        function y(t) {
            var e = t
              , i = t;
            do {
                e.x < i.x && (i = e),
                e = e.next
            } while (e !== t);return i
        }
        function v(t, e, i, n, r, s, a, o) {
            return (r - a) * (e - o) - (t - a) * (s - o) >= 0 && (t - a) * (n - o) - (i - a) * (e - o) >= 0 && (i - a) * (s - o) - (r - a) * (n - o) >= 0
        }
        function g(t, e) {
            return t.next.i !== e.i && t.prev.i !== e.i && !C(t, e) && T(t, e) && T(e, t) && S(t, e)
        }
        function A(t, e, i) {
            return (e.y - t.y) * (i.x - e.x) - (e.x - t.x) * (i.y - e.y)
        }
        function x(t, e) {
            return t.x === e.x && t.y === e.y
        }
        function b(t, e, i, n) {
            return !!(x(t, e) && x(i, n) || x(t, n) && x(i, e)) || A(t, e, i) > 0 != A(t, e, n) > 0 && A(i, n, t) > 0 != A(i, n, e) > 0
        }
        function C(t, e) {
            var i = t;
            do {
                if (i.i !== t.i && i.next.i !== t.i && i.i !== e.i && i.next.i !== e.i && b(i, i.next, t, e))
                    return !0;
                i = i.next
            } while (i !== t);return !1
        }
        function T(t, e) {
            return A(t.prev, t, t.next) < 0 ? A(t, e, t.next) >= 0 && A(t, t.prev, e) >= 0 : A(t, e, t.prev) < 0 || A(t, t.next, e) < 0
        }
        function S(t, e) {
            var i = t
              , n = !1
              , r = (t.x + e.x) / 2
              , s = (t.y + e.y) / 2;
            do {
                i.y > s != i.next.y > s && r < (i.next.x - i.x) * (s - i.y) / (i.next.y - i.y) + i.x && (n = !n),
                i = i.next
            } while (i !== t);return n
        }
        function w(t, e) {
            var i = new D(t.i,t.x,t.y)
              , n = new D(e.i,e.x,e.y)
              , r = t.next
              , s = e.prev;
            return t.next = e,
            e.prev = t,
            i.next = r,
            r.prev = i,
            n.next = i,
            i.prev = n,
            s.next = n,
            n.prev = s,
            n
        }
        function E(t, e, i, n) {
            var r = new D(t,e,i);
            return n ? (r.next = n.next,
            r.prev = n,
            n.next.prev = r,
            n.next = r) : (r.prev = r,
            r.next = r),
            r
        }
        function M(t) {
            t.next.prev = t.prev,
            t.prev.next = t.next,
            t.prevZ && (t.prevZ.nextZ = t.nextZ),
            t.nextZ && (t.nextZ.prevZ = t.prevZ)
        }
        function D(t, e, i) {
            this.i = t,
            this.x = e,
            this.y = i,
            this.prev = null,
            this.next = null,
            this.z = null,
            this.prevZ = null,
            this.nextZ = null,
            this.steiner = !1
        }
        function B(t, e, i, n) {
            for (var r = 0, s = e, a = i - n; s < i; s += n)
                r += (t[a] - t[s]) * (t[s + 1] + t[a + 1]),
                a = s;
            return r
        }
        cc.Graphics.earcut = e.exports = i,
        i.deviation = function(t, e, i, n) {
            var r = e && e.length
              , s = r ? e[0] * i : t.length
              , a = Math.abs(B(t, 0, s, i));
            if (r)
                for (var o = 0, l = e.length; o < l; o++) {
                    var h = e[o] * i
                      , c = o < l - 1 ? e[o + 1] * i : t.length;
                    a -= Math.abs(B(t, h, c, i))
                }
            var u = 0;
            for (o = 0; o < n.length; o += 3) {
                var _ = n[o] * i
                  , f = n[o + 1] * i
                  , d = n[o + 2] * i;
                u += Math.abs((t[_] - t[d]) * (t[f + 1] - t[_ + 1]) - (t[_] - t[f]) * (t[d + 1] - t[_ + 1]))
            }
            return 0 === a && 0 === u ? 0 : Math.abs((u - a) / a)
        }
        ,
        i.flatten = function(t) {
            for (var e = t[0][0].length, i = {
                vertices: [],
                holes: [],
                dimensions: e
            }, n = 0, r = 0; r < t.length; r++) {
                for (var s = 0; s < t[r].length; s++)
                    for (var a = 0; a < e; a++)
                        i.vertices.push(t[r][s][a]);
                r > 0 && (n += t[r - 1].length,
                i.holes.push(n))
            }
            return i
        }
    }
    ), {}],
    234: [(function(t, e) {
        "use strict";
        var i = t("../../../../graphics/helper")
          , n = t("../../../../graphics/types").PointFlags
          , r = cc.Graphics.Point = cc.Class({
            name: "cc.GraphicsPoint",
            extends: cc.Vec2,
            ctor: function() {
                this.reset()
            },
            reset: function() {
                this.dx = 0,
                this.dy = 0,
                this.dmx = 0,
                this.dmy = 0,
                this.flags = 0,
                this.len = 0
            }
        });
        function s() {
            this.reset()
        }
        function a() {
            this._tessTol = .25,
            this._distTol = .01,
            this._updatePathOffset = !1,
            this._paths = null,
            this._pathLength = 0,
            this._pathOffset = 0,
            this._points = null,
            this._pointsOffset = 0,
            this._commandx = 0,
            this._commandy = 0,
            this._paths = [],
            this._points = []
        }
        cc.js.mixin(s.prototype, {
            reset: function() {
                this.closed = !1,
                this.nbevel = 0,
                this.complex = !0,
                this.points ? this.points.length = 0 : this.points = []
            }
        }),
        cc.js.mixin(a.prototype, {
            moveTo: function(t, e) {
                this._updatePathOffset && (this._pathOffset = this._pathLength,
                this._updatePathOffset = !1),
                this._addPath(),
                this._addPoint(t, e, n.PT_CORNER),
                this._commandx = t,
                this._commandy = e
            },
            lineTo: function(t, e) {
                this._addPoint(t, e, n.PT_CORNER),
                this._commandx = t,
                this._commandy = e
            },
            bezierCurveTo: function(t, e, r, s, a, o) {
                var l = this._curPath
                  , h = l.points[l.points.length - 1];
                h.x !== t || h.y !== e || r !== a || s !== o ? (i.tesselateBezier(this, h.x, h.y, t, e, r, s, a, o, 0, n.PT_CORNER),
                this._commandx = a,
                this._commandy = o) : this.lineTo(a, o)
            },
            quadraticCurveTo: function(t, e, i, n) {
                var r = this._commandx
                  , s = this._commandy;
                this.bezierCurveTo(r + 2 / 3 * (t - r), s + 2 / 3 * (e - s), i + 2 / 3 * (t - i), n + 2 / 3 * (e - n), i, n)
            },
            arc: function(t, e, n, r, s, a) {
                i.arc(this, t, e, n, r, s, a)
            },
            ellipse: function(t, e, n, r) {
                i.ellipse(this, t, e, n, r),
                this._curPath.complex = !1
            },
            circle: function(t, e, n) {
                i.ellipse(this, t, e, n, n),
                this._curPath.complex = !1
            },
            rect: function(t, e, i, n) {
                this.moveTo(t, e),
                this.lineTo(t, e + n),
                this.lineTo(t + i, e + n),
                this.lineTo(t + i, e),
                this.close(),
                this._curPath.complex = !1
            },
            roundRect: function(t, e, n, r, s) {
                i.roundRect(this, t, e, n, r, s),
                this._curPath.complex = !1
            },
            clear: function(t) {
                this._pathLength = 0,
                this._pathOffset = 0,
                this._pointsOffset = 0,
                this._curPath = null,
                t && (this._paths.length = 0,
                this._points.length = 0)
            },
            close: function() {
                this._curPath.closed = !0
            },
            _addPath: function() {
                var t = this._pathLength
                  , e = this._paths[t];
                return e ? e.reset() : (e = new s,
                this._paths.push(e)),
                this._pathLength++,
                this._curPath = e,
                e
            },
            _addPoint: function(t, e, i) {
                var n = this._curPath;
                if (n) {
                    var s, a = this._points, o = n.points;
                    (s = a[this._pointsOffset++]) ? (s.x = t,
                    s.y = e) : (s = new r(t,e),
                    a.push(s)),
                    s.flags = i,
                    o.push(s)
                }
            }
        }),
        cc.Graphics._Impl = a,
        e.exports = a
    }
    ), {
        "../../../../graphics/helper": 157,
        "../../../../graphics/types": 159
    }],
    235: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = s(t("../../../assembler"))
          , r = s(t("../../../../../renderer/core/input-assembler"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function a(t, e) {
            return (a = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var o = t("../../mesh-buffer")
          , l = t("../../../index")
          , h = t("../../../../graphics/graphics")
          , c = t("../../../../graphics/types").PointFlags
          , u = h.LineJoin
          , _ = h.LineCap
          , f = t("./earcut");
        t("./impl");
        var d = Math.PI
          , p = Math.min
          , m = Math.max
          , y = Math.ceil
          , v = Math.acos
          , g = Math.cos
          , A = Math.sin
          , x = Math.atan2;
        function b(t, e, i) {
            return t < e ? e : t > i ? i : t
        }
        var C = cc.gfx
          , T = new C.VertexFormat([{
            name: C.ATTR_POSITION,
            type: C.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: C.ATTR_COLOR,
            type: C.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }, {
            name: "a_dist",
            type: C.ATTR_TYPE_FLOAT32,
            num: 1
        }]);
        T.name = "vfmtPosColorSdf";
        var S = (function(t) {
            var e, i;
            function n(e) {
                var i;
                return (i = t.call(this, e) || this)._buffer = null,
                i._buffers = [],
                i._bufferOffset = 0,
                i
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            a(e, i);
            var s = n.prototype;
            return s.getVfmt = function() {
                return T
            }
            ,
            s.getVfmtFloatCount = function() {
                return 4
            }
            ,
            s.requestBuffer = function() {
                var t = {
                    indiceStart: 0,
                    vertexStart: 0
                }
                  , e = new o(l._handle,this.getVfmt());
                t.meshbuffer = e;
                var i = new r.default(e._vb,e._ib);
                return t.ia = i,
                this._buffers.push(t),
                t
            }
            ,
            s.getBuffers = function() {
                return 0 === this._buffers.length && this.requestBuffer(),
                this._buffers
            }
            ,
            s.clear = function(t) {
                this._bufferOffset = 0;
                var e = this._buffers;
                if (t) {
                    for (var i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        r.meshbuffer.destroy(),
                        r.meshbuffer = null
                    }
                    e.length = 0
                } else
                    for (var s = 0, a = e.length; s < a; s++) {
                        var o = e[s];
                        o.indiceStart = 0,
                        o.vertexStart = 0,
                        o.meshbuffer.reset()
                    }
            }
            ,
            s.fillBuffers = function(t, e) {
                e._flush(),
                e.node = t.node,
                e.material = t._materials[0];
                for (var i = this.getBuffers(), n = 0, r = i.length; n < r; n++) {
                    var s = i[n]
                      , a = s.meshbuffer;
                    s.ia._count = s.indiceStart,
                    e._flushIA(s.ia),
                    a.uploadData()
                }
            }
            ,
            s.genBuffer = function(t, e) {
                var i = this.getBuffers()
                  , n = i[this._bufferOffset]
                  , r = n.meshbuffer
                  , s = n.vertexStart + e;
                return (s > 65535 || 3 * s > 131070) && (++this._bufferOffset,
                s = e,
                this._bufferOffset < i.length ? n = i[this._bufferOffset] : (n = this.requestBuffer(t),
                i[this._bufferOffset] = n),
                r = n.meshbuffer),
                s > r.vertexOffset && r.requestStatic(e, 3 * e),
                this._buffer = n,
                n
            }
            ,
            s.stroke = function(t) {
                this._curColor = t._strokeColor._val,
                this._flattenPaths(t._impl),
                this._expandStroke(t),
                t._impl._updatePathOffset = !0
            }
            ,
            s.fill = function(t) {
                this._curColor = t._fillColor._val,
                this._expandFill(t),
                t._impl._updatePathOffset = !0
            }
            ,
            s._expandStroke = function(t) {
                var e, i, n, r, s = .5 * t.lineWidth, a = t.lineCap, o = t.lineJoin, l = t.miterLimit, h = t._impl, f = (e = s,
                i = d,
                n = h._tessTol,
                r = 2 * v(e / (e + n)),
                m(2, y(i / r)));
                this._calculateJoins(h, s, o, l);
                for (var p = h._paths, g = 0, A = h._pathOffset, x = h._pathLength; A < x; A++) {
                    var b = p[A]
                      , C = b.points.length;
                    o === u.ROUND ? g += 2 * (C + b.nbevel * (f + 2) + 1) : g += 2 * (C + 5 * b.nbevel + 1),
                    b.closed || (a === _.ROUND ? g += 2 * (2 * f + 2) : g += 12)
                }
                for (var T = this.genBuffer(t, g), S = T.meshbuffer, w = S._vData, E = S._iData, M = h._pathOffset, D = h._pathLength; M < D; M++) {
                    var B, I = p[M], P = I.points, R = P.length, O = T.vertexStart, L = void 0, F = void 0, V = void 0, N = void 0;
                    if ((B = I.closed) ? (L = P[R - 1],
                    F = P[0],
                    V = 0,
                    N = R) : (L = P[0],
                    F = P[1],
                    V = 1,
                    N = R - 1),
                    F = F || L,
                    !B) {
                        var k = F.sub(L);
                        k.normalizeSelf();
                        var G = k.x
                          , U = k.y;
                        a === _.BUTT ? this._buttCapStart(L, G, U, s, 0) : a === _.SQUARE ? this._buttCapStart(L, G, U, s, s) : a === _.ROUND && this._roundCapStart(L, G, U, s, f)
                    }
                    for (var z = V; z < N; ++z)
                        o === u.ROUND ? this._roundJoin(L, F, s, s, f) : 0 != (F.flags & (c.PT_BEVEL | c.PT_INNERBEVEL)) ? this._bevelJoin(L, F, s, s) : (this._vset(F.x + F.dmx * s, F.y + F.dmy * s, 1),
                        this._vset(F.x - F.dmx * s, F.y - F.dmy * s, -1)),
                        L = F,
                        F = P[z + 1];
                    if (B) {
                        var H = this.getVfmtFloatCount()
                          , W = O * H;
                        this._vset(w[W], w[W + 1], 1),
                        this._vset(w[W + H], w[W + H + 1], -1)
                    } else {
                        var j = F.sub(L);
                        j.normalizeSelf();
                        var X = j.x
                          , Y = j.y;
                        a === _.BUTT ? this._buttCapEnd(F, X, Y, s, 0) : a === _.SQUARE ? this._buttCapEnd(F, X, Y, s, s) : a === _.ROUND && this._roundCapEnd(F, X, Y, s, f)
                    }
                    for (var q = T.indiceStart, J = O + 2, Z = T.vertexStart; J < Z; J++)
                        E[q++] = J - 2,
                        E[q++] = J - 1,
                        E[q++] = J;
                    T.indiceStart = q
                }
            }
            ,
            s._expandFill = function(t) {
                for (var e = t._impl, i = e._paths, n = 0, r = e._pathOffset, s = e._pathLength; r < s; r++)
                    n += i[r].points.length;
                for (var a = this.genBuffer(t, n), o = a.meshbuffer, l = o._vData, h = o._iData, c = e._pathOffset, u = e._pathLength; c < u; c++) {
                    var _ = i[c]
                      , d = _.points
                      , p = d.length;
                    if (0 !== p) {
                        for (var m = a.vertexStart, y = 0; y < p; ++y)
                            this._vset(d[y].x, d[y].y);
                        var v = a.indiceStart;
                        if (_.complex) {
                            for (var g = [], A = this.getVfmtFloatCount(), x = m, b = a.vertexStart; x < b; x++) {
                                var C = x * A;
                                g.push(l[C]),
                                g.push(l[C + 1])
                            }
                            var T = f(g, null, 2);
                            if (!T || 0 === T.length)
                                continue;
                            for (var S = 0, w = T.length; S < w; S++)
                                h[v++] = T[S] + m
                        } else
                            for (var E = m, M = m + 2, D = a.vertexStart; M < D; M++)
                                h[v++] = E,
                                h[v++] = M - 1,
                                h[v++] = M;
                        a.indiceStart = v
                    }
                }
            }
            ,
            s._calculateJoins = function(t, e, i, n) {
                var r = 0;
                e > 0 && (r = 1 / e);
                for (var s = t._paths, a = t._pathOffset, o = t._pathLength; a < o; a++) {
                    var l = s[a]
                      , h = l.points
                      , _ = h.length
                      , f = h[_ - 1]
                      , d = h[0];
                    l.nbevel = 0;
                    for (var y = 0; y < _; y++) {
                        var v, g, A = f.dy, x = -f.dx, b = d.dy, C = -d.dx;
                        if (d.dmx = .5 * (A + b),
                        d.dmy = .5 * (x + C),
                        (v = d.dmx * d.dmx + d.dmy * d.dmy) > 1e-6) {
                            var T = 1 / v;
                            T > 600 && (T = 600),
                            d.dmx *= T,
                            d.dmy *= T
                        }
                        d.dx * f.dy - f.dx * d.dy > 0 && (d.flags |= c.PT_LEFT),
                        v * (g = m(11, p(f.len, d.len) * r)) * g < 1 && (d.flags |= c.PT_INNERBEVEL);
                        var S = d.dmx * e
                          , w = d.dmy * e
                          , E = S * S + w * w;
                        (E > d.len * d.len || E > f.len * f.len) && (d.flags |= c.PT_INNERBEVEL),
                        d.flags & c.PT_CORNER && (v * n * n < 1 || i === u.BEVEL || i === u.ROUND) && (d.flags |= c.PT_BEVEL),
                        0 != (d.flags & (c.PT_BEVEL | c.PT_INNERBEVEL)) && l.nbevel++,
                        f = d,
                        d = h[y + 1]
                    }
                }
            }
            ,
            s._flattenPaths = function(t) {
                for (var e = t._paths, i = t._pathOffset, n = t._pathLength; i < n; i++) {
                    var r = e[i]
                      , s = r.points
                      , a = s[s.length - 1]
                      , o = s[0];
                    s.length > 2 && a.equals(o) && (r.closed = !0,
                    s.pop(),
                    a = s[s.length - 1]);
                    for (var l = 0, h = s.length; l < h; l++) {
                        var c = o.sub(a);
                        a.len = c.mag(),
                        (c.x || c.y) && c.normalizeSelf(),
                        a.dx = c.x,
                        a.dy = c.y,
                        a = o,
                        o = s[l + 1]
                    }
                }
            }
            ,
            s._chooseBevel = function(t, e, i, n) {
                var r, s, a, o, l = i.x, h = i.y;
                return 0 !== t ? (r = l + e.dy * n,
                s = h - e.dx * n,
                a = l + i.dy * n,
                o = h - i.dx * n) : (r = a = l + i.dmx * n,
                s = o = h + i.dmy * n),
                [r, s, a, o]
            }
            ,
            s._buttCapStart = function(t, e, i, n, r) {
                var s = t.x - e * r
                  , a = t.y - i * r
                  , o = i
                  , l = -e;
                this._vset(s + o * n, a + l * n, 1),
                this._vset(s - o * n, a - l * n, -1)
            }
            ,
            s._buttCapEnd = function(t, e, i, n, r) {
                var s = t.x + e * r
                  , a = t.y + i * r
                  , o = i
                  , l = -e;
                this._vset(s + o * n, a + l * n, 1),
                this._vset(s - o * n, a - l * n, -1)
            }
            ,
            s._roundCapStart = function(t, e, i, n, r) {
                for (var s = t.x, a = t.y, o = i, l = -e, h = 0; h < r; h++) {
                    var c = h / (r - 1) * d
                      , u = g(c) * n
                      , _ = A(c) * n;
                    this._vset(s - o * u - e * _, a - l * u - i * _, 1),
                    this._vset(s, a, 0)
                }
                this._vset(s + o * n, a + l * n, 1),
                this._vset(s - o * n, a - l * n, -1)
            }
            ,
            s._roundCapEnd = function(t, e, i, n, r) {
                var s = t.x
                  , a = t.y
                  , o = i
                  , l = -e;
                this._vset(s + o * n, a + l * n, 1),
                this._vset(s - o * n, a - l * n, -1);
                for (var h = 0; h < r; h++) {
                    var c = h / (r - 1) * d
                      , u = g(c) * n
                      , _ = A(c) * n;
                    this._vset(s, a, 0),
                    this._vset(s - o * u + e * _, a - l * u + i * _, 1)
                }
            }
            ,
            s._roundJoin = function(t, e, i, n, r) {
                var s = t.dy
                  , a = -t.dx
                  , o = e.dy
                  , l = -e.dx
                  , h = e.x
                  , u = e.y;
                if (0 != (e.flags & c.PT_LEFT)) {
                    var _ = this._chooseBevel(e.flags & c.PT_INNERBEVEL, t, e, i)
                      , f = _[0]
                      , p = _[1]
                      , m = _[2]
                      , v = _[3]
                      , C = x(-a, -s)
                      , T = x(-l, -o);
                    T > C && (T -= 2 * d),
                    this._vset(f, p, 1),
                    this._vset(h - s * n, e.y - a * n, -1);
                    for (var S = b(y((C - T) / d) * r, 2, r), w = 0; w < S; w++) {
                        var E = C + w / (S - 1) * (T - C)
                          , M = h + g(E) * n
                          , D = u + A(E) * n;
                        this._vset(h, u, 0),
                        this._vset(M, D, -1)
                    }
                    this._vset(m, v, 1),
                    this._vset(h - o * n, u - l * n, -1)
                } else {
                    var B = this._chooseBevel(e.flags & c.PT_INNERBEVEL, t, e, -n)
                      , I = B[0]
                      , P = B[1]
                      , R = B[2]
                      , O = B[3]
                      , L = x(a, s)
                      , F = x(l, o);
                    F < L && (F += 2 * d),
                    this._vset(h + s * n, u + a * n, 1),
                    this._vset(I, P, -1);
                    for (var V = b(y((F - L) / d) * r, 2, r), N = 0; N < V; N++) {
                        var k = L + N / (V - 1) * (F - L)
                          , G = h + g(k) * i
                          , U = u + A(k) * i;
                        this._vset(G, U, 1),
                        this._vset(h, u, 0)
                    }
                    this._vset(h + o * n, u + l * n, 1),
                    this._vset(R, O, -1)
                }
            }
            ,
            s._bevelJoin = function(t, e, i, n) {
                var r, s, a, o, l, h, u, _, f = t.dy, d = -t.dx, p = e.dy, m = -e.dx;
                if (e.flags & c.PT_LEFT) {
                    var y = this._chooseBevel(e.flags & c.PT_INNERBEVEL, t, e, i);
                    l = y[0],
                    h = y[1],
                    u = y[2],
                    _ = y[3],
                    this._vset(l, h, 1),
                    this._vset(e.x - f * n, e.y - d * n, -1),
                    this._vset(u, _, 1),
                    this._vset(e.x - p * n, e.y - m * n, -1)
                } else {
                    var v = this._chooseBevel(e.flags & c.PT_INNERBEVEL, t, e, -n);
                    r = v[0],
                    s = v[1],
                    a = v[2],
                    o = v[3],
                    this._vset(e.x + f * i, e.y + d * i, 1),
                    this._vset(r, s, -1),
                    this._vset(e.x + p * i, e.y + m * i, 1),
                    this._vset(a, o, -1)
                }
            }
            ,
            s._vset = function(t, e, i) {
                void 0 === i && (i = 0);
                var n = this._buffer
                  , r = n.meshbuffer
                  , s = n.vertexStart * this.getVfmtFloatCount()
                  , a = r._vData
                  , o = r._uintVData;
                a[s] = t,
                a[s + 1] = e,
                o[s + 2] = this._curColor,
                a[s + 3] = i,
                n.vertexStart++,
                r._dirty = !0
            }
            ,
            n
        }
        )(n.default);
        i.default = S,
        n.default.register(cc.Graphics, S),
        e.exports = i.default
    }
    ), {
        "../../../../../renderer/core/input-assembler": 305,
        "../../../../graphics/graphics": 156,
        "../../../../graphics/types": 159,
        "../../../assembler": 221,
        "../../../index": 224,
        "../../mesh-buffer": 251,
        "./earcut": 233,
        "./impl": 234
    }],
    236: [(function(t) {
        "use strict";
        cc.assemblers = {},
        t("./sprite"),
        t("./mask-assembler"),
        t("./graphics"),
        t("./label"),
        t("./motion-streak")
    }
    ), {
        "./graphics": 235,
        "./label": 241,
        "./mask-assembler": 242,
        "./motion-streak": void 0,
        "./sprite": 249
    }],
    237: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../../utils/label/bmfont")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = 0
          , o = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.initData = function() {
                this._renderData.createFlexData(0, 4, 6, this.getVfmt())
            }
            ,
            r._reserveQuads = function(t, e) {
                var i = 4 * e
                  , n = 6 * e
                  , r = this._renderData._flexBuffer;
                r.reserve(i, n),
                r.used(i, n);
                for (var s = this._renderData.iDatas[0], o = 0, l = 0, h = n; o < h; o += 6,
                l += 4)
                    s[o] = l,
                    s[o + 1] = l + 1,
                    s[o + 2] = l + 2,
                    s[o + 3] = l + 1,
                    s[o + 4] = l + 3,
                    s[o + 5] = l + 2;
                a = 0
            }
            ,
            r._quadsUpdated = function() {
                a = 0,
                this._renderData._flexBuffer.used(this.verticesCount, this.indicesCount)
            }
            ,
            r._getColor = function(t) {
                return t.node._color._val
            }
            ,
            r.appendQuad = function(t, e, i, n, r, s, o) {
                var l = this._renderData
                  , h = l.vDatas[0]
                  , c = l.uintVDatas[0];
                this.verticesCount += 4,
                this.indicesCount = this.verticesCount / 2 * 3;
                var u, _, f, d, p = e.width, m = e.height, y = i.width, v = i.height, g = this._getColor(t), A = this.floatsPerVert, x = a + this.uvOffset;
                n ? (u = i.x / p,
                f = (i.x + v) / p,
                _ = (i.y + y) / m,
                d = i.y / m,
                h[x] = u,
                h[x + 1] = d,
                h[x += A] = u,
                h[x + 1] = _,
                h[x += A] = f,
                h[x + 1] = d,
                h[x += A] = f,
                h[x + 1] = _) : (u = i.x / p,
                f = (i.x + y) / p,
                _ = (i.y + v) / m,
                d = i.y / m,
                h[x] = u,
                h[x + 1] = _,
                h[x += A] = f,
                h[x + 1] = _,
                h[x += A] = u,
                h[x + 1] = d,
                h[x += A] = f,
                h[x + 1] = d),
                u = r,
                f = r + y * o,
                _ = s - v * o,
                d = s,
                this.appendVerts(t, a, u, f, _, d);
                for (var b = a + this.colorOffset, C = 0; C < 4; C++)
                    c[b] = g,
                    b += A;
                a += 4 * this.floatsPerVert
            }
            ,
            r.appendVerts = function(t, e, i, n, r, s) {
                var a = this._local
                  , o = this.floatsPerVert;
                a[e] = i,
                a[e + 1] = r,
                a[e += o] = n,
                a[e + 1] = r,
                a[e += o] = i,
                a[e + 1] = s,
                a[e += o] = n,
                a[e + 1] = s
            }
            ,
            r.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], a = e[12], o = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < l.length; u += c) {
                    var _ = l[u]
                      , f = l[u + 1];
                    h[u] = _ * i + f * r + a,
                    h[u + 1] = _ * n + f * s + o
                }
            }
            ,
            n
        }
        )(r.default);
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../../../../utils/label/bmfont": 228
    }],
    238: [(function(t, e, i) {
        "use strict";
        function n(t, e) {
            return (n = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0,
        t("../../../../../platform/js"),
        t("./bmfont");
        var r = t("../../../../utils/label/letter-font")
          , s = cc.color(255, 255, 255, 255)
          , a = (function(t) {
            var e, i;
            function r() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            n(e, i);
            var a = r.prototype;
            return a.createData = function(t) {
                return t.requestRenderData()
            }
            ,
            a._getColor = function(t) {
                return s._fastSetA(t.node._color.a),
                s._val
            }
            ,
            a.updateColor = function(e) {
                var i = this._getColor(e);
                t.prototype.updateColor.call(this, e, i)
            }
            ,
            r
        }
        )(r);
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../../../../../platform/js": 214,
        "../../../../utils/label/letter-font": 230,
        "./bmfont": 237
    }],
    239: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../../../assets/material/material-variant")) && n.__esModule ? n : {
            default: n
        };
        t("../../../../../components/CCLabel"),
        t("../../../../../components/CCLabelShadow"),
        t("../../../../../components/CCLabelOutline"),
        t("../../../../../assets/material/CCMaterial");
        var s = (function() {
            function t() {}
            var e = t.prototype;
            return e.init = function(t) {
                this.labelMaterial = null,
                this._label = this._renderComp = t,
                renderer.CustomAssembler.prototype.ctor.call(this),
                t.node._proxy.setAssembler(this),
                this._layout = new jsb.LabelRenderer,
                this._layout.init(t),
                this._cfg = new DataView(this._layout._cfg),
                this._layoutInfo = new DataView(this._layout._layout),
                this._cfgFields = jsb.LabelRenderer._cfgFields,
                this._layoutFields = jsb.LabelRenderer._layoutFields,
                this._layout.bindNodeProxy(t.node._proxy),
                this._bindMaterial(t)
            }
            ,
            e._setBufferFlag = function(t, e, i, n, r) {
                if ("int8" == n && 1 == i) {
                    var s = t.getInt8(e);
                    t.setInt8(e, r | s)
                } else if ("int32" == n && 4 == i) {
                    var a = t.getInt32(e, jsb.__isLittleEndian__);
                    t.setInt32(e, r | a, jsb.__isLittleEndian__)
                } else
                    cc.warn("flag storage type should be int8/int32 only, type/size -> " + n + "/" + i + ".")
            }
            ,
            e._updateCfgFlag = function(t) {
                var e = this._cfgFields.updateFlags;
                this._setBufferFlag(this._cfg, e.offset, e.size, e.type, t)
            }
            ,
            e._setBufferValue = function(t, e, i, n, r) {
                "float" == n && 4 == i ? t.setFloat32(e, r, jsb.__isLittleEndian__) : "int32" == n && 4 == i ? t.setInt32(e, r, jsb.__isLittleEndian__) : "bool" == n && 1 == i ? t.setInt8(e, r ? 1 : 0, jsb.__isLittleEndian__) : "Color4B" == n && 4 == i ? (t.setUint8(e, r.r),
                t.setUint8(e + 1, r.g),
                t.setUint8(e + 2, r.b),
                t.setUint8(e + 3, r.a)) : "int8" == n && 1 == i ? t.setUint8(e, r) : cc.warn("dont know how to set value to buffer, type/size -> " + n + "/" + i + ".")
            }
            ,
            e._setFieldValue = function(t, e, i, n) {
                var r = e[i];
                this._setBufferValue(t, r.offset, r.size, r.type, n)
            }
            ,
            e._getBufferValue = function(t, e, i, n) {
                return "float" == n && 4 == i ? t.getFloat32(e, jsb.__isLittleEndian__) : "int32" == n && 4 == i ? t.getInt32(e, jsb.__isLittleEndian__) : "bool" == n && 1 == i ? 0 != t.getInt8(e, jsb.__isLittleEndian__) : "Color4B" == n && 4 == i ? {
                    r: t.getUint8(e),
                    g: t.getUint8(e + 1),
                    b: t.getUint8(e + 2),
                    a: t.getUint8(e + 3)
                } : "int8" == n && 1 == i ? t.getUint8(e) : void cc.warn("dont know how to get value from buffer, type/size -> " + n + "/" + i + ".")
            }
            ,
            e._getFieldValue = function(t, e, i) {
                var n = e[i];
                return this._getBufferValue(t, n.offset, n.size, n.type)
            }
            ,
            e._getLayoutValue = function(t) {
                return this._getFieldValue(this._layoutInfo, this._layoutFields, t)
            }
            ,
            e._setLayoutValue = function(t, e) {
                return this._setFieldValue(this._layoutInfo, this._layoutFields, t, e)
            }
            ,
            e._updateCfgFlag_Content = function() {
                this._updateCfgFlag(1)
            }
            ,
            e._updateCfgFlag_Font = function() {
                this._updateCfgFlag(2)
            }
            ,
            e._colorEqual = function(t, e) {
                return t.r == e.r && t.g == e.g && t.b == e.b && t.a == e.a
            }
            ,
            e._colorToObj = function(t, e, i, n) {
                return {
                    r: t,
                    g: e,
                    b: i,
                    a: n
                }
            }
            ,
            e.setString = function(t) {
                t != this._layout.string && (this._layout.string = t,
                this._updateCfgFlag_Content())
            }
            ,
            e.setFontPath = function(t) {
                t != this._layout.fontPath && (this._layout.fontPath = t,
                this._updateCfgFlag_Font())
            }
            ,
            e.setFontSize = function(t, e) {
                this._getFieldValue(this._cfg, this._cfgFields, "fontSize") != t && (this._setFieldValue(this._cfg, this._cfgFields, "fontSize", t),
                this._setFieldValue(this._cfg, this._cfgFields, "fontSizeRetina", e),
                this._updateCfgFlag_Font())
            }
            ,
            e.setOutline = function(t) {
                var e = this._getLayoutValue("outlineSize");
                e > 0 != t > 0 && this._updateCfgFlag_Font(),
                e != t && (this._updateCfgFlag_Content(),
                this._setLayoutValue("outlineSize", t))
            }
            ,
            e.setOutlineColor = function(t) {
                var e = this._getLayoutValue("outlineColor");
                this._colorEqual(e, t) || (this._setLayoutValue("outlineColor", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setLineHeight = function(t) {
                this._getLayoutValue("lineHeight") != t && (this._setLayoutValue("lineHeight", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setOverFlow = function(t) {
                this._getLayoutValue("overflow") != t && (this._setLayoutValue("overflow", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setEnableWrap = function(t) {
                this._getLayoutValue("wrap") != t && (this._setLayoutValue("wrap", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setVerticalAlign = function(t) {
                this._getLayoutValue("valign") != t && (this._setLayoutValue("valign", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setHorizontalAlign = function(t) {
                this._getLayoutValue("halign") != t && (this._setLayoutValue("halign", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setContentSize = function(t, e) {
                var i = this._getLayoutValue("width")
                  , n = this._getLayoutValue("height");
                i == t && n == e || (this._setLayoutValue("height", e),
                this._setLayoutValue("width", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setAnchorPoint = function(t, e) {
                var i = this._getLayoutValue("anchorX")
                  , n = this._getLayoutValue("anchorY");
                i == t && n == e || (this._setLayoutValue("anchorX", t),
                this._setLayoutValue("anchorY", e),
                this._updateCfgFlag_Content())
            }
            ,
            e.setColor = function(t) {
                var e = this._getLayoutValue("color");
                this._colorEqual(e, t) || (this._setLayoutValue("color", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setShadow = function(t, e, i) {
                var n = this._getLayoutValue("shadowBlur")
                  , r = this._getLayoutValue("shadowX")
                  , s = this._getLayoutValue("shadowY");
                n > 0 != i > 0 && this._updateCfgFlag_Font();
                var a = !1;
                n != i && (this._setLayoutValue("shadowBlur", i),
                a = !0),
                r != t && (this._setLayoutValue("shadowX", t),
                a = !0),
                s != e && (this._setLayoutValue("shadowY", e),
                a = !0),
                a && this._updateCfgFlag_Content()
            }
            ,
            e.setShadowColor = function(t) {
                var e = this._getLayoutValue("shadowColor");
                this._colorEqual(e, t) || (this._setLayoutValue("shadowColor", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setItalic = function(t) {
                this._getLayoutValue("italic") != t && (this._setLayoutValue("italic", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setBold = function(t) {
                this._getLayoutValue("bold") != t && (this._setLayoutValue("bold", t),
                this._updateCfgFlag_Content(),
                this._updateCfgFlag_Font())
            }
            ,
            e.setUnderline = function(t) {
                this._getLayoutValue("underline") != t && (this._setLayoutValue("underline", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.setSpacingX = function(t) {
                this._getLayoutValue("spaceX") == t || "number" != typeof t || isNaN(t) || (this._setLayoutValue("spaceX", t),
                this._updateCfgFlag_Content())
            }
            ,
            e.updateRenderData = function(t) {
                if (t._vertsDirty) {
                    t.font && t.font.nativeUrl && this.setFontPath(cc.assetManager.cacheManager.getCache(t.font.nativeUrl) || t.font.nativeUrl);
                    var e = this._layout
                      , i = t.node.color
                      , n = t.node
                      , r = t.fontSize;
                    this.setString(t.string),
                    this.setFontSize(t.fontSize, r / 72 * t.fontSize),
                    this.setLineHeight(t.lineHeight),
                    this.setEnableWrap(t.enableWrapText),
                    this.setItalic(t.enableItalic),
                    this.setUnderline(t.enableUnderline),
                    this.setBold(t.enableBold),
                    this.setOverFlow(t.overflow),
                    this.setVerticalAlign(t.verticalAlign),
                    this.setHorizontalAlign(t.horizontalAlign),
                    this.setSpacingX(t.spacingX),
                    this.setContentSize(n.getContentSize().width, n.getContentSize().height),
                    this.setAnchorPoint(n.anchorX, n.anchorY),
                    this.setColor(this._colorToObj(i.getR(), i.getG(), i.getB(), Math.ceil(i.getA() * n.opacity / 255)));
                    var s = n.getComponent(cc.LabelShadow);
                    if (s && s.enabled) {
                        var a = s.color;
                        this.setShadow(s.offset.x, s.offset.y, s.blur),
                        this.setShadowColor(this._colorToObj(a.getR(), a.getG(), a.getB(), Math.ceil(a.getA() * n.opacity / 255)))
                    } else
                        this.setShadow(0, 0, -1);
                    this._updateTTFMaterial(t),
                    e.render()
                }
            }
            ,
            e._bindMaterial = function(t) {
                var e = this.labelMaterial;
                return e || (e = r.default.createWithBuiltin("2d-label", t),
                this.labelMaterial = e),
                e
            }
            ,
            e._updateTTFMaterial = function(t) {
                var e = this._bindMaterial(t)
                  , i = this._label.node
                  , n = this._layout
                  , r = i.getComponent(cc.LabelOutline)
                  , s = 0;
                if (r && r.enabled && r.width > 0) {
                    s = Math.max(Math.min(r.width / 10, .4), .1);
                    var a = r.color;
                    this.setOutlineColor(this._colorToObj(a.getR(), a.getG(), a.getB(), Math.ceil(a.getA() * i.opacity / 255)))
                }
                this.setOutline(s),
                e.define("CC_USE_MODEL", !0),
                e.define("USE_TEXTURE_ALPHAONLY", !0),
                e.define("USE_SDF", s > 0 || t.enableBold),
                e.define("USE_SDF_EXTEND", t.enableBold ? 1 : 0),
                void 0 !== e.getDefine("CC_SUPPORT_standard_derivatives") && cc.sys.glExtension("OES_standard_derivatives") && e.define("CC_SUPPORT_standard_derivatives", !0),
                n.setEffect(e.effect._nativeObj)
            }
            ,
            e.fillBuffers = function() {
                this._layout.render()
            }
            ,
            e.getVfmt = function() {}
            ,
            t
        }
        )();
        i.default = s,
        e.exports = i.default
    }
    ), {
        "../../../../../assets/material/CCMaterial": 80,
        "../../../../../assets/material/material-variant": 87,
        "../../../../../components/CCLabel": 107,
        "../../../../../components/CCLabelOutline": 108,
        "../../../../../components/CCLabelShadow": 109
    }],
    240: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../../utils/label/ttf")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("../../../../../components/CCLabelShadow")
          , o = cc.color(255, 255, 255, 255)
          , l = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.updateUVs = function(t) {
                for (var e = this._renderData.vDatas[0], i = t._frame.uv, n = this.uvOffset, r = this.floatsPerVert, s = 0; s < 4; s++) {
                    var a = 2 * s
                      , o = r * s + n;
                    e[o] = i[a],
                    e[o + 1] = i[a + 1]
                }
            }
            ,
            r.updateColor = function(e) {
                o._fastSetA(e.node._color.a);
                var i = o._val;
                t.prototype.updateColor.call(this, e, i)
            }
            ,
            r.updateVerts = function(t) {
                var e = t.node
                  , i = t._ttfTexture.width
                  , n = t._ttfTexture.height
                  , r = e.anchorX * e.width
                  , s = e.anchorY * e.height
                  , o = a && t.getComponent(a);
                if (o && o._enabled) {
                    var l = (i - e.width) / 2
                      , h = (n - e.height) / 2
                      , c = o.offset;
                    -c.x > l ? r += i - e.width : l > c.x && (r += l - c.x),
                    -c.y > h ? s += n - e.height : h > c.y && (s += h - c.y)
                }
                var u = this._local;
                u[0] = -r,
                u[1] = -s,
                u[2] = i - r,
                u[3] = n - s,
                this.updateUVs(t),
                this.updateWorldVerts(t)
            }
            ,
            n
        }
        )(r.default);
        i.default = l,
        e.exports = i.default
    }
    ), {
        "../../../../../components/CCLabelShadow": 109,
        "../../../../utils/label/ttf": 231
    }],
    241: [(function(t) {
        "use strict";
        var e = h(t("../../../assembler"))
          , i = h(t("../../../../components/CCLabel"))
          , n = h(t("./2d/ttf"))
          , r = h(t("./2d/bmfont"))
          , s = h(t("./2d/letter"))
          , a = h(t("./3d/ttf"))
          , o = h(t("./3d/bmfont"))
          , l = h(t("./3d/letter"));
        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        i.default._canvasPool = {
            pool: [],
            get: function() {
                var t = this.pool.pop();
                if (!t) {
                    var e = document.createElement("canvas")
                      , i = e.getContext("2d");
                    t = {
                        canvas: e,
                        context: i
                    },
                    i.textBaseline = "alphabetic"
                }
                return t
            },
            put: function(t) {
                this.pool.length >= 32 || this.pool.push(t)
            }
        },
        e.default.register(cc.Label, {
            getConstructor: function(t) {
                var e = t.node.is3DNode
                  , h = e ? a.default : n.default;
                return t.font instanceof cc.BitmapFont ? h = e ? o.default : r.default : t.cacheMode === i.default.CacheMode.CHAR && (cc.sys.platform === cc.sys.WECHAT_GAME_SUB ? cc.warn("sorry, subdomain does not support CHAR mode currently!") : h = e ? l.default : s.default),
                h
            },
            TTF: n.default,
            Bmfont: r.default,
            Letter: s.default,
            TTF3D: a.default,
            Bmfont3D: o.default,
            Letter3D: l.default,
            NativeTTF: void 0
        })
    }
    ), {
        "../../../../components/CCLabel": 107,
        "../../../assembler": 221,
        "./2d/bmfont": 237,
        "./2d/letter": 238,
        "./2d/nativeTTF": 239,
        "./2d/ttf": 240,
        "./3d/bmfont": void 0,
        "./3d/letter": void 0,
        "./3d/ttf": void 0
    }],
    242: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.MaskAssembler = void 0;
        var n, r = (n = t("../../assembler")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("../../../components/CCMask")
          , o = t("../../render-flow")
          , l = t("./sprite/2d/simple")
          , h = t("./graphics")
          , c = t("../../../../renderer/gfx")
          , u = t("../vertex-format").vfmtPos
          , _ = 8
          , f = [];
        function d() {
            return 1 << f.length - 1
        }
        function p() {
            for (var t = 0, e = 0; e < f.length; ++e)
                t += 1 << e;
            return t
        }
        function m(t, e, i, n, r, s) {
            var a = t.effect
              , o = c.STENCIL_OP_KEEP
              , l = c.STENCIL_OP_KEEP;
            a.setStencil(c.STENCIL_ENABLE, e, n, r, i, o, l, s)
        }
        function y(t) {
            f.length + 1 > _ && cc.errorID(9e3, _),
            f.push(t)
        }
        function v(t, e) {
            0 === f.length && cc.errorID(9001),
            f.pop(),
            0 === f.length ? e._flushMaterial(t._exitMaterial) : x(e)
        }
        function g(t, e) {
            var i = c.DS_FUNC_NEVER
              , n = d()
              , r = n
              , s = n
              , a = t.inverted ? c.STENCIL_OP_REPLACE : c.STENCIL_OP_ZERO;
            m(t._clearMaterial, i, a, n, r, s);
            var o = e.getBuffer("mesh", u)
              , l = o.request(4, 6)
              , h = l.indiceOffset
              , _ = l.byteOffset >> 2
              , f = l.vertexOffset
              , p = o._vData
              , y = o._iData;
            p[_++] = -1,
            p[_++] = -1,
            p[_++] = -1,
            p[_++] = 1,
            p[_++] = 1,
            p[_++] = 1,
            p[_++] = 1,
            p[_++] = -1,
            y[h++] = f,
            y[h++] = f + 3,
            y[h++] = f + 1,
            y[h++] = f + 1,
            y[h++] = f + 3,
            y[h++] = f + 2,
            e.node = e._dummyNode,
            e.material = t._clearMaterial,
            e._flush()
        }
        function A(t, e) {
            var i = c.DS_FUNC_NEVER
              , n = d()
              , r = n
              , s = n
              , o = t.inverted ? c.STENCIL_OP_ZERO : c.STENCIL_OP_REPLACE;
            m(t._materials[0], i, o, n, r, s),
            e.material = t._materials[0],
            t._type === a.Type.IMAGE_STENCIL ? (e.node = e._dummyNode,
            l.prototype.fillBuffers.call(t._assembler, t, e),
            e._flush()) : (e.node = t.node,
            h.prototype.fillBuffers.call(t._graphics._assembler, t._graphics, e))
        }
        function x(t) {
            var e = c.DS_FUNC_EQUAL
              , i = c.STENCIL_OP_KEEP
              , n = p()
              , r = n
              , s = d()
              , a = f[f.length - 1];
            m(a._enableMaterial, e, i, n, r, s),
            t._flushMaterial(a._enableMaterial)
        }
        var b = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.updateRenderData = function(t) {
                t._type === a.Type.IMAGE_STENCIL ? t.spriteFrame ? l.prototype.updateRenderData.call(this, t) : t.setMaterial(0, null) : (t._graphics.setMaterial(0, t._materials[0]),
                h.prototype.updateRenderData.call(t._graphics._assembler, t._graphics, t._graphics))
            }
            ,
            r.fillBuffers = function(t, e) {
                (t._type !== a.Type.IMAGE_STENCIL || t.spriteFrame) && (y(t),
                g(t, e),
                A(t, e),
                x(e)),
                t.node._renderFlag |= o.FLAG_UPDATE_RENDER_DATA
            }
            ,
            r.postFillBuffers = function(t, e) {
                (t._type !== a.Type.IMAGE_STENCIL || t.spriteFrame) && v(t, e),
                t.node._renderFlag |= o.FLAG_UPDATE_RENDER_DATA
            }
            ,
            n
        }
        )(l);
        i.MaskAssembler = b,
        r.default.register(a, b)
    }
    ), {
        "../../../../renderer/gfx": 315,
        "../../../components/CCMask": 111,
        "../../assembler": 221,
        "../../render-flow": 225,
        "../vertex-format": 256,
        "./graphics": 235,
        "./sprite/2d/simple": 246
    }],
    243: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("../../../../../components/CCSprite").FillType
          , o = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.updateRenderData = function(t) {
                var e = t._spriteFrame;
                if (this.packToDynamicAtlas(t, e),
                t._vertsDirty) {
                    var i = t._fillStart
                      , n = t._fillRange;
                    n < 0 && (i += n,
                    n = -n),
                    n = (n = (n = i + n) > 1 ? 1 : n) < 0 ? 0 : n;
                    var r = (i = (i = i > 1 ? 1 : i) < 0 ? 0 : i) + (n = (n -= i) < 0 ? 0 : n);
                    r = r > 1 ? 1 : r,
                    this.updateUVs(t, i, r),
                    this.updateVerts(t, i, r),
                    t._vertsDirty = !1
                }
            }
            ,
            r.updateUVs = function(t, e, i) {
                var n, r, s, o, l, h, c, u, _, f, d = t._spriteFrame, p = d._texture.width, m = d._texture.height, y = d._rect;
                d._rotated ? (n = y.x / p,
                r = (y.y + y.width) / m,
                s = l = n,
                c = _ = (y.x + y.height) / p,
                h = f = r,
                o = u = y.y / m) : (n = y.x / p,
                r = (y.y + y.height) / m,
                s = c = n,
                l = _ = (y.x + y.width) / p,
                o = h = r,
                u = f = y.y / m);
                var v = this._renderData.vDatas[0]
                  , g = this.uvOffset
                  , A = this.floatsPerVert;
                switch (t._fillType) {
                case a.HORIZONTAL:
                    v[g] = s + (l - s) * e,
                    v[g + 1] = o + (h - o) * e,
                    v[g + A] = s + (l - s) * i,
                    v[g + A + 1] = o + (h - o) * i,
                    v[g + 2 * A] = c + (_ - c) * e,
                    v[g + 2 * A + 1] = u + (f - u) * e,
                    v[g + 3 * A] = c + (_ - c) * i,
                    v[g + 3 * A + 1] = u + (f - u) * i;
                    break;
                case a.VERTICAL:
                    v[g] = s + (c - s) * e,
                    v[g + 1] = o + (u - o) * e,
                    v[g + A] = l + (_ - l) * e,
                    v[g + A + 1] = h + (f - h) * e,
                    v[g + 2 * A] = s + (c - s) * i,
                    v[g + 2 * A + 1] = o + (u - o) * i,
                    v[g + 3 * A] = l + (_ - l) * i,
                    v[g + 3 * A + 1] = h + (f - h) * i;
                    break;
                default:
                    cc.errorID(2626)
                }
            }
            ,
            r.updateVerts = function(t, e, i) {
                var n, r = t.node, s = r.width, o = r.height, l = r.anchorX * s, h = r.anchorY * o, c = -l, u = -h, _ = s - l, f = o - h;
                switch (t._fillType) {
                case a.HORIZONTAL:
                    n = c + (_ - c) * i,
                    c += (_ - c) * e,
                    _ = n;
                    break;
                case a.VERTICAL:
                    n = u + (f - u) * i,
                    u += (f - u) * e,
                    f = n;
                    break;
                default:
                    cc.errorID(2626)
                }
                var d = this._local;
                d[0] = c,
                d[1] = u,
                d[2] = _,
                d[3] = f,
                this.updateWorldVerts(t)
            }
            ,
            n
        }
        )(r.default);
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../../../../../components/CCSprite": 120,
        "../../../../assembler-2d": 219
    }],
    244: [(function(t, e, i) {
        "use strict";
        var n;
        function r(t, e) {
            return (r = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0;
        var s = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            r(e, i);
            var s = n.prototype;
            return s.initData = function() {
                this._renderData.createFlexData(0, 4, 6, this.getVfmt())
            }
            ,
            s.updateRenderData = function(t) {
                this.packToDynamicAtlas(t, t._spriteFrame);
                var e = t.spriteFrame;
                if (e) {
                    var i = e.vertices;
                    if (i) {
                        this.verticesCount = i.x.length,
                        this.indicesCount = i.triangles.length;
                        var n = this._renderData._flexBuffer;
                        n.reserve(this.verticesCount, this.indicesCount) && (this.updateColor(t),
                        t._vertsDirty = !0),
                        n.used(this.verticesCount, this.indicesCount),
                        this.updateIndices(i.triangles),
                        t._vertsDirty && (this.updateUVs(t),
                        this.updateVerts(t),
                        this.updateWorldVerts(t),
                        t._vertsDirty = !1)
                    }
                }
            }
            ,
            s.updateIndices = function(t) {
                this._renderData.iDatas[0].set(t)
            }
            ,
            s.updateUVs = function(t) {
                for (var e = t.spriteFrame.vertices, i = e.nu, n = e.nv, r = this.uvOffset, s = this.floatsPerVert, a = this._renderData.vDatas[0], o = 0; o < i.length; o++) {
                    var l = s * o + r;
                    a[l] = i[o],
                    a[l + 1] = n[o]
                }
            }
            ,
            s.updateVerts = function(t) {
                var e = t.node
                  , i = Math.abs(e.width)
                  , n = Math.abs(e.height)
                  , r = e.anchorX * i
                  , s = e.anchorY * n
                  , a = t.spriteFrame
                  , o = a.vertices
                  , l = o.x
                  , h = o.y
                  , c = a._originalSize.width
                  , u = a._originalSize.height
                  , _ = a._rect.width
                  , f = a._rect.height
                  , d = a._offset.x + (c - _) / 2
                  , p = a._offset.y + (u - f) / 2
                  , m = i / (t.trim ? _ : c)
                  , y = n / (t.trim ? f : u)
                  , v = this._local;
                if (t.trim)
                    for (var g = 0, A = l.length; g < A; g++) {
                        var x = 2 * g;
                        v[x] = (l[g] - d) * m - r,
                        v[x + 1] = (u - h[g] - p) * y - s
                    }
                else
                    for (var b = 0, C = l.length; b < C; b++) {
                        var T = 2 * b;
                        v[T] = l[b] * m - r,
                        v[T + 1] = (u - h[b]) * y - s
                    }
                if (a._flipX)
                    for (var S = 0, w = this.verticesCount; S < w; S++)
                        v[2 * S] = i - v[2 * S] - 2 * r;
                if (a._flipY)
                    for (var E = 0, M = this.verticesCount; E < M; E++)
                        v[2 * E + 1] = n - v[2 * E + 1] - 2 * s
            }
            ,
            s.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], a = e[12], o = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0, _ = this.verticesCount; u < _; u++) {
                    var f = l[2 * u]
                      , d = l[2 * u + 1];
                    h[c * u] = f * i + d * r + a,
                    h[c * u + 1] = f * n + d * s + o
                }
            }
            ,
            n
        }
        )(((n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        }).default);
        i.default = s,
        e.exports = i.default
    }
    ), {
        "../../../../assembler-2d": 219
    }],
    245: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = 2 * Math.PI
          , o = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)]
          , l = [0, 0, 0, 0]
          , h = [0, 0, 0, 0, 0, 0, 0, 0]
          , c = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)]
          , u = [cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0), cc.v2(0, 0)]
          , _ = cc.v2(0, 0)
          , f = [];
        function d(t, e, i, n, r, s, a) {
            var o, l, h = Math.sin(s), c = Math.cos(s);
            if (0 !== Math.cos(s)) {
                if (o = h / c,
                (t - r.x) * c > 0) {
                    var u = r.y + o * (t - r.x);
                    a[0].x = t,
                    a[0].y = u
                }
                if ((e - r.x) * c > 0) {
                    var _ = r.y + o * (e - r.x);
                    a[2].x = e,
                    a[2].y = _
                }
            }
            if (0 !== Math.sin(s)) {
                if (l = c / h,
                (n - r.y) * h > 0) {
                    var f = r.x + l * (n - r.y);
                    a[3].x = f,
                    a[3].y = n
                }
                if ((i - r.y) * h > 0) {
                    var d = r.x + l * (i - r.y);
                    a[1].x = d,
                    a[1].y = i
                }
            }
        }
        function p(t) {
            var e = t.node
              , i = e.width
              , n = e.height
              , r = e.anchorX * i
              , s = e.anchorY * n
              , a = -r
              , h = -s
              , c = i - r
              , u = n - s
              , d = l;
            d[0] = a,
            d[1] = h,
            d[2] = c,
            d[3] = u;
            var p = t._fillCenter
              , m = _.x = Math.min(Math.max(0, p.x), 1) * (c - a) + a
              , y = _.y = Math.min(Math.max(0, p.y), 1) * (u - h) + h;
            o[0].x = o[3].x = a,
            o[1].x = o[2].x = c,
            o[0].y = o[1].y = h,
            o[2].y = o[3].y = u,
            f.length = 0,
            m !== d[0] && (f[0] = [3, 0]),
            m !== d[2] && (f[2] = [1, 2]),
            y !== d[1] && (f[1] = [0, 1]),
            y !== d[3] && (f[3] = [2, 3])
        }
        function m(t, e) {
            var i, n;
            if (i = e.x - t.x,
            n = e.y - t.y,
            0 !== i || 0 !== n) {
                if (0 === i)
                    return n > 0 ? .5 * Math.PI : 1.5 * Math.PI;
                var r = Math.atan(n / i);
                return i < 0 && (r += Math.PI),
                r
            }
        }
        var y = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.initData = function() {
                this._renderData.createFlexData(0, 4, 6, this.getVfmt()),
                this.updateIndices()
            }
            ,
            r.updateRenderData = function(e) {
                t.prototype.updateRenderData.call(this, e);
                var i, n, r, s, o, f, m, y, v, g = e.spriteFrame;
                if (this.packToDynamicAtlas(e, g),
                e._vertsDirty) {
                    var A = e._fillStart
                      , x = e._fillRange;
                    for (x < 0 && (A += x,
                    x = -x); A >= 1; )
                        A -= 1;
                    for (; A < 0; )
                        A += 1;
                    A *= a,
                    x *= a,
                    p(e),
                    f = (i = g)._texture.width,
                    m = i._texture.height,
                    y = i._rect,
                    v = h,
                    i._rotated ? (n = y.x / f,
                    r = (y.x + y.height) / f,
                    s = y.y / m,
                    o = (y.y + y.width) / m,
                    v[0] = v[2] = n,
                    v[4] = v[6] = r,
                    v[3] = v[7] = o,
                    v[1] = v[5] = s) : (n = y.x / f,
                    r = (y.x + y.width) / f,
                    s = y.y / m,
                    o = (y.y + y.height) / m,
                    v[0] = v[4] = n,
                    v[2] = v[6] = r,
                    v[1] = v[3] = o,
                    v[5] = v[7] = s),
                    d(l[0], l[2], l[1], l[3], _, A, c),
                    d(l[0], l[2], l[1], l[3], _, A + x, u),
                    this.updateVerts(e, A, x),
                    e._vertsDirty = !1
                }
            }
            ,
            r.updateVerts = function(t, e, i) {
                var n = e + i
                  , r = this._local;
                r.length = 0;
                for (var s = 0, l = 3 * this.floatsPerVert, h = 0; h < 4; ++h) {
                    var d = f[h];
                    if (d)
                        if (i >= a)
                            r.length = s + l,
                            this._generateTriangle(r, s, _, o[d[0]], o[d[1]]),
                            s += l;
                        else {
                            var p = m(_, o[d[0]])
                              , y = m(_, o[d[1]]);
                            y < p && (y += a),
                            p -= a,
                            y -= a;
                            for (var v = 0; v < 3; ++v)
                                p >= n || (p >= e ? (r.length = s + l,
                                y >= n ? this._generateTriangle(r, s, _, o[d[0]], u[h]) : this._generateTriangle(r, s, _, o[d[0]], o[d[1]]),
                                s += l) : y <= e || (y <= n ? (r.length = s + l,
                                this._generateTriangle(r, s, _, c[h], o[d[1]]),
                                s += l) : (r.length = s + l,
                                this._generateTriangle(r, s, _, c[h], u[h]),
                                s += l))),
                                p += a,
                                y += a
                        }
                }
                this.allocWorldVerts(t),
                this.updateWorldVerts(t)
            }
            ,
            r.allocWorldVerts = function(t) {
                var e = t.node._color._val
                  , i = this._renderData
                  , n = this.floatsPerVert
                  , r = this._local
                  , s = r.length / n;
                this.verticesCount = this.indicesCount = s;
                var a = i._flexBuffer;
                a.reserve(s, s) && this.updateIndices(),
                a.used(this.verticesCount, this.indicesCount);
                for (var o = i.vDatas[0], l = i.uintVDatas[0], h = this.uvOffset, c = 0; c < r.length; c += n) {
                    var u = c + h;
                    o[u] = r[u],
                    o[u + 1] = r[u + 1],
                    l[u + 2] = e
                }
            }
            ,
            r.updateIndices = function() {
                for (var t = this._renderData.iDatas[0], e = 0; e < t.length; e++)
                    t[e] = e
            }
            ,
            r.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], a = e[12], o = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < l.length; u += c) {
                    var _ = l[u]
                      , f = l[u + 1];
                    h[u] = _ * i + f * r + a,
                    h[u + 1] = _ * n + f * s + o
                }
            }
            ,
            r._generateTriangle = function(t, e, i, n, r) {
                var s = l
                  , a = s[0]
                  , o = s[1]
                  , h = s[2]
                  , c = s[3]
                  , u = this.floatsPerVert;
                t[e] = i.x,
                t[e + 1] = i.y,
                t[e + u] = n.x,
                t[e + u + 1] = n.y,
                t[e + 2 * u] = r.x,
                t[e + 2 * u + 1] = r.y;
                var _, f, d = this.uvOffset;
                _ = (i.x - a) / (h - a),
                f = (i.y - o) / (c - o),
                this._generateUV(_, f, t, e + d),
                _ = (n.x - a) / (h - a),
                f = (n.y - o) / (c - o),
                this._generateUV(_, f, t, e + u + d),
                _ = (r.x - a) / (h - a),
                f = (r.y - o) / (c - o),
                this._generateUV(_, f, t, e + 2 * u + d)
            }
            ,
            r._generateUV = function(t, e, i, n) {
                var r = h[0] + (h[2] - h[0]) * t
                  , s = h[4] + (h[6] - h[4]) * t
                  , a = h[1] + (h[3] - h[1]) * t
                  , o = h[5] + (h[7] - h[5]) * t;
                i[n] = r + (s - r) * e,
                i[n + 1] = a + (o - a) * e
            }
            ,
            n
        }
        )(r.default);
        i.default = y,
        e.exports = i.default
    }
    ), {
        "../../../../assembler-2d": 219
    }],
    246: [(function(t, e, i) {
        "use strict";
        var n;
        function r(t, e) {
            return (r = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0;
        var s = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            r(e, i);
            var s = n.prototype;
            return s.updateRenderData = function(t) {
                this.packToDynamicAtlas(t, t._spriteFrame),
                t._vertsDirty && (this.updateUVs(t),
                this.updateVerts(t),
                t._vertsDirty = !1)
            }
            ,
            s.updateUVs = function(t) {
                for (var e = t._spriteFrame.uv, i = this.uvOffset, n = this.floatsPerVert, r = this._renderData.vDatas[0], s = 0; s < 4; s++) {
                    var a = 2 * s
                      , o = n * s + i;
                    r[o] = e[a],
                    r[o + 1] = e[a + 1]
                }
            }
            ,
            s.updateVerts = function(t) {
                var e, i, n, r, s = t.node, a = s.width, o = s.height, l = s.anchorX * a, h = s.anchorY * o;
                if (t.trim)
                    e = -l,
                    i = -h,
                    n = a - l,
                    r = o - h;
                else {
                    var c = t.spriteFrame
                      , u = c._originalSize.width
                      , _ = c._originalSize.height
                      , f = c._rect.width
                      , d = c._rect.height
                      , p = c._offset
                      , m = a / u
                      , y = o / _
                      , v = p.x + (u - f) / 2
                      , g = p.x - (u - f) / 2;
                    e = v * m - l,
                    i = (p.y + (_ - d) / 2) * y - h,
                    n = a + g * m - l,
                    r = o + (p.y - (_ - d) / 2) * y - h
                }
                var A = this._local;
                A[0] = e,
                A[1] = i,
                A[2] = n,
                A[3] = r,
                this.updateWorldVerts(t)
            }
            ,
            n
        }
        )(((n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        }).default);
        i.default = s,
        e.exports = i.default
    }
    ), {
        "../../../../assembler-2d": 219
    }],
    247: [(function(t, e, i) {
        "use strict";
        var n;
        function r(t, e) {
            return (r = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0;
        var s = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            r(e, i);
            var s = n.prototype;
            return s.initData = function() {
                if (!(this._renderData.meshCount > 0)) {
                    this._renderData.createData(0, this.verticesFloats, this.indicesCount);
                    for (var t = this._renderData.iDatas[0], e = 0, i = 0; i < 3; ++i)
                        for (var n = 0; n < 3; ++n) {
                            var r = 4 * i + n;
                            t[e++] = r,
                            t[e++] = r + 1,
                            t[e++] = r + 4,
                            t[e++] = r + 1,
                            t[e++] = r + 5,
                            t[e++] = r + 4
                        }
                }
            }
            ,
            s.initLocal = function() {
                this._local = [],
                this._local.length = 8
            }
            ,
            s.updateRenderData = function(t) {
                var e = t._spriteFrame;
                this.packToDynamicAtlas(t, e),
                t._vertsDirty && (this.updateUVs(t),
                this.updateVerts(t),
                t._vertsDirty = !1)
            }
            ,
            s.updateVerts = function(t) {
                var e = t.node
                  , i = e.width
                  , n = e.height
                  , r = e.anchorX * i
                  , s = e.anchorY * n
                  , a = t.spriteFrame
                  , o = a.insetLeft
                  , l = a.insetRight
                  , h = a.insetTop
                  , c = a.insetBottom
                  , u = i - o - l
                  , _ = n - h - c
                  , f = i / (o + l)
                  , d = n / (h + c);
                f = isNaN(f) || f > 1 ? 1 : f,
                d = isNaN(d) || d > 1 ? 1 : d,
                u = u < 0 ? 0 : u,
                _ = _ < 0 ? 0 : _;
                var p = this._local;
                p[0] = -r,
                p[1] = -s,
                p[2] = o * f - r,
                p[3] = c * d - s,
                p[4] = p[2] + u,
                p[5] = p[3] + _,
                p[6] = i - r,
                p[7] = n - s,
                this.updateWorldVerts(t)
            }
            ,
            s.updateUVs = function(t) {
                for (var e = this._renderData.vDatas[0], i = t.spriteFrame.uvSliced, n = this.uvOffset, r = this.floatsPerVert, s = 0; s < 4; ++s)
                    for (var a = 0; a < 4; ++a) {
                        var o = 4 * s + a
                          , l = i[o]
                          , h = o * r;
                        e[h + n] = l.u,
                        e[h + n + 1] = l.v
                    }
            }
            ,
            s.updateWorldVerts = function(t) {
                for (var e = t.node._worldMatrix.m, i = e[0], n = e[1], r = e[4], s = e[5], a = e[12], o = e[13], l = this._local, h = this._renderData.vDatas[0], c = this.floatsPerVert, u = 0; u < 4; ++u)
                    for (var _ = l[2 * u + 1], f = 0; f < 4; ++f) {
                        var d = l[2 * f]
                          , p = (4 * u + f) * c;
                        h[p] = d * i + _ * r + a,
                        h[p + 1] = d * n + _ * s + o
                    }
            }
            ,
            n
        }
        )(((n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        }).default);
        i.default = s,
        Object.assign(s.prototype, {
            verticesCount: 16,
            indicesCount: 54
        }),
        e.exports = i.default
    }
    ), {
        "../../../../assembler-2d": 219
    }],
    248: [(function(t, e, i) {
        "use strict";
        var n;
        function r(t, e) {
            return (r = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        i.__esModule = !0,
        i.default = void 0;
        var s = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            r(e, i);
            var s = n.prototype;
            return s.initData = function() {
                this.verticesCount = 0,
                this.contentWidth = 0,
                this.contentHeight = 0,
                this.rectWidth = 0,
                this.rectHeight = 0,
                this.hRepeat = 0,
                this.vRepeat = 0,
                this.row = 0,
                this.col = 0,
                this._renderData.createFlexData(0, 4, 6, this.getVfmt()),
                this._updateIndices()
            }
            ,
            s.initLocal = function() {
                this._local = {
                    x: [],
                    y: []
                }
            }
            ,
            s._updateIndices = function() {
                for (var t = this._renderData.iDatas[0], e = 0, i = 0, n = t.length; e < n; e += 6,
                i += 4)
                    t[e] = i,
                    t[e + 1] = i + 1,
                    t[e + 2] = i + 2,
                    t[e + 3] = i + 1,
                    t[e + 4] = i + 3,
                    t[e + 5] = i + 2
            }
            ,
            s.updateRenderData = function(t) {
                var e = t._spriteFrame;
                this.packToDynamicAtlas(t, e);
                var i = t.node
                  , n = this.contentWidth = Math.abs(i.width)
                  , r = this.contentHeight = Math.abs(i.height)
                  , s = e._rect
                  , a = e.insetLeft
                  , o = e.insetRight
                  , l = s.width - a - o
                  , h = e.insetTop
                  , c = e.insetBottom
                  , u = s.height - h - c;
                this.sizableWidth = n - a - o,
                this.sizableHeight = r - h - c,
                this.sizableWidth = this.sizableWidth > 0 ? this.sizableWidth : 0,
                this.sizableHeight = this.sizableHeight > 0 ? this.sizableHeight : 0;
                var _ = this.hRepeat = 0 === l ? this.sizableWidth : this.sizableWidth / l
                  , f = this.vRepeat = 0 === u ? this.sizableHeight : this.sizableHeight / u
                  , d = (this.row = Math.ceil(f + 2)) * (this.col = Math.ceil(_ + 2));
                this.verticesCount = 4 * d,
                this.indicesCount = 6 * d;
                var p = this._renderData._flexBuffer;
                p.reserve(this.verticesCount, this.indicesCount) && (this._updateIndices(),
                this.updateColor(t)),
                p.used(this.verticesCount, this.indicesCount),
                t._vertsDirty && (this.updateUVs(t),
                this.updateVerts(t),
                t._vertsDirty = !1)
            }
            ,
            s.updateVerts = function(t) {
                var e = t._spriteFrame
                  , i = e._rect
                  , n = t.node
                  , r = n.anchorX * n.width
                  , s = n.anchorY * n.height
                  , a = this.row
                  , o = this.col
                  , l = this.contentWidth
                  , h = this.contentHeight
                  , c = this._local
                  , u = c.x
                  , _ = c.y;
                u.length = _.length = 0;
                var f, d, p = e.insetLeft, m = e.insetRight, y = i.width - p - m, v = e.insetTop, g = e.insetBottom, A = i.height - v - g, x = n.width / (p + m) > 1 ? 1 : n.width / (p + m), b = n.height / (v + g) > 1 ? 1 : n.height / (v + g);
                f = y > 0 ? Math.floor(1e3 * this.sizableWidth) / 1e3 % y == 0 ? y : this.sizableWidth % y : this.sizableWidth,
                d = A > 0 ? Math.floor(1e3 * this.sizableHeight) / 1e3 % A == 0 ? A : this.sizableHeight % A : this.sizableHeight;
                for (var C = 0; C <= o; C++)
                    0 === C ? u[C] = -r : C > 0 && C < o ? u[C] = 1 === C ? p * x + Math.min(y, this.sizableWidth) - r : y > 0 ? C === o - 1 ? p + f + y * (C - 2) - r : p + Math.min(y, this.sizableWidth) + y * (C - 2) - r : p + this.sizableWidth - r : C === o && (u[C] = Math.min(p + this.sizableWidth + m, l) - r);
                for (var T = 0; T <= a; T++)
                    0 === T ? _[T] = -s : T > 0 && T < a ? _[T] = 1 === T ? g * b + Math.min(A, this.sizableHeight) - s : A > 0 ? T === a - 1 ? g + d + (T - 2) * A - s : g + Math.min(A, this.sizableHeight) + (T - 2) * A - s : g + this.sizableHeight - s : T === a && (_[T] = Math.min(g + this.sizableHeight + v, h) - s);
                this.updateWorldVerts(t)
            }
            ,
            s.updateWorldVerts = function(t) {
                for (var e, i, n, r, s = this._renderData, a = this._local, o = a.x, l = a.y, h = s.vDatas[0], c = this.row, u = this.col, _ = t.node._worldMatrix.m, f = _[0], d = _[1], p = _[4], m = _[5], y = _[12], v = _[13], g = this.floatsPerVert, A = 0, x = 0, b = c; x < b; ++x) {
                    n = l[x],
                    r = l[x + 1];
                    for (var C = 0, T = u; C < T; ++C)
                        e = o[C],
                        i = o[C + 1],
                        h[A] = e * f + n * p + y,
                        h[A + 1] = e * d + n * m + v,
                        h[A += g] = i * f + n * p + y,
                        h[A + 1] = i * d + n * m + v,
                        h[A += g] = e * f + r * p + y,
                        h[A + 1] = e * d + r * m + v,
                        h[A += g] = i * f + r * p + y,
                        h[A + 1] = i * d + r * m + v,
                        A += g
                }
            }
            ,
            s.updateUVs = function(t) {
                var e = this._renderData.vDatas[0];
                if (e)
                    for (var i = t._spriteFrame, n = i._rect, r = i.insetLeft, s = i.insetRight, a = n.width - r - s, o = i.insetTop, l = i.insetBottom, h = n.height - o - l, c = this.row, u = this.col, _ = this.hRepeat, f = this.vRepeat, d = 0, p = 0, m = t.spriteFrame.uv, y = t.spriteFrame.uvSliced, v = t.spriteFrame._rotated, g = this.floatsPerVert, A = this.uvOffset, x = [], b = [], C = 0, T = c; C < T; ++C) {
                        p = this.sizableHeight > h ? this.sizableHeight >= C * h ? 1 : f % 1 : f;
                        for (var S = 0, w = u; S < w; ++S)
                            d = this.sizableWidth > a ? this.sizableWidth >= S * a ? 1 : _ % 1 : _,
                            v ? (0 === C ? (x[0] = y[0].u,
                            x[1] = y[0].u,
                            x[2] = y[4].u + (y[8].u - y[4].u) * p) : C < c - 1 ? (x[0] = y[4].u,
                            x[1] = y[4].u,
                            x[2] = y[4].u + (y[8].u - y[4].u) * p) : C === c - 1 && (x[0] = y[8].u,
                            x[1] = y[8].u,
                            x[2] = y[12].u),
                            0 === S ? (b[0] = y[0].v,
                            b[1] = y[1].v + (y[2].v - y[1].v) * d,
                            b[2] = y[0].v) : S < u - 1 ? (b[0] = y[1].v,
                            b[1] = y[1].v + (y[2].v - y[1].v) * d,
                            b[2] = y[1].v) : S === u - 1 && (b[0] = y[2].v,
                            b[1] = y[3].v,
                            b[2] = y[2].v),
                            x[3] = x[2],
                            b[3] = b[1]) : (0 === S ? (x[0] = y[0].u,
                            x[1] = y[1].u + (y[2].u - y[1].u) * d,
                            x[2] = m[0]) : S < u - 1 ? (x[0] = y[1].u,
                            x[1] = y[1].u + (y[2].u - y[1].u) * d,
                            x[2] = y[1].u) : S === u - 1 && (x[0] = y[2].u,
                            x[1] = y[3].u,
                            x[2] = y[2].u),
                            0 === C ? (b[0] = y[0].v,
                            b[1] = y[0].v,
                            b[2] = y[4].v + (y[8].v - y[4].v) * p) : C < c - 1 ? (b[0] = y[4].v,
                            b[1] = y[4].v,
                            b[2] = y[4].v + (y[8].v - y[4].v) * p) : C === c - 1 && (b[0] = y[8].v,
                            b[1] = y[8].v,
                            b[2] = y[12].v),
                            x[3] = x[1],
                            b[3] = b[2]),
                            e[A] = x[0],
                            e[A + 1] = b[0],
                            e[A += g] = x[1],
                            e[A + 1] = b[1],
                            e[A += g] = x[2],
                            e[A + 1] = b[2],
                            e[A += g] = x[3],
                            e[A + 1] = b[3],
                            A += g
                    }
            }
            ,
            n
        }
        )(((n = t("../../../../assembler-2d")) && n.__esModule ? n : {
            default: n
        }).default);
        i.default = s,
        e.exports = i.default
    }
    ), {
        "../../../../assembler-2d": 219
    }],
    249: [(function(t) {
        "use strict";
        var e = p(t("../../../assembler"))
          , i = t("../../../../components/CCSprite")
          , n = p(t("./2d/simple"))
          , r = p(t("./2d/sliced"))
          , s = p(t("./2d/tiled"))
          , a = p(t("./2d/radial-filled"))
          , o = p(t("./2d/bar-filled"))
          , l = p(t("./2d/mesh"))
          , h = p(t("./3d/simple"))
          , c = p(t("./3d/sliced"))
          , u = p(t("./3d/tiled"))
          , _ = p(t("./3d/radial-filled"))
          , f = p(t("./3d/bar-filled"))
          , d = p(t("./3d/mesh"));
        function p(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var m = {
            getConstructor: function(t) {
                var e = t.node.is3DNode
                  , p = e ? h.default : n.default;
                switch (t.type) {
                case i.Type.SLICED:
                    p = e ? c.default : r.default;
                    break;
                case i.Type.TILED:
                    p = e ? u.default : s.default;
                    break;
                case i.Type.FILLED:
                    p = t._fillType === i.FillType.RADIAL ? e ? _.default : a.default : e ? f.default : o.default;
                    break;
                case i.Type.MESH:
                    p = e ? d.default : l.default
                }
                return p
            },
            Simple: n.default,
            Sliced: r.default,
            Tiled: s.default,
            RadialFilled: a.default,
            BarFilled: o.default,
            Mesh: l.default,
            Simple3D: h.default,
            Sliced3D: c.default,
            Tiled3D: u.default,
            RadialFilled3D: _.default,
            BarFilled3D: f.default,
            Mesh3D: d.default
        };
        e.default.register(cc.Sprite, m)
    }
    ), {
        "../../../../components/CCSprite": 120,
        "../../../assembler": 221,
        "./2d/bar-filled": 243,
        "./2d/mesh": 244,
        "./2d/radial-filled": 245,
        "./2d/simple": 246,
        "./2d/sliced": 247,
        "./2d/tiled": 248,
        "./3d/bar-filled": void 0,
        "./3d/mesh": void 0,
        "./3d/radial-filled": void 0,
        "./3d/simple": void 0,
        "./3d/sliced": void 0,
        "./3d/tiled": void 0
    }],
    250: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t(t, e, i, n, r) {
                this._handler = t,
                this._index = e,
                this._vfmt = r,
                this._verticesBytes = r._bytes,
                this._initVerticesCount = i,
                this._initIndicesCount = n,
                this.reset()
            }
            var e = t.prototype;
            return e._reallocVData = function(t, e) {
                this.vData = new Float32Array(t),
                this.uintVData = new Uint32Array(this.vData.buffer),
                e && this.vData.set(e),
                this._handler.updateMesh(this._index, this.vData, this.iData)
            }
            ,
            e._reallocIData = function(t, e) {
                this.iData = new Uint16Array(t),
                e && this.iData.set(e),
                this._handler.updateMesh(this._index, this.vData, this.iData)
            }
            ,
            e.reserve = function(t, e) {
                var i = t * this._verticesBytes >> 2
                  , n = this.vData.length
                  , r = !1;
                if (i > n) {
                    for (; n < i; )
                        n *= 2;
                    this._reallocVData(n, this.vData),
                    r = !0
                }
                var s = this.iData.length;
                if (e > s) {
                    for (; s < e; )
                        s *= 2;
                    this._reallocIData(e, this.iData),
                    r = !0
                }
                return r
            }
            ,
            e.used = function(t, e) {
                this.usedVertices = t,
                this.usedIndices = e,
                this.usedVerticesFloats = t * this._verticesBytes >> 2,
                this._handler.updateMeshRange(t, e)
            }
            ,
            e.reset = function() {
                var t = this._initVerticesCount * this._verticesBytes >> 2;
                this._reallocVData(t),
                this._reallocIData(this._initIndicesCount),
                this.usedVertices = 0,
                this.usedVerticesFloats = 0,
                this.usedIndices = 0
            }
            ,
            t
        }
        )();
        i.default = n,
        cc.FlexBuffer = n,
        e.exports = i.default
    }
    ), {}],
    251: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../../renderer/gfx")) && i.__esModule ? i : {
            default: i
        }, r = (cc.sys.os === cc.sys.OS_IOS || cc.sys.os === cc.sys.OS_OSX) && cc.sys.isBrowser && /(OS 1[4-9])|(Version\/1[4-9])/.test(window.navigator.userAgent), s = cc.Class({
            name: "cc.MeshBuffer",
            ctor: function(t, e) {
                this.init(t, e)
            },
            init: function(t, e) {
                this.byteOffset = 0,
                this.indiceOffset = 0,
                this.vertexOffset = 0,
                this.indiceStart = 0,
                this._dirty = !1,
                this._vertexFormat = e,
                this._vertexBytes = this._vertexFormat._bytes,
                this._arrOffset = 0,
                this._vbArr = [],
                this._vb = new n.default.VertexBuffer(t._device,e,n.default.USAGE_DYNAMIC,new ArrayBuffer,0),
                this._vbArr[0] = this._vb,
                this._ibArr = [],
                this._ib = new n.default.IndexBuffer(t._device,n.default.INDEX_FMT_UINT16,n.default.USAGE_STATIC,new ArrayBuffer,0),
                this._ibArr[0] = this._ib,
                this._vData = null,
                this._uintVData = null,
                this._iData = null,
                this._batcher = t,
                this._initVDataCount = 256 * e._bytes,
                this._initIDataCount = 1536,
                this._offsetInfo = {
                    byteOffset: 0,
                    vertexOffset: 0,
                    indiceOffset: 0
                },
                this._reallocBuffer()
            },
            uploadData: function() {
                if (0 !== this.byteOffset && this._dirty) {
                    var t = new Float32Array(this._vData.buffer,0,this.byteOffset >> 2)
                      , e = new Uint16Array(this._iData.buffer,0,this.indiceOffset);
                    this._vb.update(0, t),
                    this._ib.update(0, e),
                    this._dirty = !1
                }
            },
            switchBuffer: function() {
                var t = ++this._arrOffset;
                this.byteOffset = 0,
                this.vertexOffset = 0,
                this.indiceOffset = 0,
                this.indiceStart = 0,
                t < this._vbArr.length ? (this._vb = this._vbArr[t],
                this._ib = this._ibArr[t]) : (this._vb = new n.default.VertexBuffer(this._batcher._device,this._vertexFormat,n.default.USAGE_DYNAMIC,new ArrayBuffer,0),
                this._vbArr[t] = this._vb,
                this._ib = new n.default.IndexBuffer(this._batcher._device,n.default.INDEX_FMT_UINT16,n.default.USAGE_STATIC,new ArrayBuffer,0),
                this._ibArr[t] = this._ib)
            },
            checkAndSwitchBuffer: function(t) {
                this.vertexOffset + t > 65535 && (this.uploadData(),
                this._batcher._flush(),
                this.switchBuffer())
            },
            requestStatic: function(t, e) {
                this.checkAndSwitchBuffer(t);
                var i = this.byteOffset + t * this._vertexBytes
                  , n = this.indiceOffset + e
                  , r = this._vData.byteLength
                  , s = this._iData.length;
                if (i > r || n > s) {
                    for (; r < i || s < n; )
                        this._initVDataCount *= 2,
                        this._initIDataCount *= 2,
                        r = 4 * this._initVDataCount,
                        s = this._initIDataCount;
                    this._reallocBuffer()
                }
                this._updateOffset(t, e, i)
            },
            _updateOffset: function(t, e, i) {
                var n = this._offsetInfo;
                n.vertexOffset = this.vertexOffset,
                this.vertexOffset += t,
                n.indiceOffset = this.indiceOffset,
                this.indiceOffset += e,
                n.byteOffset = this.byteOffset,
                this.byteOffset = i,
                this._dirty = !0
            },
            request: function(t, e) {
                return this._batcher._buffer !== this && (this._batcher._flush(),
                this._batcher._buffer = this),
                this.requestStatic(t, e),
                this._offsetInfo
            },
            _reallocBuffer: function() {
                this._reallocVData(!0),
                this._reallocIData(!0)
            },
            _reallocVData: function(t) {
                var e;
                this._vData && (e = new Uint8Array(this._vData.buffer)),
                this._vData = new Float32Array(this._initVDataCount),
                this._uintVData = new Uint32Array(this._vData.buffer);
                var i = new Uint8Array(this._uintVData.buffer);
                if (e && t)
                    for (var n = 0, r = e.length; n < r; n++)
                        i[n] = e[n]
            },
            _reallocIData: function(t) {
                var e = this._iData;
                if (this._iData = new Uint16Array(this._initIDataCount),
                e && t)
                    for (var i = this._iData, n = 0, r = e.length; n < r; n++)
                        i[n] = e[n]
            },
            reset: function() {
                this._arrOffset = 0,
                this._vb = this._vbArr[0],
                this._ib = this._ibArr[0],
                this.byteOffset = 0,
                this.indiceOffset = 0,
                this.vertexOffset = 0,
                this.indiceStart = 0,
                this._dirty = !1
            },
            destroy: function() {
                this.reset();
                for (var t = 0; t < this._vbArr.length; t++)
                    this._vbArr[t].destroy();
                this._vbArr = null;
                for (var e = 0; e < this._ibArr.length; e++)
                    this._ibArr[e].destroy();
                this._ibArr = null,
                this._ib = null,
                this._vb = null
            },
            forwardIndiceStartToOffset: function() {
                this.indiceStart = this.indiceOffset
            }
        });
        r && (s.prototype.checkAndSwitchBuffer = function(t) {
            this.vertexOffset + t > 65535 && (this.uploadData(),
            this._batcher._flush())
        }
        ,
        s.prototype.forwardIndiceStartToOffset = function() {
            this.uploadData(),
            this.switchBuffer()
        }
        ),
        cc.MeshBuffer = e.exports = s
    }
    ), {
        "../../../renderer/gfx": 315
    }],
    252: [(function(t, e) {
        "use strict";
        var i = s(t("../../../renderer/core/input-assembler"))
          , n = s(t("../../../renderer/memop/recycle-pool"))
          , r = s(t("../../../renderer/scene/model"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var a = t("./vertex-format")
          , o = a.vfmtPosUvColor
          , l = a.vfmt3D
          , h = t("./quad-buffer")
          , c = t("./mesh-buffer")
          , u = t("./spine-buffer")
          , _ = t("../../assets/material/CCMaterial")
          , f = (new (t("../../platform/id-generater"))("VertextFormat"),
        {})
          , d = new _
          , p = new i.default;
        p._count = 0;
        var m = function(t, e) {
            this._renderScene = e,
            this._device = t,
            this.walking = !1,
            this.material = d,
            this.cullingMask = 1,
            this._iaPool = new n.default(function() {
                return new i.default
            }
            ,16),
            this._modelPool = new n.default(function() {
                return new r.default
            }
            ,16),
            this._quadBuffer = this.getBuffer("quad", o),
            this._meshBuffer = this.getBuffer("mesh", o),
            this._quadBuffer3D = this.getBuffer("quad", l),
            this._meshBuffer3D = this.getBuffer("mesh", l),
            this._buffer = this._meshBuffer,
            this._batchedModels = [],
            this._dummyNode = new cc.Node,
            this._sortKey = 0,
            this.node = this._dummyNode,
            this.parentOpacity = 1,
            this.parentOpacityDirty = 0,
            this.worldMatDirty = 0
        };
        m.prototype = {
            constructor: m,
            reset: function() {
                this._iaPool.reset();
                for (var t = this._renderScene, e = this._batchedModels, i = 0; i < e.length; ++i)
                    e[i].setInputAssembler(null),
                    e[i].setEffect(null),
                    t.removeModel(e[i]);
                for (var n in this._modelPool.reset(),
                e.length = 0,
                this._sortKey = 0,
                f)
                    f[n].reset();
                this._buffer = this._meshBuffer,
                this.node = this._dummyNode,
                this.material = d,
                this.cullingMask = 1,
                this.parentOpacity = 1,
                this.parentOpacityDirty = 0,
                this.worldMatDirty = 0
            },
            _flushMaterial: function(t) {
                if (t) {
                    this.material = t;
                    var e = t.effect;
                    if (e) {
                        var i = this._modelPool.add();
                        this._batchedModels.push(i),
                        i.sortKey = this._sortKey++,
                        i._cullingMask = this.cullingMask,
                        i.setNode(this.node),
                        i.setEffect(e, null),
                        i.setInputAssembler(p),
                        this._renderScene.addModel(i)
                    }
                }
            },
            _flush: function() {
                var t = this.material
                  , e = this._buffer
                  , i = e.indiceOffset - e.indiceStart;
                if (this.walking && t && !(i <= 0)) {
                    var n = t.effect;
                    if (n) {
                        var r = this._iaPool.add();
                        r._vertexBuffer = e._vb,
                        r._indexBuffer = e._ib,
                        r._start = e.indiceStart,
                        r._count = i;
                        var s = this._modelPool.add();
                        this._batchedModels.push(s),
                        s.sortKey = this._sortKey++,
                        s._cullingMask = this.cullingMask,
                        s.setNode(this.node),
                        s.setEffect(n),
                        s.setInputAssembler(r),
                        this._renderScene.addModel(s),
                        e.forwardIndiceStartToOffset()
                    }
                }
            },
            _flushIA: function(t) {
                if (t) {
                    var e = this.material.effect;
                    if (e) {
                        var i = this._modelPool.add();
                        this._batchedModels.push(i),
                        i.sortKey = this._sortKey++,
                        i._cullingMask = this.cullingMask,
                        i.setNode(this.node),
                        i.setEffect(e),
                        i.setInputAssembler(t),
                        this._renderScene.addModel(i)
                    }
                }
            },
            terminate: function() {
                for (var t in cc.dynamicAtlasManager && cc.dynamicAtlasManager.enabled && cc.dynamicAtlasManager.update(),
                this._flush(),
                f)
                    f[t].uploadData();
                this.walking = !1
            },
            getBuffer: function(t, e) {
                var i = t + e.getHash()
                  , n = f[i];
                if (!n) {
                    if ("mesh" === t)
                        n = new c(this,e);
                    else if ("quad" === t)
                        n = new h(this,e);
                    else {
                        if ("spine" !== t)
                            return cc.error("Not support buffer type [" + t + "]"),
                            null;
                        n = new u(this,e)
                    }
                    f[i] = n
                }
                return n
            }
        },
        e.exports = m
    }
    ), {
        "../../../renderer/core/input-assembler": 305,
        "../../../renderer/memop/recycle-pool": 330,
        "../../../renderer/scene/model": 336,
        "../../assets/material/CCMaterial": 80,
        "../../platform/id-generater": 210,
        "./mesh-buffer": 251,
        "./quad-buffer": 253,
        "./spine-buffer": 255,
        "./vertex-format": 256
    }],
    253: [(function(t, e) {
        "use strict";
        var i = t("./mesh-buffer")
          , n = cc.Class({
            name: "cc.QuadBuffer",
            extends: i,
            _fillQuadBuffer: function() {
                for (var t = this._initIDataCount / 6, e = this._iData, i = 0, n = 0; i < t; i++) {
                    var r = 4 * i;
                    e[n++] = r,
                    e[n++] = r + 1,
                    e[n++] = r + 2,
                    e[n++] = r + 1,
                    e[n++] = r + 3,
                    e[n++] = r + 2
                }
                var s = new Uint16Array(this._iData.buffer,0,6 * t);
                this._ib.update(0, s)
            },
            uploadData: function() {
                if (0 !== this.byteOffset && this._dirty) {
                    var t = new Float32Array(this._vData.buffer,0,this.byteOffset >> 2);
                    this._vb.update(0, t),
                    this._dirty = !1
                }
            },
            switchBuffer: function() {
                this._super();
                var t = new Uint16Array(this._iData.buffer,0,this._initIDataCount);
                this._ib.update(0, t)
            },
            _reallocBuffer: function() {
                this._reallocVData(!0),
                this._reallocIData(),
                this._fillQuadBuffer()
            }
        });
        cc.QuadBuffer = e.exports = n
    }
    ), {
        "./mesh-buffer": 251
    }],
    254: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = a;
        var n, r = (n = t("./flex-buffer")) && n.__esModule ? n : {
            default: n
        }, s = t("./vertex-format");
        function a() {
            this.vDatas = [],
            this.uintVDatas = [],
            this.iDatas = [],
            this.meshCount = 0,
            this._infos = null,
            this._flexBuffer = null
        }
        cc.js.mixin(a.prototype, {
            init: function() {},
            clear: function() {
                this.vDatas.length = 0,
                this.iDatas.length = 0,
                this.uintVDatas.length = 0,
                this.meshCount = 0,
                this._infos = null,
                this._flexBuffer && this._flexBuffer.reset()
            },
            updateMesh: function(t, e, i) {
                this.vDatas[t] = e,
                this.uintVDatas[t] = new Uint32Array(e.buffer,0,e.length),
                this.iDatas[t] = i,
                this.meshCount = this.vDatas.length
            },
            updateMeshRange: function() {},
            createData: function(t, e, i) {
                var n = new Float32Array(e)
                  , r = new Uint16Array(i);
                this.updateMesh(t, n, r)
            },
            createQuadData: function(t, e, i) {
                this.createData(t, e, i),
                this.initQuadIndices(this.iDatas[t])
            },
            createFlexData: function(t, e, i, n) {
                n = n || s.vfmtPosUvColor,
                this._flexBuffer = new r.default(this,t,e,i,n)
            },
            initQuadIndices: function(t) {
                for (var e = t.length / 6, i = 0, n = 0; i < e; i++) {
                    var r = 4 * i;
                    t[n++] = r,
                    t[n++] = r + 1,
                    t[n++] = r + 2,
                    t[n++] = r + 1,
                    t[n++] = r + 3,
                    t[n++] = r + 2
                }
            }
        }),
        cc.RenderData = a,
        e.exports = i.default
    }
    ), {
        "./flex-buffer": 250,
        "./vertex-format": 256
    }],
    255: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.SpineBuffer",
            extends: t("./mesh-buffer"),
            requestStatic: function(t, e) {
                this.checkAndSwitchBuffer(t);
                var i = this.byteOffset + t * this._vertexBytes
                  , n = this.indiceOffset + e
                  , r = this._vData.byteLength
                  , s = this._iData.length;
                if (i > r || n > s) {
                    for (; r < i || s < n; )
                        this._initVDataCount *= 2,
                        this._initIDataCount *= 2,
                        r = 4 * this._initVDataCount,
                        s = this._initIDataCount;
                    this._reallocBuffer()
                }
                var a = this._offsetInfo;
                a.vertexOffset = this.vertexOffset,
                a.indiceOffset = this.indiceOffset,
                a.byteOffset = this.byteOffset
            },
            adjust: function(t, e) {
                this.vertexOffset += t,
                this.indiceOffset += e,
                this.byteOffset = this.byteOffset + t * this._vertexBytes,
                this._dirty = !0
            }
        });
        cc.SpineBuffer = e.exports = i
    }
    ), {
        "./mesh-buffer": 251
    }],
    256: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../../renderer/gfx")) && i.__esModule ? i : {
            default: i
        }, r = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 3
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        r.name = "vfmt3D",
        n.default.VertexFormat.XYZ_UV_Color = r;
        var s = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        s.name = "vfmtPosUvColor",
        n.default.VertexFormat.XY_UV_Color = s;
        var a = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }, {
            name: n.default.ATTR_COLOR0,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        a.name = "vfmtPosUvTwoColor",
        n.default.VertexFormat.XY_UV_Two_Color = a;
        var o = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_UV0,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }]);
        o.name = "vfmtPosUv",
        n.default.VertexFormat.XY_UV = o;
        var l = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }, {
            name: n.default.ATTR_COLOR,
            type: n.default.ATTR_TYPE_UINT8,
            num: 4,
            normalize: !0
        }]);
        l.name = "vfmtPosColor",
        n.default.VertexFormat.XY_Color = l;
        var h = new n.default.VertexFormat([{
            name: n.default.ATTR_POSITION,
            type: n.default.ATTR_TYPE_FLOAT32,
            num: 2
        }]);
        h.name = "vfmtPos",
        n.default.VertexFormat.XY = h,
        e.exports = {
            vfmt3D: r,
            vfmtPosUvColor: s,
            vfmtPosUvTwoColor: a,
            vfmtPosUv: o,
            vfmtPosColor: l,
            vfmtPos: h
        }
    }
    ), {
        "../../../renderer/gfx": 315
    }],
    257: [(function(t, e) {
        "use strict";
        t("../platform/CCSys");
        var i = /(\.[^\.\/\?\\]*)(\?.*)?$/
          , n = /((.*)(\/|\\|\\\\))?(.*?\..*$)?/
          , r = /[^\.\/]+\/\.\.\//;
        cc.path = {
            join: function() {
                for (var t = arguments.length, e = "", i = 0; i < t; i++)
                    e = (e + ("" === e ? "" : "/") + arguments[i]).replace(/(\/|\\\\)$/, "");
                return e
            },
            extname: function(t) {
                var e = i.exec(t);
                return e ? e[1] : ""
            },
            mainFileName: function(t) {
                if (t) {
                    var e = t.lastIndexOf(".");
                    if (-1 !== e)
                        return t.substring(0, e)
                }
                return t
            },
            basename: function(t, e) {
                var i = t.indexOf("?");
                i > 0 && (t = t.substring(0, i));
                var n = /(\/|\\)([^\/\\]+)$/g.exec(t.replace(/(\/|\\)$/, ""));
                if (!n)
                    return t;
                var r = n[2];
                return e && t.substring(t.length - e.length).toLowerCase() === e.toLowerCase() ? r.substring(0, r.length - e.length) : r
            },
            dirname: function(t) {
                var e = n.exec(t);
                return e ? e[2] : ""
            },
            changeExtname: function(t, e) {
                e = e || "";
                var i = t.indexOf("?")
                  , n = "";
                return i > 0 && (n = t.substring(i),
                t = t.substring(0, i)),
                (i = t.lastIndexOf(".")) < 0 ? t + e + n : t.substring(0, i) + e + n
            },
            changeBasename: function(t, e, i) {
                if (0 === e.indexOf("."))
                    return this.changeExtname(t, e);
                var n = t.indexOf("?")
                  , r = ""
                  , s = i ? this.extname(t) : "";
                return n > 0 && (r = t.substring(n),
                t = t.substring(0, n)),
                n = (n = t.lastIndexOf("/")) <= 0 ? 0 : n + 1,
                t.substring(0, n) + e + s + r
            },
            _normalize: function(t) {
                var e = t = String(t);
                do {
                    e = t,
                    t = t.replace(r, "")
                } while (e.length !== t.length);return t
            },
            sep: cc.sys.os === cc.sys.OS_WINDOWS ? "\\" : "/",
            stripSep: function(t) {
                return t.replace(/[\/\\]$/, "")
            }
        },
        e.exports = cc.path
    }
    ), {
        "../platform/CCSys": 202
    }],
    258: [(function(t, e) {
        "use strict";
        var i = function(t, e, i, n, r, s) {
            this.a = t,
            this.b = e,
            this.c = i,
            this.d = n,
            this.tx = r,
            this.ty = s
        };
        i.create = function(t, e, i, n, r, s) {
            return {
                a: t,
                b: e,
                c: i,
                d: n,
                tx: r,
                ty: s
            }
        }
        ,
        i.identity = function() {
            return {
                a: 1,
                b: 0,
                c: 0,
                d: 1,
                tx: 0,
                ty: 0
            }
        }
        ,
        i.clone = function(t) {
            return {
                a: t.a,
                b: t.b,
                c: t.c,
                d: t.d,
                tx: t.tx,
                ty: t.ty
            }
        }
        ,
        i.concat = function(t, e, i) {
            var n = e.a
              , r = e.b
              , s = e.c
              , a = e.d
              , o = e.tx
              , l = e.ty;
            return t.a = n * i.a + r * i.c,
            t.b = n * i.b + r * i.d,
            t.c = s * i.a + a * i.c,
            t.d = s * i.b + a * i.d,
            t.tx = o * i.a + l * i.c + i.tx,
            t.ty = o * i.b + l * i.d + i.ty,
            t
        }
        ,
        i.invert = function(t, e) {
            var i = e.a
              , n = e.b
              , r = e.c
              , s = e.d
              , a = 1 / (i * s - n * r)
              , o = e.tx
              , l = e.ty;
            return t.a = a * s,
            t.b = -a * n,
            t.c = -a * r,
            t.d = a * i,
            t.tx = a * (r * l - s * o),
            t.ty = a * (n * o - i * l),
            t
        }
        ,
        i.fromMat4 = function(t, e) {
            var i = e.m;
            return t.a = i[0],
            t.b = i[1],
            t.c = i[4],
            t.d = i[5],
            t.tx = i[12],
            t.ty = i[13],
            t
        }
        ,
        i.transformVec2 = function(t, e, i, n) {
            var r, s;
            return void 0 === n ? (n = i,
            r = e.x,
            s = e.y) : (r = e,
            s = i),
            t.x = n.a * r + n.c * s + n.tx,
            t.y = n.b * r + n.d * s + n.ty,
            t
        }
        ,
        i.transformSize = function(t, e, i) {
            return t.width = i.a * e.width + i.c * e.height,
            t.height = i.b * e.width + i.d * e.height,
            t
        }
        ,
        i.transformRect = function(t, e, i) {
            var n = e.x
              , r = e.y
              , s = n + e.width
              , a = r + e.height
              , o = i.a * n + i.c * r + i.tx
              , l = i.b * n + i.d * r + i.ty
              , h = i.a * s + i.c * r + i.tx
              , c = i.b * s + i.d * r + i.ty
              , u = i.a * n + i.c * a + i.tx
              , _ = i.b * n + i.d * a + i.ty
              , f = i.a * s + i.c * a + i.tx
              , d = i.b * s + i.d * a + i.ty
              , p = Math.min(o, h, u, f)
              , m = Math.max(o, h, u, f)
              , y = Math.min(l, c, _, d)
              , v = Math.max(l, c, _, d);
            return t.x = p,
            t.y = y,
            t.width = m - p,
            t.height = v - y,
            t
        }
        ,
        i.transformObb = function(t, e, i, n, r, s) {
            var a = r.x
              , o = r.y
              , l = r.width
              , h = r.height
              , c = s.a * a + s.c * o + s.tx
              , u = s.b * a + s.d * o + s.ty
              , _ = s.a * l
              , f = s.b * l
              , d = s.c * h
              , p = s.d * h;
            e.x = c,
            e.y = u,
            i.x = _ + c,
            i.y = f + u,
            t.x = d + c,
            t.y = p + u,
            n.x = _ + d + c,
            n.y = f + p + u
        }
        ,
        cc.AffineTransform = e.exports = i
    }
    ), {}],
    259: [(function(t, e) {
        "use strict";
        var i = t("../platform/CCObject").Flags
          , n = t("./misc")
          , r = t("../platform/js")
          , s = t("../platform/id-generater")
          , a = t("../event-manager")
          , o = t("../renderer/render-flow")
          , l = i.Destroying
          , h = i.DontDestroy
          , c = i.Deactivating
          , u = new s("Node");
        function _(t) {
            return t ? "string" == typeof t ? r.getClassByName(t) : t : (cc.errorID(3804),
            null)
        }
        function f(t, e) {
            if (e._sealed)
                for (var i = 0; i < t._components.length; ++i) {
                    var n = t._components[i];
                    if (n.constructor === e)
                        return n
                }
            else
                for (var r = 0; r < t._components.length; ++r) {
                    var s = t._components[r];
                    if (s instanceof e)
                        return s
                }
            return null
        }
        function d(t, e, i) {
            if (e._sealed)
                for (var n = 0; n < t._components.length; ++n) {
                    var r = t._components[n];
                    r.constructor === e && i.push(r)
                }
            else
                for (var s = 0; s < t._components.length; ++s) {
                    var a = t._components[s];
                    a instanceof e && i.push(a)
                }
        }
        function p(t, e) {
            for (var i = 0; i < t.length; ++i) {
                var n = t[i]
                  , r = f(n, e);
                if (r)
                    return r;
                if (n._children.length > 0 && (r = p(n._children, e)))
                    return r
            }
            return null
        }
        function m(t, e, i) {
            for (var n = 0; n < t.length; ++n) {
                var r = t[n];
                d(r, e, i),
                r._children.length > 0 && m(r._children, e, i)
            }
        }
        var y = cc.Class({
            name: "cc._BaseNode",
            extends: cc.Object,
            properties: {
                _parent: null,
                _children: [],
                _active: !0,
                _components: [],
                _prefab: null,
                _persistNode: {
                    get: function() {
                        return (this._objFlags & h) > 0
                    },
                    set: function(t) {
                        t ? this._objFlags |= h : this._objFlags &= ~h
                    }
                },
                name: {
                    get: function() {
                        return this._name
                    },
                    set: function(t) {
                        this._name = t
                    }
                },
                uuid: {
                    get: function() {
                        return this._id
                    }
                },
                children: {
                    get: function() {
                        return this._children
                    }
                },
                childrenCount: {
                    get: function() {
                        return this._children.length
                    }
                },
                active: {
                    get: function() {
                        return this._active
                    },
                    set: function(t) {
                        if (t = !!t,
                        this._active !== t) {
                            this._active = t;
                            var e = this._parent;
                            e && e._activeInHierarchy && cc.director._nodeActivator.activateNode(this, t)
                        }
                    }
                },
                activeInHierarchy: {
                    get: function() {
                        return this._activeInHierarchy
                    }
                }
            },
            ctor: function(t) {
                this._name = void 0 !== t ? t : "New Node",
                this._activeInHierarchy = !1,
                this._id = u.getNewId(),
                cc.director._scheduler && cc.director._scheduler.enableForTarget(this),
                this.__eventTargets = []
            },
            getParent: function() {
                return this._parent
            },
            setParent: function(t) {
                if (this._parent !== t) {
                    var e = this._parent;
                    if (this._parent = t || null,
                    this._onSetParent(t),
                    t && (a._setDirtyForNode(this),
                    t._children.push(this),
                    t.emit && t.emit("child-added", this),
                    t._renderFlag |= o.FLAG_CHILDREN),
                    e) {
                        if (!(e._objFlags & l)) {
                            var i = e._children.indexOf(this);
                            e._children.splice(i, 1),
                            e.emit && e.emit("child-removed", this),
                            this._onHierarchyChanged(e),
                            0 === e._children.length && (e._renderFlag &= ~o.FLAG_CHILDREN)
                        }
                    } else
                        t && this._onHierarchyChanged(null)
                }
            },
            attr: function(t) {
                r.mixin(this, t)
            },
            getChildByUuid: function(t) {
                if (!t)
                    return cc.log("Invalid uuid"),
                    null;
                for (var e = this._children, i = 0, n = e.length; i < n; i++)
                    if (e[i]._id === t)
                        return e[i];
                return null
            },
            getChildByName: function(t) {
                if (!t)
                    return cc.log("Invalid name"),
                    null;
                for (var e = this._children, i = 0, n = e.length; i < n; i++)
                    if (e[i]._name === t)
                        return e[i];
                return null
            },
            addChild: function(t) {
                cc.assertID(t, 1606),
                cc.assertID(null === t._parent, 1605),
                t.setParent(this)
            },
            insertChild: function(t, e) {
                t.parent = this,
                t.setSiblingIndex(e)
            },
            getSiblingIndex: function() {
                return this._parent ? this._parent._children.indexOf(this) : 0
            },
            setSiblingIndex: function(t) {
                if (this._parent)
                    if (this._parent._objFlags & c)
                        cc.errorID(3821);
                    else {
                        var e = this._parent._children;
                        t = -1 !== t ? t : e.length - 1;
                        var i = e.indexOf(this);
                        t !== i && (e.splice(i, 1),
                        t < e.length ? e.splice(t, 0, this) : e.push(this),
                        this._onSiblingIndexChanged && this._onSiblingIndexChanged(t))
                    }
            },
            walk: function(t, e) {
                var i, n, r, s, a = cc._BaseNode, o = 1, l = a._stacks[a._stackId];
                l || (l = [],
                a._stacks.push(l)),
                a._stackId++,
                l.length = 0,
                l[0] = this;
                var h = null;
                for (s = !1; o; )
                    if (n = l[--o])
                        if (!s && t ? t(n) : s && e && e(n),
                        l[o] = null,
                        s) {
                            if (h === this._parent)
                                break;
                            if (s = !1,
                            i)
                                if (i[++r])
                                    l[o] = i[r],
                                    o++;
                                else if (h && (l[o] = h,
                                o++,
                                s = !0,
                                h._parent ? (r = (i = h._parent._children).indexOf(h),
                                h = h._parent) : (h = null,
                                i = null),
                                r < 0))
                                    break
                        } else
                            n._children.length > 0 ? (h = n,
                            i = n._children,
                            r = 0,
                            l[o] = i[r],
                            o++) : (l[o] = n,
                            o++,
                            s = !0);
                l.length = 0,
                a._stackId--
            },
            cleanup: function() {},
            removeFromParent: function(t) {
                this._parent && (void 0 === t && (t = !0),
                this._parent.removeChild(this, t))
            },
            removeChild: function(t, e) {
                this._children.indexOf(t) > -1 && ((e || void 0 === e) && t.cleanup(),
                t.parent = null)
            },
            removeAllChildren: function(t) {
                var e = this._children;
                void 0 === t && (t = !0);
                for (var i = e.length - 1; i >= 0; i--) {
                    var n = e[i];
                    n && (t && n.cleanup(),
                    n.parent = null)
                }
                this._children.length = 0
            },
            isChildOf: function(t) {
                var e = this;
                do {
                    if (e === t)
                        return !0;
                    e = e._parent
                } while (e);return !1
            },
            getComponent: function(t) {
                var e = _(t);
                return e ? f(this, e) : null
            },
            getComponents: function(t) {
                var e = _(t)
                  , i = [];
                return e && d(this, e, i),
                i
            },
            getComponentInChildren: function(t) {
                var e = _(t);
                return e ? p(this._children, e) : null
            },
            getComponentsInChildren: function(t) {
                var e = _(t)
                  , i = [];
                return e && (d(this, e, i),
                m(this._children, e, i)),
                i
            },
            _checkMultipleComp: !1,
            addComponent: function(t) {
                var e;
                if ("string" == typeof t) {
                    if (!(e = r.getClassByName(t)))
                        return cc.errorID(3807, t),
                        cc._RFpeek() && cc.errorID(3808, t),
                        null
                } else {
                    if (!t)
                        return cc.errorID(3804),
                        null;
                    e = t
                }
                if ("function" != typeof e)
                    return cc.errorID(3809),
                    null;
                if (!r.isChildClassOf(e, cc.Component))
                    return cc.errorID(3810),
                    null;
                var i = e._requireComponent;
                if (i && !this.getComponent(i) && !this.addComponent(i))
                    return null;
                var n = new e;
                return n.node = this,
                this._components.push(n),
                this._activeInHierarchy && cc.director._nodeActivator.activateComp(n),
                n
            },
            _addComponentAt: !1,
            removeComponent: function(t) {
                t ? (t instanceof cc.Component || (t = this.getComponent(t)),
                t && t.destroy()) : cc.errorID(3813)
            },
            _getDependComponent: !1,
            _removeComponent: function(t) {
                if (t) {
                    if (!(this._objFlags & l)) {
                        var e = this._components.indexOf(t);
                        -1 !== e ? this._components.splice(e, 1) : t.node !== this && cc.errorID(3815)
                    }
                } else
                    cc.errorID(3814)
            },
            destroy: function() {
                cc.Object.prototype.destroy.call(this) && (this.active = !1)
            },
            destroyAllChildren: function() {
                for (var t = this._children, e = 0; e < t.length; ++e)
                    t[e].destroy()
            },
            _onSetParent: function() {},
            _onPostActivated: function() {},
            _onBatchCreated: function() {},
            _onHierarchyChanged: function() {
                var t = this._parent;
                !this._persistNode || t instanceof cc.Scene || cc.game.removePersistRootNode(this);
                var e = this._active && !(!t || !t._activeInHierarchy);
                this._activeInHierarchy !== e && cc.director._nodeActivator.activateNode(this, e)
            },
            _instantiate: function(t, e) {
                return t || (t = cc.instantiate._clone(this, this)),
                t._prefab,
                t._parent = null,
                t._onBatchCreated(e),
                t
            },
            _registerIfAttached: !1,
            _onPreDestroy: function() {
                var t, e;
                this._objFlags |= l;
                var i = this._parent
                  , n = i && i._objFlags & l
                  , r = this._children;
                for (t = 0,
                e = r.length; t < e; ++t)
                    r[t]._destroyImmediate();
                for (t = 0,
                e = this._components.length; t < e; ++t)
                    this._components[t]._destroyImmediate();
                var s = this.__eventTargets;
                for (t = 0,
                e = s.length; t < e; ++t) {
                    var a = s[t];
                    a && a.targetOff(this)
                }
                if (s.length = 0,
                this._persistNode && cc.game.removePersistRootNode(this),
                !n && i) {
                    var o = i._children.indexOf(this);
                    i._children.splice(o, 1),
                    i.emit && i.emit("child-removed", this)
                }
                return n
            },
            onRestore: !1
        });
        y.idGenerater = u,
        y._stacks = [[]],
        y._stackId = 0,
        y.prototype._onPreDestroyBase = y.prototype._onPreDestroy,
        y.prototype._onHierarchyChangedBase = y.prototype._onHierarchyChanged,
        n.propertyDefine(y, ["parent", "name", "children", "childrenCount"], {}),
        cc._BaseNode = e.exports = y
    }
    ), {
        "../event-manager": 138,
        "../platform/CCObject": 199,
        "../platform/id-generater": 210,
        "../platform/js": 214,
        "../renderer/render-flow": 225,
        "./misc": 267
    }],
    260: [(function(t, e) {
        "use strict";
        e.exports = {
            binarySearchEpsilon: function(t, e) {
                for (var i = 0, n = t.length - 1, r = n >>> 1; i <= n; r = i + n >>> 1) {
                    var s = t[r];
                    if (s > e + 1e-6)
                        n = r - 1;
                    else {
                        if (!(s < e - 1e-6))
                            return r;
                        i = r + 1
                    }
                }
                return ~i
            }
        }
    }
    ), {}],
    261: [(function(t, e) {
        "use strict";
        var i = t("../components/CCRenderComponent")
          , n = t("../platform/CCMacro").BlendFactor
          , r = t("../../renderer/gfx")
          , s = cc.Class({
            properties: {
                _srcBlendFactor: n.SRC_ALPHA,
                _dstBlendFactor: n.ONE_MINUS_SRC_ALPHA,
                srcBlendFactor: {
                    get: function() {
                        return this._srcBlendFactor
                    },
                    set: function(t) {
                        this._srcBlendFactor !== t && (this._srcBlendFactor = t,
                        this._updateBlendFunc(!0),
                        this._onBlendChanged && this._onBlendChanged())
                    },
                    animatable: !1,
                    type: n,
                    tooltip: !1,
                    visible: !0
                },
                dstBlendFactor: {
                    get: function() {
                        return this._dstBlendFactor
                    },
                    set: function(t) {
                        this._dstBlendFactor !== t && (this._dstBlendFactor = t,
                        this._updateBlendFunc(!0))
                    },
                    animatable: !1,
                    type: n,
                    tooltip: !1,
                    visible: !0
                }
            },
            setMaterial: function(t, e) {
                var r = i.prototype.setMaterial.call(this, t, e);
                return this._srcBlendFactor === n.SRC_ALPHA && this._dstBlendFactor === n.ONE_MINUS_SRC_ALPHA || this._updateMaterialBlendFunc(r),
                r
            },
            _updateMaterial: function() {
                this._updateBlendFunc()
            },
            _updateBlendFunc: function(t) {
                if (t || this._srcBlendFactor !== n.SRC_ALPHA || this._dstBlendFactor !== n.ONE_MINUS_SRC_ALPHA)
                    for (var e = this.getMaterials(), i = 0; i < e.length; i++) {
                        var r = e[i];
                        this._updateMaterialBlendFunc(r)
                    }
            },
            _updateMaterialBlendFunc: function(t) {
                t.setBlend(!0, r.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor, r.BLEND_FUNC_ADD, this._srcBlendFactor, this._dstBlendFactor)
            }
        });
        e.exports = cc.BlendFunc = s
    }
    ), {
        "../../renderer/gfx": 315,
        "../components/CCRenderComponent": 115,
        "../platform/CCMacro": 198
    }],
    262: [(function(t, e) {
        "use strict";
        var i = t("./misc").BASE64_VALUES
          , n = "0123456789abcdef".split("")
          , r = ["", "", "", ""]
          , s = r.concat(r, "-", r, "-", r, "-", r, "-", r, r, r)
          , a = s.map((function(t, e) {
            return "-" === t ? NaN : e
        }
        )).filter(isFinite);
        e.exports = function(t) {
            if (22 !== t.length)
                return t;
            s[0] = t[0],
            s[1] = t[1];
            for (var e = 2, r = 2; e < 22; e += 2) {
                var o = i[t.charCodeAt(e)]
                  , l = i[t.charCodeAt(e + 1)];
                s[a[r++]] = n[o >> 2],
                s[a[r++]] = n[(3 & o) << 2 | l >> 4],
                s[a[r++]] = n[15 & l]
            }
            return s.join("")
        }
    }
    ), {
        "./misc": 267
    }],
    263: [(function(t, e) {
        "use strict";
        cc.find = e.exports = function(t, e) {
            if (null == t)
                return cc.errorID(3814),
                null;
            if (e)
                ;
            else {
                var i = cc.director.getScene();
                if (!i)
                    return null;
                e = i
            }
            for (var n = e, r = "/" !== t[0] ? 0 : 1, s = t.split("/"), a = r; a < s.length; a++) {
                var o = s[a]
                  , l = n._children;
                n = null;
                for (var h = 0, c = l.length; h < c; ++h) {
                    var u = l[h];
                    if (u.name === o) {
                        n = u;
                        break
                    }
                }
                if (!n)
                    return null
            }
            return n
        }
    }
    ), {}],
    264: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../assets/material/material-variant")) && i.__esModule ? i : {
            default: i
        }, r = t("../assets/material/CCMaterial"), s = cc.Class({
            properties: {
                _normalMaterial: null,
                normalMaterial: {
                    get: function() {
                        return this._normalMaterial
                    },
                    set: function(t) {
                        this._normalMaterial = t,
                        this._updateDisabledState && this._updateDisabledState()
                    },
                    type: r,
                    tooltip: !1,
                    animatable: !1
                },
                _grayMaterial: null,
                grayMaterial: {
                    get: function() {
                        return this._grayMaterial
                    },
                    set: function(t) {
                        this._grayMaterial = t,
                        this._updateDisabledState && this._updateDisabledState()
                    },
                    type: r,
                    tooltip: !1,
                    animatable: !1
                }
            },
            _switchGrayMaterial: function(t, e) {
                var i;
                t ? ((i = this._grayMaterial) || (i = r.getBuiltinMaterial("2d-gray-sprite")),
                i = this._grayMaterial = n.default.create(i, e)) : ((i = this._normalMaterial) || (i = r.getBuiltinMaterial("2d-sprite", e)),
                i = this._normalMaterial = n.default.create(i, e)),
                e.setMaterial(0, i)
            }
        });
        e.exports = s
    }
    ), {
        "../assets/material/CCMaterial": 80,
        "../assets/material/material-variant": 87
    }],
    265: [(function(t, e) {
        "use strict";
        var i = /^(click)(\s)*=|(param)(\s)*=/
          , n = /(\s)*src(\s)*=|(\s)*height(\s)*=|(\s)*width(\s)*=|(\s)*align(\s)*=|(\s)*offset(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/
          , r = function() {
            this._parsedObject = {},
            this._specialSymbolArray = [],
            this._specialSymbolArray.push([/&lt;/g, "<"]),
            this._specialSymbolArray.push([/&gt;/g, ">"]),
            this._specialSymbolArray.push([/&amp;/g, "&"]),
            this._specialSymbolArray.push([/&quot;/g, '"']),
            this._specialSymbolArray.push([/&apos;/g, "'"]),
            this._specialSymbolArray.push([/&nbsp;/g, " "])
        };
        r.prototype = {
            constructor: r,
            parse: function(t) {
                this._resultObjectArray = [],
                this._stack = [];
                for (var e = 0, i = t.length; e < i; ) {
                    var n = t.indexOf(">", e)
                      , r = -1;
                    if (n >= 0 && (r = t.lastIndexOf("<", n)) < e - 1 && (r = t.indexOf("<", n + 1),
                    n = t.indexOf(">", r + 1)),
                    r < 0)
                        this._stack.pop(),
                        this._processResult(t.substring(e)),
                        e = i;
                    else {
                        var s = t.substring(e, r)
                          , a = t.substring(r + 1, n);
                        "" === a && (s = t.substring(e, n + 1)),
                        this._processResult(s),
                        -1 === n ? n = r : "/" === t.charAt(r + 1) ? this._stack.pop() : this._addToStack(a),
                        e = n + 1
                    }
                }
                return this._resultObjectArray
            },
            _attributeToObject: function(t) {
                var e, i, r, s, a = {}, o = (t = t.trim()).match(/^(color|size)(\s)*=/);
                if (o) {
                    if (e = o[0],
                    "" === (t = t.substring(e.length).trim()))
                        return a;
                    switch (i = t.indexOf(" "),
                    e[0]) {
                    case "c":
                        a.color = i > -1 ? t.substring(0, i).trim() : t;
                        break;
                    case "s":
                        a.size = parseInt(t)
                    }
                    return i > -1 && (s = t.substring(i + 1).trim(),
                    r = this._processEventHandler(s),
                    a.event = r),
                    a
                }
                if ((o = t.match(/^(br(\s)*\/)/)) && o[0].length > 0 && (e = o[0].trim()).startsWith("br") && "/" === e[e.length - 1])
                    return a.isNewLine = !0,
                    this._resultObjectArray.push({
                        text: "",
                        style: {
                            newline: !0
                        }
                    }),
                    a;
                if ((o = t.match(/^(img(\s)*src(\s)*=[^>]+\/)/)) && o[0].length > 0 && (e = o[0].trim()).startsWith("img") && "/" === e[e.length - 1]) {
                    var l;
                    o = t.match(n);
                    for (var h = !1; o; ) {
                        if (e = (t = t.substring(t.indexOf(o[0]))).substr(0, o[0].length),
                        u = (i = (l = t.substring(e.length).trim()).indexOf(" ")) > -1 ? l.substr(0, i) : l,
                        e = (e = e.replace(/[^a-zA-Z]/g, "").trim()).toLocaleLowerCase(),
                        t = l.substring(i).trim(),
                        u.endsWith("/") && (u = u.slice(0, -1)),
                        "src" === e) {
                            switch (u.charCodeAt(0)) {
                            case 34:
                            case 39:
                                h = !0,
                                u = u.slice(1, -1)
                            }
                            a.isImage = !0,
                            a.src = u
                        } else if ("height" === e)
                            a.imageHeight = parseInt(u);
                        else if ("width" === e)
                            a.imageWidth = parseInt(u);
                        else if ("align" === e) {
                            switch (u.charCodeAt(0)) {
                            case 34:
                            case 39:
                                u = u.slice(1, -1)
                            }
                            a.imageAlign = u.toLocaleLowerCase()
                        } else
                            "offset" === e ? a.imageOffset = u : "click" === e && (a.event = this._processEventHandler(e + "=" + u));
                        a.event && "param" === e && (a.event.param = u.replace(/^\"|\"$/g, "")),
                        o = t.match(n)
                    }
                    return h && a.isImage && this._resultObjectArray.push({
                        text: "",
                        style: a
                    }),
                    {}
                }
                if (o = t.match(/^(outline(\s)*[^>]*)/)) {
                    var c = {
                        color: "#ffffff",
                        width: 1
                    };
                    if (t = o[0].substring("outline".length).trim()) {
                        var u, _ = /(\s)*color(\s)*=|(\s)*width(\s)*=|(\s)*click(\s)*=|(\s)*param(\s)*=/;
                        for (o = t.match(_); o; )
                            e = (t = t.substring(t.indexOf(o[0]))).substr(0, o[0].length),
                            u = (i = (l = t.substring(e.length).trim()).indexOf(" ")) > -1 ? l.substr(0, i) : l,
                            e = (e = e.replace(/[^a-zA-Z]/g, "").trim()).toLocaleLowerCase(),
                            t = l.substring(i).trim(),
                            "click" === e ? a.event = this._processEventHandler(e + "=" + u) : "color" === e ? c.color = u : "width" === e && (c.width = parseInt(u)),
                            a.event && "param" === e && (a.event.param = u.replace(/^\"|\"$/g, "")),
                            o = t.match(_)
                    }
                    a.outline = c
                }
                if ((o = t.match(/^(on|u|b|i)(\s)*/)) && o[0].length > 0) {
                    switch (e = o[0],
                    t = t.substring(e.length).trim(),
                    e[0]) {
                    case "u":
                        a.underline = !0;
                        break;
                    case "i":
                        a.italic = !0;
                        break;
                    case "b":
                        a.bold = !0
                    }
                    if ("" === t)
                        return a;
                    r = this._processEventHandler(t),
                    a.event = r
                }
                return a
            },
            _processEventHandler: function(t) {
                for (var e = 0, n = {}, r = t.match(i), s = !1; r; ) {
                    var a = r[0]
                      , o = "";
                    if (s = !1,
                    '"' === (t = t.substring(a.length).trim()).charAt(0))
                        (e = t.indexOf('"', 1)) > -1 && (o = t.substring(1, e).trim(),
                        s = !0),
                        e++;
                    else if ("'" === t.charAt(0))
                        (e = t.indexOf("'", 1)) > -1 && (o = t.substring(1, e).trim(),
                        s = !0),
                        e++;
                    else {
                        var l = t.match(/(\S)+/);
                        e = (o = l ? l[0] : "").length
                    }
                    s && (n[a = a.substring(0, a.length - 1).trim()] = o),
                    r = (t = t.substring(e).trim()).match(i)
                }
                return n
            },
            _addToStack: function(t) {
                var e = this._attributeToObject(t);
                if (0 === this._stack.length)
                    this._stack.push(e);
                else {
                    if (e.isNewLine || e.isImage)
                        return;
                    var i = this._stack[this._stack.length - 1];
                    for (var n in i)
                        e[n] || (e[n] = i[n]);
                    this._stack.push(e)
                }
            },
            _processResult: function(t) {
                "" !== t && (t = this._escapeSpecialSymbol(t),
                this._stack.length > 0 ? this._resultObjectArray.push({
                    text: t,
                    style: this._stack[this._stack.length - 1]
                }) : this._resultObjectArray.push({
                    text: t
                }))
            },
            _escapeSpecialSymbol: function(t) {
                for (var e = 0; e < this._specialSymbolArray.length; ++e) {
                    var i = this._specialSymbolArray[e][0]
                      , n = this._specialSymbolArray[e][1];
                    t = t.replace(i, n)
                }
                return t
            }
        },
        e.exports = r
    }
    ), {}],
    266: [(function(t) {
        "use strict";
        t("./CCPath"),
        t("./profiler/CCProfiler"),
        t("./find"),
        t("./mutable-forward-iterator")
    }
    ), {
        "./CCPath": 257,
        "./find": 263,
        "./mutable-forward-iterator": 268,
        "./profiler/CCProfiler": 271
    }],
    267: [(function(t, e) {
        "use strict";
        for (var i = t("../platform/js"), n = {
            propertyDefine: function(t, e, n) {
                function r(t, e, n, r) {
                    var s = Object.getOwnPropertyDescriptor(t, e);
                    if (s)
                        s.get && (t[n] = s.get),
                        s.set && r && (t[r] = s.set);
                    else {
                        var a = t[n];
                        i.getset(t, e, a, t[r])
                    }
                }
                for (var s, a = t.prototype, o = 0; o < e.length; o++) {
                    var l = (s = e[o])[0].toUpperCase() + s.slice(1);
                    r(a, s, "get" + l, "set" + l)
                }
                for (s in n) {
                    var h = n[s];
                    r(a, s, h[0], h[1])
                }
            },
            NextPOT: function(t) {
                return t -= 1,
                t |= t >> 1,
                t |= t >> 2,
                t |= t >> 4,
                t |= t >> 8,
                1 + (t |= t >> 16)
            },
            BUILTIN_CLASSID_RE: /^(?:cc|dragonBones|sp|ccsg)\..+/
        }, r = new Array(123), s = 0; s < 123; ++s)
            r[s] = 64;
        for (var a = 0; a < 64; ++a)
            r["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charCodeAt(a)] = a;
        n.BASE64_VALUES = r,
        n.pushToMap = function(t, e, i, n) {
            var r = t[e];
            r ? Array.isArray(r) ? n ? (r.push(r[0]),
            r[0] = i) : r.push(i) : t[e] = n ? [i, r] : [r, i] : t[e] = i
        }
        ,
        n.clampf = function(t, e, i) {
            if (e > i) {
                var n = e;
                e = i,
                i = n
            }
            return t < e ? e : t < i ? t : i
        }
        ,
        n.clamp01 = function(t) {
            return t < 0 ? 0 : t < 1 ? t : 1
        }
        ,
        n.lerp = function(t, e, i) {
            return t + (e - t) * i
        }
        ,
        n.degreesToRadians = function(t) {
            return t * cc.macro.RAD
        }
        ,
        n.radiansToDegrees = function(t) {
            return t * cc.macro.DEG
        }
        ,
        cc.misc = e.exports = n
    }
    ), {
        "../platform/js": 214
    }],
    268: [(function(t, e) {
        "use strict";
        function i(t) {
            this.i = 0,
            this.array = t
        }
        var n = i.prototype;
        n.remove = function(t) {
            var e = this.array.indexOf(t);
            e >= 0 && this.removeAt(e)
        }
        ,
        n.removeAt = function(t) {
            this.array.splice(t, 1),
            t <= this.i && --this.i
        }
        ,
        n.fastRemove = function(t) {
            var e = this.array.indexOf(t);
            e >= 0 && this.fastRemoveAt(e)
        }
        ,
        n.fastRemoveAt = function(t) {
            var e = this.array;
            e[t] = e[e.length - 1],
            --e.length,
            t <= this.i && --this.i
        }
        ,
        n.push = function(t) {
            this.array.push(t)
        }
        ,
        e.exports = i
    }
    ), {}],
    269: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t() {
                this.enabled = !1,
                this.count = 0,
                this.maxSize = 1024
            }
            var e = t.prototype;
            return e.get = function() {}
            ,
            e.put = function() {}
            ,
            e.clear = function() {}
            ,
            t
        }
        )();
        i.default = n,
        cc.pool = {},
        n.register = function(t, e) {
            cc.pool[t] = e
        }
        ,
        e.exports = i.default
    }
    ), {}],
    270: [(function(t, e) {
        "use strict";
        cc._PrefabInfo = cc.Class({
            name: "cc.PrefabInfo",
            properties: {
                root: null,
                asset: null,
                fileId: "",
                sync: !1
            }
        }),
        e.exports = {
            syncWithPrefab: function(t) {
                var e = t._prefab;
                if (!e.asset)
                    return cc.errorID(3701, t.name),
                    void (t._prefab = null);
                var i = t._objFlags
                  , n = t._parent
                  , r = t._id
                  , s = t._name
                  , a = t._active
                  , o = t._eulerAngles.x
                  , l = t._eulerAngles.y
                  , h = t._eulerAngles.z
                  , c = t._localZOrder
                  , u = t._trs
                  , _ = u[0]
                  , f = u[1]
                  , d = u[2];
                cc.game._isCloning = !0,
                e.asset._doInstantiate(t),
                cc.game._isCloning = !1,
                t._objFlags = i,
                t._parent = n,
                t._id = r,
                t._prefab = e,
                t._name = s,
                t._active = a,
                t._localZOrder = c,
                (u = t._trs)[0] = _,
                u[1] = f,
                u[2] = d,
                t._eulerAngles.x = o,
                t._eulerAngles.y = l,
                t._eulerAngles.z = h
            }
        }
    }
    ), {}],
    271: [(function(t, e) {
        "use strict";
        var i = t("../../platform/CCMacro")
          , n = t("./perf-counter")
          , r = !1
          , s = 15
          , a = null
          , o = null
          , l = null;
        function h() {
            if (!a) {
                a = {
                    fps: {
                        desc: "Framerate (FPS)",
                        below: 30,
                        average: 500
                    },
                    draws: {
                        desc: "Draw Call"
                    },
                    frame: {
                        desc: "Frame time (ms)",
                        min: 0,
                        max: 50,
                        average: 500
                    },
                    logic: {
                        desc: "Game Logic (ms)",
                        min: 0,
                        max: 50,
                        average: 500,
                        color: "#080"
                    },
                    render: {
                        desc: "Renderer (ms)",
                        min: 0,
                        max: 50,
                        average: 500,
                        color: "#f90"
                    },
                    mode: {
                        desc: cc.game.renderType === cc.game.RENDER_TYPE_WEBGL ? "WebGL" : "Canvas",
                        min: 1
                    }
                };
                var t = performance.now();
                for (var e in a)
                    a[e]._counter = new n(e,a[e],t)
            }
        }
        function c() {
            if (!o || !o.isValid) {
                (o = new cc.Node("PROFILER-NODE")).x = o.y = 10,
                o.groupIndex = cc.Node.BuiltinGroupIndex.DEBUG,
                cc.Camera._setupDebugCamera(),
                o.zIndex = i.MAX_ZINDEX,
                cc.game.addPersistRootNode(o);
                var t = new cc.Node("LEFT-PANEL");
                t.anchorX = t.anchorY = 0;
                var e = t.addComponent(cc.Label);
                e.fontSize = s,
                e.lineHeight = s,
                t.parent = o;
                var n = new cc.Node("RIGHT-PANEL");
                n.anchorX = 1,
                n.anchorY = 0,
                n.x = 200;
                var r = n.addComponent(cc.Label);
                r.horizontalAlign = cc.Label.HorizontalAlign.RIGHT,
                r.fontSize = s,
                r.lineHeight = s,
                n.parent = o,
                cc.sys.platform !== cc.sys.BAIDU_GAME_SUB && cc.sys.platform !== cc.sys.WECHAT_GAME_SUB && (e.cacheMode = cc.Label.CacheMode.CHAR,
                r.cacheMode = cc.Label.CacheMode.CHAR),
                l = {
                    left: e,
                    right: r
                }
            }
        }
        function u() {
            c();
            var t = cc.director._lastUpdate;
            a.frame._counter.start(t),
            a.logic._counter.start(t)
        }
        function _() {
            var t = performance.now();
            cc.director.isPaused() ? a.frame._counter.start(t) : a.logic._counter.end(t),
            a.render._counter.start(t)
        }
        function f() {
            var t = performance.now();
            a.render._counter.end(t),
            a.draws._counter.value = cc.renderer.drawCalls,
            a.frame._counter.end(t),
            a.fps._counter.frame(t);
            var e = ""
              , i = "";
            for (var n in a) {
                var r = a[n];
                r._counter.sample(t),
                e += r.desc + "\n",
                i += r._counter.human() + "\n"
            }
            l && (l.left.string = e,
            l.right.string = i)
        }
        cc.profiler = e.exports = {
            isShowingStats: function() {
                return r
            },
            hideStats: function() {
                r && (o && (o.active = !1),
                cc.director.off(cc.Director.EVENT_BEFORE_UPDATE, u),
                cc.director.off(cc.Director.EVENT_AFTER_UPDATE, _),
                cc.director.off(cc.Director.EVENT_AFTER_DRAW, f),
                r = !1)
            },
            showStats: function() {
                r || (h(),
                o && (o.active = !0),
                cc.director.on(cc.Director.EVENT_BEFORE_UPDATE, u),
                cc.director.on(cc.Director.EVENT_AFTER_UPDATE, _),
                cc.director.on(cc.Director.EVENT_AFTER_DRAW, f),
                r = !0)
            }
        }
    }
    ), {
        "../../platform/CCMacro": 198,
        "./perf-counter": 273
    }],
    272: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.Counter",
            ctor: function(t, e, i) {
                this._id = t,
                this._opts = e || {},
                this._value = 0,
                this._total = 0,
                this._averageValue = 0,
                this._accumValue = 0,
                this._accumSamples = 0,
                this._accumStart = i
            },
            properties: {
                value: {
                    get: function() {
                        return this._value
                    },
                    set: function(t) {
                        this._value = t
                    }
                }
            },
            _average: function(t, e) {
                if (this._opts.average) {
                    this._accumValue += t,
                    ++this._accumSamples;
                    var i = e;
                    i - this._accumStart >= this._opts.average && (this._averageValue = this._accumValue / this._accumSamples,
                    this._accumValue = 0,
                    this._accumStart = i,
                    this._accumSamples = 0)
                }
            },
            sample: function(t) {
                this._average(this._value, t)
            },
            human: function() {
                var t = this._opts.average ? this._averageValue : this._value;
                return Math.round(100 * t) / 100
            },
            alarm: function() {
                return this._opts.below && this._value < this._opts.below || this._opts.over && this._value > this._opts.over
            }
        });
        e.exports = i
    }
    ), {}],
    273: [(function(t, e) {
        "use strict";
        var i = t("./counter")
          , n = cc.Class({
            name: "cc.PerfCounter",
            extends: i,
            ctor: function(t, e, i) {
                this._time = i
            },
            start: function(t) {
                this._time = t
            },
            end: function(t) {
                this._value = t - this._time,
                this._average(this._value)
            },
            tick: function() {
                this.end(),
                this.start()
            },
            frame: function(t) {
                var e = t
                  , i = e - this._time;
                this._total++,
                i > (this._opts.average || 1e3) && (this._value = 1e3 * this._total / i,
                this._total = 0,
                this._time = e,
                this._average(this._value))
            }
        });
        e.exports = n
    }
    ), {
        "./counter": 272
    }],
    274: [(function(t, e) {
        "use strict";
        var i, n = new (((i = t("../platform/js")) && i.__esModule ? i : {
            default: i
        }).default.Pool)(2);
        function r(t) {
            this.count = 0,
            this.limit = t,
            this.datas = {},
            this.head = null,
            this.tail = null
        }
        n.get = function() {
            return this._get() || {
                key: null,
                value: null,
                prev: null,
                next: null
            }
        }
        ,
        r.prototype.moveToHead = function(t) {
            t.next = this.head,
            t.prev = null,
            null !== this.head && (this.head.prev = t),
            this.head = t,
            null === this.tail && (this.tail = t),
            this.count++,
            this.datas[t.key] = t
        }
        ,
        r.prototype.put = function(t, e) {
            var i = n.get();
            if (i.key = t,
            i.value = e,
            this.count >= this.limit) {
                var r = this.tail;
                delete this.datas[r.key],
                this.count--,
                this.tail = r.prev,
                this.tail.next = null,
                r.prev = null,
                r.next = null,
                n.put(r)
            }
            this.moveToHead(i)
        }
        ,
        r.prototype.remove = function(t) {
            null !== t.prev ? t.prev.next = t.next : this.head = t.next,
            null !== t.next ? t.next.prev = t.prev : this.tail = t.prev,
            delete this.datas[t.key],
            this.count--
        }
        ,
        r.prototype.get = function(t) {
            var e = this.datas[t];
            return e ? (this.remove(e),
            this.moveToHead(e),
            e.value) : null
        }
        ,
        r.prototype.clear = function() {
            this.count = 0,
            this.datas = {},
            this.head = null,
            this.tail = null
        }
        ,
        r.prototype.has = function(t) {
            return !!this.datas[t]
        }
        ,
        r.prototype.delete = function(t) {
            var e = this.datas[t];
            this.remove(e)
        }
        ;
        var s = new r(100)
          , a = {
            BASELINE_RATIO: .26,
            MIDDLE_RATIO: .37,
            BASELINE_OFFSET: 0,
            label_wordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430-\u044f\u0410-\u042f\u0401\u0451]+|\S)/,
            label_symbolRex: /^[!,.:;'}\]%\?>\u3001\u2018\u201c\u300b\uff1f\u3002\uff0c\uff01]/,
            label_lastWordRex: /([a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+|\S)$/,
            label_lastEnglish: /[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]+$/,
            label_firstEnglish: /^[a-zA-Z0-9\xc4\xd6\xdc\xe4\xf6\xfc\xdf\xe9\xe8\xe7\xe0\xf9\xea\xe2\xee\xf4\xfb\u0430\xed\xec\xcd\xcc\xef\xc1\xc0\xe1\xe0\xc9\xc8\xd2\xd3\xf2\xf3\u0150\u0151\xd9\xda\u0170\xfa\u0171\xf1\xd1\xe6\xc6\u0153\u0152\xc3\xc2\xe3\xd4\xf5\u011b\u0161\u010d\u0159\u017e\xfd\xe1\xed\xe9\xf3\xfa\u016f\u0165\u010f\u0148\u011a\u0160\u010c\u0158\u017d\xc1\xcd\xc9\xd3\xda\u0164\u017c\u017a\u015b\xf3\u0144\u0142\u0119\u0107\u0105\u017b\u0179\u015a\xd3\u0143\u0141\u0118\u0106\u0104-\u044f\u0410-\u042f\u0401\u0451]/,
            highSurrogateRex: /[\uD800-\uDBFF]/,
            lowSurrogateRex: /[\uDC00-\uDFFF]/,
            label_wrapinspection: !0,
            __CHINESE_REG: /^[\u4E00-\u9FFF\u3400-\u4DFF]+$/,
            __JAPANESE_REG: /[\u3000-\u303F]|[\u3040-\u309F]|[\u30A0-\u30FF]|[\uFF00-\uFFEF]|[\u4E00-\u9FAF]|[\u2605-\u2606]|[\u2190-\u2195]|\u203B/g,
            __KOREAN_REG: /^[\u1100-\u11FF]|[\u3130-\u318F]|[\uA960-\uA97F]|[\uAC00-\uD7AF]|[\uD7B0-\uD7FF]+$/,
            isUnicodeCJK: function(t) {
                return this.__CHINESE_REG.test(t) || this.__JAPANESE_REG.test(t) || this.__KOREAN_REG.test(t)
            },
            isUnicodeSpace: function(t) {
                return (t = t.charCodeAt(0)) >= 9 && t <= 13 || 32 === t || 133 === t || 160 === t || 5760 === t || t >= 8192 && t <= 8202 || 8232 === t || 8233 === t || 8239 === t || 8287 === t || 12288 === t
            },
            safeMeasureText: function(t, e, i) {
                var n = (i || t.font) + "\ud83c\udfae" + e
                  , r = s.get(n);
                if (null !== r)
                    return r;
                var a = t.measureText(e)
                  , o = a && a.width || 0;
                return s.put(n, o),
                o
            },
            _safeSubstring: function(t, e, i) {
                var n = e
                  , r = i
                  , s = t[e];
                if (this.lowSurrogateRex.test(s) && n--,
                void 0 !== i)
                    if (i - 1 !== e) {
                        var a = t[i - 1];
                        this.highSurrogateRex.test(a) && r--
                    } else
                        this.highSurrogateRex.test(s) && r++;
                return t.substring(n, r)
            },
            fragmentText: function(t, e, i, n) {
                var r = [];
                if (0 === t.length || i < 0)
                    return r.push(""),
                    r;
                for (var s = t; e > i && s.length > 1; ) {
                    for (var a = s.length * (i / e) | 0, o = this._safeSubstring(s, a), l = e - n(o), h = o, c = 0, u = 0; l > i && u++ < 10; )
                        a *= i / l,
                        a |= 0,
                        l = e - n(o = this._safeSubstring(s, a));
                    for (u = 0; l <= i && u++ < 10; ) {
                        if (o) {
                            var _ = this.label_wordRex.exec(o);
                            c = _ ? _[0].length : 1,
                            h = o
                        }
                        a += c,
                        l = e - n(o = this._safeSubstring(s, a))
                    }
                    0 == (a -= c) ? (a = 1,
                    h = this._safeSubstring(s, 1)) : 1 === a && this.highSurrogateRex.test(s[0]) && (a = 2,
                    h = this._safeSubstring(s, 2));
                    var f, d = this._safeSubstring(s, 0, a);
                    this.label_wrapinspection && this.label_symbolRex.test(h || o) && (0 == (a -= (f = this.label_lastWordRex.exec(d)) ? f[0].length : 0) && (a = 1),
                    h = this._safeSubstring(s, a),
                    d = this._safeSubstring(s, 0, a)),
                    this.label_firstEnglish.test(h) && (f = this.label_lastEnglish.exec(d)) && d !== f[0] && (a -= f[0].length,
                    h = this._safeSubstring(s, a),
                    d = this._safeSubstring(s, 0, a)),
                    0 === r.length ? r.push(d) : (d = d.trimLeft()).length > 0 && r.push(d),
                    e = n(s = h || o)
                }
                return 0 === r.length ? r.push(s) : (s = s.trimLeft()).length > 0 && r.push(s),
                r
            }
        };
        cc.textUtils = e.exports = a
    }
    ), {
        "../platform/js": 214
    }],
    275: [(function(t, e) {
        "use strict";
        var i = t("../assets/CCTexture2D")
          , n = {
            loadImage: function(t, e, i) {
                cc.assertID(t, 3103);
                var n = cc.assetManager.assets.get(t);
                if (n)
                    return n.loaded ? (e && e.call(i, null, n),
                    n) : (n.once("load", (function() {
                        e && e.call(i, null, n)
                    }
                    ), i),
                    n);
                cc.assetManager.loadRemote(t, (function(t, n) {
                    e && e.call(i, t, n)
                }
                ))
            },
            cacheImage: function(t, e) {
                if (t && e) {
                    var n = new i;
                    return n.initWithElement(e),
                    cc.assetManager.assets.add(t, n),
                    n
                }
            },
            postLoadTexture: function(t, e) {
                t.loaded ? e && e() : t.nativeUrl ? cc.assetManager.postLoadNative(t, e) : e && e()
            }
        };
        e.exports = n
    }
    ), {
        "../assets/CCTexture2D": 77
    }],
    276: [(function(t, e) {
        "use strict";
        var i = t("./node-unit")
          , n = t("./node-mem-pool");
        e.exports = {
            NodeMemPool: new n(i)
        }
    }
    ), {
        "./node-mem-pool": 278,
        "./node-unit": 279
    }],
    277: [(function(t, e) {
        "use strict";
        var i = function(t) {
            this._unitClass = t,
            this._pool = [],
            this._findOrder = []
        }
          , n = i.prototype;
        n._initNative = function() {
            this._nativeMemPool = new renderer.MemPool
        }
        ,
        n._buildUnit = function(t) {
            return new this._unitClass(t,this)
        }
        ,
        n._destroyUnit = function(t) {
            this._pool[t] = null;
            for (var e = 0, i = this._findOrder.length; e < i; e++) {
                var n = this._findOrder[e];
                if (n && n.unitID == t) {
                    this._findOrder.splice(e, 1);
                    break
                }
            }
        }
        ,
        n._findUnitID = function() {
            for (var t = 0, e = this._pool; e[t]; )
                t++;
            return t
        }
        ,
        n.pop = function() {
            for (var t = null, e = 0, i = this._findOrder, n = this._pool, r = i.length; e < r; e++) {
                var s = i[e];
                if (s && s.hasSpace()) {
                    t = s;
                    break
                }
            }
            if (!t) {
                var a = this._findUnitID();
                t = this._buildUnit(a),
                n[a] = t,
                i.push(t),
                e = i.length - 1
            }
            var o = i[0];
            return o !== t && (i[0] = t,
            i[e] = o),
            t.pop()
        }
        ,
        n.push = function(t) {
            var e = this._pool[t.unitID];
            return e.push(t.index),
            this._findOrder.length > 1 && e.isAllFree() && this._destroyUnit(t.unitID),
            e
        }
        ,
        e.exports = i
    }
    ), {}],
    278: [(function(t, e) {
        "use strict";
        var i, n = t("./mem-pool"), r = function(t) {
            n.call(this, t)
        };
        (i = function() {}
        ).prototype = n.prototype;
        var s = r.prototype = new i;
        s._initNative = function() {
            this._nativeMemPool = new renderer.NodeMemPool
        }
        ,
        s._destroyUnit = function(t) {
            n.prototype._destroyUnit.call(this, t)
        }
        ,
        e.exports = r
    }
    ), {
        "./mem-pool": 277
    }],
    279: [(function(t, e) {
        "use strict";
        var i, n = t("../../value-types/utils"), r = (Uint32Array,
        10 * n.FLOAT_BYTES), s = 16 * n.FLOAT_BYTES, a = 16 * n.FLOAT_BYTES, o = (Uint32Array,
        Uint32Array,
        Int32Array,
        Uint8Array,
        Uint8Array,
        Uint32Array,
        n.FLOAT_BYTES,
        t("./unit-base")), l = function(t, e) {
            o.call(this, t, e);
            var i = this._contentNum;
            this.trsList = new n.FLOAT_ARRAY_TYPE(10 * i),
            this.localMatList = new n.FLOAT_ARRAY_TYPE(16 * i),
            this.worldMatList = new n.FLOAT_ARRAY_TYPE(16 * i);
            for (var l = 0; l < i; l++) {
                var h = this._spacesData[l];
                h.trs = new n.FLOAT_ARRAY_TYPE(this.trsList.buffer,l * r,10),
                h.localMat = new n.FLOAT_ARRAY_TYPE(this.localMatList.buffer,l * s,16),
                h.worldMat = new n.FLOAT_ARRAY_TYPE(this.worldMatList.buffer,l * a,16)
            }
        };
        (i = function() {}
        ).prototype = o.prototype,
        l.prototype = new i,
        e.exports = l
    }
    ), {
        "../../value-types/utils": 289,
        "./unit-base": 280
    }],
    280: [(function(t, e) {
        "use strict";
        var i = function(t, e, i) {
            i = i || 128,
            this.unitID = t,
            this._memPool = e,
            this._data = new Uint16Array(2),
            this._data[0] = 0,
            this._data[1] = 0,
            this._contentNum = i,
            this._signData = new Uint16Array(2 * this._contentNum),
            this._spacesData = [];
            for (var n = 0; n < i; n++) {
                var r = 2 * n;
                this._signData[r + 0] = n + 1,
                this._signData[r + 1] = 0,
                this._spacesData[n] = {
                    index: n,
                    unitID: t
                }
            }
            this._signData[2 * (i - 1)] = 65535
        }
          , n = i.prototype;
        n.hasSpace = function() {
            return 65535 !== this._data[0]
        }
        ,
        n.isAllFree = function() {
            return 0 == this._data[1]
        }
        ,
        n.pop = function() {
            var t = this._data[0];
            if (65535 === t)
                return null;
            var e = t
              , i = 2 * e
              , n = this._spacesData[e];
            return this._signData[i + 1] = 1,
            this._data[0] = this._signData[i + 0],
            this._data[1]++,
            n
        }
        ,
        n.push = function(t) {
            var e = 2 * t;
            this._signData[e + 1] = 0,
            this._signData[e + 0] = this._data[0],
            this._data[0] = t,
            this._data[1]--
        }
        ,
        n.dump = function() {
            for (var t = 0, e = this._data[0], i = ""; 65535 != e; )
                t++,
                i += e + "->",
                e = this._signData[2 * e + 0];
            for (var n = 0, r = "", s = this._contentNum, a = 0; a < s; a++)
                1 == this._signData[2 * a + 1] && (n++,
                r += a + "->");
            var o = t + n;
            console.log("unitID:", this.unitID, "spaceNum:", t, "calc using num:", n, "store using num:", this._data[1], "calc total num:", o, "actually total num:", this._contentNum),
            console.log("free info:", i),
            console.log("using info:", r),
            n != this._data[1] && cc.error("using num error", "calc using num:", n, "store using num:", this._data[1]),
            t + n != this._contentNum && cc.error("total num error", "calc total num:", o, "actually total num:", this._contentNum)
        }
        ,
        e.exports = i
    }
    ), {}],
    281: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("./value-type"))
          , r = a(t("../platform/CCClass"))
          , s = a(t("../utils/misc"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function l(t, e) {
            return (l = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var h = (function(t) {
            var e, i;
            function n(e, i, n, r) {
                var s;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 255),
                (s = t.call(this) || this)._val = 0,
                "object" == typeof e && (i = e.g,
                n = e.b,
                r = e.a,
                e = e.r),
                s._val = (r << 24 >>> 0) + (n << 16) + (i << 8) + (0 | e),
                s
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            l(e, i),
            n.copy = function(t, e) {
                return t.r = e.r,
                t.g = e.g,
                t.b = e.b,
                t.a = e.a,
                t
            }
            ,
            n.clone = function(t) {
                return new n(t.r,t.g,t.b,t.a)
            }
            ,
            n.set = function(t, e, i, n, r) {
                return void 0 === e && (e = 255),
                void 0 === i && (i = 255),
                void 0 === n && (n = 255),
                void 0 === r && (r = 255),
                t.r = e,
                t.g = i,
                t.b = n,
                t.a = r,
                t
            }
            ,
            n.fromHex = function(t, e) {
                var i = (e >> 24) / 255
                  , n = (e >> 16 & 255) / 255
                  , r = (e >> 8 & 255) / 255
                  , s = (255 & e) / 255;
                return t.r = i,
                t.g = n,
                t.b = r,
                t.a = s,
                t
            }
            ,
            n.fromHEX = function(t, e) {
                return e = 0 === e.indexOf("#") ? e.substring(1) : e,
                t.r = parseInt(e.substr(0, 2), 16) || 0,
                t.g = parseInt(e.substr(2, 2), 16) || 0,
                t.b = parseInt(e.substr(4, 2), 16) || 0,
                t.a = parseInt(e.substr(6, 2), 16) || 255,
                t._val = (t.a << 24 >>> 0) + (t.b << 16) + (t.g << 8) + t.r,
                t
            }
            ,
            n.add = function(t, e, i) {
                return t.r = e.r + i.r,
                t.g = e.g + i.g,
                t.b = e.b + i.b,
                t.a = e.a + i.a,
                t
            }
            ,
            n.subtract = function(t, e, i) {
                return t.r = e.r - i.r,
                t.g = e.g - i.g,
                t.b = e.b - i.b,
                t.a = e.a - i.a,
                t
            }
            ,
            n.multiply = function(t, e, i) {
                return t.r = e.r * i.r,
                t.g = e.g * i.g,
                t.b = e.b * i.b,
                t.a = e.a * i.a,
                t
            }
            ,
            n.divide = function(t, e, i) {
                return t.r = e.r / i.r,
                t.g = e.g / i.g,
                t.b = e.b / i.b,
                t.a = e.a / i.a,
                t
            }
            ,
            n.scale = function(t, e, i) {
                return t.r = e.r * i,
                t.g = e.g * i,
                t.b = e.b * i,
                t.a = e.a * i,
                t
            }
            ,
            n.lerp = function(t, e, i, n) {
                var r = e.r
                  , s = e.g
                  , a = e.b
                  , o = e.a;
                return t.r = r + n * (i.r - r),
                t.g = s + n * (i.g - s),
                t.b = a + n * (i.b - a),
                t.a = o + n * (i.a - o),
                t
            }
            ,
            n.toArray = function(t, e, i) {
                void 0 === i && (i = 0);
                var r = e instanceof n || e.a > 1 ? 1 / 255 : 1;
                return t[i + 0] = e.r * r,
                t[i + 1] = e.g * r,
                t[i + 2] = e.b * r,
                t[i + 3] = e.a * r,
                t
            }
            ,
            n.fromArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                e.r = 255 * t[i + 0],
                e.g = 255 * t[i + 1],
                e.b = 255 * t[i + 2],
                e.a = 255 * t[i + 3],
                e
            }
            ,
            n.premultiplyAlpha = function(t, e) {
                var i = e.a / 255;
                return t.r = e.r * i,
                t.g = e.g * i,
                t.b = e.b * i,
                t._fastSetA(e.a),
                t
            }
            ;
            var r, a, h, c = n.prototype;
            return c.clone = function() {
                var t = new n;
                return t._val = this._val,
                t
            }
            ,
            c.equals = function(t) {
                return t && this._val === t._val
            }
            ,
            c.lerp = function(t, e, i) {
                i = i || new n;
                var r = this.r
                  , s = this.g
                  , a = this.b
                  , o = this.a;
                return i.r = r + (t.r - r) * e,
                i.g = s + (t.g - s) * e,
                i.b = a + (t.b - a) * e,
                i.a = o + (t.a - o) * e,
                i
            }
            ,
            c.toString = function() {
                return "rgba(" + this.r.toFixed() + ", " + this.g.toFixed() + ", " + this.b.toFixed() + ", " + this.a.toFixed() + ")"
            }
            ,
            c.getR = function() {
                return 255 & this._val
            }
            ,
            c.setR = function(t) {
                return t = ~~s.default.clampf(t, 0, 255),
                this._val = (4294967040 & this._val | t) >>> 0,
                this
            }
            ,
            c.getG = function() {
                return (65280 & this._val) >> 8
            }
            ,
            c.setG = function(t) {
                return t = ~~s.default.clampf(t, 0, 255),
                this._val = (4294902015 & this._val | t << 8) >>> 0,
                this
            }
            ,
            c.getB = function() {
                return (16711680 & this._val) >> 16
            }
            ,
            c.setB = function(t) {
                return t = ~~s.default.clampf(t, 0, 255),
                this._val = (4278255615 & this._val | t << 16) >>> 0,
                this
            }
            ,
            c.getA = function() {
                return (4278190080 & this._val) >>> 24
            }
            ,
            c.setA = function(t) {
                return t = ~~s.default.clampf(t, 0, 255),
                this._val = (16777215 & this._val | t << 24) >>> 0,
                this
            }
            ,
            c.toCSS = function(t) {
                return t && "rgba" !== t ? "rgb" === t ? "rgb(" + this.r + "," + this.g + "," + this.b + ")" : "#" + this.toHEX(t) : "rgba(" + this.r + "," + this.g + "," + this.b + "," + (this.a / 255).toFixed(2) + ")"
            }
            ,
            c.fromHEX = function(t) {
                t = 0 === t.indexOf("#") ? t.substring(1) : t;
                var e = parseInt(t.substr(0, 2), 16) || 0
                  , i = parseInt(t.substr(2, 2), 16) || 0
                  , n = parseInt(t.substr(4, 2), 16) || 0
                  , r = parseInt(t.substr(6, 2), 16) || 255;
                return this._val = (r << 24 >>> 0) + (n << 16) + (i << 8) + e,
                this
            }
            ,
            c.toHEX = function(t) {
                var e = [(this.r < 16 ? "0" : "") + this.r.toString(16), (this.g < 16 ? "0" : "") + this.g.toString(16), (this.b < 16 ? "0" : "") + this.b.toString(16)];
                return "#rgb" === t ? (e[0] = e[0][0],
                e[1] = e[1][0],
                e[2] = e[2][0]) : "#rrggbbaa" === t && e.push((this.a < 16 ? "0" : "") + this.a.toString(16)),
                e.join("")
            }
            ,
            c.toRGBValue = function() {
                return 16777215 & this._val
            }
            ,
            c.fromHSV = function(t, e, i) {
                var n, r, s;
                if (0 === e)
                    n = r = s = i;
                else if (0 === i)
                    n = r = s = 0;
                else {
                    1 === t && (t = 0),
                    t *= 6;
                    var a = Math.floor(t)
                      , o = t - a
                      , l = i * (1 - e)
                      , h = i * (1 - e * o)
                      , c = i * (1 - e * (1 - o));
                    switch (a) {
                    case 0:
                        n = i,
                        r = c,
                        s = l;
                        break;
                    case 1:
                        n = h,
                        r = i,
                        s = l;
                        break;
                    case 2:
                        n = l,
                        r = i,
                        s = c;
                        break;
                    case 3:
                        n = l,
                        r = h,
                        s = i;
                        break;
                    case 4:
                        n = c,
                        r = l,
                        s = i;
                        break;
                    case 5:
                        n = i,
                        r = l,
                        s = h
                    }
                }
                return n *= 255,
                r *= 255,
                s *= 255,
                this._val = (this.a << 24 >>> 0) + (s << 16) + (r << 8) + (0 | n),
                this
            }
            ,
            c.toHSV = function() {
                var t = this.r / 255
                  , e = this.g / 255
                  , i = this.b / 255
                  , n = {
                    h: 0,
                    s: 0,
                    v: 0
                }
                  , r = Math.max(t, e, i)
                  , s = Math.min(t, e, i)
                  , a = 0;
                return n.v = r,
                n.s = r ? (r - s) / r : 0,
                n.s ? (a = r - s,
                n.h = t === r ? (e - i) / a : e === r ? 2 + (i - t) / a : 4 + (t - e) / a,
                n.h /= 6,
                n.h < 0 && (n.h += 1)) : n.h = 0,
                n
            }
            ,
            c.set = function(t) {
                return t._val ? this._val = t._val : (this.r = t.r,
                this.g = t.g,
                this.b = t.b,
                this.a = t.a),
                this
            }
            ,
            c._fastSetA = function(t) {
                this._val = (16777215 & this._val | t << 24) >>> 0
            }
            ,
            c.multiply = function(t) {
                var e = (255 & this._val) * t.r >> 8
                  , i = (65280 & this._val) * t.g >> 8
                  , n = (16711680 & this._val) * t.b >> 8
                  , r = ((4278190080 & this._val) >>> 8) * t.a;
                return this._val = 4278190080 & r | 16711680 & n | 65280 & i | 255 & e,
                this
            }
            ,
            r = n,
            h = [{
                key: "WHITE",
                get: function() {
                    return new n(255,255,255,255)
                }
            }, {
                key: "BLACK",
                get: function() {
                    return new n(0,0,0,255)
                }
            }, {
                key: "TRANSPARENT",
                get: function() {
                    return new n(0,0,0,0)
                }
            }, {
                key: "GRAY",
                get: function() {
                    return new n(127.5,127.5,127.5)
                }
            }, {
                key: "RED",
                get: function() {
                    return new n(255,0,0)
                }
            }, {
                key: "GREEN",
                get: function() {
                    return new n(0,255,0)
                }
            }, {
                key: "BLUE",
                get: function() {
                    return new n(0,0,255)
                }
            }, {
                key: "YELLOW",
                get: function() {
                    return new n(255,235,4)
                }
            }, {
                key: "ORANGE",
                get: function() {
                    return new n(255,127,0)
                }
            }, {
                key: "CYAN",
                get: function() {
                    return new n(0,255,255)
                }
            }, {
                key: "MAGENTA",
                get: function() {
                    return new n(255,0,255)
                }
            }],
            (a = [{
                key: "r",
                get: function() {
                    return this.getR()
                },
                set: function(t) {
                    this.setR(t)
                }
            }, {
                key: "g",
                get: function() {
                    return this.getG()
                },
                set: function(t) {
                    this.setG(t)
                }
            }, {
                key: "b",
                get: function() {
                    return this.getB()
                },
                set: function(t) {
                    this.setB(t)
                }
            }, {
                key: "a",
                get: function() {
                    return this.getA()
                },
                set: function(t) {
                    this.setA(t)
                }
            }]) && o(r.prototype, a),
            h && o(r, h),
            n
        }
        )(n.default);
        i.default = h,
        h.div = h.divide,
        h.sub = h.subtract,
        h.mul = h.multiply,
        h.WHITE_R = h.WHITE,
        h.BLACK_R = h.BLACK,
        h.TRANSPARENT_R = h.TRANSPARENT,
        h.GRAY_R = h.GRAY,
        h.RED_R = h.RED,
        h.GREEN_R = h.GREEN,
        h.BLUE_R = h.BLUE,
        h.YELLOW_R = h.YELLOW,
        h.ORANGE_R = h.ORANGE,
        h.CYAN_R = h.CYAN,
        h.MAGENTA_R = h.MAGENTA,
        r.default.fastDefine("cc.Color", h, {
            r: 0,
            g: 0,
            b: 0,
            a: 255
        }),
        cc.Color = h,
        cc.color = function(t, e, i, n) {
            return "string" == typeof t ? (new h).fromHEX(t) : "object" == typeof t ? new h(t.r,t.g,t.b,t.a) : new h(t,e,i,n)
        }
        ,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "../utils/misc": 267,
        "./value-type": 290
    }],
    282: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0;
        var n = {
            Vec2: !0,
            Vec3: !0,
            Vec4: !0,
            Mat4: !0,
            Mat3: !0,
            Rect: !0,
            Size: !0,
            Color: !0,
            Quat: !0,
            Trs: !0
        };
        i.Trs = i.Quat = i.Color = i.Size = i.Rect = i.Mat3 = i.Mat4 = i.Vec4 = i.Vec3 = i.Vec2 = void 0;
        var r = p(t("./vec2"));
        i.Vec2 = r.default;
        var s = p(t("./vec3"));
        i.Vec3 = s.default;
        var a = p(t("./vec4"));
        i.Vec4 = a.default;
        var o = p(t("./mat4"));
        i.Mat4 = o.default;
        var l = p(t("./mat3"));
        i.Mat3 = l.default;
        var h = p(t("./rect"));
        i.Rect = h.default;
        var c = p(t("./size"));
        i.Size = c.default;
        var u = p(t("./color"));
        i.Color = u.default;
        var _ = p(t("./quat"));
        i.Quat = _.default;
        var f = p(t("./trs"));
        i.Trs = f.default;
        var d = t("./utils");
        function p(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        Object.keys(d).forEach((function(t) {
            "default" !== t && "__esModule" !== t && (Object.prototype.hasOwnProperty.call(n, t) || t in i && i[t] === d[t] || (i[t] = d[t]))
        }
        )),
        cc.math = e.exports
    }
    ), {
        "./color": 281,
        "./mat3": 283,
        "./mat4": 284,
        "./quat": 285,
        "./rect": 286,
        "./size": 287,
        "./trs": 288,
        "./utils": 289,
        "./vec2": 291,
        "./vec3": 292,
        "./vec4": 293
    }],
    283: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../value-types/utils"), s = (n = t("./vec3")) && n.__esModule ? n : {
            default: n
        }, a = (function() {
            function t(t, e, i, n, s, a, o, l, h) {
                if (void 0 === t && (t = 1),
                void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === s && (s = 1),
                void 0 === a && (a = 0),
                void 0 === o && (o = 0),
                void 0 === l && (l = 0),
                void 0 === h && (h = 1),
                this.m = void 0,
                t instanceof r.FLOAT_ARRAY_TYPE)
                    this.m = t;
                else {
                    this.m = new r.FLOAT_ARRAY_TYPE(9);
                    var c = this.m;
                    c[0] = t,
                    c[1] = e,
                    c[2] = i,
                    c[3] = n,
                    c[4] = s,
                    c[5] = a,
                    c[6] = o,
                    c[7] = l,
                    c[8] = h
                }
            }
            return t.create = function(e, i, n, r, s, a, o, l, h) {
                return void 0 === e && (e = 1),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 0),
                void 0 === s && (s = 1),
                void 0 === a && (a = 0),
                void 0 === o && (o = 0),
                void 0 === l && (l = 0),
                void 0 === h && (h = 1),
                new t(e,i,n,r,s,a,o,l,h)
            }
            ,
            t.clone = function(e) {
                var i = e.m;
                return new t(i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7],i[8])
            }
            ,
            t.copy = function(t, e) {
                return t.m.set(e.m),
                t
            }
            ,
            t.set = function(t, e, i, n, r, s, a, o, l, h) {
                var c = t.m;
                return c[0] = e,
                c[1] = i,
                c[2] = n,
                c[3] = r,
                c[4] = s,
                c[5] = a,
                c[6] = o,
                c[7] = l,
                c[8] = h,
                t
            }
            ,
            t.identity = function(t) {
                var e = t.m;
                return e[0] = 1,
                e[1] = 0,
                e[2] = 0,
                e[3] = 0,
                e[4] = 1,
                e[5] = 0,
                e[6] = 0,
                e[7] = 0,
                e[8] = 1,
                t
            }
            ,
            t.transpose = function(t, e) {
                var i = e.m
                  , n = t.m;
                if (t === e) {
                    var r = i[1]
                      , s = i[2]
                      , a = i[5];
                    n[1] = i[3],
                    n[2] = i[6],
                    n[3] = r,
                    n[5] = i[7],
                    n[6] = s,
                    n[7] = a
                } else
                    n[0] = i[0],
                    n[1] = i[3],
                    n[2] = i[6],
                    n[3] = i[1],
                    n[4] = i[4],
                    n[5] = i[7],
                    n[6] = i[2],
                    n[7] = i[5],
                    n[8] = i[8];
                return t
            }
            ,
            t.invert = function(t, e) {
                var i = e.m
                  , n = t.m
                  , r = i[0]
                  , s = i[1]
                  , a = i[2]
                  , o = i[3]
                  , l = i[4]
                  , h = i[5]
                  , c = i[6]
                  , u = i[7]
                  , _ = i[8]
                  , f = _ * l - h * u
                  , d = -_ * o + h * c
                  , p = u * o - l * c
                  , m = r * f + s * d + a * p;
                return m ? (m = 1 / m,
                n[0] = f * m,
                n[1] = (-_ * s + a * u) * m,
                n[2] = (h * s - a * l) * m,
                n[3] = d * m,
                n[4] = (_ * r - a * c) * m,
                n[5] = (-h * r + a * o) * m,
                n[6] = p * m,
                n[7] = (-u * r + s * c) * m,
                n[8] = (l * r - s * o) * m,
                t) : t
            }
            ,
            t.adjoint = function(t, e) {
                var i = e.m
                  , n = t.m
                  , r = i[0]
                  , s = i[1]
                  , a = i[2]
                  , o = i[3]
                  , l = i[4]
                  , h = i[5]
                  , c = i[6]
                  , u = i[7]
                  , _ = i[8];
                return n[0] = l * _ - h * u,
                n[1] = a * u - s * _,
                n[2] = s * h - a * l,
                n[3] = h * c - o * _,
                n[4] = r * _ - a * c,
                n[5] = a * o - r * h,
                n[6] = o * u - l * c,
                n[7] = s * c - r * u,
                n[8] = r * l - s * o,
                t
            }
            ,
            t.determinant = function(t) {
                var e = t.m
                  , i = e[0]
                  , n = e[1]
                  , r = e[2]
                  , s = e[3]
                  , a = e[4]
                  , o = e[5]
                  , l = e[6]
                  , h = e[7]
                  , c = e[8];
                return i * (c * a - o * h) + n * (-c * s + o * l) + r * (h * s - a * l)
            }
            ,
            t.multiply = function(t, e, i) {
                var n = e.m
                  , r = i.m
                  , s = t.m
                  , a = n[0]
                  , o = n[1]
                  , l = n[2]
                  , h = n[3]
                  , c = n[4]
                  , u = n[5]
                  , _ = n[6]
                  , f = n[7]
                  , d = n[8]
                  , p = r[0]
                  , m = r[1]
                  , y = r[2]
                  , v = r[3]
                  , g = r[4]
                  , A = r[5]
                  , x = r[6]
                  , b = r[7]
                  , C = r[8];
                return s[0] = p * a + m * h + y * _,
                s[1] = p * o + m * c + y * f,
                s[2] = p * l + m * u + y * d,
                s[3] = v * a + g * h + A * _,
                s[4] = v * o + g * c + A * f,
                s[5] = v * l + g * u + A * d,
                s[6] = x * a + b * h + C * _,
                s[7] = x * o + b * c + C * f,
                s[8] = x * l + b * u + C * d,
                t
            }
            ,
            t.multiplyMat4 = function(t, e, i) {
                var n = e.m
                  , r = i.m
                  , s = t.m
                  , a = n[0]
                  , o = n[1]
                  , l = n[2]
                  , h = n[3]
                  , c = n[4]
                  , u = n[5]
                  , _ = n[6]
                  , f = n[7]
                  , d = n[8]
                  , p = r[0]
                  , m = r[1]
                  , y = r[2]
                  , v = r[4]
                  , g = r[5]
                  , A = r[6]
                  , x = r[8]
                  , b = r[9]
                  , C = r[10];
                return s[0] = p * a + m * h + y * _,
                s[1] = p * o + m * c + y * f,
                s[2] = p * l + m * u + y * d,
                s[3] = v * a + g * h + A * _,
                s[4] = v * o + g * c + A * f,
                s[5] = v * l + g * u + A * d,
                s[6] = x * a + b * h + C * _,
                s[7] = x * o + b * c + C * f,
                s[8] = x * l + b * u + C * d,
                t
            }
            ,
            t.translate = function(t, e, i) {
                var n = e.m
                  , r = t.m
                  , s = n[0]
                  , a = n[1]
                  , o = n[2]
                  , l = n[3]
                  , h = n[4]
                  , c = n[5]
                  , u = n[6]
                  , _ = n[7]
                  , f = n[8]
                  , d = i.x
                  , p = i.y;
                return r[0] = s,
                r[1] = a,
                r[2] = o,
                r[3] = l,
                r[4] = h,
                r[5] = c,
                r[6] = d * s + p * l + u,
                r[7] = d * a + p * h + _,
                r[8] = d * o + p * c + f,
                t
            }
            ,
            t.rotate = function(t, e, i) {
                var n = e.m
                  , r = t.m
                  , s = n[0]
                  , a = n[1]
                  , o = n[2]
                  , l = n[3]
                  , h = n[4]
                  , c = n[5]
                  , u = n[6]
                  , _ = n[7]
                  , f = n[8]
                  , d = Math.sin(i)
                  , p = Math.cos(i);
                return r[0] = p * s + d * l,
                r[1] = p * a + d * h,
                r[2] = p * o + d * c,
                r[3] = p * l - d * s,
                r[4] = p * h - d * a,
                r[5] = p * c - d * o,
                r[6] = u,
                r[7] = _,
                r[8] = f,
                t
            }
            ,
            t.scale = function(t, e, i) {
                var n = i.x
                  , r = i.y
                  , s = e.m
                  , a = t.m;
                return a[0] = n * s[0],
                a[1] = n * s[1],
                a[2] = n * s[2],
                a[3] = r * s[3],
                a[4] = r * s[4],
                a[5] = r * s[5],
                a[6] = s[6],
                a[7] = s[7],
                a[8] = s[8],
                t
            }
            ,
            t.fromMat4 = function(t, e) {
                var i = e.m
                  , n = t.m;
                return n[0] = i[0],
                n[1] = i[1],
                n[2] = i[2],
                n[3] = i[4],
                n[4] = i[5],
                n[5] = i[6],
                n[6] = i[8],
                n[7] = i[9],
                n[8] = i[10],
                t
            }
            ,
            t.fromTranslation = function(t, e) {
                var i = t.m;
                return i[0] = 1,
                i[1] = 0,
                i[2] = 0,
                i[3] = 0,
                i[4] = 1,
                i[5] = 0,
                i[6] = e.x,
                i[7] = e.y,
                i[8] = 1,
                t
            }
            ,
            t.fromRotation = function(t, e) {
                var i = Math.sin(e)
                  , n = Math.cos(e)
                  , r = t.m;
                return r[0] = n,
                r[1] = i,
                r[2] = 0,
                r[3] = -i,
                r[4] = n,
                r[5] = 0,
                r[6] = 0,
                r[7] = 0,
                r[8] = 1,
                t
            }
            ,
            t.fromScaling = function(t, e) {
                var i = t.m;
                return i[0] = e.x,
                i[1] = 0,
                i[2] = 0,
                i[3] = 0,
                i[4] = e.y,
                i[5] = 0,
                i[6] = 0,
                i[7] = 0,
                i[8] = 1,
                t
            }
            ,
            t.fromQuat = function(t, e) {
                var i = t.m
                  , n = e.x
                  , r = e.y
                  , s = e.z
                  , a = e.w
                  , o = n + n
                  , l = r + r
                  , h = s + s
                  , c = n * o
                  , u = r * o
                  , _ = r * l
                  , f = s * o
                  , d = s * l
                  , p = s * h
                  , m = a * o
                  , y = a * l
                  , v = a * h;
                return i[0] = 1 - _ - p,
                i[3] = u - v,
                i[6] = f + y,
                i[1] = u + v,
                i[4] = 1 - c - p,
                i[7] = d - m,
                i[2] = f - y,
                i[5] = d + m,
                i[8] = 1 - c - _,
                t
            }
            ,
            t.fromViewUp = function(e, i, n) {
                var a, o, l;
                return (a = new s.default(0,1,0),
                o = new s.default,
                l = new s.default,
                function(e, i, n) {
                    return s.default.lengthSqr(i) < r.EPSILON * r.EPSILON ? (t.identity(e),
                    e) : (n = n || a,
                    s.default.normalize(o, s.default.cross(o, n, i)),
                    s.default.lengthSqr(o) < r.EPSILON * r.EPSILON ? (t.identity(e),
                    e) : (s.default.cross(l, i, o),
                    t.set(e, o.x, o.y, o.z, l.x, l.y, l.z, i.x, i.y, i.z),
                    e))
                }
                )(e, i, n)
            }
            ,
            t.normalFromMat4 = function(t, e) {
                var i = e.m
                  , n = t.m
                  , r = i[0]
                  , s = i[1]
                  , a = i[2]
                  , o = i[3]
                  , l = i[4]
                  , h = i[5]
                  , c = i[6]
                  , u = i[7]
                  , _ = i[8]
                  , f = i[9]
                  , d = i[10]
                  , p = i[11]
                  , m = i[12]
                  , y = i[13]
                  , v = i[14]
                  , g = i[15]
                  , A = r * h - s * l
                  , x = r * c - a * l
                  , b = r * u - o * l
                  , C = s * c - a * h
                  , T = s * u - o * h
                  , S = a * u - o * c
                  , w = _ * y - f * m
                  , E = _ * v - d * m
                  , M = _ * g - p * m
                  , D = f * v - d * y
                  , B = f * g - p * y
                  , I = d * g - p * v
                  , P = A * I - x * B + b * D + C * M - T * E + S * w;
                return P ? (P = 1 / P,
                n[0] = (h * I - c * B + u * D) * P,
                n[1] = (c * M - l * I - u * E) * P,
                n[2] = (l * B - h * M + u * w) * P,
                n[3] = (a * B - s * I - o * D) * P,
                n[4] = (r * I - a * M + o * E) * P,
                n[5] = (s * M - r * B - o * w) * P,
                n[6] = (y * S - v * T + g * C) * P,
                n[7] = (v * b - m * S - g * x) * P,
                n[8] = (m * T - y * b + g * A) * P,
                t) : t
            }
            ,
            t.frob = function(t) {
                var e = t.m;
                return Math.sqrt(Math.pow(e[0], 2) + Math.pow(e[1], 2) + Math.pow(e[2], 2) + Math.pow(e[3], 2) + Math.pow(e[4], 2) + Math.pow(e[5], 2) + Math.pow(e[6], 2) + Math.pow(e[7], 2) + Math.pow(e[8], 2))
            }
            ,
            t.add = function(t, e, i) {
                var n = e.m
                  , r = i.m
                  , s = t.m;
                return s[0] = n[0] + r[0],
                s[1] = n[1] + r[1],
                s[2] = n[2] + r[2],
                s[3] = n[3] + r[3],
                s[4] = n[4] + r[4],
                s[5] = n[5] + r[5],
                s[6] = n[6] + r[6],
                s[7] = n[7] + r[7],
                s[8] = n[8] + r[8],
                t
            }
            ,
            t.subtract = function(t, e, i) {
                var n = e.m
                  , r = i.m
                  , s = t.m;
                return s[0] = n[0] - r[0],
                s[1] = n[1] - r[1],
                s[2] = n[2] - r[2],
                s[3] = n[3] - r[3],
                s[4] = n[4] - r[4],
                s[5] = n[5] - r[5],
                s[6] = n[6] - r[6],
                s[7] = n[7] - r[7],
                s[8] = n[8] - r[8],
                t
            }
            ,
            t.multiplyScalar = function(t, e, i) {
                var n = e.m
                  , r = t.m;
                return r[0] = n[0] * i,
                r[1] = n[1] * i,
                r[2] = n[2] * i,
                r[3] = n[3] * i,
                r[4] = n[4] * i,
                r[5] = n[5] * i,
                r[6] = n[6] * i,
                r[7] = n[7] * i,
                r[8] = n[8] * i,
                t
            }
            ,
            t.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = e.m
                  , s = i.m
                  , a = t.m;
                return a[0] = r[0] + s[0] * n,
                a[1] = r[1] + s[1] * n,
                a[2] = r[2] + s[2] * n,
                a[3] = r[3] + s[3] * n,
                a[4] = r[4] + s[4] * n,
                a[5] = r[5] + s[5] * n,
                a[6] = r[6] + s[6] * n,
                a[7] = r[7] + s[7] * n,
                a[8] = r[8] + s[8] * n,
                t
            }
            ,
            t.exactEquals = function(t, e) {
                var i = t.m
                  , n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5] && i[6] === n[6] && i[7] === n[7] && i[8] === n[8]
            }
            ,
            t.equals = function(t, e) {
                var i = t.m
                  , n = e.m
                  , s = i[0]
                  , a = i[1]
                  , o = i[2]
                  , l = i[3]
                  , h = i[4]
                  , c = i[5]
                  , u = i[6]
                  , _ = i[7]
                  , f = i[8]
                  , d = n[0]
                  , p = n[1]
                  , m = n[2]
                  , y = n[3]
                  , v = n[4]
                  , g = n[5]
                  , A = n[6]
                  , x = n[7]
                  , b = n[8];
                return Math.abs(s - d) <= r.EPSILON * Math.max(1, Math.abs(s), Math.abs(d)) && Math.abs(a - p) <= r.EPSILON * Math.max(1, Math.abs(a), Math.abs(p)) && Math.abs(o - m) <= r.EPSILON * Math.max(1, Math.abs(o), Math.abs(m)) && Math.abs(l - y) <= r.EPSILON * Math.max(1, Math.abs(l), Math.abs(y)) && Math.abs(h - v) <= r.EPSILON * Math.max(1, Math.abs(h), Math.abs(v)) && Math.abs(c - g) <= r.EPSILON * Math.max(1, Math.abs(c), Math.abs(g)) && Math.abs(u - A) <= r.EPSILON * Math.max(1, Math.abs(u), Math.abs(A)) && Math.abs(_ - x) <= r.EPSILON * Math.max(1, Math.abs(_), Math.abs(x)) && Math.abs(f - b) <= r.EPSILON * Math.max(1, Math.abs(f), Math.abs(b))
            }
            ,
            t.toArray = function(t, e, i) {
                void 0 === i && (i = 0);
                for (var n = e.m, r = 0; r < 9; r++)
                    t[i + r] = n[r];
                return t
            }
            ,
            t.fromArray = function(t, e, i) {
                void 0 === i && (i = 0);
                for (var n = t.m, r = 0; r < 9; r++)
                    n[r] = e[i + r];
                return t
            }
            ,
            t.prototype.toString = function() {
                var t = this.m;
                return "mat3(" + t[0] + ", " + t[1] + ", " + t[2] + ", " + t[3] + ", " + t[4] + ", " + t[5] + ", " + t[6] + ", " + t[7] + ", " + t[8] + ")"
            }
            ,
            t
        }
        )();
        i.default = a,
        a.sub = a.subtract,
        a.mul = a.multiply,
        a.IDENTITY = Object.freeze(new a),
        cc.Mat3 = a,
        e.exports = i.default
    }
    ), {
        "../value-types/utils": 289,
        "./vec3": 292
    }],
    284: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = h(t("./value-type"))
          , r = h(t("../platform/CCClass"))
          , s = h(t("./vec3"))
          , a = h(t("./quat"))
          , o = t("./utils")
          , l = h(t("./mat3"));
        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function c(t, e) {
            return (c = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var u = 0
          , _ = 0
          , f = 0
          , d = 0
          , p = 0
          , m = 0
          , y = 0
          , v = 0
          , g = 0
          , A = 0
          , x = 0
          , b = 0
          , C = 0
          , T = 0
          , S = 0
          , w = 0
          , E = (function(t) {
            var e, i;
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            c(e, i);
            var n = r.prototype;
            function r(e, i, n, r, s, a, l, h, c, u, _, f, d, p, m, y) {
                var v;
                if (void 0 === e && (e = 1),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 0),
                void 0 === s && (s = 0),
                void 0 === a && (a = 1),
                void 0 === l && (l = 0),
                void 0 === h && (h = 0),
                void 0 === c && (c = 0),
                void 0 === u && (u = 0),
                void 0 === _ && (_ = 1),
                void 0 === f && (f = 0),
                void 0 === d && (d = 0),
                void 0 === p && (p = 0),
                void 0 === m && (m = 0),
                void 0 === y && (y = 1),
                (v = t.call(this) || this).m = void 0,
                e instanceof o.FLOAT_ARRAY_TYPE)
                    v.m = e;
                else {
                    v.m = new o.FLOAT_ARRAY_TYPE(16);
                    var g = v.m;
                    g[0] = e,
                    g[1] = i,
                    g[2] = n,
                    g[3] = r,
                    g[4] = s,
                    g[5] = a,
                    g[6] = l,
                    g[7] = h,
                    g[8] = c,
                    g[9] = u,
                    g[10] = _,
                    g[11] = f,
                    g[12] = d,
                    g[13] = p,
                    g[14] = m,
                    g[15] = y
                }
                return v
            }
            return n.mul = function(t, e) {
                return r.multiply(e || new r, this, t)
            }
            ,
            n.mulScalar = function(t, e) {
                r.multiplyScalar(e || new r, this, t)
            }
            ,
            n.sub = function(t, e) {
                r.subtract(e || new r, this, t)
            }
            ,
            r.clone = function(t) {
                var e = t.m;
                return new r(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])
            }
            ,
            r.copy = function(t, e) {
                var i = t.m
                  , n = e.m;
                return i[0] = n[0],
                i[1] = n[1],
                i[2] = n[2],
                i[3] = n[3],
                i[4] = n[4],
                i[5] = n[5],
                i[6] = n[6],
                i[7] = n[7],
                i[8] = n[8],
                i[9] = n[9],
                i[10] = n[10],
                i[11] = n[11],
                i[12] = n[12],
                i[13] = n[13],
                i[14] = n[14],
                i[15] = n[15],
                t
            }
            ,
            r.set = function(t, e, i, n, r, s, a, o, l, h, c, u, _, f, d, p, m) {
                var y = t.m;
                return y[0] = e,
                y[1] = i,
                y[2] = n,
                y[3] = r,
                y[4] = s,
                y[5] = a,
                y[6] = o,
                y[7] = l,
                y[8] = h,
                y[9] = c,
                y[10] = u,
                y[11] = _,
                y[12] = f,
                y[13] = d,
                y[14] = p,
                y[15] = m,
                t
            }
            ,
            r.identity = function(t) {
                var e = t.m;
                return e[0] = 1,
                e[1] = 0,
                e[2] = 0,
                e[3] = 0,
                e[4] = 0,
                e[5] = 1,
                e[6] = 0,
                e[7] = 0,
                e[8] = 0,
                e[9] = 0,
                e[10] = 1,
                e[11] = 0,
                e[12] = 0,
                e[13] = 0,
                e[14] = 0,
                e[15] = 1,
                t
            }
            ,
            r.transpose = function(t, e) {
                var i = t.m
                  , n = e.m;
                if (t === e) {
                    var r = n[1]
                      , s = n[2]
                      , a = n[3]
                      , o = n[6]
                      , l = n[7]
                      , h = n[11];
                    i[1] = n[4],
                    i[2] = n[8],
                    i[3] = n[12],
                    i[4] = r,
                    i[6] = n[9],
                    i[7] = n[13],
                    i[8] = s,
                    i[9] = o,
                    i[11] = n[14],
                    i[12] = a,
                    i[13] = l,
                    i[14] = h
                } else
                    i[0] = n[0],
                    i[1] = n[4],
                    i[2] = n[8],
                    i[3] = n[12],
                    i[4] = n[1],
                    i[5] = n[5],
                    i[6] = n[9],
                    i[7] = n[13],
                    i[8] = n[2],
                    i[9] = n[6],
                    i[10] = n[10],
                    i[11] = n[14],
                    i[12] = n[3],
                    i[13] = n[7],
                    i[14] = n[11],
                    i[15] = n[15];
                return t
            }
            ,
            r.invert = function(t, e) {
                var i = e.m;
                u = i[0],
                _ = i[1],
                f = i[2],
                d = i[3],
                p = i[4],
                m = i[5],
                y = i[6],
                v = i[7],
                g = i[8],
                A = i[9],
                x = i[10],
                b = i[11],
                C = i[12],
                T = i[13],
                S = i[14],
                w = i[15];
                var n = u * m - _ * p
                  , r = u * y - f * p
                  , s = u * v - d * p
                  , a = _ * y - f * m
                  , o = _ * v - d * m
                  , l = f * v - d * y
                  , h = g * T - A * C
                  , c = g * S - x * C
                  , E = g * w - b * C
                  , M = A * S - x * T
                  , D = A * w - b * T
                  , B = x * w - b * S
                  , I = n * B - r * D + s * M + a * E - o * c + l * h;
                if (0 === I)
                    return null;
                I = 1 / I;
                var P = t.m;
                return P[0] = (m * B - y * D + v * M) * I,
                P[1] = (f * D - _ * B - d * M) * I,
                P[2] = (T * l - S * o + w * a) * I,
                P[3] = (x * o - A * l - b * a) * I,
                P[4] = (y * E - p * B - v * c) * I,
                P[5] = (u * B - f * E + d * c) * I,
                P[6] = (S * s - C * l - w * r) * I,
                P[7] = (g * l - x * s + b * r) * I,
                P[8] = (p * D - m * E + v * h) * I,
                P[9] = (_ * E - u * D - d * h) * I,
                P[10] = (C * o - T * s + w * n) * I,
                P[11] = (A * s - g * o - b * n) * I,
                P[12] = (m * c - p * M - y * h) * I,
                P[13] = (u * M - _ * c + f * h) * I,
                P[14] = (T * r - C * a - S * n) * I,
                P[15] = (g * a - A * r + x * n) * I,
                t
            }
            ,
            r.determinant = function(t) {
                var e = t.m;
                return u = e[0],
                _ = e[1],
                f = e[2],
                d = e[3],
                p = e[4],
                m = e[5],
                y = e[6],
                v = e[7],
                g = e[8],
                A = e[9],
                x = e[10],
                b = e[11],
                C = e[12],
                T = e[13],
                S = e[14],
                w = e[15],
                (u * m - _ * p) * (x * w - b * S) - (u * y - f * p) * (A * w - b * T) + (u * v - d * p) * (A * S - x * T) + (_ * y - f * m) * (g * w - b * C) - (_ * v - d * m) * (g * S - x * C) + (f * v - d * y) * (g * T - A * C)
            }
            ,
            r.multiply = function(t, e, i) {
                var n = t.m
                  , r = e.m
                  , s = i.m;
                u = r[0],
                _ = r[1],
                f = r[2],
                d = r[3],
                p = r[4],
                m = r[5],
                y = r[6],
                v = r[7],
                g = r[8],
                A = r[9],
                x = r[10],
                b = r[11],
                C = r[12],
                T = r[13],
                S = r[14],
                w = r[15];
                var a = s[0]
                  , o = s[1]
                  , l = s[2]
                  , h = s[3];
                return n[0] = a * u + o * p + l * g + h * C,
                n[1] = a * _ + o * m + l * A + h * T,
                n[2] = a * f + o * y + l * x + h * S,
                n[3] = a * d + o * v + l * b + h * w,
                a = s[4],
                o = s[5],
                l = s[6],
                h = s[7],
                n[4] = a * u + o * p + l * g + h * C,
                n[5] = a * _ + o * m + l * A + h * T,
                n[6] = a * f + o * y + l * x + h * S,
                n[7] = a * d + o * v + l * b + h * w,
                a = s[8],
                o = s[9],
                l = s[10],
                h = s[11],
                n[8] = a * u + o * p + l * g + h * C,
                n[9] = a * _ + o * m + l * A + h * T,
                n[10] = a * f + o * y + l * x + h * S,
                n[11] = a * d + o * v + l * b + h * w,
                a = s[12],
                o = s[13],
                l = s[14],
                h = s[15],
                n[12] = a * u + o * p + l * g + h * C,
                n[13] = a * _ + o * m + l * A + h * T,
                n[14] = a * f + o * y + l * x + h * S,
                n[15] = a * d + o * v + l * b + h * w,
                t
            }
            ,
            r.transform = function(t, e, i) {
                var n = i.x
                  , r = i.y
                  , s = i.z
                  , a = t.m
                  , o = e.m;
                return e === t ? (a[12] = o[0] * n + o[4] * r + o[8] * s + o[12],
                a[13] = o[1] * n + o[5] * r + o[9] * s + o[13],
                a[14] = o[2] * n + o[6] * r + o[10] * s + o[14],
                a[15] = o[3] * n + o[7] * r + o[11] * s + o[15]) : (u = o[0],
                _ = o[1],
                f = o[2],
                d = o[3],
                p = o[4],
                m = o[5],
                y = o[6],
                v = o[7],
                g = o[8],
                A = o[9],
                x = o[10],
                b = o[11],
                C = o[12],
                T = o[13],
                S = o[14],
                w = o[15],
                a[0] = u,
                a[1] = _,
                a[2] = f,
                a[3] = d,
                a[4] = p,
                a[5] = m,
                a[6] = y,
                a[7] = v,
                a[8] = g,
                a[9] = A,
                a[10] = x,
                a[11] = b,
                a[12] = u * n + p * r + g * s + o[12],
                a[13] = _ * n + m * r + A * s + o[13],
                a[14] = f * n + y * r + x * s + o[14],
                a[15] = d * n + v * r + b * s + o[15]),
                t
            }
            ,
            r.translate = function(t, e, i) {
                var n = t.m
                  , r = e.m;
                return e === t ? (n[12] += i.x,
                n[13] += i.y,
                n[14] += i.z) : (n[0] = r[0],
                n[1] = r[1],
                n[2] = r[2],
                n[3] = r[3],
                n[4] = r[4],
                n[5] = r[5],
                n[6] = r[6],
                n[7] = r[7],
                n[8] = r[8],
                n[9] = r[9],
                n[10] = r[10],
                n[11] = r[11],
                n[12] += i.x,
                n[13] += i.y,
                n[14] += i.z,
                n[15] = r[15]),
                t
            }
            ,
            r.scale = function(t, e, i) {
                var n = i.x
                  , r = i.y
                  , s = i.z
                  , a = t.m
                  , o = e.m;
                return a[0] = o[0] * n,
                a[1] = o[1] * n,
                a[2] = o[2] * n,
                a[3] = o[3] * n,
                a[4] = o[4] * r,
                a[5] = o[5] * r,
                a[6] = o[6] * r,
                a[7] = o[7] * r,
                a[8] = o[8] * s,
                a[9] = o[9] * s,
                a[10] = o[10] * s,
                a[11] = o[11] * s,
                a[12] = o[12],
                a[13] = o[13],
                a[14] = o[14],
                a[15] = o[15],
                t
            }
            ,
            r.rotate = function(t, e, i, n) {
                var r = n.x
                  , s = n.y
                  , a = n.z
                  , l = Math.sqrt(r * r + s * s + a * a);
                if (Math.abs(l) < o.EPSILON)
                    return null;
                r *= l = 1 / l,
                s *= l,
                a *= l;
                var h = Math.sin(i)
                  , c = Math.cos(i)
                  , C = 1 - c
                  , T = e.m;
                u = T[0],
                _ = T[1],
                f = T[2],
                d = T[3],
                p = T[4],
                m = T[5],
                y = T[6],
                v = T[7],
                g = T[8],
                A = T[9],
                x = T[10],
                b = T[11];
                var S = r * r * C + c
                  , w = s * r * C + a * h
                  , E = a * r * C - s * h
                  , M = r * s * C - a * h
                  , D = s * s * C + c
                  , B = a * s * C + r * h
                  , I = r * a * C + s * h
                  , P = s * a * C - r * h
                  , R = a * a * C + c
                  , O = t.m;
                return O[0] = u * S + p * w + g * E,
                O[1] = _ * S + m * w + A * E,
                O[2] = f * S + y * w + x * E,
                O[3] = d * S + v * w + b * E,
                O[4] = u * M + p * D + g * B,
                O[5] = _ * M + m * D + A * B,
                O[6] = f * M + y * D + x * B,
                O[7] = d * M + v * D + b * B,
                O[8] = u * I + p * P + g * R,
                O[9] = _ * I + m * P + A * R,
                O[10] = f * I + y * P + x * R,
                O[11] = d * I + v * P + b * R,
                e !== t && (O[12] = T[12],
                O[13] = T[13],
                O[14] = T[14],
                O[15] = T[15]),
                t
            }
            ,
            r.rotateX = function(t, e, i) {
                var n = t.m
                  , r = e.m
                  , s = Math.sin(i)
                  , a = Math.cos(i)
                  , o = r[4]
                  , l = r[5]
                  , h = r[6]
                  , c = r[7]
                  , u = r[8]
                  , _ = r[9]
                  , f = r[10]
                  , d = r[11];
                return e !== t && (n[0] = r[0],
                n[1] = r[1],
                n[2] = r[2],
                n[3] = r[3],
                n[12] = r[12],
                n[13] = r[13],
                n[14] = r[14],
                n[15] = r[15]),
                n[4] = o * a + u * s,
                n[5] = l * a + _ * s,
                n[6] = h * a + f * s,
                n[7] = c * a + d * s,
                n[8] = u * a - o * s,
                n[9] = _ * a - l * s,
                n[10] = f * a - h * s,
                n[11] = d * a - c * s,
                t
            }
            ,
            r.rotateY = function(t, e, i) {
                var n = t.m
                  , r = e.m
                  , s = Math.sin(i)
                  , a = Math.cos(i)
                  , o = r[0]
                  , l = r[1]
                  , h = r[2]
                  , c = r[3]
                  , u = r[8]
                  , _ = r[9]
                  , f = r[10]
                  , d = r[11];
                return e !== t && (n[4] = r[4],
                n[5] = r[5],
                n[6] = r[6],
                n[7] = r[7],
                n[12] = r[12],
                n[13] = r[13],
                n[14] = r[14],
                n[15] = r[15]),
                n[0] = o * a - u * s,
                n[1] = l * a - _ * s,
                n[2] = h * a - f * s,
                n[3] = c * a - d * s,
                n[8] = o * s + u * a,
                n[9] = l * s + _ * a,
                n[10] = h * s + f * a,
                n[11] = c * s + d * a,
                t
            }
            ,
            r.rotateZ = function(t, e, i) {
                var n = e.m
                  , r = t.m
                  , s = Math.sin(i)
                  , a = Math.cos(i)
                  , o = e.m[0]
                  , l = e.m[1]
                  , h = e.m[2]
                  , c = e.m[3]
                  , u = e.m[4]
                  , _ = e.m[5]
                  , f = e.m[6]
                  , d = e.m[7];
                return e !== t && (r[8] = n[8],
                r[9] = n[9],
                r[10] = n[10],
                r[11] = n[11],
                r[12] = n[12],
                r[13] = n[13],
                r[14] = n[14],
                r[15] = n[15]),
                r[0] = o * a + u * s,
                r[1] = l * a + _ * s,
                r[2] = h * a + f * s,
                r[3] = c * a + d * s,
                r[4] = u * a - o * s,
                r[5] = _ * a - l * s,
                r[6] = f * a - h * s,
                r[7] = d * a - c * s,
                t
            }
            ,
            r.fromTranslation = function(t, e) {
                var i = t.m;
                return i[0] = 1,
                i[1] = 0,
                i[2] = 0,
                i[3] = 0,
                i[4] = 0,
                i[5] = 1,
                i[6] = 0,
                i[7] = 0,
                i[8] = 0,
                i[9] = 0,
                i[10] = 1,
                i[11] = 0,
                i[12] = e.x,
                i[13] = e.y,
                i[14] = e.z,
                i[15] = 1,
                t
            }
            ,
            r.fromScaling = function(t, e) {
                var i = t.m;
                return i[0] = e.x,
                i[1] = 0,
                i[2] = 0,
                i[3] = 0,
                i[4] = 0,
                i[5] = e.y,
                i[6] = 0,
                i[7] = 0,
                i[8] = 0,
                i[9] = 0,
                i[10] = e.z,
                i[11] = 0,
                i[12] = 0,
                i[13] = 0,
                i[14] = 0,
                i[15] = 1,
                t
            }
            ,
            r.fromRotation = function(t, e, i) {
                var n = i.x
                  , r = i.y
                  , s = i.z
                  , a = Math.sqrt(n * n + r * r + s * s);
                if (Math.abs(a) < o.EPSILON)
                    return null;
                n *= a = 1 / a,
                r *= a,
                s *= a;
                var l = Math.sin(e)
                  , h = Math.cos(e)
                  , c = 1 - h
                  , u = t.m;
                return u[0] = n * n * c + h,
                u[1] = r * n * c + s * l,
                u[2] = s * n * c - r * l,
                u[3] = 0,
                u[4] = n * r * c - s * l,
                u[5] = r * r * c + h,
                u[6] = s * r * c + n * l,
                u[7] = 0,
                u[8] = n * s * c + r * l,
                u[9] = r * s * c - n * l,
                u[10] = s * s * c + h,
                u[11] = 0,
                u[12] = 0,
                u[13] = 0,
                u[14] = 0,
                u[15] = 1,
                t
            }
            ,
            r.fromXRotation = function(t, e) {
                var i = Math.sin(e)
                  , n = Math.cos(e)
                  , r = t.m;
                return r[0] = 1,
                r[1] = 0,
                r[2] = 0,
                r[3] = 0,
                r[4] = 0,
                r[5] = n,
                r[6] = i,
                r[7] = 0,
                r[8] = 0,
                r[9] = -i,
                r[10] = n,
                r[11] = 0,
                r[12] = 0,
                r[13] = 0,
                r[14] = 0,
                r[15] = 1,
                t
            }
            ,
            r.fromYRotation = function(t, e) {
                var i = Math.sin(e)
                  , n = Math.cos(e)
                  , r = t.m;
                return r[0] = n,
                r[1] = 0,
                r[2] = -i,
                r[3] = 0,
                r[4] = 0,
                r[5] = 1,
                r[6] = 0,
                r[7] = 0,
                r[8] = i,
                r[9] = 0,
                r[10] = n,
                r[11] = 0,
                r[12] = 0,
                r[13] = 0,
                r[14] = 0,
                r[15] = 1,
                t
            }
            ,
            r.fromZRotation = function(t, e) {
                var i = Math.sin(e)
                  , n = Math.cos(e)
                  , r = t.m;
                return r[0] = n,
                r[1] = i,
                r[2] = 0,
                r[3] = 0,
                r[4] = -i,
                r[5] = n,
                r[6] = 0,
                r[7] = 0,
                r[8] = 0,
                r[9] = 0,
                r[10] = 1,
                r[11] = 0,
                r[12] = 0,
                r[13] = 0,
                r[14] = 0,
                r[15] = 1,
                t
            }
            ,
            r.fromRT = function(t, e, i) {
                var n = e.x
                  , r = e.y
                  , s = e.z
                  , a = e.w
                  , o = n + n
                  , l = r + r
                  , h = s + s
                  , c = n * o
                  , u = n * l
                  , _ = n * h
                  , f = r * l
                  , d = r * h
                  , p = s * h
                  , m = a * o
                  , y = a * l
                  , v = a * h
                  , g = t.m;
                return g[0] = 1 - (f + p),
                g[1] = u + v,
                g[2] = _ - y,
                g[3] = 0,
                g[4] = u - v,
                g[5] = 1 - (c + p),
                g[6] = d + m,
                g[7] = 0,
                g[8] = _ + y,
                g[9] = d - m,
                g[10] = 1 - (c + f),
                g[11] = 0,
                g[12] = i.x,
                g[13] = i.y,
                g[14] = i.z,
                g[15] = 1,
                t
            }
            ,
            r.getTranslation = function(t, e) {
                var i = e.m;
                return t.x = i[12],
                t.y = i[13],
                t.z = i[14],
                t
            }
            ,
            r.getScaling = function(t, e) {
                var i = e.m
                  , n = D.m
                  , r = n[0] = i[0]
                  , s = n[1] = i[1]
                  , a = n[2] = i[2]
                  , o = n[3] = i[4]
                  , h = n[4] = i[5]
                  , c = n[5] = i[6]
                  , u = n[6] = i[8]
                  , _ = n[7] = i[9]
                  , f = n[8] = i[10];
                return t.x = Math.sqrt(r * r + s * s + a * a),
                t.y = Math.sqrt(o * o + h * h + c * c),
                t.z = Math.sqrt(u * u + _ * _ + f * f),
                l.default.determinant(D) < 0 && (t.x *= -1),
                t
            }
            ,
            r.getRotation = function(t, e) {
                var i = e.m
                  , n = i[0] + i[5] + i[10]
                  , r = 0;
                return n > 0 ? (r = 2 * Math.sqrt(n + 1),
                t.w = .25 * r,
                t.x = (i[6] - i[9]) / r,
                t.y = (i[8] - i[2]) / r,
                t.z = (i[1] - i[4]) / r) : i[0] > i[5] && i[0] > i[10] ? (r = 2 * Math.sqrt(1 + i[0] - i[5] - i[10]),
                t.w = (i[6] - i[9]) / r,
                t.x = .25 * r,
                t.y = (i[1] + i[4]) / r,
                t.z = (i[8] + i[2]) / r) : i[5] > i[10] ? (r = 2 * Math.sqrt(1 + i[5] - i[0] - i[10]),
                t.w = (i[8] - i[2]) / r,
                t.x = (i[1] + i[4]) / r,
                t.y = .25 * r,
                t.z = (i[6] + i[9]) / r) : (r = 2 * Math.sqrt(1 + i[10] - i[0] - i[5]),
                t.w = (i[1] - i[4]) / r,
                t.x = (i[8] + i[2]) / r,
                t.y = (i[6] + i[9]) / r,
                t.z = .25 * r),
                t
            }
            ,
            r.toRTS = function(t, e, i, n) {
                var r = t.m
                  , o = D.m;
                n.x = s.default.set(M, r[0], r[1], r[2]).mag(),
                o[0] = r[0] / n.x,
                o[1] = r[1] / n.x,
                o[2] = r[2] / n.x,
                n.y = s.default.set(M, r[4], r[5], r[6]).mag(),
                o[3] = r[4] / n.y,
                o[4] = r[5] / n.y,
                o[5] = r[6] / n.y,
                n.z = s.default.set(M, r[8], r[9], r[10]).mag(),
                o[6] = r[8] / n.z,
                o[7] = r[9] / n.z,
                o[8] = r[10] / n.z,
                l.default.determinant(D) < 0 && (n.x *= -1,
                o[0] *= -1,
                o[1] *= -1,
                o[2] *= -1),
                a.default.fromMat3(e, D),
                s.default.set(i, r[12], r[13], r[14])
            }
            ,
            r.fromRTS = function(t, e, i, n) {
                var r = e.x
                  , s = e.y
                  , a = e.z
                  , o = e.w
                  , l = r + r
                  , h = s + s
                  , c = a + a
                  , u = r * l
                  , _ = r * h
                  , f = r * c
                  , d = s * h
                  , p = s * c
                  , m = a * c
                  , y = o * l
                  , v = o * h
                  , g = o * c
                  , A = n.x
                  , x = n.y
                  , b = n.z
                  , C = t.m;
                return C[0] = (1 - (d + m)) * A,
                C[1] = (_ + g) * A,
                C[2] = (f - v) * A,
                C[3] = 0,
                C[4] = (_ - g) * x,
                C[5] = (1 - (u + m)) * x,
                C[6] = (p + y) * x,
                C[7] = 0,
                C[8] = (f + v) * b,
                C[9] = (p - y) * b,
                C[10] = (1 - (u + d)) * b,
                C[11] = 0,
                C[12] = i.x,
                C[13] = i.y,
                C[14] = i.z,
                C[15] = 1,
                t
            }
            ,
            r.fromRTSOrigin = function(t, e, i, n, r) {
                var s = e.x
                  , a = e.y
                  , o = e.z
                  , l = e.w
                  , h = s + s
                  , c = a + a
                  , u = o + o
                  , _ = s * h
                  , f = s * c
                  , d = s * u
                  , p = a * c
                  , m = a * u
                  , y = o * u
                  , v = l * h
                  , g = l * c
                  , A = l * u
                  , x = n.x
                  , b = n.y
                  , C = n.z
                  , T = r.x
                  , S = r.y
                  , w = r.z
                  , E = t.m;
                return E[0] = (1 - (p + y)) * x,
                E[1] = (f + A) * x,
                E[2] = (d - g) * x,
                E[3] = 0,
                E[4] = (f - A) * b,
                E[5] = (1 - (_ + y)) * b,
                E[6] = (m + v) * b,
                E[7] = 0,
                E[8] = (d + g) * C,
                E[9] = (m - v) * C,
                E[10] = (1 - (_ + p)) * C,
                E[11] = 0,
                E[12] = i.x + T - (E[0] * T + E[4] * S + E[8] * w),
                E[13] = i.y + S - (E[1] * T + E[5] * S + E[9] * w),
                E[14] = i.z + w - (E[2] * T + E[6] * S + E[10] * w),
                E[15] = 1,
                t
            }
            ,
            r.fromQuat = function(t, e) {
                var i = e.x
                  , n = e.y
                  , r = e.z
                  , s = e.w
                  , a = i + i
                  , o = n + n
                  , l = r + r
                  , h = i * a
                  , c = n * a
                  , u = n * o
                  , _ = r * a
                  , f = r * o
                  , d = r * l
                  , p = s * a
                  , m = s * o
                  , y = s * l
                  , v = t.m;
                return v[0] = 1 - u - d,
                v[1] = c + y,
                v[2] = _ - m,
                v[3] = 0,
                v[4] = c - y,
                v[5] = 1 - h - d,
                v[6] = f + p,
                v[7] = 0,
                v[8] = _ + m,
                v[9] = f - p,
                v[10] = 1 - h - u,
                v[11] = 0,
                v[12] = 0,
                v[13] = 0,
                v[14] = 0,
                v[15] = 1,
                t
            }
            ,
            r.frustum = function(t, e, i, n, r, s, a) {
                var o = 1 / (i - e)
                  , l = 1 / (r - n)
                  , h = 1 / (s - a)
                  , c = t.m;
                return c[0] = 2 * s * o,
                c[1] = 0,
                c[2] = 0,
                c[3] = 0,
                c[4] = 0,
                c[5] = 2 * s * l,
                c[6] = 0,
                c[7] = 0,
                c[8] = (i + e) * o,
                c[9] = (r + n) * l,
                c[10] = (a + s) * h,
                c[11] = -1,
                c[12] = 0,
                c[13] = 0,
                c[14] = a * s * 2 * h,
                c[15] = 0,
                t
            }
            ,
            r.perspective = function(t, e, i, n, r) {
                var s = 1 / Math.tan(e / 2)
                  , a = 1 / (n - r)
                  , o = t.m;
                return o[0] = s / i,
                o[1] = 0,
                o[2] = 0,
                o[3] = 0,
                o[4] = 0,
                o[5] = s,
                o[6] = 0,
                o[7] = 0,
                o[8] = 0,
                o[9] = 0,
                o[10] = (r + n) * a,
                o[11] = -1,
                o[12] = 0,
                o[13] = 0,
                o[14] = 2 * r * n * a,
                o[15] = 0,
                t
            }
            ,
            r.ortho = function(t, e, i, n, r, s, a) {
                var o = 1 / (e - i)
                  , l = 1 / (n - r)
                  , h = 1 / (s - a)
                  , c = t.m;
                return c[0] = -2 * o,
                c[1] = 0,
                c[2] = 0,
                c[3] = 0,
                c[4] = 0,
                c[5] = -2 * l,
                c[6] = 0,
                c[7] = 0,
                c[8] = 0,
                c[9] = 0,
                c[10] = 2 * h,
                c[11] = 0,
                c[12] = (e + i) * o,
                c[13] = (r + n) * l,
                c[14] = (a + s) * h,
                c[15] = 1,
                t
            }
            ,
            r.lookAt = function(t, e, i, n) {
                var r = e.x
                  , s = e.y
                  , a = e.z
                  , o = n.x
                  , l = n.y
                  , h = n.z
                  , c = r - i.x
                  , u = s - i.y
                  , _ = a - i.z
                  , f = 1 / Math.sqrt(c * c + u * u + _ * _)
                  , d = l * (_ *= f) - h * (u *= f)
                  , p = h * (c *= f) - o * _
                  , m = o * u - l * c
                  , y = u * (m *= f = 1 / Math.sqrt(d * d + p * p + m * m)) - _ * (p *= f)
                  , v = _ * (d *= f) - c * m
                  , g = c * p - u * d
                  , A = t.m;
                return A[0] = d,
                A[1] = y,
                A[2] = c,
                A[3] = 0,
                A[4] = p,
                A[5] = v,
                A[6] = u,
                A[7] = 0,
                A[8] = m,
                A[9] = g,
                A[10] = _,
                A[11] = 0,
                A[12] = -(d * r + p * s + m * a),
                A[13] = -(y * r + v * s + g * a),
                A[14] = -(c * r + u * s + _ * a),
                A[15] = 1,
                t
            }
            ,
            r.inverseTranspose = function(t, e) {
                var i = e.m;
                u = i[0],
                _ = i[1],
                f = i[2],
                d = i[3],
                p = i[4],
                m = i[5],
                y = i[6],
                v = i[7],
                g = i[8],
                A = i[9],
                x = i[10],
                b = i[11],
                C = i[12],
                T = i[13],
                S = i[14],
                w = i[15];
                var n = u * m - _ * p
                  , r = u * y - f * p
                  , s = u * v - d * p
                  , a = _ * y - f * m
                  , o = _ * v - d * m
                  , l = f * v - d * y
                  , h = g * T - A * C
                  , c = g * S - x * C
                  , E = g * w - b * C
                  , M = A * S - x * T
                  , D = A * w - b * T
                  , B = x * w - b * S
                  , I = n * B - r * D + s * M + a * E - o * c + l * h;
                return I ? (I = 1 / I,
                (i = t.m)[0] = (m * B - y * D + v * M) * I,
                i[1] = (y * E - p * B - v * c) * I,
                i[2] = (p * D - m * E + v * h) * I,
                i[3] = 0,
                i[4] = (f * D - _ * B - d * M) * I,
                i[5] = (u * B - f * E + d * c) * I,
                i[6] = (_ * E - u * D - d * h) * I,
                i[7] = 0,
                i[8] = (T * l - S * o + w * a) * I,
                i[9] = (S * s - C * l - w * r) * I,
                i[10] = (C * o - T * s + w * n) * I,
                i[11] = 0,
                i[12] = 0,
                i[13] = 0,
                i[14] = 0,
                i[15] = 1,
                t) : null
            }
            ,
            r.add = function(t, e, i) {
                var n = t.m
                  , r = e.m
                  , s = i.m;
                return n[0] = r[0] + s[0],
                n[1] = r[1] + s[1],
                n[2] = r[2] + s[2],
                n[3] = r[3] + s[3],
                n[4] = r[4] + s[4],
                n[5] = r[5] + s[5],
                n[6] = r[6] + s[6],
                n[7] = r[7] + s[7],
                n[8] = r[8] + s[8],
                n[9] = r[9] + s[9],
                n[10] = r[10] + s[10],
                n[11] = r[11] + s[11],
                n[12] = r[12] + s[12],
                n[13] = r[13] + s[13],
                n[14] = r[14] + s[14],
                n[15] = r[15] + s[15],
                t
            }
            ,
            r.subtract = function(t, e, i) {
                var n = t.m
                  , r = e.m
                  , s = i.m;
                return n[0] = r[0] - s[0],
                n[1] = r[1] - s[1],
                n[2] = r[2] - s[2],
                n[3] = r[3] - s[3],
                n[4] = r[4] - s[4],
                n[5] = r[5] - s[5],
                n[6] = r[6] - s[6],
                n[7] = r[7] - s[7],
                n[8] = r[8] - s[8],
                n[9] = r[9] - s[9],
                n[10] = r[10] - s[10],
                n[11] = r[11] - s[11],
                n[12] = r[12] - s[12],
                n[13] = r[13] - s[13],
                n[14] = r[14] - s[14],
                n[15] = r[15] - s[15],
                t
            }
            ,
            r.multiplyScalar = function(t, e, i) {
                var n = t.m
                  , r = e.m;
                return n[0] = r[0] * i,
                n[1] = r[1] * i,
                n[2] = r[2] * i,
                n[3] = r[3] * i,
                n[4] = r[4] * i,
                n[5] = r[5] * i,
                n[6] = r[6] * i,
                n[7] = r[7] * i,
                n[8] = r[8] * i,
                n[9] = r[9] * i,
                n[10] = r[10] * i,
                n[11] = r[11] * i,
                n[12] = r[12] * i,
                n[13] = r[13] * i,
                n[14] = r[14] * i,
                n[15] = r[15] * i,
                t
            }
            ,
            r.multiplyScalarAndAdd = function(t, e, i, n) {
                var r = t.m
                  , s = e.m
                  , a = i.m;
                return r[0] = s[0] + a[0] * n,
                r[1] = s[1] + a[1] * n,
                r[2] = s[2] + a[2] * n,
                r[3] = s[3] + a[3] * n,
                r[4] = s[4] + a[4] * n,
                r[5] = s[5] + a[5] * n,
                r[6] = s[6] + a[6] * n,
                r[7] = s[7] + a[7] * n,
                r[8] = s[8] + a[8] * n,
                r[9] = s[9] + a[9] * n,
                r[10] = s[10] + a[10] * n,
                r[11] = s[11] + a[11] * n,
                r[12] = s[12] + a[12] * n,
                r[13] = s[13] + a[13] * n,
                r[14] = s[14] + a[14] * n,
                r[15] = s[15] + a[15] * n,
                t
            }
            ,
            r.strictEquals = function(t, e) {
                var i = t.m
                  , n = e.m;
                return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5] && i[6] === n[6] && i[7] === n[7] && i[8] === n[8] && i[9] === n[9] && i[10] === n[10] && i[11] === n[11] && i[12] === n[12] && i[13] === n[13] && i[14] === n[14] && i[15] === n[15]
            }
            ,
            r.equals = function(t, e, i) {
                void 0 === i && (i = o.EPSILON);
                var n = t.m
                  , r = e.m;
                return Math.abs(n[0] - r[0]) <= i * Math.max(1, Math.abs(n[0]), Math.abs(r[0])) && Math.abs(n[1] - r[1]) <= i * Math.max(1, Math.abs(n[1]), Math.abs(r[1])) && Math.abs(n[2] - r[2]) <= i * Math.max(1, Math.abs(n[2]), Math.abs(r[2])) && Math.abs(n[3] - r[3]) <= i * Math.max(1, Math.abs(n[3]), Math.abs(r[3])) && Math.abs(n[4] - r[4]) <= i * Math.max(1, Math.abs(n[4]), Math.abs(r[4])) && Math.abs(n[5] - r[5]) <= i * Math.max(1, Math.abs(n[5]), Math.abs(r[5])) && Math.abs(n[6] - r[6]) <= i * Math.max(1, Math.abs(n[6]), Math.abs(r[6])) && Math.abs(n[7] - r[7]) <= i * Math.max(1, Math.abs(n[7]), Math.abs(r[7])) && Math.abs(n[8] - r[8]) <= i * Math.max(1, Math.abs(n[8]), Math.abs(r[8])) && Math.abs(n[9] - r[9]) <= i * Math.max(1, Math.abs(n[9]), Math.abs(r[9])) && Math.abs(n[10] - r[10]) <= i * Math.max(1, Math.abs(n[10]), Math.abs(r[10])) && Math.abs(n[11] - r[11]) <= i * Math.max(1, Math.abs(n[11]), Math.abs(r[11])) && Math.abs(n[12] - r[12]) <= i * Math.max(1, Math.abs(n[12]), Math.abs(r[12])) && Math.abs(n[13] - r[13]) <= i * Math.max(1, Math.abs(n[13]), Math.abs(r[13])) && Math.abs(n[14] - r[14]) <= i * Math.max(1, Math.abs(n[14]), Math.abs(r[14])) && Math.abs(n[15] - r[15]) <= i * Math.max(1, Math.abs(n[15]), Math.abs(r[15]))
            }
            ,
            r.adjoint = function(t, e) {
                var i = e.m
                  , n = t.m
                  , r = i[0]
                  , s = i[1]
                  , a = i[2]
                  , o = i[3]
                  , l = i[4]
                  , h = i[5]
                  , c = i[6]
                  , u = i[7]
                  , _ = i[8]
                  , f = i[9]
                  , d = i[10]
                  , p = i[11]
                  , m = i[12]
                  , y = i[13]
                  , v = i[14]
                  , g = i[15];
                return n[0] = h * (d * g - p * v) - f * (c * g - u * v) + y * (c * p - u * d),
                n[1] = -(s * (d * g - p * v) - f * (a * g - o * v) + y * (a * p - o * d)),
                n[2] = s * (c * g - u * v) - h * (a * g - o * v) + y * (a * u - o * c),
                n[3] = -(s * (c * p - u * d) - h * (a * p - o * d) + f * (a * u - o * c)),
                n[4] = -(l * (d * g - p * v) - _ * (c * g - u * v) + m * (c * p - u * d)),
                n[5] = r * (d * g - p * v) - _ * (a * g - o * v) + m * (a * p - o * d),
                n[6] = -(r * (c * g - u * v) - l * (a * g - o * v) + m * (a * u - o * c)),
                n[7] = r * (c * p - u * d) - l * (a * p - o * d) + _ * (a * u - o * c),
                n[8] = l * (f * g - p * y) - _ * (h * g - u * y) + m * (h * p - u * f),
                n[9] = -(r * (f * g - p * y) - _ * (s * g - o * y) + m * (s * p - o * f)),
                n[10] = r * (h * g - u * y) - l * (s * g - o * y) + m * (s * u - o * h),
                n[11] = -(r * (h * p - u * f) - l * (s * p - o * f) + _ * (s * u - o * h)),
                n[12] = -(l * (f * v - d * y) - _ * (h * v - c * y) + m * (h * d - c * f)),
                n[13] = r * (f * v - d * y) - _ * (s * v - a * y) + m * (s * d - a * f),
                n[14] = -(r * (h * v - c * y) - l * (s * v - a * y) + m * (s * c - a * h)),
                n[15] = r * (h * d - c * f) - l * (s * d - a * f) + _ * (s * c - a * h),
                t
            }
            ,
            r.toArray = function(t, e, i) {
                void 0 === i && (i = 0);
                for (var n = e.m, r = 0; r < 16; r++)
                    t[i + r] = n[r];
                return t
            }
            ,
            r.fromArray = function(t, e, i) {
                void 0 === i && (i = 0);
                for (var n = t.m, r = 0; r < 16; r++)
                    n[r] = e[i + r];
                return t
            }
            ,
            n.clone = function() {
                var t = this.m;
                return new r(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])
            }
            ,
            n.set = function(t) {
                var e = this.m
                  , i = t.m;
                return e[0] = i[0],
                e[1] = i[1],
                e[2] = i[2],
                e[3] = i[3],
                e[4] = i[4],
                e[5] = i[5],
                e[6] = i[6],
                e[7] = i[7],
                e[8] = i[8],
                e[9] = i[9],
                e[10] = i[10],
                e[11] = i[11],
                e[12] = i[12],
                e[13] = i[13],
                e[14] = i[14],
                e[15] = i[15],
                this
            }
            ,
            n.equals = function(t) {
                return r.strictEquals(this, t)
            }
            ,
            n.fuzzyEquals = function(t) {
                return r.equals(this, t)
            }
            ,
            n.toString = function() {
                var t = this.m;
                return t ? "[\n" + t[0] + ", " + t[1] + ", " + t[2] + ", " + t[3] + ",\n" + t[4] + ", " + t[5] + ", " + t[6] + ", " + t[7] + ",\n" + t[8] + ", " + t[9] + ", " + t[10] + ", " + t[11] + ",\n" + t[12] + ", " + t[13] + ", " + t[14] + ", " + t[15] + "\n]" : "[\n1, 0, 0, 0\n0, 1, 0, 0\n0, 0, 1, 0\n0, 0, 0, 1\n]"
            }
            ,
            n.identity = function() {
                return r.identity(this)
            }
            ,
            n.transpose = function(t) {
                return t = t || new r,
                r.transpose(t, this)
            }
            ,
            n.invert = function(t) {
                return t = t || new r,
                r.invert(t, this)
            }
            ,
            n.adjoint = function(t) {
                return t = t || new r,
                r.adjoint(t, this)
            }
            ,
            n.determinant = function() {
                return r.determinant(this)
            }
            ,
            n.add = function(t, e) {
                return e = e || new r,
                r.add(e, this, t)
            }
            ,
            n.subtract = function(t) {
                return r.subtract(this, this, t)
            }
            ,
            n.multiply = function(t) {
                return r.multiply(this, this, t)
            }
            ,
            n.multiplyScalar = function(t) {
                return r.multiplyScalar(this, this, t)
            }
            ,
            n.translate = function(t, e) {
                return e = e || new r,
                r.translate(e, this, t)
            }
            ,
            n.scale = function(t, e) {
                return e = e || new r,
                r.scale(e, this, t)
            }
            ,
            n.rotate = function(t, e, i) {
                return i = i || new r,
                r.rotate(i, this, t, e)
            }
            ,
            n.getTranslation = function(t) {
                return t = t || new s.default,
                r.getTranslation(t, this)
            }
            ,
            n.getScale = function(t) {
                return t = t || new s.default,
                r.getScaling(t, this)
            }
            ,
            n.getRotation = function(t) {
                return t = t || new a.default,
                r.getRotation(t, this)
            }
            ,
            n.fromRTS = function(t, e, i) {
                return r.fromRTS(this, t, e, i)
            }
            ,
            n.fromQuat = function(t) {
                return r.fromQuat(this, t)
            }
            ,
            r
        }
        )(n.default);
        i.default = E,
        E.mul = E.multiply,
        E.sub = E.subtract,
        E.IDENTITY = Object.freeze(new E);
        var M = new s.default
          , D = new l.default;
        r.default.fastDefine("cc.Mat4", E, {
            m00: 1,
            m01: 0,
            m02: 0,
            m03: 0,
            m04: 0,
            m05: 1,
            m06: 0,
            m07: 0,
            m08: 0,
            m09: 0,
            m10: 1,
            m11: 0,
            m12: 0,
            m13: 0,
            m14: 0,
            m15: 1
        });
        for (var B = function(t) {
            Object.defineProperty(E.prototype, "m" + t, {
                get: function() {
                    return this.m[t]
                },
                set: function(e) {
                    this.m[t] = e
                }
            })
        }, I = 0; I < 16; I++)
            B(I);
        cc.mat4 = function(t, e, i, n, r, s, a, o, l, h, c, u, _, f, d, p) {
            var m = new E(t,e,i,n,r,s,a,o,l,h,c,u,_,f,d,p);
            return void 0 === t && E.identity(m),
            m
        }
        ,
        cc.Mat4 = E,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "./mat3": 283,
        "./quat": 285,
        "./utils": 289,
        "./value-type": 290,
        "./vec3": 292
    }],
    285: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = l(t("./value-type"))
          , r = l(t("../platform/CCClass"))
          , s = l(t("./vec3"))
          , a = l(t("./mat3"))
          , o = t("./utils");
        function l(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var c = 0
          , u = 0
          , _ = 0
          , f = 0
          , d = (function(t) {
            var e, i;
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i);
            var n = r.prototype;
            function r(e, i, n, r) {
                var s;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 1),
                (s = t.call(this) || this).x = void 0,
                s.y = void 0,
                s.z = void 0,
                s.w = void 0,
                e && "object" == typeof e ? (s.x = e.x,
                s.y = e.y,
                s.z = e.z,
                s.w = e.w) : (s.x = e,
                s.y = i,
                s.z = n,
                s.w = r),
                s
            }
            return n.mul = function(t, e) {
                return r.multiply(e || new r, this, t)
            }
            ,
            r.clone = function(t) {
                return new r(t.x,t.y,t.z,t.w)
            }
            ,
            r.copy = function(t, e) {
                return t.x = e.x,
                t.y = e.y,
                t.z = e.z,
                t.w = e.w,
                t
            }
            ,
            r.set = function(t, e, i, n, r) {
                return t.x = e,
                t.y = i,
                t.z = n,
                t.w = r,
                t
            }
            ,
            r.identity = function(t) {
                return t.x = 0,
                t.y = 0,
                t.z = 0,
                t.w = 1,
                t
            }
            ,
            r.rotationTo = function(t, e, i) {
                var n = s.default.dot(e, i);
                return n < -.999999 ? (s.default.cross(y, s.default.RIGHT, e),
                y.mag() < 1e-6 && s.default.cross(y, s.default.UP, e),
                s.default.normalize(y, y),
                r.fromAxisAngle(t, y, Math.PI),
                t) : n > .999999 ? (t.x = 0,
                t.y = 0,
                t.z = 0,
                t.w = 1,
                t) : (s.default.cross(y, e, i),
                t.x = y.x,
                t.y = y.y,
                t.z = y.z,
                t.w = 1 + n,
                r.normalize(t, t))
            }
            ,
            r.getAxisAngle = function(t, e) {
                var i = 2 * Math.acos(e.w)
                  , n = Math.sin(i / 2);
                return 0 !== n ? (t.x = e.x / n,
                t.y = e.y / n,
                t.z = e.z / n) : (t.x = 1,
                t.y = 0,
                t.z = 0),
                i
            }
            ,
            r.multiply = function(t, e, i) {
                return c = e.x * i.w + e.w * i.x + e.y * i.z - e.z * i.y,
                u = e.y * i.w + e.w * i.y + e.z * i.x - e.x * i.z,
                _ = e.z * i.w + e.w * i.z + e.x * i.y - e.y * i.x,
                f = e.w * i.w - e.x * i.x - e.y * i.y - e.z * i.z,
                t.x = c,
                t.y = u,
                t.z = _,
                t.w = f,
                t
            }
            ,
            r.multiplyScalar = function(t, e, i) {
                return t.x = e.x * i,
                t.y = e.y * i,
                t.z = e.z * i,
                t.w = e.w * i,
                t
            }
            ,
            r.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n,
                t.y = e.y + i.y * n,
                t.z = e.z + i.z * n,
                t.w = e.w + i.w * n,
                t
            }
            ,
            r.rotateX = function(t, e, i) {
                i *= .5;
                var n = Math.sin(i)
                  , r = Math.cos(i);
                return c = e.x * r + e.w * n,
                u = e.y * r + e.z * n,
                _ = e.z * r - e.y * n,
                f = e.w * r - e.x * n,
                t.x = c,
                t.y = u,
                t.z = _,
                t.w = f,
                t
            }
            ,
            r.rotateY = function(t, e, i) {
                i *= .5;
                var n = Math.sin(i)
                  , r = Math.cos(i);
                return c = e.x * r - e.z * n,
                u = e.y * r + e.w * n,
                _ = e.z * r + e.x * n,
                f = e.w * r - e.y * n,
                t.x = c,
                t.y = u,
                t.z = _,
                t.w = f,
                t
            }
            ,
            r.rotateZ = function(t, e, i) {
                i *= .5;
                var n = Math.sin(i)
                  , r = Math.cos(i);
                return c = e.x * r + e.y * n,
                u = e.y * r - e.x * n,
                _ = e.z * r + e.w * n,
                f = e.w * r - e.z * n,
                t.x = c,
                t.y = u,
                t.z = _,
                t.w = f,
                t
            }
            ,
            r.rotateAround = function(t, e, i, n) {
                return r.invert(p, e),
                s.default.transformQuat(y, i, p),
                r.fromAxisAngle(p, y, n),
                r.multiply(t, e, p),
                t
            }
            ,
            r.rotateAroundLocal = function(t, e, i, n) {
                return r.fromAxisAngle(p, i, n),
                r.multiply(t, e, p),
                t
            }
            ,
            r.calculateW = function(t, e) {
                return t.x = e.x,
                t.y = e.y,
                t.z = e.z,
                t.w = Math.sqrt(Math.abs(1 - e.x * e.x - e.y * e.y - e.z * e.z)),
                t
            }
            ,
            r.dot = function(t, e) {
                return t.x * e.x + t.y * e.y + t.z * e.z + t.w * e.w
            }
            ,
            r.lerp = function(t, e, i, n) {
                return t.x = e.x + n * (i.x - e.x),
                t.y = e.y + n * (i.y - e.y),
                t.z = e.z + n * (i.z - e.z),
                t.w = e.w + n * (i.w - e.w),
                t
            }
            ,
            r.slerp = function(t, e, i, n) {
                var r = 0
                  , s = 0
                  , a = e.x * i.x + e.y * i.y + e.z * i.z + e.w * i.w;
                if (a < 0 && (a = -a,
                i.x = -i.x,
                i.y = -i.y,
                i.z = -i.z,
                i.w = -i.w),
                1 - a > 1e-6) {
                    var o = Math.acos(a)
                      , l = Math.sin(o);
                    r = Math.sin((1 - n) * o) / l,
                    s = Math.sin(n * o) / l
                } else
                    r = 1 - n,
                    s = n;
                return t.x = r * e.x + s * i.x,
                t.y = r * e.y + s * i.y,
                t.z = r * e.z + s * i.z,
                t.w = r * e.w + s * i.w,
                t
            }
            ,
            r.sqlerp = function(t, e, i, n, s, a) {
                return r.slerp(p, e, s, a),
                r.slerp(m, i, n, a),
                r.slerp(t, p, m, 2 * a * (1 - a)),
                t
            }
            ,
            r.invert = function(t, e) {
                var i = e.x * e.x + e.y * e.y + e.z * e.z + e.w * e.w
                  , n = i ? 1 / i : 0;
                return t.x = -e.x * n,
                t.y = -e.y * n,
                t.z = -e.z * n,
                t.w = e.w * n,
                t
            }
            ,
            r.conjugate = function(t, e) {
                return t.x = -e.x,
                t.y = -e.y,
                t.z = -e.z,
                t.w = e.w,
                t
            }
            ,
            r.len = function(t) {
                return Math.sqrt(t.x * t.x + t.y * t.y + t.z * t.z + t.w * t.w)
            }
            ,
            r.lengthSqr = function(t) {
                return t.x * t.x + t.y * t.y + t.z * t.z + t.w * t.w
            }
            ,
            r.normalize = function(t, e) {
                var i = e.x * e.x + e.y * e.y + e.z * e.z + e.w * e.w;
                return i > 0 && (i = 1 / Math.sqrt(i),
                t.x = e.x * i,
                t.y = e.y * i,
                t.z = e.z * i,
                t.w = e.w * i),
                t
            }
            ,
            r.fromAxes = function(t, e, i, n) {
                return a.default.set(v, e.x, e.y, e.z, i.x, i.y, i.z, n.x, n.y, n.z),
                r.normalize(t, r.fromMat3(t, v))
            }
            ,
            r.fromViewUp = function(t, e, i) {
                return a.default.fromViewUp(v, e, i),
                r.normalize(t, r.fromMat3(t, v))
            }
            ,
            r.fromAxisAngle = function(t, e, i) {
                i *= .5;
                var n = Math.sin(i);
                return t.x = n * e.x,
                t.y = n * e.y,
                t.z = n * e.z,
                t.w = Math.cos(i),
                t
            }
            ,
            r.fromAngleZ = function(t, e) {
                return e *= g,
                t.x = t.y = 0,
                t.z = Math.sin(e),
                t.w = Math.cos(e),
                t
            }
            ,
            r.fromMat3 = function(t, e) {
                var i = e.m
                  , n = i[0]
                  , r = i[1]
                  , s = i[2]
                  , a = i[3]
                  , o = i[4]
                  , l = i[5]
                  , h = i[6]
                  , c = i[7]
                  , u = i[8]
                  , _ = n + o + u;
                if (_ > 0) {
                    var f = .5 / Math.sqrt(_ + 1);
                    t.w = .25 / f,
                    t.x = (l - c) * f,
                    t.y = (h - s) * f,
                    t.z = (r - a) * f
                } else if (n > o && n > u) {
                    var d = 2 * Math.sqrt(1 + n - o - u);
                    t.w = (l - c) / d,
                    t.x = .25 * d,
                    t.y = (a + r) / d,
                    t.z = (h + s) / d
                } else if (o > u) {
                    var p = 2 * Math.sqrt(1 + o - n - u);
                    t.w = (h - s) / p,
                    t.x = (a + r) / p,
                    t.y = .25 * p,
                    t.z = (c + l) / p
                } else {
                    var m = 2 * Math.sqrt(1 + u - n - o);
                    t.w = (r - a) / m,
                    t.x = (h + s) / m,
                    t.y = (c + l) / m,
                    t.z = .25 * m
                }
                return t
            }
            ,
            r.fromEuler = function(t, e, i, n) {
                e *= g,
                i *= g,
                n *= g;
                var r = Math.sin(e)
                  , s = Math.cos(e)
                  , a = Math.sin(i)
                  , o = Math.cos(i)
                  , l = Math.sin(n)
                  , h = Math.cos(n);
                return t.x = r * o * h + s * a * l,
                t.y = s * a * h + r * o * l,
                t.z = s * o * l - r * a * h,
                t.w = s * o * h - r * a * l,
                t
            }
            ,
            r.toAxisX = function(t, e) {
                var i = 2 * e.y
                  , n = 2 * e.z;
                return t.x = 1 - i * e.y - n * e.z,
                t.y = i * e.x + n * e.w,
                t.z = n * e.x + i * e.w,
                t
            }
            ,
            r.toAxisY = function(t, e) {
                var i = 2 * e.x
                  , n = 2 * e.y
                  , r = 2 * e.z;
                return t.x = n * e.x - r * e.w,
                t.y = 1 - i * e.x - r * e.z,
                t.z = r * e.y + i * e.w,
                t
            }
            ,
            r.toAxisZ = function(t, e) {
                var i = 2 * e.x
                  , n = 2 * e.y
                  , r = 2 * e.z;
                return t.x = r * e.x - n * e.w,
                t.y = r * e.y - i * e.w,
                t.z = 1 - i * e.x - n * e.y,
                t
            }
            ,
            r.toEuler = function(t, e, i) {
                var n = e.x
                  , r = e.y
                  , s = e.z
                  , a = e.w
                  , l = 0
                  , h = 0
                  , c = 0
                  , u = n * r + s * a;
                if (u > .499999)
                    l = 0,
                    h = (0,
                    o.toDegree)(2 * Math.atan2(n, a)),
                    c = 90;
                else if (u < -.499999)
                    l = 0,
                    h = -(0,
                    o.toDegree)(2 * Math.atan2(n, a)),
                    c = -90;
                else {
                    var _ = n * n
                      , f = r * r
                      , d = s * s;
                    l = (0,
                    o.toDegree)(Math.atan2(2 * n * a - 2 * r * s, 1 - 2 * _ - 2 * d)),
                    h = (0,
                    o.toDegree)(Math.atan2(2 * r * a - 2 * n * s, 1 - 2 * f - 2 * d)),
                    c = (0,
                    o.toDegree)(Math.asin(2 * u)),
                    i && (l = -180 * Math.sign(l + 1e-6) + l,
                    h = -180 * Math.sign(h + 1e-6) + h,
                    c = 180 * Math.sign(c + 1e-6) - c)
                }
                return t.x = l,
                t.y = h,
                t.z = c,
                t
            }
            ,
            r.strictEquals = function(t, e) {
                return t.x === e.x && t.y === e.y && t.z === e.z && t.w === e.w
            }
            ,
            r.equals = function(t, e, i) {
                return void 0 === i && (i = o.EPSILON),
                Math.abs(t.x - e.x) <= i * Math.max(1, Math.abs(t.x), Math.abs(e.x)) && Math.abs(t.y - e.y) <= i * Math.max(1, Math.abs(t.y), Math.abs(e.y)) && Math.abs(t.z - e.z) <= i * Math.max(1, Math.abs(t.z), Math.abs(e.z)) && Math.abs(t.w - e.w) <= i * Math.max(1, Math.abs(t.w), Math.abs(e.w))
            }
            ,
            r.toArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t[i + 0] = e.x,
                t[i + 1] = e.y,
                t[i + 2] = e.z,
                t[i + 3] = e.w,
                t
            }
            ,
            r.fromArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t.x = e[i + 0],
                t.y = e[i + 1],
                t.z = e[i + 2],
                t.w = e[i + 3],
                t
            }
            ,
            n.clone = function() {
                return new r(this.x,this.y,this.z,this.w)
            }
            ,
            n.set = function(t) {
                return this.x = t.x,
                this.y = t.y,
                this.z = t.z,
                this.w = t.w,
                this
            }
            ,
            n.equals = function(t) {
                return t && this.x === t.x && this.y === t.y && this.z === t.z && this.w === t.w
            }
            ,
            n.toEuler = function(t) {
                return r.toEuler(t, this)
            }
            ,
            n.fromEuler = function(t) {
                return r.fromEuler(this, t.x, t.y, t.z)
            }
            ,
            n.lerp = function(t, e, i) {
                return i = i || new r,
                r.slerp(i, this, t, e),
                i
            }
            ,
            n.multiply = function(t) {
                return r.multiply(this, this, t)
            }
            ,
            n.rotateAround = function(t, e, i, n) {
                return n = n || new r,
                r.rotateAround(n, t, e, i)
            }
            ,
            r
        }
        )(n.default);
        i.default = d,
        d.mul = d.multiply,
        d.scale = d.multiplyScalar,
        d.mag = d.len,
        d.IDENTITY = Object.freeze(new d);
        var p = new d
          , m = new d
          , y = new s.default
          , v = new a.default
          , g = .5 * Math.PI / 180;
        r.default.fastDefine("cc.Quat", d, {
            x: 0,
            y: 0,
            z: 0,
            w: 1
        }),
        cc.quat = function(t, e, i, n) {
            return new d(t,e,i,n)
        }
        ,
        cc.Quat = d,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "./mat3": 283,
        "./utils": 289,
        "./value-type": 290,
        "./vec3": 292
    }],
    286: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = o(t("./value-type"))
          , r = o(t("../platform/CCClass"))
          , s = o(t("./vec2"))
          , a = o(t("./size"));
        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function l(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var c = (function(t) {
            var e, i;
            function n(e, i, n, r) {
                var s;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 0),
                (s = t.call(this) || this).x = void 0,
                s.y = void 0,
                s.width = void 0,
                s.height = void 0,
                e && "object" == typeof e && (i = e.y,
                n = e.width,
                r = e.height,
                e = e.x),
                s.x = e || 0,
                s.y = i || 0,
                s.width = n || 0,
                s.height = r || 0,
                s
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i),
            n.fromMinMax = function(t, e) {
                var i = Math.min(t.x, e.x)
                  , r = Math.min(t.y, e.y);
                return new n(i,r,Math.max(t.x, e.x) - i,Math.max(t.y, e.y) - r)
            }
            ;
            var r, o, c = n.prototype;
            return c.clone = function() {
                return new n(this.x,this.y,this.width,this.height)
            }
            ,
            c.equals = function(t) {
                return t && this.x === t.x && this.y === t.y && this.width === t.width && this.height === t.height
            }
            ,
            c.lerp = function(t, e, i) {
                i = i || new n;
                var r = this.x
                  , s = this.y
                  , a = this.width
                  , o = this.height;
                return i.x = r + (t.x - r) * e,
                i.y = s + (t.y - s) * e,
                i.width = a + (t.width - a) * e,
                i.height = o + (t.height - o) * e,
                i
            }
            ,
            c.set = function(t) {
                return this.x = t.x,
                this.y = t.y,
                this.width = t.width,
                this.height = t.height,
                this
            }
            ,
            c.intersects = function(t) {
                var e = this.x + this.width
                  , i = this.y + this.height
                  , n = t.x + t.width
                  , r = t.y + t.height;
                return !(e < t.x || n < this.x || i < t.y || r < this.y)
            }
            ,
            c.intersection = function(t, e) {
                var i = this.x
                  , n = this.y
                  , r = this.x + this.width
                  , s = this.y + this.height
                  , a = e.x
                  , o = e.y
                  , l = e.x + e.width
                  , h = e.y + e.height;
                return t.x = Math.max(i, a),
                t.y = Math.max(n, o),
                t.width = Math.min(r, l) - t.x,
                t.height = Math.min(s, h) - t.y,
                t
            }
            ,
            c.contains = function(t) {
                return this.x <= t.x && this.x + this.width >= t.x && this.y <= t.y && this.y + this.height >= t.y
            }
            ,
            c.containsRect = function(t) {
                return this.x <= t.x && this.x + this.width >= t.x + t.width && this.y <= t.y && this.y + this.height >= t.y + t.height
            }
            ,
            c.union = function(t, e) {
                var i = this.x
                  , n = this.y
                  , r = this.width
                  , s = this.height
                  , a = e.x
                  , o = e.y
                  , l = e.width
                  , h = e.height;
                return t.x = Math.min(i, a),
                t.y = Math.min(n, o),
                t.width = Math.max(i + r, a + l) - t.x,
                t.height = Math.max(n + s, o + h) - t.y,
                t
            }
            ,
            c.transformMat4 = function(t, e) {
                var i = this.x
                  , n = this.y
                  , r = i + this.width
                  , s = n + this.height
                  , a = e.m
                  , o = a[0] * i + a[4] * n + a[12]
                  , l = a[1] * i + a[5] * n + a[13]
                  , h = a[0] * r + a[4] * n + a[12]
                  , c = a[1] * r + a[5] * n + a[13]
                  , u = a[0] * i + a[4] * s + a[12]
                  , _ = a[1] * i + a[5] * s + a[13]
                  , f = a[0] * r + a[4] * s + a[12]
                  , d = a[1] * r + a[5] * s + a[13]
                  , p = Math.min(o, h, u, f)
                  , m = Math.max(o, h, u, f)
                  , y = Math.min(l, c, _, d)
                  , v = Math.max(l, c, _, d);
                return t.x = p,
                t.y = y,
                t.width = m - p,
                t.height = v - y,
                t
            }
            ,
            c.toString = function() {
                return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"
            }
            ,
            r = n,
            (o = [{
                key: "xMin",
                get: function() {
                    return this.x
                },
                set: function(t) {
                    this.width += this.x - t,
                    this.x = t
                }
            }, {
                key: "yMin",
                get: function() {
                    return this.y
                },
                set: function(t) {
                    this.height += this.y - t,
                    this.y = t
                }
            }, {
                key: "xMax",
                get: function() {
                    return this.x + this.width
                },
                set: function(t) {
                    this.width = t - this.x
                }
            }, {
                key: "yMax",
                get: function() {
                    return this.y + this.height
                },
                set: function(t) {
                    this.height = t - this.y
                }
            }, {
                key: "center",
                get: function() {
                    return new s.default(this.x + .5 * this.width,this.y + .5 * this.height)
                },
                set: function(t) {
                    this.x = t.x - .5 * this.width,
                    this.y = t.y - .5 * this.height
                }
            }, {
                key: "origin",
                get: function() {
                    return new s.default(this.x,this.y)
                },
                set: function(t) {
                    this.x = t.x,
                    this.y = t.y
                }
            }, {
                key: "size",
                get: function() {
                    return new a.default(this.width,this.height)
                },
                set: function(t) {
                    this.width = t.width,
                    this.height = t.height
                }
            }]) && l(r.prototype, o),
            n
        }
        )(n.default);
        i.default = c,
        r.default.fastDefine("cc.Rect", c, {
            x: 0,
            y: 0,
            width: 0,
            height: 0
        }),
        cc.Rect = c,
        cc.rect = function(t, e, i, n) {
            return new c(t,e,i,n)
        }
        ,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "./size": 287,
        "./value-type": 290,
        "./vec2": 291
    }],
    287: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = s(t("./value-type"))
          , r = s(t("../platform/CCClass"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function a(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function o(t, e) {
            return (o = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var l = (function(t) {
            var e, i;
            function n(e, i) {
                var n;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                (n = t.call(this) || this).width = void 0,
                n.height = void 0,
                e && "object" == typeof e ? (n.width = e.width,
                n.height = e.height) : (n.width = e || 0,
                n.height = i || 0),
                n
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            o(e, i);
            var r, s, l = n.prototype;
            return l.clone = function() {
                return new n(this.width,this.height)
            }
            ,
            l.equals = function(t) {
                return t && this.width === t.width && this.height === t.height
            }
            ,
            l.lerp = function(t, e, i) {
                i = i || new n;
                var r = this.width
                  , s = this.height;
                return i.width = r + (t.width - r) * e,
                i.height = s + (t.height - s) * e,
                i
            }
            ,
            l.set = function(t) {
                return this.width = t.width,
                this.height = t.height,
                this
            }
            ,
            l.toString = function() {
                return "(" + this.width.toFixed(2) + ", " + this.height.toFixed(2) + ")"
            }
            ,
            r = n,
            s = [{
                key: "ZERO",
                get: function() {
                    return new n
                }
            }],
            null && a(r.prototype, null),
            s && a(r, s),
            n
        }
        )(n.default);
        i.default = l,
        l.ZERO_R = l.ZERO,
        r.default.fastDefine("cc.Size", l, {
            width: 0,
            height: 0
        }),
        cc.size = function(t, e) {
            return new l(t,e)
        }
        ,
        cc.Size = l,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "./value-type": 290
    }],
    288: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./quat")) && n.__esModule ? n : {
            default: n
        }, s = new r.default, a = (function() {
            function t() {}
            return t.toRotation = function(t, e) {
                return t.x = e[3],
                t.y = e[4],
                t.z = e[5],
                t.w = e[6],
                t
            }
            ,
            t.fromRotation = function(t, e) {
                return t[3] = e.x,
                t[4] = e.y,
                t[5] = e.z,
                t[6] = e.w,
                t
            }
            ,
            t.toEuler = function(e, i) {
                return t.toRotation(s, i),
                r.default.toEuler(e, s),
                e
            }
            ,
            t.fromEuler = function(e, i) {
                return r.default.fromEuler(s, i.x, i.y, i.z),
                t.fromRotation(e, s),
                e
            }
            ,
            t.fromEulerNumber = function(e, i, n, a) {
                return r.default.fromEuler(s, i, n, a),
                t.fromRotation(e, s),
                e
            }
            ,
            t.toScale = function(t, e) {
                return t.x = e[7],
                t.y = e[8],
                t.z = e[9],
                t
            }
            ,
            t.fromScale = function(t, e) {
                return t[7] = e.x,
                t[8] = e.y,
                t[9] = e.z,
                t
            }
            ,
            t.toPosition = function(t, e) {
                return t.x = e[0],
                t.y = e[1],
                t.z = e[2],
                t
            }
            ,
            t.fromPosition = function(t, e) {
                return t[0] = e.x,
                t[1] = e.y,
                t[2] = e.z,
                t
            }
            ,
            t.fromAngleZ = function(e, i) {
                return r.default.fromAngleZ(s, i),
                t.fromRotation(e, s),
                e
            }
            ,
            t.toMat4 = function(t, e) {
                var i = e[3]
                  , n = e[4]
                  , r = e[5]
                  , s = e[6]
                  , a = i + i
                  , o = n + n
                  , l = r + r
                  , h = i * a
                  , c = i * o
                  , u = i * l
                  , _ = n * o
                  , f = n * l
                  , d = r * l
                  , p = s * a
                  , m = s * o
                  , y = s * l
                  , v = e[7]
                  , g = e[8]
                  , A = e[9]
                  , x = t.m;
                return x[0] = (1 - (_ + d)) * v,
                x[1] = (c + y) * v,
                x[2] = (u - m) * v,
                x[3] = 0,
                x[4] = (c - y) * g,
                x[5] = (1 - (h + d)) * g,
                x[6] = (f + p) * g,
                x[7] = 0,
                x[8] = (u + m) * A,
                x[9] = (f - p) * A,
                x[10] = (1 - (h + _)) * A,
                x[11] = 0,
                x[12] = e[0],
                x[13] = e[1],
                x[14] = e[2],
                x[15] = 1,
                t
            }
            ,
            t
        }
        )();
        i.default = a,
        cc.Trs = a,
        e.exports = i.default
    }
    ), {
        "./quat": 285
    }],
    289: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.equals = function(t, e) {
            return Math.abs(t - e) <= s * Math.max(1, Math.abs(t), Math.abs(e))
        }
        ,
        i.approx = function(t, e, i) {
            return i = i || s,
            Math.abs(t - e) <= i
        }
        ,
        i.clamp = function(t, e, i) {
            return t < e ? e : t > i ? i : t
        }
        ,
        i.clamp01 = function(t) {
            return t < 0 ? 0 : t > 1 ? 1 : t
        }
        ,
        i.lerp = function(t, e, i) {
            return t + (e - t) * i
        }
        ,
        i.toRadian = function(t) {
            return t * n
        }
        ,
        i.toDegree = function(t) {
            return t * r
        }
        ,
        i.randomRange = l,
        i.randomRangeInt = function(t, e) {
            return Math.floor(l(t, e))
        }
        ,
        i.pseudoRandom = h,
        i.pseudoRandomRange = c,
        i.pseudoRandomRangeInt = function(t, e, i) {
            return Math.floor(c(t, e, i))
        }
        ,
        i.nextPow2 = function(t) {
            return --t,
            t |= t >> 1,
            t |= t >> 2,
            t |= t >> 4,
            t |= t >> 8,
            t |= t >> 16,
            ++t
        }
        ,
        i.repeat = u,
        i.pingPong = function(t, e) {
            return t = u(t, 2 * e),
            e - Math.abs(t - e)
        }
        ,
        i.inverseLerp = function(t, e, i) {
            return (i - t) / (e - t)
        }
        ,
        i.sign = function(t) {
            return (t > 0) - (t < 0)
        }
        ,
        i.random = i.FLOAT_BYTES = i.FLOAT_ARRAY_TYPE = i.INT_MIN = i.INT_MAX = i.INT_BITS = i.EPSILON = void 0;
        var n = Math.PI / 180
          , r = 180 / Math.PI
          , s = 1e-6;
        i.EPSILON = s,
        i.INT_BITS = 32,
        i.INT_MAX = 2147483647,
        i.INT_MIN = -1 << 31;
        var a = Float64Array;
        i.FLOAT_ARRAY_TYPE = a,
        i.FLOAT_BYTES = 8;
        var o = Math.random;
        function l(t, e) {
            return Math.random() * (e - t) + t
        }
        function h(t) {
            return (t = (9301 * t + 49297) % 233280) / 233280
        }
        function c(t, e, i) {
            return h(t) * (i - e) + e
        }
        function u(t, e) {
            return t - Math.floor(t / e) * e
        }
        i.random = o
    }
    ), {}],
    290: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../platform/js")) && n.__esModule ? n : {
            default: n
        }, s = (function() {
            function t() {}
            var e = t.prototype;
            return e.clone = function() {
                return cc.errorID("0100", r.default.getClassName(this) + ".clone"),
                null
            }
            ,
            e.equals = function() {
                return cc.errorID("0100", r.default.getClassName(this) + ".equals"),
                !1
            }
            ,
            e.lerp = function() {
                return cc.errorID("0100", r.default.getClassName(this) + ".lerp"),
                this.clone()
            }
            ,
            e.set = function() {
                cc.errorID("0100", r.default.getClassName(this) + ".set")
            }
            ,
            e.toString = function() {
                return "" + {}
            }
            ,
            t
        }
        )();
        i.default = s,
        r.default.setClassName("cc.ValueType", s),
        cc.ValueType = s,
        e.exports = i.default
    }
    ), {
        "../platform/js": 214
    }],
    291: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = o(t("./value-type"))
          , r = o(t("../platform/CCClass"))
          , s = o(t("../utils/misc"))
          , a = t("./utils");
        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function l(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var c = 0
          , u = 0
          , _ = (function(t) {
            var e, i;
            i = t,
            (e = _).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i);
            var n, r, o = _.prototype;
            function _(e, i) {
                var n;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                (n = t.call(this) || this).mag = _.prototype.len,
                n.magSqr = _.prototype.lengthSqr,
                n.subSelf = _.prototype.subtract,
                n.mulSelf = _.prototype.multiplyScalar,
                n.divSelf = _.prototype.divide,
                n.scaleSelf = _.prototype.multiply,
                n.negSelf = _.prototype.negate,
                n.x = void 0,
                n.y = void 0,
                n.z = 0,
                e && "object" == typeof e ? (n.x = e.x || 0,
                n.y = e.y || 0) : (n.x = e || 0,
                n.y = i || 0),
                n
            }
            return o.sub = function(t, e) {
                return _.subtract(e || new _, this, t)
            }
            ,
            o.mul = function(t, e) {
                return _.multiplyScalar(e || new _, this, t)
            }
            ,
            o.div = function(t, e) {
                return _.multiplyScalar(e || new _, this, 1 / t)
            }
            ,
            o.scale = function(t, e) {
                return _.multiply(e || new _, this, t)
            }
            ,
            o.neg = function(t) {
                return _.negate(t || new _, this)
            }
            ,
            _.clone = function(t) {
                return new _(t.x,t.y)
            }
            ,
            _.copy = function(t, e) {
                return t.x = e.x,
                t.y = e.y,
                t
            }
            ,
            _.set = function(t, e, i) {
                return t.x = e,
                t.y = i,
                t
            }
            ,
            _.add = function(t, e, i) {
                return t.x = e.x + i.x,
                t.y = e.y + i.y,
                t
            }
            ,
            _.subtract = function(t, e, i) {
                return t.x = e.x - i.x,
                t.y = e.y - i.y,
                t
            }
            ,
            _.multiply = function(t, e, i) {
                return t.x = e.x * i.x,
                t.y = e.y * i.y,
                t
            }
            ,
            _.divide = function(t, e, i) {
                return t.x = e.x / i.x,
                t.y = e.y / i.y,
                t
            }
            ,
            _.ceil = function(t, e) {
                return t.x = Math.ceil(e.x),
                t.y = Math.ceil(e.y),
                t
            }
            ,
            _.floor = function(t, e) {
                return t.x = Math.floor(e.x),
                t.y = Math.floor(e.y),
                t
            }
            ,
            _.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x),
                t.y = Math.min(e.y, i.y),
                t
            }
            ,
            _.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x),
                t.y = Math.max(e.y, i.y),
                t
            }
            ,
            _.round = function(t, e) {
                return t.x = Math.round(e.x),
                t.y = Math.round(e.y),
                t
            }
            ,
            _.multiplyScalar = function(t, e, i) {
                return t.x = e.x * i,
                t.y = e.y * i,
                t
            }
            ,
            _.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n,
                t.y = e.y + i.y * n,
                t
            }
            ,
            _.distance = function(t, e) {
                return c = e.x - t.x,
                u = e.y - t.y,
                Math.sqrt(c * c + u * u)
            }
            ,
            _.squaredDistance = function(t, e) {
                return c = e.x - t.x,
                u = e.y - t.y,
                c * c + u * u
            }
            ,
            _.len = function(t) {
                return c = t.x,
                u = t.y,
                Math.sqrt(c * c + u * u)
            }
            ,
            _.lengthSqr = function(t) {
                return c = t.x,
                u = t.y,
                c * c + u * u
            }
            ,
            _.negate = function(t, e) {
                return t.x = -e.x,
                t.y = -e.y,
                t
            }
            ,
            _.inverse = function(t, e) {
                return t.x = 1 / e.x,
                t.y = 1 / e.y,
                t
            }
            ,
            _.inverseSafe = function(t, e) {
                return c = e.x,
                u = e.y,
                Math.abs(c) < a.EPSILON ? t.x = 0 : t.x = 1 / c,
                Math.abs(u) < a.EPSILON ? t.y = 0 : t.y = 1 / u,
                t
            }
            ,
            _.normalize = function(t, e) {
                c = e.x,
                u = e.y;
                var i = c * c + u * u;
                return i > 0 && (i = 1 / Math.sqrt(i),
                t.x = c * i,
                t.y = u * i),
                t
            }
            ,
            _.dot = function(t, e) {
                return t.x * e.x + t.y * e.y
            }
            ,
            _.cross = function(t, e, i) {
                return t.x = t.y = 0,
                t.z = e.x * i.y - e.y * i.x,
                t
            }
            ,
            _.lerp = function(t, e, i, n) {
                return c = e.x,
                u = e.y,
                t.x = c + n * (i.x - c),
                t.y = u + n * (i.y - u),
                t
            }
            ,
            _.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0,
                a.random)() * Math.PI;
                return t.x = Math.cos(i) * e,
                t.y = Math.sin(i) * e,
                t
            }
            ,
            _.transformMat3 = function(t, e, i) {
                c = e.x,
                u = e.y;
                var n = i.m;
                return t.x = n[0] * c + n[3] * u + n[6],
                t.y = n[1] * c + n[4] * u + n[7],
                t
            }
            ,
            _.transformMat4 = function(t, e, i) {
                c = e.x,
                u = e.y;
                var n = i.m;
                return t.x = n[0] * c + n[4] * u + n[12],
                t.y = n[1] * c + n[5] * u + n[13],
                t
            }
            ,
            _.strictEquals = function(t, e) {
                return t.x === e.x && t.y === e.y
            }
            ,
            _.equals = function(t, e, i) {
                return void 0 === i && (i = a.EPSILON),
                Math.abs(t.x - e.x) <= i * Math.max(1, Math.abs(t.x), Math.abs(e.x)) && Math.abs(t.y - e.y) <= i * Math.max(1, Math.abs(t.y), Math.abs(e.y))
            }
            ,
            _.angle = function(t, e) {
                _.normalize(f, t),
                _.normalize(d, e);
                var i = _.dot(f, d);
                return i > 1 ? 0 : i < -1 ? Math.PI : Math.acos(i)
            }
            ,
            _.toArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t[i + 0] = e.x,
                t[i + 1] = e.y,
                t
            }
            ,
            _.fromArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t.x = e[i + 0],
                t.y = e[i + 1],
                t
            }
            ,
            o.clone = function() {
                return new _(this.x,this.y)
            }
            ,
            o.set = function(t) {
                return this.x = t.x,
                this.y = t.y,
                this
            }
            ,
            o.equals = function(t) {
                return t && this.x === t.x && this.y === t.y
            }
            ,
            o.fuzzyEquals = function(t, e) {
                return this.x - e <= t.x && t.x <= this.x + e && this.y - e <= t.y && t.y <= this.y + e
            }
            ,
            o.toString = function() {
                return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ")"
            }
            ,
            o.lerp = function(t, e, i) {
                i = i || new _;
                var n = this.x
                  , r = this.y;
                return i.x = n + (t.x - n) * e,
                i.y = r + (t.y - r) * e,
                i
            }
            ,
            o.clampf = function(t, e) {
                return this.x = s.default.clampf(this.x, t.x, e.x),
                this.y = s.default.clampf(this.y, t.y, e.y),
                this
            }
            ,
            o.add = function(t, e) {
                return (e = e || new _).x = this.x + t.x,
                e.y = this.y + t.y,
                e
            }
            ,
            o.addSelf = function(t) {
                return this.x += t.x,
                this.y += t.y,
                this
            }
            ,
            o.subtract = function(t) {
                return this.x -= t.x,
                this.y -= t.y,
                this
            }
            ,
            o.multiplyScalar = function(t) {
                return this.x *= t,
                this.y *= t,
                this
            }
            ,
            o.multiply = function(t) {
                return this.x *= t.x,
                this.y *= t.y,
                this
            }
            ,
            o.divide = function(t) {
                return this.x /= t,
                this.y /= t,
                this
            }
            ,
            o.negate = function() {
                return this.x = -this.x,
                this.y = -this.y,
                this
            }
            ,
            o.dot = function(t) {
                return this.x * t.x + this.y * t.y
            }
            ,
            o.cross = function(t) {
                return this.x * t.y - this.y * t.x
            }
            ,
            o.len = function() {
                return Math.sqrt(this.x * this.x + this.y * this.y)
            }
            ,
            o.lengthSqr = function() {
                return this.x * this.x + this.y * this.y
            }
            ,
            o.normalizeSelf = function() {
                var t = this.x * this.x + this.y * this.y;
                if (1 === t)
                    return this;
                if (0 === t)
                    return this;
                var e = 1 / Math.sqrt(t);
                return this.x *= e,
                this.y *= e,
                this
            }
            ,
            o.normalize = function(t) {
                return (t = t || new _).x = this.x,
                t.y = this.y,
                t.normalizeSelf(),
                t
            }
            ,
            o.angle = function(t) {
                var e = this.magSqr()
                  , i = t.magSqr();
                if (0 === e || 0 === i)
                    return console.warn("Can't get angle between zero vector"),
                    0;
                var n = this.dot(t) / Math.sqrt(e * i);
                return n = s.default.clampf(n, -1, 1),
                Math.acos(n)
            }
            ,
            o.signAngle = function(t) {
                var e = this.angle(t);
                return this.cross(t) < 0 ? -e : e
            }
            ,
            o.rotate = function(t, e) {
                return (e = e || new _).x = this.x,
                e.y = this.y,
                e.rotateSelf(t)
            }
            ,
            o.rotateSelf = function(t) {
                var e = Math.sin(t)
                  , i = Math.cos(t)
                  , n = this.x;
                return this.x = i * n - e * this.y,
                this.y = e * n + i * this.y,
                this
            }
            ,
            o.project = function(t) {
                return t.multiplyScalar(this.dot(t) / t.dot(t))
            }
            ,
            o.transformMat4 = function(t, e) {
                return e = e || new _,
                _.transformMat4(e, this, t),
                e
            }
            ,
            o.maxAxis = function() {
                return Math.max(this.x, this.y)
            }
            ,
            n = _,
            r = [{
                key: "ONE",
                get: function() {
                    return new _(1,1)
                }
            }, {
                key: "ZERO",
                get: function() {
                    return new _(0,0)
                }
            }, {
                key: "UP",
                get: function() {
                    return new _(0,1)
                }
            }, {
                key: "RIGHT",
                get: function() {
                    return new _(1,0)
                }
            }],
            null && l(n.prototype, null),
            r && l(n, r),
            _
        }
        )(n.default);
        i.default = _,
        _.sub = _.subtract,
        _.mul = _.multiply,
        _.scale = _.multiplyScalar,
        _.mag = _.len,
        _.squaredMagnitude = _.lengthSqr,
        _.div = _.divide,
        _.ONE_R = _.ONE,
        _.ZERO_R = _.ZERO,
        _.UP_R = _.UP,
        _.RIGHT_R = _.RIGHT;
        var f = new _
          , d = new _;
        r.default.fastDefine("cc.Vec2", _, {
            x: 0,
            y: 0
        }),
        cc.v2 = function(t, e) {
            return new _(t,e)
        }
        ,
        cc.Vec2 = _,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "../utils/misc": 267,
        "./utils": 289,
        "./value-type": 290
    }],
    292: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = l(t("./value-type"))
          , r = l(t("../platform/CCClass"))
          , s = l(t("../utils/misc"))
          , a = l(t("./vec2"))
          , o = t("./utils");
        function l(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function h(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function c(t, e) {
            return (c = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var u = 0
          , _ = 0
          , f = 0
          , d = (function(t) {
            var e, i;
            i = t,
            (e = d).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            c(e, i);
            var n, r, l = d.prototype;
            function d(e, i, n) {
                var r;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                (r = t.call(this) || this).mag = d.prototype.len,
                r.magSqr = d.prototype.lengthSqr,
                r.subSelf = d.prototype.subtract,
                r.mulSelf = d.prototype.multiplyScalar,
                r.divSelf = d.prototype.divide,
                r.scaleSelf = d.prototype.multiply,
                r.negSelf = d.prototype.negate,
                r.x = void 0,
                r.y = void 0,
                r.z = void 0,
                r.angle = a.default.prototype.angle,
                r.project = a.default.prototype.project,
                e && "object" == typeof e ? (r.x = e.x,
                r.y = e.y,
                r.z = e.z) : (r.x = e,
                r.y = i,
                r.z = n),
                r
            }
            return l.sub = function(t, e) {
                return d.subtract(e || new d, this, t)
            }
            ,
            l.mul = function(t, e) {
                return d.multiplyScalar(e || new d, this, t)
            }
            ,
            l.div = function(t, e) {
                return d.multiplyScalar(e || new d, this, 1 / t)
            }
            ,
            l.scale = function(t, e) {
                return d.multiply(e || new d, this, t)
            }
            ,
            l.neg = function(t) {
                return d.negate(t || new d, this)
            }
            ,
            d.zero = function(t) {
                return t.x = 0,
                t.y = 0,
                t.z = 0,
                t
            }
            ,
            d.clone = function(t) {
                return new d(t.x,t.y,t.z)
            }
            ,
            d.copy = function(t, e) {
                return t.x = e.x,
                t.y = e.y,
                t.z = e.z,
                t
            }
            ,
            d.set = function(t, e, i, n) {
                return t.x = e,
                t.y = i,
                t.z = n,
                t
            }
            ,
            d.add = function(t, e, i) {
                return t.x = e.x + i.x,
                t.y = e.y + i.y,
                t.z = e.z + i.z,
                t
            }
            ,
            d.subtract = function(t, e, i) {
                return t.x = e.x - i.x,
                t.y = e.y - i.y,
                t.z = e.z - i.z,
                t
            }
            ,
            d.multiply = function(t, e, i) {
                return t.x = e.x * i.x,
                t.y = e.y * i.y,
                t.z = e.z * i.z,
                t
            }
            ,
            d.divide = function(t, e, i) {
                return t.x = e.x / i.x,
                t.y = e.y / i.y,
                t.z = e.z / i.z,
                t
            }
            ,
            d.ceil = function(t, e) {
                return t.x = Math.ceil(e.x),
                t.y = Math.ceil(e.y),
                t.z = Math.ceil(e.z),
                t
            }
            ,
            d.floor = function(t, e) {
                return t.x = Math.floor(e.x),
                t.y = Math.floor(e.y),
                t.z = Math.floor(e.z),
                t
            }
            ,
            d.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x),
                t.y = Math.min(e.y, i.y),
                t.z = Math.min(e.z, i.z),
                t
            }
            ,
            d.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x),
                t.y = Math.max(e.y, i.y),
                t.z = Math.max(e.z, i.z),
                t
            }
            ,
            d.round = function(t, e) {
                return t.x = Math.round(e.x),
                t.y = Math.round(e.y),
                t.z = Math.round(e.z),
                t
            }
            ,
            d.multiplyScalar = function(t, e, i) {
                return t.x = e.x * i,
                t.y = e.y * i,
                t.z = e.z * i,
                t
            }
            ,
            d.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n,
                t.y = e.y + i.y * n,
                t.z = e.z + i.z * n,
                t
            }
            ,
            d.distance = function(t, e) {
                return u = e.x - t.x,
                _ = e.y - t.y,
                f = e.z - t.z,
                Math.sqrt(u * u + _ * _ + f * f)
            }
            ,
            d.squaredDistance = function(t, e) {
                return u = e.x - t.x,
                _ = e.y - t.y,
                f = e.z - t.z,
                u * u + _ * _ + f * f
            }
            ,
            d.len = function(t) {
                return u = t.x,
                _ = t.y,
                f = t.z,
                Math.sqrt(u * u + _ * _ + f * f)
            }
            ,
            d.lengthSqr = function(t) {
                return u = t.x,
                _ = t.y,
                f = t.z,
                u * u + _ * _ + f * f
            }
            ,
            d.negate = function(t, e) {
                return t.x = -e.x,
                t.y = -e.y,
                t.z = -e.z,
                t
            }
            ,
            d.inverse = function(t, e) {
                return t.x = 1 / e.x,
                t.y = 1 / e.y,
                t.z = 1 / e.z,
                t
            }
            ,
            d.inverseSafe = function(t, e) {
                return u = e.x,
                _ = e.y,
                f = e.z,
                Math.abs(u) < o.EPSILON ? t.x = 0 : t.x = 1 / u,
                Math.abs(_) < o.EPSILON ? t.y = 0 : t.y = 1 / _,
                Math.abs(f) < o.EPSILON ? t.z = 0 : t.z = 1 / f,
                t
            }
            ,
            d.normalize = function(t, e) {
                u = e.x,
                _ = e.y,
                f = e.z;
                var i = u * u + _ * _ + f * f;
                return i > 0 && (i = 1 / Math.sqrt(i),
                t.x = u * i,
                t.y = _ * i,
                t.z = f * i),
                t
            }
            ,
            d.dot = function(t, e) {
                return t.x * e.x + t.y * e.y + t.z * e.z
            }
            ,
            d.cross = function(t, e, i) {
                var n = e.x
                  , r = e.y
                  , s = e.z
                  , a = i.x
                  , o = i.y
                  , l = i.z;
                return t.x = r * l - s * o,
                t.y = s * a - n * l,
                t.z = n * o - r * a,
                t
            }
            ,
            d.lerp = function(t, e, i, n) {
                return t.x = e.x + n * (i.x - e.x),
                t.y = e.y + n * (i.y - e.y),
                t.z = e.z + n * (i.z - e.z),
                t
            }
            ,
            d.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0,
                o.random)() * Math.PI
                  , n = 2 * (0,
                o.random)() - 1
                  , r = Math.sqrt(1 - n * n);
                return t.x = r * Math.cos(i) * e,
                t.y = r * Math.sin(i) * e,
                t.z = n * e,
                t
            }
            ,
            d.transformMat4 = function(t, e, i) {
                u = e.x,
                _ = e.y,
                f = e.z;
                var n = i.m
                  , r = n[3] * u + n[7] * _ + n[11] * f + n[15];
                return r = r ? 1 / r : 1,
                t.x = (n[0] * u + n[4] * _ + n[8] * f + n[12]) * r,
                t.y = (n[1] * u + n[5] * _ + n[9] * f + n[13]) * r,
                t.z = (n[2] * u + n[6] * _ + n[10] * f + n[14]) * r,
                t
            }
            ,
            d.transformMat4Normal = function(t, e, i) {
                u = e.x,
                _ = e.y,
                f = e.z;
                var n = i.m
                  , r = n[3] * u + n[7] * _ + n[11] * f;
                return r = r ? 1 / r : 1,
                t.x = (n[0] * u + n[4] * _ + n[8] * f) * r,
                t.y = (n[1] * u + n[5] * _ + n[9] * f) * r,
                t.z = (n[2] * u + n[6] * _ + n[10] * f) * r,
                t
            }
            ,
            d.transformMat3 = function(t, e, i) {
                u = e.x,
                _ = e.y,
                f = e.z;
                var n = i.m;
                return t.x = u * n[0] + _ * n[3] + f * n[6],
                t.y = u * n[1] + _ * n[4] + f * n[7],
                t.z = u * n[2] + _ * n[5] + f * n[8],
                t
            }
            ,
            d.transformAffine = function(t, e, i) {
                u = e.x,
                _ = e.y,
                f = e.z;
                var n = i.m;
                return t.x = n[0] * u + n[1] * _ + n[2] * f + n[3],
                t.y = n[4] * u + n[5] * _ + n[6] * f + n[7],
                t.x = n[8] * u + n[9] * _ + n[10] * f + n[11],
                t
            }
            ,
            d.transformQuat = function(t, e, i) {
                var n = i.w * e.x + i.y * e.z - i.z * e.y
                  , r = i.w * e.y + i.z * e.x - i.x * e.z
                  , s = i.w * e.z + i.x * e.y - i.y * e.x
                  , a = -i.x * e.x - i.y * e.y - i.z * e.z;
                return t.x = n * i.w + a * -i.x + r * -i.z - s * -i.y,
                t.y = r * i.w + a * -i.y + s * -i.x - n * -i.z,
                t.z = s * i.w + a * -i.z + n * -i.y - r * -i.x,
                t
            }
            ,
            d.transformRTS = function(t, e, i, n, r) {
                var s = e.x * r.x
                  , a = e.y * r.y
                  , o = e.z * r.z
                  , l = i.w * s + i.y * o - i.z * a
                  , h = i.w * a + i.z * s - i.x * o
                  , c = i.w * o + i.x * a - i.y * s
                  , u = -i.x * s - i.y * a - i.z * o;
                return t.x = l * i.w + u * -i.x + h * -i.z - c * -i.y + n.x,
                t.y = h * i.w + u * -i.y + c * -i.x - l * -i.z + n.y,
                t.z = c * i.w + u * -i.z + l * -i.y - h * -i.x + n.z,
                t
            }
            ,
            d.transformInverseRTS = function(t, e, i, n, r) {
                var s = e.x - n.x
                  , a = e.y - n.y
                  , o = e.z - n.z
                  , l = i.w * s - i.y * o + i.z * a
                  , h = i.w * a - i.z * s + i.x * o
                  , c = i.w * o - i.x * a + i.y * s
                  , u = i.x * s + i.y * a + i.z * o;
                return t.x = (l * i.w + u * i.x + h * i.z - c * i.y) / r.x,
                t.y = (h * i.w + u * i.y + c * i.x - l * i.z) / r.y,
                t.z = (c * i.w + u * i.z + l * i.y - h * i.x) / r.z,
                t
            }
            ,
            d.rotateX = function(t, e, i, n) {
                u = e.x - i.x,
                _ = e.y - i.y,
                f = e.z - i.z;
                var r = Math.cos(n)
                  , s = Math.sin(n)
                  , a = u
                  , o = _ * r - f * s
                  , l = _ * s + f * r;
                return t.x = a + i.x,
                t.y = o + i.y,
                t.z = l + i.z,
                t
            }
            ,
            d.rotateY = function(t, e, i, n) {
                u = e.x - i.x,
                _ = e.y - i.y,
                f = e.z - i.z;
                var r = Math.cos(n)
                  , s = Math.sin(n)
                  , a = f * s + u * r
                  , o = _
                  , l = f * r - u * s;
                return t.x = a + i.x,
                t.y = o + i.y,
                t.z = l + i.z,
                t
            }
            ,
            d.rotateZ = function(t, e, i, n) {
                u = e.x - i.x,
                _ = e.y - i.y,
                f = e.z - i.z;
                var r = Math.cos(n)
                  , s = Math.sin(n)
                  , a = u * r - _ * s
                  , o = u * s + _ * r
                  , l = f;
                return t.x = a + i.x,
                t.y = o + i.y,
                t.z = l + i.z,
                t
            }
            ,
            d.strictEquals = function(t, e) {
                return t.x === e.x && t.y === e.y && t.z === e.z
            }
            ,
            d.equals = function(t, e, i) {
                void 0 === i && (i = o.EPSILON);
                var n = t.x
                  , r = t.y
                  , s = t.z
                  , a = e.x
                  , l = e.y
                  , h = e.z;
                return Math.abs(n - a) <= i * Math.max(1, Math.abs(n), Math.abs(a)) && Math.abs(r - l) <= i * Math.max(1, Math.abs(r), Math.abs(l)) && Math.abs(s - h) <= i * Math.max(1, Math.abs(s), Math.abs(h))
            }
            ,
            d.angle = function(t, e) {
                d.normalize(p, t),
                d.normalize(m, e);
                var i = d.dot(p, m);
                return i > 1 ? 0 : i < -1 ? Math.PI : Math.acos(i)
            }
            ,
            d.projectOnPlane = function(t, e, i) {
                return d.subtract(t, e, d.project(t, e, i))
            }
            ,
            d.project = function(t, e, i) {
                var n = d.lengthSqr(i);
                return n < 1e-6 ? d.set(t, 0, 0, 0) : d.multiplyScalar(t, i, d.dot(e, i) / n)
            }
            ,
            d.toArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t[i + 0] = e.x,
                t[i + 1] = e.y,
                t[i + 2] = e.z,
                t
            }
            ,
            d.fromArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t.x = e[i + 0],
                t.y = e[i + 1],
                t.z = e[i + 2],
                t
            }
            ,
            l.clone = function() {
                return new d(this.x,this.y,this.z)
            }
            ,
            l.set = function(t) {
                return this.x = t.x,
                this.y = t.y,
                this.z = t.z,
                this
            }
            ,
            l.equals = function(t) {
                return t && this.x === t.x && this.y === t.y && this.z === t.z
            }
            ,
            l.fuzzyEquals = function(t, e) {
                return this.x - e <= t.x && t.x <= this.x + e && this.y - e <= t.y && t.y <= this.y + e && this.z - e <= t.z && t.z <= this.z + e
            }
            ,
            l.toString = function() {
                return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ")"
            }
            ,
            l.lerp = function(t, e, i) {
                return i = i || new d,
                d.lerp(i, this, t, e),
                i
            }
            ,
            l.clampf = function(t, e) {
                return this.x = s.default.clampf(this.x, t.x, e.x),
                this.y = s.default.clampf(this.y, t.y, e.y),
                this.z = s.default.clampf(this.z, t.z, e.z),
                this
            }
            ,
            l.addSelf = function(t) {
                return this.x += t.x,
                this.y += t.y,
                this.z += t.z,
                this
            }
            ,
            l.add = function(t, e) {
                return (e = e || new d).x = this.x + t.x,
                e.y = this.y + t.y,
                e.z = this.z + t.z,
                e
            }
            ,
            l.subtract = function(t) {
                return this.x -= t.x,
                this.y -= t.y,
                this.z -= t.z,
                this
            }
            ,
            l.multiplyScalar = function(t) {
                return this.x *= t,
                this.y *= t,
                this.z *= t,
                this
            }
            ,
            l.multiply = function(t) {
                return this.x *= t.x,
                this.y *= t.y,
                this.z *= t.z,
                this
            }
            ,
            l.divide = function(t) {
                return this.x /= t,
                this.y /= t,
                this.z /= t,
                this
            }
            ,
            l.negate = function() {
                return this.x = -this.x,
                this.y = -this.y,
                this.z = -this.z,
                this
            }
            ,
            l.dot = function(t) {
                return this.x * t.x + this.y * t.y + this.z * t.z
            }
            ,
            l.cross = function(t, e) {
                return e = e || new d,
                d.cross(e, this, t),
                e
            }
            ,
            l.len = function() {
                return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
            }
            ,
            l.lengthSqr = function() {
                return this.x * this.x + this.y * this.y + this.z * this.z
            }
            ,
            l.normalizeSelf = function() {
                return d.normalize(this, this),
                this
            }
            ,
            l.normalize = function(t) {
                return t = t || new d,
                d.normalize(t, this),
                t
            }
            ,
            l.transformMat4 = function(t, e) {
                return e = e || new d,
                d.transformMat4(e, this, t),
                e
            }
            ,
            l.maxAxis = function() {
                return Math.max(this.x, this.y, this.z)
            }
            ,
            l.signAngle = function(t) {
                cc.warnID(1408, "vec3.signAngle", "v2.1", "cc.v2(selfVector).signAngle(vector)");
                var e = new a.default(this.x,this.y)
                  , i = new a.default(t.x,t.y);
                return e.signAngle(i)
            }
            ,
            l.rotate = function(t, e) {
                return cc.warnID(1408, "vec3.rotate", "v2.1", "cc.v2(selfVector).rotate(radians, out)"),
                a.default.prototype.rotate.call(this, t, e)
            }
            ,
            l.rotateSelf = function(t) {
                return cc.warnID(1408, "vec3.rotateSelf", "v2.1", "cc.v2(selfVector).rotateSelf(radians)"),
                a.default.prototype.rotateSelf.call(this, t)
            }
            ,
            n = d,
            r = [{
                key: "ONE",
                get: function() {
                    return new d(1,1,1)
                }
            }, {
                key: "ZERO",
                get: function() {
                    return new d
                }
            }, {
                key: "UP",
                get: function() {
                    return new d(0,1,0)
                }
            }, {
                key: "RIGHT",
                get: function() {
                    return new d(1,0,0)
                }
            }, {
                key: "FORWARD",
                get: function() {
                    return new d(0,0,1)
                }
            }],
            null && h(n.prototype, null),
            r && h(n, r),
            d
        }
        )(n.default);
        i.default = d,
        d.sub = d.subtract,
        d.mul = d.multiply,
        d.scale = d.multiplyScalar,
        d.mag = d.len,
        d.squaredMagnitude = d.lengthSqr,
        d.div = d.divide,
        d.ONE_R = d.ONE,
        d.ZERO_R = d.ZERO,
        d.UP_R = d.UP,
        d.RIGHT_R = d.RIGHT,
        d.FRONT_R = d.FORWARD;
        var p = new d
          , m = new d;
        r.default.fastDefine("cc.Vec3", d, {
            x: 0,
            y: 0,
            z: 0
        }),
        cc.v3 = function(t, e, i) {
            return new d(t,e,i)
        }
        ,
        cc.Vec3 = d,
        e.exports = i.default
    }
    ), {
        "../platform/CCClass": 193,
        "../utils/misc": 267,
        "./utils": 289,
        "./value-type": 290,
        "./vec2": 291
    }],
    293: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.v4 = d,
        i.default = void 0;
        var n = a(t("../platform/CCClass"))
          , r = a(t("./value-type"))
          , s = t("./utils");
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        function l(t, e) {
            return (l = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var h = 0
          , c = 0
          , u = 0
          , _ = 0
          , f = (function(t) {
            var e, i;
            i = t,
            (e = f).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            l(e, i);
            var n, r, a = f.prototype;
            function f(e, i, n, r) {
                var s;
                return void 0 === e && (e = 0),
                void 0 === i && (i = 0),
                void 0 === n && (n = 0),
                void 0 === r && (r = 0),
                (s = t.call(this) || this).mag = f.prototype.len,
                s.magSqr = f.prototype.lengthSqr,
                s.subSelf = f.prototype.subtract,
                s.mulSelf = f.prototype.multiplyScalar,
                s.divSelf = f.prototype.divide,
                s.scaleSelf = f.prototype.multiply,
                s.negSelf = f.prototype.negate,
                s.x = void 0,
                s.y = void 0,
                s.z = void 0,
                s.w = void 0,
                e && "object" == typeof e ? (s.x = e.x,
                s.y = e.y,
                s.z = e.z,
                s.w = e.w) : (s.x = e,
                s.y = i,
                s.z = n,
                s.w = r),
                s
            }
            return a.sub = function(t, e) {
                return f.subtract(e || new f, this, t)
            }
            ,
            a.mul = function(t, e) {
                return f.multiplyScalar(e || new f, this, t)
            }
            ,
            a.div = function(t, e) {
                return f.multiplyScalar(e || new f, this, 1 / t)
            }
            ,
            a.scale = function(t, e) {
                return f.multiply(e || new f, this, t)
            }
            ,
            a.neg = function(t) {
                return f.negate(t || new f, this)
            }
            ,
            f.clone = function(t) {
                return new f(t.x,t.y,t.z,t.w)
            }
            ,
            f.copy = function(t, e) {
                return t.x = e.x,
                t.y = e.y,
                t.z = e.z,
                t.w = e.w,
                t
            }
            ,
            f.set = function(t, e, i, n, r) {
                return t.x = e,
                t.y = i,
                t.z = n,
                t.w = r,
                t
            }
            ,
            f.add = function(t, e, i) {
                return t.x = e.x + i.x,
                t.y = e.y + i.y,
                t.z = e.z + i.z,
                t.w = e.w + i.w,
                t
            }
            ,
            f.subtract = function(t, e, i) {
                return t.x = e.x - i.x,
                t.y = e.y - i.y,
                t.z = e.z - i.z,
                t.w = e.w - i.w,
                t
            }
            ,
            f.multiply = function(t, e, i) {
                return t.x = e.x * i.x,
                t.y = e.y * i.y,
                t.z = e.z * i.z,
                t.w = e.w * i.w,
                t
            }
            ,
            f.divide = function(t, e, i) {
                return t.x = e.x / i.x,
                t.y = e.y / i.y,
                t.z = e.z / i.z,
                t.w = e.w / i.w,
                t
            }
            ,
            f.ceil = function(t, e) {
                return t.x = Math.ceil(e.x),
                t.y = Math.ceil(e.y),
                t.z = Math.ceil(e.z),
                t.w = Math.ceil(e.w),
                t
            }
            ,
            f.floor = function(t, e) {
                return t.x = Math.floor(e.x),
                t.y = Math.floor(e.y),
                t.z = Math.floor(e.z),
                t.w = Math.floor(e.w),
                t
            }
            ,
            f.min = function(t, e, i) {
                return t.x = Math.min(e.x, i.x),
                t.y = Math.min(e.y, i.y),
                t.z = Math.min(e.z, i.z),
                t.w = Math.min(e.w, i.w),
                t
            }
            ,
            f.max = function(t, e, i) {
                return t.x = Math.max(e.x, i.x),
                t.y = Math.max(e.y, i.y),
                t.z = Math.max(e.z, i.z),
                t.w = Math.max(e.w, i.w),
                t
            }
            ,
            f.round = function(t, e) {
                return t.x = Math.round(e.x),
                t.y = Math.round(e.y),
                t.z = Math.round(e.z),
                t.w = Math.round(e.w),
                t
            }
            ,
            f.multiplyScalar = function(t, e, i) {
                return t.x = e.x * i,
                t.y = e.y * i,
                t.z = e.z * i,
                t.w = e.w * i,
                t
            }
            ,
            f.scaleAndAdd = function(t, e, i, n) {
                return t.x = e.x + i.x * n,
                t.y = e.y + i.y * n,
                t.z = e.z + i.z * n,
                t.w = e.w + i.w * n,
                t
            }
            ,
            f.distance = function(t, e) {
                var i = e.x - t.x
                  , n = e.y - t.y
                  , r = e.z - t.z
                  , s = e.w - t.w;
                return Math.sqrt(i * i + n * n + r * r + s * s)
            }
            ,
            f.squaredDistance = function(t, e) {
                var i = e.x - t.x
                  , n = e.y - t.y
                  , r = e.z - t.z
                  , s = e.w - t.w;
                return i * i + n * n + r * r + s * s
            }
            ,
            f.len = function(t) {
                return h = t.x,
                c = t.y,
                u = t.z,
                _ = t.w,
                Math.sqrt(h * h + c * c + u * u + _ * _)
            }
            ,
            f.lengthSqr = function(t) {
                return h = t.x,
                c = t.y,
                u = t.z,
                _ = t.w,
                h * h + c * c + u * u + _ * _
            }
            ,
            f.negate = function(t, e) {
                return t.x = -e.x,
                t.y = -e.y,
                t.z = -e.z,
                t.w = -e.w,
                t
            }
            ,
            f.inverse = function(t, e) {
                return t.x = 1 / e.x,
                t.y = 1 / e.y,
                t.z = 1 / e.z,
                t.w = 1 / e.w,
                t
            }
            ,
            f.inverseSafe = function(t, e) {
                return h = e.x,
                c = e.y,
                u = e.z,
                _ = e.w,
                Math.abs(h) < s.EPSILON ? t.x = 0 : t.x = 1 / h,
                Math.abs(c) < s.EPSILON ? t.y = 0 : t.y = 1 / c,
                Math.abs(u) < s.EPSILON ? t.z = 0 : t.z = 1 / u,
                Math.abs(_) < s.EPSILON ? t.w = 0 : t.w = 1 / _,
                t
            }
            ,
            f.normalize = function(t, e) {
                h = e.x,
                c = e.y,
                u = e.z,
                _ = e.w;
                var i = h * h + c * c + u * u + _ * _;
                return i > 0 && (i = 1 / Math.sqrt(i),
                t.x = h * i,
                t.y = c * i,
                t.z = u * i,
                t.w = _ * i),
                t
            }
            ,
            f.dot = function(t, e) {
                return t.x * e.x + t.y * e.y + t.z * e.z + t.w * e.w
            }
            ,
            f.lerp = function(t, e, i, n) {
                return t.x = e.x + n * (i.x - e.x),
                t.y = e.y + n * (i.y - e.y),
                t.z = e.z + n * (i.z - e.z),
                t.w = e.w + n * (i.w - e.w),
                t
            }
            ,
            f.random = function(t, e) {
                e = e || 1;
                var i = 2 * (0,
                s.random)() * Math.PI
                  , n = 2 * (0,
                s.random)() - 1
                  , r = Math.sqrt(1 - n * n);
                return t.x = r * Math.cos(i) * e,
                t.y = r * Math.sin(i) * e,
                t.z = n * e,
                t.w = 0,
                t
            }
            ,
            f.transformMat4 = function(t, e, i) {
                h = e.x,
                c = e.y,
                u = e.z,
                _ = e.w;
                var n = i.m;
                return t.x = n[0] * h + n[4] * c + n[8] * u + n[12] * _,
                t.y = n[1] * h + n[5] * c + n[9] * u + n[13] * _,
                t.z = n[2] * h + n[6] * c + n[10] * u + n[14] * _,
                t.w = n[3] * h + n[7] * c + n[11] * u + n[15] * _,
                t
            }
            ,
            f.transformAffine = function(t, e, i) {
                h = e.x,
                c = e.y,
                u = e.z,
                _ = e.w;
                var n = i.m;
                return t.x = n[0] * h + n[1] * c + n[2] * u + n[3] * _,
                t.y = n[4] * h + n[5] * c + n[6] * u + n[7] * _,
                t.x = n[8] * h + n[9] * c + n[10] * u + n[11] * _,
                t.w = e.w,
                t
            }
            ,
            f.transformQuat = function(t, e, i) {
                var n = e.x
                  , r = e.y
                  , s = e.z;
                h = i.x,
                c = i.y,
                u = i.z;
                var a = (_ = i.w) * n + c * s - u * r
                  , o = _ * r + u * n - h * s
                  , l = _ * s + h * r - c * n
                  , f = -h * n - c * r - u * s;
                return t.x = a * _ + f * -h + o * -u - l * -c,
                t.y = o * _ + f * -c + l * -h - a * -u,
                t.z = l * _ + f * -u + a * -c - o * -h,
                t.w = e.w,
                t
            }
            ,
            f.strictEquals = function(t, e) {
                return t.x === e.x && t.y === e.y && t.z === e.z && t.w === e.w
            }
            ,
            f.equals = function(t, e, i) {
                return void 0 === i && (i = s.EPSILON),
                Math.abs(t.x - e.x) <= i * Math.max(1, Math.abs(t.x), Math.abs(e.x)) && Math.abs(t.y - e.y) <= i * Math.max(1, Math.abs(t.y), Math.abs(e.y)) && Math.abs(t.z - e.z) <= i * Math.max(1, Math.abs(t.z), Math.abs(e.z)) && Math.abs(t.w - e.w) <= i * Math.max(1, Math.abs(t.w), Math.abs(e.w))
            }
            ,
            f.toArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t[i + 0] = e.x,
                t[i + 1] = e.y,
                t[i + 2] = e.z,
                t[i + 3] = e.w,
                t
            }
            ,
            f.fromArray = function(t, e, i) {
                return void 0 === i && (i = 0),
                t.x = e[i + 0],
                t.y = e[i + 1],
                t.z = e[i + 2],
                t.w = e[i + 3],
                t
            }
            ,
            a.clone = function() {
                return new f(this.x,this.y,this.z,this.w)
            }
            ,
            a.set = function(t, e, i, n) {
                return t && "object" == typeof t ? (this.x = t.x,
                this.y = t.y,
                this.z = t.z,
                this.w = t.w) : (this.x = t || 0,
                this.y = e || 0,
                this.z = i || 0,
                this.w = n || 0),
                this
            }
            ,
            a.equals = function(t, e) {
                return void 0 === e && (e = s.EPSILON),
                Math.abs(this.x - t.x) <= e * Math.max(1, Math.abs(this.x), Math.abs(t.x)) && Math.abs(this.y - t.y) <= e * Math.max(1, Math.abs(this.y), Math.abs(t.y)) && Math.abs(this.z - t.z) <= e * Math.max(1, Math.abs(this.z), Math.abs(t.z)) && Math.abs(this.w - t.w) <= e * Math.max(1, Math.abs(this.w), Math.abs(t.w))
            }
            ,
            a.equals4f = function(t, e, i, n, r) {
                return void 0 === r && (r = s.EPSILON),
                Math.abs(this.x - t) <= r * Math.max(1, Math.abs(this.x), Math.abs(t)) && Math.abs(this.y - e) <= r * Math.max(1, Math.abs(this.y), Math.abs(e)) && Math.abs(this.z - i) <= r * Math.max(1, Math.abs(this.z), Math.abs(i)) && Math.abs(this.w - n) <= r * Math.max(1, Math.abs(this.w), Math.abs(n))
            }
            ,
            a.strictEquals = function(t) {
                return this.x === t.x && this.y === t.y && this.z === t.z && this.w === t.w
            }
            ,
            a.strictEquals4f = function(t, e, i, n) {
                return this.x === t && this.y === e && this.z === i && this.w === n
            }
            ,
            a.lerp = function(t, e) {
                return h = this.x,
                c = this.y,
                u = this.z,
                _ = this.w,
                this.x = h + e * (t.x - h),
                this.y = c + e * (t.y - c),
                this.z = u + e * (t.z - u),
                this.w = _ + e * (t.w - _),
                this
            }
            ,
            a.toString = function() {
                return "(" + this.x.toFixed(2) + ", " + this.y.toFixed(2) + ", " + this.z.toFixed(2) + ", " + this.w.toFixed(2) + ")"
            }
            ,
            a.clampf = function(t, e) {
                return this.x = (0,
                s.clamp)(this.x, t.x, e.x),
                this.y = (0,
                s.clamp)(this.y, t.y, e.y),
                this.z = (0,
                s.clamp)(this.z, t.z, e.z),
                this.w = (0,
                s.clamp)(this.w, t.w, e.w),
                this
            }
            ,
            a.addSelf = function(t) {
                return this.x += t.x,
                this.y += t.y,
                this.z += t.z,
                this.w += t.w,
                this
            }
            ,
            a.add = function(t, e) {
                return (e = e || new f).x = this.x + t.x,
                e.y = this.y + t.y,
                e.z = this.z + t.z,
                e.w = this.w + t.w,
                e
            }
            ,
            a.subtract = function(t, e) {
                return (e = e || new f).x = this.x - t.x,
                e.y = this.y - t.y,
                e.z = this.z - t.z,
                e.w = this.w - t.w,
                e
            }
            ,
            a.multiplyScalar = function(t) {
                return this.x *= t,
                this.y *= t,
                this.z *= t,
                this.w *= t,
                this
            }
            ,
            a.multiply = function(t) {
                return this.x *= t.x,
                this.y *= t.y,
                this.z *= t.z,
                this.w *= t.w,
                this
            }
            ,
            a.divide = function(t) {
                return this.x /= t,
                this.y /= t,
                this.z /= t,
                this.w /= t,
                this
            }
            ,
            a.negate = function() {
                return this.x = -this.x,
                this.y = -this.y,
                this.z = -this.z,
                this.w = -this.w,
                this
            }
            ,
            a.dot = function(t) {
                return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w
            }
            ,
            a.cross = function(t, e) {
                e = e || new f;
                var i = this.x
                  , n = this.y
                  , r = this.z
                  , s = t.x
                  , a = t.y
                  , o = t.z;
                return e.x = n * o - r * a,
                e.y = r * s - i * o,
                e.z = i * a - n * s,
                e
            }
            ,
            a.len = function() {
                var t = this.x
                  , e = this.y
                  , i = this.z
                  , n = this.w;
                return Math.sqrt(t * t + e * e + i * i + n * n)
            }
            ,
            a.lengthSqr = function() {
                var t = this.x
                  , e = this.y
                  , i = this.z
                  , n = this.w;
                return t * t + e * e + i * i + n * n
            }
            ,
            a.normalizeSelf = function() {
                return this.normalize(this),
                this
            }
            ,
            a.normalize = function(t) {
                t = t || new f,
                h = this.x,
                c = this.y,
                u = this.z,
                _ = this.w;
                var e = h * h + c * c + u * u + _ * _;
                return e > 0 && (e = 1 / Math.sqrt(e),
                t.x = h * e,
                t.y = c * e,
                t.z = u * e,
                t.w = _ * e),
                t
            }
            ,
            a.transformMat4 = function(t, e) {
                e = e || new f,
                h = this.x,
                c = this.y,
                u = this.z,
                _ = this.w;
                var i = t.m;
                return e.x = i[0] * h + i[4] * c + i[8] * u + i[12] * _,
                e.y = i[1] * h + i[5] * c + i[9] * u + i[13] * _,
                e.z = i[2] * h + i[6] * c + i[10] * u + i[14] * _,
                e.w = i[3] * h + i[7] * c + i[11] * u + i[15] * _,
                e
            }
            ,
            a.maxAxis = function() {
                return Math.max(this.x, this.y, this.z, this.w)
            }
            ,
            n = f,
            r = [{
                key: "ZERO",
                get: function() {
                    return new f(0,0,0,0)
                }
            }, {
                key: "ONE",
                get: function() {
                    return new f(1,1,1,1)
                }
            }, {
                key: "NEG_ONE",
                get: function() {
                    return new f(-1,-1,-1,-1)
                }
            }],
            null && o(n.prototype, null),
            r && o(n, r),
            f
        }
        )(r.default);
        function d(t, e, i, n) {
            return new f(t,e,i,n)
        }
        i.default = f,
        f.sub = f.subtract,
        f.mul = f.multiply,
        f.div = f.divide,
        f.scale = f.multiplyScalar,
        f.mag = f.len,
        f.squaredMagnitude = f.lengthSqr,
        f.ZERO_R = f.ZERO,
        f.ONE_R = f.ONE,
        f.NEG_ONE_R = f.NEG_ONE,
        n.default.fastDefine("cc.Vec4", f, {
            x: 0,
            y: 0,
            z: 0,
            w: 0
        }),
        cc.v4 = d,
        cc.Vec4 = f
    }
    ), {
        "../platform/CCClass": 193,
        "./utils": 289,
        "./value-type": 290
    }],
    294: [(function() {
        "use strict";
        cc.js
    }
    ), {}],
    295: [(function(t) {
        "use strict";
        t("./core/CCGame"),
        t("./actions")
    }
    ), {
        "./actions": 7,
        "./core/CCGame": 28
    }],
    296: [(function(t, e) {
        "use strict";
        var i = t("../compression/zlib.min")
          , n = t("../core/CCDebug")
          , r = function(t) {
            var e, i, r, s, a, o, l, h, c, u, _, f, d;
            for (this.data = t,
            this.pos = 8,
            this.palette = [],
            this.imgData = [],
            this.transparency = {},
            this.animation = null,
            this.text = {},
            a = null; ; ) {
                switch (e = this.readUInt32(),
                h = function() {
                    var t, e;
                    for (e = [],
                    t = 0; t < 4; ++t)
                        e.push(String.fromCharCode(this.data[this.pos++]));
                    return e
                }
                .call(this).join("")) {
                case "IHDR":
                    this.width = this.readUInt32(),
                    this.height = this.readUInt32(),
                    this.bits = this.data[this.pos++],
                    this.colorType = this.data[this.pos++],
                    this.compressionMethod = this.data[this.pos++],
                    this.filterMethod = this.data[this.pos++],
                    this.interlaceMethod = this.data[this.pos++];
                    break;
                case "acTL":
                    this.animation = {
                        numFrames: this.readUInt32(),
                        numPlays: this.readUInt32() || 1 / 0,
                        frames: []
                    };
                    break;
                case "PLTE":
                    this.palette = this.read(e);
                    break;
                case "fcTL":
                    a && this.animation.frames.push(a),
                    this.pos += 4,
                    a = {
                        width: this.readUInt32(),
                        height: this.readUInt32(),
                        xOffset: this.readUInt32(),
                        yOffset: this.readUInt32()
                    },
                    s = this.readUInt16(),
                    r = this.readUInt16() || 100,
                    a.delay = 1e3 * s / r,
                    a.disposeOp = this.data[this.pos++],
                    a.blendOp = this.data[this.pos++],
                    a.data = [];
                    break;
                case "IDAT":
                case "fdAT":
                    for ("fdAT" === h && (this.pos += 4,
                    e -= 4),
                    t = (null != a ? a.data : void 0) || this.imgData,
                    _ = 0; 0 <= e ? _ < e : _ > e; 0 <= e ? ++_ : --_)
                        t.push(this.data[this.pos++]);
                    break;
                case "tRNS":
                    switch (this.transparency = {},
                    this.colorType) {
                    case 3:
                        if (this.transparency.indexed = this.read(e),
                        (c = 255 - this.transparency.indexed.length) > 0)
                            for (f = 0; 0 <= c ? f < c : f > c; 0 <= c ? ++f : --f)
                                this.transparency.indexed.push(255);
                        break;
                    case 0:
                        this.transparency.grayscale = this.read(e)[0];
                        break;
                    case 2:
                        this.transparency.rgb = this.read(e)
                    }
                    break;
                case "tEXt":
                    o = (u = this.read(e)).indexOf(0),
                    l = String.fromCharCode.apply(String, u.slice(0, o)),
                    this.text[l] = String.fromCharCode.apply(String, u.slice(o + 1));
                    break;
                case "IEND":
                    return a && this.animation.frames.push(a),
                    this.colors = function() {
                        switch (this.colorType) {
                        case 0:
                        case 3:
                        case 4:
                            return 1;
                        case 2:
                        case 6:
                            return 3
                        }
                    }
                    .call(this),
                    this.hasAlphaChannel = 4 === (d = this.colorType) || 6 === d,
                    i = this.colors + (this.hasAlphaChannel ? 1 : 0),
                    this.pixelBitlength = this.bits * i,
                    this.colorSpace = function() {
                        switch (this.colors) {
                        case 1:
                            return "DeviceGray";
                        case 3:
                            return "DeviceRGB"
                        }
                    }
                    .call(this),
                    void (Uint8Array != Array && (this.imgData = new Uint8Array(this.imgData)));
                default:
                    this.pos += e
                }
                if (this.pos += 4,
                this.pos > this.data.length)
                    throw new Error(n.getError(6017))
            }
        };
        r.prototype = {
            constructor: r,
            read: function(t) {
                var e, i;
                for (i = [],
                e = 0; 0 <= t ? e < t : e > t; 0 <= t ? ++e : --e)
                    i.push(this.data[this.pos++]);
                return i
            },
            readUInt32: function() {
                return this.data[this.pos++] << 24 | this.data[this.pos++] << 16 | this.data[this.pos++] << 8 | this.data[this.pos++]
            },
            readUInt16: function() {
                return this.data[this.pos++] << 8 | this.data[this.pos++]
            },
            decodePixels: function(t) {
                var e, r, s, a, o, l, h, c, u, _, f, d, p, m, y, v, g, A, x, b, C, T, S;
                if (null == t && (t = this.imgData),
                0 === t.length)
                    return new Uint8Array(0);
                for (t = new i.Inflate(t,{
                    index: 0,
                    verify: !1
                }).decompress(),
                v = (d = this.pixelBitlength / 8) * this.width,
                p = new Uint8Array(v * this.height),
                l = t.length,
                y = 0,
                m = 0,
                r = 0; m < l; ) {
                    switch (t[m++]) {
                    case 0:
                        for (a = x = 0; x < v; a = x += 1)
                            p[r++] = t[m++];
                        break;
                    case 1:
                        for (a = b = 0; b < v; a = b += 1)
                            e = t[m++],
                            o = a < d ? 0 : p[r - d],
                            p[r++] = (e + o) % 256;
                        break;
                    case 2:
                        for (a = C = 0; C < v; a = C += 1)
                            e = t[m++],
                            s = (a - a % d) / d,
                            g = y && p[(y - 1) * v + s * d + a % d],
                            p[r++] = (g + e) % 256;
                        break;
                    case 3:
                        for (a = T = 0; T < v; a = T += 1)
                            e = t[m++],
                            s = (a - a % d) / d,
                            o = a < d ? 0 : p[r - d],
                            g = y && p[(y - 1) * v + s * d + a % d],
                            p[r++] = (e + Math.floor((o + g) / 2)) % 256;
                        break;
                    case 4:
                        for (a = S = 0; S < v; a = S += 1)
                            e = t[m++],
                            s = (a - a % d) / d,
                            o = a < d ? 0 : p[r - d],
                            0 === y ? g = A = 0 : (g = p[(y - 1) * v + s * d + a % d],
                            A = s && p[(y - 1) * v + (s - 1) * d + a % d]),
                            h = o + g - A,
                            c = Math.abs(h - o),
                            _ = Math.abs(h - g),
                            f = Math.abs(h - A),
                            u = c <= _ && c <= f ? o : _ <= f ? g : A,
                            p[r++] = (e + u) % 256;
                        break;
                    default:
                        throw new Error(n.getError(6018, t[m - 1]))
                    }
                    y++
                }
                return p
            },
            copyToImageData: function(t, e) {
                var i, n, r, s, a, o, l, h, c, u, _;
                if (n = this.colors,
                c = null,
                i = this.hasAlphaChannel,
                this.palette.length && (c = null != (_ = this._decodedPalette) ? _ : this._decodedPalette = this.decodePalette(),
                n = 4,
                i = !0),
                h = (r = t.data || t).length,
                a = c || e,
                s = o = 0,
                1 === n)
                    for (; s < h; )
                        l = c ? 4 * e[s / 4] : o,
                        u = a[l++],
                        r[s++] = u,
                        r[s++] = u,
                        r[s++] = u,
                        r[s++] = i ? a[l++] : 255,
                        o = l;
                else
                    for (; s < h; )
                        l = c ? 4 * e[s / 4] : o,
                        r[s++] = a[l++],
                        r[s++] = a[l++],
                        r[s++] = a[l++],
                        r[s++] = i ? a[l++] : 255,
                        o = l
            },
            decodePalette: function() {
                var t, e, i, n, r, s, a, o, l;
                for (i = this.palette,
                s = this.transparency.indexed || [],
                r = new Uint8Array((s.length || 0) + i.length),
                n = 0,
                t = 0,
                e = a = 0,
                o = i.length; a < o; e = a += 3)
                    r[n++] = i[e],
                    r[n++] = i[e + 1],
                    r[n++] = i[e + 2],
                    r[n++] = null != (l = s[t++]) ? l : 255;
                return r
            },
            render: function(t) {
                var e, i;
                return t.width = this.width,
                t.height = this.height,
                i = (e = t.getContext("2d")).createImageData(this.width, this.height),
                this.copyToImageData(i, this.decodePixels()),
                e.putImageData(i, 0, 0)
            }
        },
        e.exports = r
    }
    ), {
        "../compression/zlib.min": 25,
        "../core/CCDebug": 26
    }],
    297: [(function(t, e) {
        "use strict";
        var i = t("../core/assets/CCAsset")
          , n = t("../core/assets/CCSpriteFrame")
          , r = cc.Class({
            name: "cc.ParticleAsset",
            extends: i,
            properties: {
                spriteFrame: {
                    default: null,
                    type: n
                }
            }
        });
        cc.ParticleAsset = e.exports = r
    }
    ), {
        "../core/assets/CCAsset": 62,
        "../core/assets/CCSpriteFrame": 74
    }],
    298: [(function(t, e) {
        "use strict";
        var i = t("../core/platform/CCMacro")
          , n = t("./CCParticleAsset")
          , r = t("../core/components/CCRenderComponent")
          , s = t("../compression/ZipUtils")
          , a = t("./CCPNGReader")
          , o = t("./CCTIFFReader")
          , l = t("../core/utils/texture-util")
          , h = (t("../core/renderer/render-flow"),
        t("./particle-simulator"))
          , c = (t("../core/assets/material/CCMaterial"),
        t("../core/utils/blend-func"))
          , u = cc.Enum({
            GRAVITY: 0,
            RADIUS: 1
        })
          , _ = cc.Enum({
            FREE: 0,
            RELATIVE: 1,
            GROUPED: 2
        })
          , f = {
            preview: {
                default: !0,
                editorOnly: !0,
                notify: !1,
                animatable: !1,
                tooltip: !1
            },
            _custom: !1,
            custom: {
                get: function() {
                    return this._custom
                },
                set: function(t) {
                    this._custom !== t && (this._custom = t,
                    this._applyFile())
                },
                animatable: !1,
                tooltip: !1
            },
            _file: {
                default: null,
                type: n
            },
            file: {
                get: function() {
                    return this._file
                },
                set: function(t) {
                    this._file !== t && (this._file = t,
                    t ? this._applyFile() : this.custom = !0)
                },
                animatable: !1,
                type: n,
                tooltip: !1
            },
            _spriteFrame: {
                default: null,
                type: cc.SpriteFrame
            },
            spriteFrame: {
                get: function() {
                    return this._spriteFrame
                },
                set: function(t) {
                    var e = this._renderSpriteFrame;
                    e !== t && (this._renderSpriteFrame = t,
                    t && !t._uuid || (this._spriteFrame = t),
                    this._applySpriteFrame(e))
                },
                type: cc.SpriteFrame,
                tooltip: !1
            },
            _texture: {
                default: null,
                type: cc.Texture2D,
                editorOnly: !0
            },
            texture: {
                get: function() {
                    return this._getTexture()
                },
                set: function(t) {
                    t && cc.warnID(6017)
                },
                type: cc.Texture2D,
                tooltip: !1,
                readonly: !0,
                visible: !1,
                animatable: !1
            },
            particleCount: {
                visible: !1,
                get: function() {
                    return this._simulator.particles.length
                },
                readonly: !0
            },
            _stopped: !0,
            stopped: {
                get: function() {
                    return this._stopped
                },
                animatable: !1,
                visible: !1
            },
            playOnLoad: !0,
            autoRemoveOnFinish: {
                default: !1,
                animatable: !1,
                tooltip: !1
            },
            active: {
                get: function() {
                    return this._simulator.active
                },
                visible: !1
            },
            totalParticles: 150,
            duration: -1,
            emissionRate: 10,
            life: 1,
            lifeVar: 0,
            _startColor: null,
            startColor: {
                type: cc.Color,
                get: function() {
                    return this._startColor
                },
                set: function(t) {
                    this._startColor.r = t.r,
                    this._startColor.g = t.g,
                    this._startColor.b = t.b,
                    this._startColor.a = t.a
                }
            },
            _startColorVar: null,
            startColorVar: {
                type: cc.Color,
                get: function() {
                    return this._startColorVar
                },
                set: function(t) {
                    this._startColorVar.r = t.r,
                    this._startColorVar.g = t.g,
                    this._startColorVar.b = t.b,
                    this._startColorVar.a = t.a
                }
            },
            _endColor: null,
            endColor: {
                type: cc.Color,
                get: function() {
                    return this._endColor
                },
                set: function(t) {
                    this._endColor.r = t.r,
                    this._endColor.g = t.g,
                    this._endColor.b = t.b,
                    this._endColor.a = t.a
                }
            },
            _endColorVar: null,
            endColorVar: {
                type: cc.Color,
                get: function() {
                    return this._endColorVar
                },
                set: function(t) {
                    this._endColorVar.r = t.r,
                    this._endColorVar.g = t.g,
                    this._endColorVar.b = t.b,
                    this._endColorVar.a = t.a
                }
            },
            angle: 90,
            angleVar: 20,
            startSize: 50,
            startSizeVar: 0,
            endSize: 0,
            endSizeVar: 0,
            startSpin: 0,
            startSpinVar: 0,
            endSpin: 0,
            endSpinVar: 0,
            sourcePos: cc.Vec2.ZERO,
            posVar: cc.Vec2.ZERO,
            _positionType: {
                default: _.FREE,
                formerlySerializedAs: "positionType"
            },
            positionType: {
                type: _,
                get: function() {
                    return this._positionType
                },
                set: function(t) {
                    this._positionType = t,
                    this._updateMaterial()
                }
            },
            emitterMode: {
                default: u.GRAVITY,
                type: u
            },
            gravity: cc.Vec2.ZERO,
            speed: 180,
            speedVar: 50,
            tangentialAccel: 80,
            tangentialAccelVar: 0,
            radialAccel: 0,
            radialAccelVar: 0,
            rotationIsDir: !1,
            startRadius: 0,
            startRadiusVar: 0,
            endRadius: 0,
            endRadiusVar: 0,
            rotatePerS: 0,
            rotatePerSVar: 0
        }
          , d = cc.Class({
            name: "cc.ParticleSystem",
            extends: r,
            mixins: [c],
            editor: !1,
            ctor: function() {
                this.initProperties()
            },
            initProperties: function() {
                this._previewTimer = null,
                this._focused = !1,
                this._aspectRatio = 1,
                this._simulator = new h(this),
                this._startColor = cc.color(255, 255, 255, 255),
                this._startColorVar = cc.color(0, 0, 0, 0),
                this._endColor = cc.color(255, 255, 255, 0),
                this._endColorVar = cc.color(0, 0, 0, 0),
                this._renderSpriteFrame = null
            },
            properties: f,
            statics: {
                DURATION_INFINITY: -1,
                START_SIZE_EQUAL_TO_END_SIZE: -1,
                START_RADIUS_EQUAL_TO_END_RADIUS: -1,
                EmitterMode: u,
                PositionType: _,
                _PNGReader: a,
                _TIFFReader: o
            },
            onFocusInEditor: !1,
            onLostFocusInEditor: !1,
            _startPreview: !1,
            _stopPreview: !1,
            _convertTextureToSpriteFrame: !1,
            __preload: function() {
                this._super(),
                this._custom && this.spriteFrame && !this._renderSpriteFrame ? this._applySpriteFrame(this.spriteFrame) : this._file && (this._custom ? !this._getTexture() && this._applyFile() : this._applyFile()),
                this.playOnLoad && this.resetSystem()
            },
            onDestroy: function() {
                this.autoRemoveOnFinish && (this.autoRemoveOnFinish = !1),
                this._buffer && (this._buffer.destroy(),
                this._buffer = null),
                this._simulator._uvFilled = 0,
                this._super()
            },
            lateUpdate: function(t) {
                this._simulator.finished || this._simulator.step(t)
            },
            addParticle: function() {},
            stopSystem: function() {
                this._stopped = !0,
                this._simulator.stop()
            },
            resetSystem: function() {
                this._stopped = !1,
                this._simulator.reset(),
                this.markForRender(!0)
            },
            isFull: function() {
                return this.particleCount >= this.totalParticles
            },
            setTextureWithRect: function(t, e) {
                t instanceof cc.Texture2D && (this.spriteFrame = new cc.SpriteFrame(t,e))
            },
            _applyFile: function() {
                var t = this._file;
                if (t) {
                    var e = this;
                    cc.assetManager.postLoadNative(t, (function(i) {
                        !i && t._nativeAsset ? e.isValid && (e._plistFile = t.nativeUrl,
                        e._custom || (e._spriteFrame !== t.spriteFrame && (e.spriteFrame = t.spriteFrame),
                        e._initWithDictionary(t._nativeAsset)),
                        e._spriteFrame ? !e._renderSpriteFrame && e._spriteFrame && e._applySpriteFrame(e.spriteFrame) : t.spriteFrame ? e.spriteFrame = t.spriteFrame : e._custom && e._initTextureWithDictionary(t._nativeAsset)) : cc.errorID(6029)
                    }
                    ))
                }
            },
            _initTextureWithDictionary: function(t) {
                var e, n = cc.path.changeBasename(this._plistFile, t.textureFileName || "");
                if (t.textureFileName)
                    l.loadImage(n, (function(e, i) {
                        e ? (t.textureFileName = void 0,
                        this._initTextureWithDictionary(t)) : (cc.assetManager.assets.add(n, i),
                        this.spriteFrame = new cc.SpriteFrame(i))
                    }
                    ), this);
                else if (t.textureImageData) {
                    var r = t.textureImageData;
                    if (!(r && r.length > 0))
                        return !1;
                    var h = cc.assetManager.assets.get(n);
                    if (!h) {
                        var c = s.unzipBase64AsArray(r, 1);
                        if (!c)
                            return cc.warnID(6030, this._file.name),
                            !1;
                        var u = (e = c).length > 8 && 137 === e[0] && 80 === e[1] && 78 === e[2] && 71 === e[3] && 13 === e[4] && 10 === e[5] && 26 === e[6] && 10 === e[7] ? i.ImageFormat.PNG : e.length > 2 && (73 === e[0] && 73 === e[1] || 77 === e[0] && 77 === e[1] || 255 === e[0] && 216 === e[1]) ? i.ImageFormat.TIFF : i.ImageFormat.UNKNOWN;
                        if (u !== i.ImageFormat.TIFF && u !== i.ImageFormat.PNG)
                            return cc.warnID(6031, this._file.name),
                            !1;
                        var _ = document.createElement("canvas");
                        u === i.ImageFormat.PNG ? new a(c).render(_) : o.parseTIFF(c, _),
                        h = l.cacheImage(n, _)
                    }
                    h || cc.warnID(6032, this._file.name),
                    this.spriteFrame = new cc.SpriteFrame(h)
                }
                return !0
            },
            _initWithDictionary: function(t) {
                this.totalParticles = parseInt(t.maxParticles || 0),
                this.life = parseFloat(t.particleLifespan || 0),
                this.lifeVar = parseFloat(t.particleLifespanVariance || 0);
                var e = t.emissionRate;
                this.emissionRate = e || Math.min(this.totalParticles / this.life, Number.MAX_VALUE),
                this.duration = parseFloat(t.duration || 0),
                this.srcBlendFactor = parseInt(t.blendFuncSource || i.SRC_ALPHA),
                this.dstBlendFactor = parseInt(t.blendFuncDestination || i.ONE_MINUS_SRC_ALPHA);
                var n = this._startColor;
                n.r = 255 * parseFloat(t.startColorRed || 0),
                n.g = 255 * parseFloat(t.startColorGreen || 0),
                n.b = 255 * parseFloat(t.startColorBlue || 0),
                n.a = 255 * parseFloat(t.startColorAlpha || 0);
                var r = this._startColorVar;
                r.r = 255 * parseFloat(t.startColorVarianceRed || 0),
                r.g = 255 * parseFloat(t.startColorVarianceGreen || 0),
                r.b = 255 * parseFloat(t.startColorVarianceBlue || 0),
                r.a = 255 * parseFloat(t.startColorVarianceAlpha || 0);
                var s = this._endColor;
                s.r = 255 * parseFloat(t.finishColorRed || 0),
                s.g = 255 * parseFloat(t.finishColorGreen || 0),
                s.b = 255 * parseFloat(t.finishColorBlue || 0),
                s.a = 255 * parseFloat(t.finishColorAlpha || 0);
                var a = this._endColorVar;
                if (a.r = 255 * parseFloat(t.finishColorVarianceRed || 0),
                a.g = 255 * parseFloat(t.finishColorVarianceGreen || 0),
                a.b = 255 * parseFloat(t.finishColorVarianceBlue || 0),
                a.a = 255 * parseFloat(t.finishColorVarianceAlpha || 0),
                this.startSize = parseFloat(t.startParticleSize || 0),
                this.startSizeVar = parseFloat(t.startParticleSizeVariance || 0),
                this.endSize = parseFloat(t.finishParticleSize || 0),
                this.endSizeVar = parseFloat(t.finishParticleSizeVariance || 0),
                this.positionType = parseFloat(void 0 !== t.positionType ? t.positionType : _.RELATIVE),
                this.sourcePos.x = 0,
                this.sourcePos.y = 0,
                this.posVar.x = parseFloat(t.sourcePositionVariancex || 0),
                this.posVar.y = parseFloat(t.sourcePositionVariancey || 0),
                this.angle = parseFloat(t.angle || 0),
                this.angleVar = parseFloat(t.angleVariance || 0),
                this.startSpin = parseFloat(t.rotationStart || 0),
                this.startSpinVar = parseFloat(t.rotationStartVariance || 0),
                this.endSpin = parseFloat(t.rotationEnd || 0),
                this.endSpinVar = parseFloat(t.rotationEndVariance || 0),
                this.emitterMode = parseInt(t.emitterType || u.GRAVITY),
                this.emitterMode === u.GRAVITY) {
                    this.gravity.x = parseFloat(t.gravityx || 0),
                    this.gravity.y = parseFloat(t.gravityy || 0),
                    this.speed = parseFloat(t.speed || 0),
                    this.speedVar = parseFloat(t.speedVariance || 0),
                    this.radialAccel = parseFloat(t.radialAcceleration || 0),
                    this.radialAccelVar = parseFloat(t.radialAccelVariance || 0),
                    this.tangentialAccel = parseFloat(t.tangentialAcceleration || 0),
                    this.tangentialAccelVar = parseFloat(t.tangentialAccelVariance || 0);
                    var o = t.rotationIsDir || "";
                    null !== o ? (o = o.toString().toLowerCase(),
                    this.rotationIsDir = "true" === o || "1" === o) : this.rotationIsDir = !1
                } else {
                    if (this.emitterMode !== u.RADIUS)
                        return cc.warnID(6009),
                        !1;
                    this.startRadius = parseFloat(t.maxRadius || 0),
                    this.startRadiusVar = parseFloat(t.maxRadiusVariance || 0),
                    this.endRadius = parseFloat(t.minRadius || 0),
                    this.endRadiusVar = parseFloat(t.minRadiusVariance || 0),
                    this.rotatePerS = parseFloat(t.rotatePerSecond || 0),
                    this.rotatePerSVar = parseFloat(t.rotatePerSecondVariance || 0)
                }
                return this._initTextureWithDictionary(t),
                !0
            },
            _validateRender: function() {
                var t = this._getTexture();
                t && t.loaded ? this._super() : this.disableRender()
            },
            _onTextureLoaded: function() {
                this._simulator.updateUVs(!0),
                this._syncAspect(),
                this._updateMaterial(),
                this.markForRender(!0)
            },
            _syncAspect: function() {
                var t = this._renderSpriteFrame._rect;
                this._aspectRatio = t.width / t.height
            },
            _applySpriteFrame: function() {
                this._renderSpriteFrame = this._renderSpriteFrame || this._spriteFrame,
                this._renderSpriteFrame && (this._renderSpriteFrame.textureLoaded() ? this._onTextureLoaded() : this._renderSpriteFrame.onTextureLoaded(this._onTextureLoaded, this))
            },
            _getTexture: function() {
                return this._renderSpriteFrame && this._renderSpriteFrame.getTexture() || this._texture
            },
            _updateMaterial: function() {
                var t = this.getMaterial(0);
                t && (t.define("CC_USE_MODEL", this._positionType !== _.FREE),
                t.setProperty("texture", this._getTexture()),
                c.prototype._updateMaterial.call(this))
            },
            _finishedSimulation: function() {
                this.resetSystem(),
                this.stopSystem(),
                this.disableRender(),
                this.autoRemoveOnFinish && this._stopped && this.node.destroy()
            }
        });
        cc.ParticleSystem = e.exports = d
    }
    ), {
        "../compression/ZipUtils": 22,
        "../core/assets/material/CCMaterial": 80,
        "../core/components/CCRenderComponent": 115,
        "../core/platform/CCMacro": 198,
        "../core/renderer/render-flow": 225,
        "../core/utils/blend-func": 261,
        "../core/utils/texture-util": 275,
        "./CCPNGReader": 296,
        "./CCParticleAsset": 297,
        "./CCTIFFReader": 299,
        "./particle-simulator": 301,
        "fire-url": void 0
    }],
    299: [(function(t, e) {
        "use strict";
        var i = t("../core/CCDebug")
          , n = {
            _littleEndian: !1,
            _tiffData: null,
            _fileDirectories: [],
            getUint8: function(t) {
                return this._tiffData[t]
            },
            getUint16: function(t) {
                return this._littleEndian ? this._tiffData[t + 1] << 8 | this._tiffData[t] : this._tiffData[t] << 8 | this._tiffData[t + 1]
            },
            getUint32: function(t) {
                var e = this._tiffData;
                return this._littleEndian ? e[t + 3] << 24 | e[t + 2] << 16 | e[t + 1] << 8 | e[t] : e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]
            },
            checkLittleEndian: function() {
                var t = this.getUint16(0);
                if (18761 === t)
                    this.littleEndian = !0;
                else {
                    if (19789 !== t)
                        throw console.log(t),
                        TypeError(i.getError(6019));
                    this.littleEndian = !1
                }
                return this.littleEndian
            },
            hasTowel: function() {
                if (42 !== this.getUint16(2))
                    throw RangeError(i.getError(6020));
                return !0
            },
            getFieldTypeName: function(t) {
                var e = this.fieldTypeNames;
                return t in e ? e[t] : null
            },
            getFieldTagName: function(t) {
                var e = this.fieldTagNames;
                return t in e ? e[t] : (cc.logID(6021, t),
                "Tag" + t)
            },
            getFieldTypeLength: function(t) {
                return -1 !== ["BYTE", "ASCII", "SBYTE", "UNDEFINED"].indexOf(t) ? 1 : -1 !== ["SHORT", "SSHORT"].indexOf(t) ? 2 : -1 !== ["LONG", "SLONG", "FLOAT"].indexOf(t) ? 4 : -1 !== ["RATIONAL", "SRATIONAL", "DOUBLE"].indexOf(t) ? 8 : null
            },
            getFieldValues: function(t, e, i, n) {
                var r = []
                  , s = this.getFieldTypeLength(e);
                if (s * i <= 4)
                    !1 === this.littleEndian ? r.push(n >>> 8 * (4 - s)) : r.push(n);
                else
                    for (var a = 0; a < i; a++) {
                        var o = s * a;
                        s >= 8 ? -1 !== ["RATIONAL", "SRATIONAL"].indexOf(e) ? (r.push(this.getUint32(n + o)),
                        r.push(this.getUint32(n + o + 4))) : cc.logID(8e3) : r.push(this.getBytes(s, n + o))
                    }
                return "ASCII" === e && r.forEach((function(t, e, i) {
                    i[e] = String.fromCharCode(t)
                }
                )),
                r
            },
            getBytes: function(t, e) {
                if (t <= 0)
                    cc.logID(8001);
                else {
                    if (t <= 1)
                        return this.getUint8(e);
                    if (t <= 2)
                        return this.getUint16(e);
                    if (t <= 3)
                        return this.getUint32(e) >>> 8;
                    if (t <= 4)
                        return this.getUint32(e);
                    cc.logID(8002)
                }
            },
            getBits: function(t, e, i) {
                i = i || 0;
                var n, r, s = e + Math.floor(i / 8), a = i + t, o = 32 - t;
                return a <= 0 ? cc.logID(6023) : a <= 8 ? (n = 24 + i,
                r = this.getUint8(s)) : a <= 16 ? (n = 16 + i,
                r = this.getUint16(s)) : a <= 32 ? (n = i,
                r = this.getUint32(s)) : cc.logID(6022),
                {
                    bits: r << n >>> o,
                    byteOffset: s + Math.floor(a / 8),
                    bitOffset: a % 8
                }
            },
            parseFileDirectory: function(t) {
                for (var e = this.getUint16(t), i = [], n = t + 2, r = 0; r < e; n += 12,
                r++) {
                    var s = this.getUint16(n)
                      , a = this.getUint16(n + 2)
                      , o = this.getUint32(n + 4)
                      , l = this.getUint32(n + 8)
                      , h = this.getFieldTagName(s)
                      , c = this.getFieldTypeName(a)
                      , u = this.getFieldValues(h, c, o, l);
                    i[h] = {
                        type: c,
                        values: u
                    }
                }
                this._fileDirectories.push(i);
                var _ = this.getUint32(n);
                0 !== _ && this.parseFileDirectory(_)
            },
            clampColorSample: function(t, e) {
                var i = Math.pow(2, 8 - e);
                return Math.floor(t * i + (i - 1))
            },
            parseTIFF: function(t, e) {
                if (e = e || document.createElement("canvas"),
                this._tiffData = t,
                this.canvas = e,
                this.checkLittleEndian(),
                this.hasTowel()) {
                    var n = this.getUint32(4);
                    this._fileDirectories.length = 0,
                    this.parseFileDirectory(n);
                    var r = this._fileDirectories[0]
                      , s = r.ImageWidth.values[0]
                      , a = r.ImageLength.values[0];
                    this.canvas.width = s,
                    this.canvas.height = a;
                    var o = []
                      , l = r.Compression ? r.Compression.values[0] : 1
                      , h = r.SamplesPerPixel.values[0]
                      , c = []
                      , u = 0
                      , _ = !1;
                    if (r.BitsPerSample.values.forEach((function(t, e) {
                        c[e] = {
                            bitsPerSample: t,
                            hasBytesPerSample: !1,
                            bytesPerSample: void 0
                        },
                        t % 8 == 0 && (c[e].hasBytesPerSample = !0,
                        c[e].bytesPerSample = t / 8),
                        u += t
                    }
                    ), this),
                    u % 8 == 0) {
                        _ = !0;
                        var f = u / 8
                    }
                    var d = r.StripOffsets.values
                      , p = d.length;
                    if (r.StripByteCounts)
                        var m = r.StripByteCounts.values;
                    else {
                        if (cc.logID(8003),
                        1 !== p)
                            throw Error(i.getError(6024));
                        m = [Math.ceil(s * a * u / 8)]
                    }
                    for (var y = 0; y < p; y++) {
                        var v = d[y];
                        o[y] = [];
                        for (var g = m[y], A = 0, x = 0, b = 1, C = !0, T = [], S = 0, w = 0, E = 0; A < g; A += b)
                            switch (l) {
                            case 1:
                                var M = 0;
                                for (T = []; M < h; M++) {
                                    if (!c[M].hasBytesPerSample) {
                                        var D = this.getBits(c[M].bitsPerSample, v + A, x);
                                        throw T.push(D.bits),
                                        A = D.byteOffset - v,
                                        x = D.bitOffset,
                                        RangeError(i.getError(6025))
                                    }
                                    var B = c[M].bytesPerSample * M;
                                    T.push(this.getBytes(c[M].bytesPerSample, v + A + B))
                                }
                                if (o[y].push(T),
                                !_)
                                    throw b = 0,
                                    RangeError(i.getError(6026));
                                b = f;
                                break;
                            case 2:
                            case 3:
                            case 4:
                            case 5:
                            case 6:
                            case 7:
                                break;
                            case 32773:
                                if (C) {
                                    C = !1;
                                    var I = 1
                                      , P = 1
                                      , R = this.getInt8(v + A);
                                    R >= 0 && R <= 127 ? I = R + 1 : R >= -127 && R <= -1 ? P = 1 - R : C = !0
                                } else {
                                    var O = this.getUint8(v + A);
                                    for (M = 0; M < P; M++) {
                                        if (!c[w].hasBytesPerSample)
                                            throw RangeError(i.getError(6025));
                                        E = E << 8 * S | O,
                                        ++S === c[w].bytesPerSample && (T.push(E),
                                        E = S = 0,
                                        w++),
                                        w === h && (o[y].push(T),
                                        T = [],
                                        w = 0)
                                    }
                                    0 == --I && (C = !0)
                                }
                                b = 1
                            }
                    }
                    if (e.getContext) {
                        var L = this.canvas.getContext("2d");
                        L.fillStyle = "rgba(255, 255, 255, 0)";
                        var F = r.RowsPerStrip ? r.RowsPerStrip.values[0] : a
                          , V = o.length
                          , N = a % F
                          , k = 0 === N ? F : N
                          , G = F
                          , U = 0
                          , z = r.PhotometricInterpretation.values[0]
                          , H = []
                          , W = 0;
                        if (r.ExtraSamples && (W = (H = r.ExtraSamples.values).length),
                        r.ColorMap)
                            var j = r.ColorMap.values
                              , X = Math.pow(2, c[0].bitsPerSample);
                        for (y = 0; y < V; y++) {
                            y + 1 === V && (G = k);
                            for (var Y = o[y].length, q = U * y, J = 0, Z = 0; Z < Y; J++)
                                for (var K = 0; K < s; K++,
                                Z++) {
                                    var Q = o[y][Z]
                                      , $ = 0
                                      , tt = 0
                                      , et = 0
                                      , it = 1;
                                    if (W > 0)
                                        for (var nt = 0; nt < W; nt++)
                                            if (1 === H[nt] || 2 === H[nt]) {
                                                it = Q[3 + nt] / 256;
                                                break
                                            }
                                    switch (z) {
                                    case 0:
                                        if (c[0].hasBytesPerSample)
                                            var rt = Math.pow(16, 2 * c[0].bytesPerSample);
                                        Q.forEach((function(t, e, i) {
                                            i[e] = rt - t
                                        }
                                        ));
                                    case 1:
                                        $ = tt = et = this.clampColorSample(Q[0], c[0].bitsPerSample);
                                        break;
                                    case 2:
                                        $ = this.clampColorSample(Q[0], c[0].bitsPerSample),
                                        tt = this.clampColorSample(Q[1], c[1].bitsPerSample),
                                        et = this.clampColorSample(Q[2], c[2].bitsPerSample);
                                        break;
                                    case 3:
                                        if (void 0 === j)
                                            throw Error(i.getError(6027));
                                        var st = Q[0];
                                        $ = this.clampColorSample(j[st], 16),
                                        tt = this.clampColorSample(j[X + st], 16),
                                        et = this.clampColorSample(j[2 * X + st], 16);
                                        break;
                                    default:
                                        throw RangeError(i.getError(6028, z))
                                    }
                                    L.fillStyle = "rgba(" + $ + ", " + tt + ", " + et + ", " + it + ")",
                                    L.fillRect(K, q + J, 1, 1)
                                }
                            U = G
                        }
                    }
                    return this.canvas
                }
            },
            fieldTagNames: {
                315: "Artist",
                258: "BitsPerSample",
                265: "CellLength",
                264: "CellWidth",
                320: "ColorMap",
                259: "Compression",
                33432: "Copyright",
                306: "DateTime",
                338: "ExtraSamples",
                266: "FillOrder",
                289: "FreeByteCounts",
                288: "FreeOffsets",
                291: "GrayResponseCurve",
                290: "GrayResponseUnit",
                316: "HostComputer",
                270: "ImageDescription",
                257: "ImageLength",
                256: "ImageWidth",
                271: "Make",
                281: "MaxSampleValue",
                280: "MinSampleValue",
                272: "Model",
                254: "NewSubfileType",
                274: "Orientation",
                262: "PhotometricInterpretation",
                284: "PlanarConfiguration",
                296: "ResolutionUnit",
                278: "RowsPerStrip",
                277: "SamplesPerPixel",
                305: "Software",
                279: "StripByteCounts",
                273: "StripOffsets",
                255: "SubfileType",
                263: "Threshholding",
                282: "XResolution",
                283: "YResolution",
                326: "BadFaxLines",
                327: "CleanFaxData",
                343: "ClipPath",
                328: "ConsecutiveBadFaxLines",
                433: "Decode",
                434: "DefaultImageColor",
                269: "DocumentName",
                336: "DotRange",
                321: "HalftoneHints",
                346: "Indexed",
                347: "JPEGTables",
                285: "PageName",
                297: "PageNumber",
                317: "Predictor",
                319: "PrimaryChromaticities",
                532: "ReferenceBlackWhite",
                339: "SampleFormat",
                559: "StripRowCounts",
                330: "SubIFDs",
                292: "T4Options",
                293: "T6Options",
                325: "TileByteCounts",
                323: "TileLength",
                324: "TileOffsets",
                322: "TileWidth",
                301: "TransferFunction",
                318: "WhitePoint",
                344: "XClipPathUnits",
                286: "XPosition",
                529: "YCbCrCoefficients",
                531: "YCbCrPositioning",
                530: "YCbCrSubSampling",
                345: "YClipPathUnits",
                287: "YPosition",
                37378: "ApertureValue",
                40961: "ColorSpace",
                36868: "DateTimeDigitized",
                36867: "DateTimeOriginal",
                34665: "Exif IFD",
                36864: "ExifVersion",
                33434: "ExposureTime",
                41728: "FileSource",
                37385: "Flash",
                40960: "FlashpixVersion",
                33437: "FNumber",
                42016: "ImageUniqueID",
                37384: "LightSource",
                37500: "MakerNote",
                37377: "ShutterSpeedValue",
                37510: "UserComment",
                33723: "IPTC",
                34675: "ICC Profile",
                700: "XMP",
                42112: "GDAL_METADATA",
                42113: "GDAL_NODATA",
                34377: "Photoshop"
            },
            fieldTypeNames: {
                1: "BYTE",
                2: "ASCII",
                3: "SHORT",
                4: "LONG",
                5: "RATIONAL",
                6: "SBYTE",
                7: "UNDEFINED",
                8: "SSHORT",
                9: "SLONG",
                10: "SRATIONAL",
                11: "FLOAT",
                12: "DOUBLE"
            }
        };
        e.exports = n
    }
    ), {
        "../core/CCDebug": 26
    }],
    300: [(function(t) {
        "use strict";
        t("./CCParticleAsset"),
        t("./CCParticleSystem"),
        t("./particle-simulator"),
        t("./particle-system-assembler")
    }
    ), {
        "./CCParticleAsset": 297,
        "./CCParticleSystem": 298,
        "./particle-simulator": 301,
        "./particle-system-assembler": 302
    }],
    301: [(function(t, e) {
        "use strict";
        var i = t("../core/platform/js")
          , n = t("../core/utils/misc")
          , r = cc.v2(0, 0)
          , s = cc.v2()
          , a = cc.v2()
          , o = cc.v2()
          , l = cc.v2()
          , h = function() {
            this.pos = cc.v2(0, 0),
            this.startPos = cc.v2(0, 0),
            this.color = cc.color(0, 0, 0, 255),
            this.deltaColor = {
                r: 0,
                g: 0,
                b: 0,
                a: 255
            },
            this.preciseColor = {
                r: 0,
                g: 0,
                b: 0,
                a: 255
            },
            this.size = 0,
            this.deltaSize = 0,
            this.rotation = 0,
            this.deltaRotation = 0,
            this.timeToLive = 0,
            this.drawPos = cc.v2(0, 0),
            this.aspectRatio = 1,
            this.dir = cc.v2(0, 0),
            this.radialAccel = 0,
            this.tangentialAccel = 0,
            this.angle = 0,
            this.degreesPerSecond = 0,
            this.radius = 0,
            this.deltaRadius = 0
        }
          , c = new i.Pool(function(t) {
            t.pos.set(r),
            t.startPos.set(r),
            t.color._val = 4278190080,
            t.deltaColor.r = t.deltaColor.g = t.deltaColor.b = 0,
            t.deltaColor.a = 255,
            t.size = 0,
            t.deltaSize = 0,
            t.rotation = 0,
            t.deltaRotation = 0,
            t.timeToLive = 0,
            t.drawPos.set(r),
            t.aspectRatio = 1,
            t.dir.set(r),
            t.radialAccel = 0,
            t.tangentialAccel = 0,
            t.angle = 0,
            t.degreesPerSecond = 0,
            t.radius = 0,
            t.deltaRadius = 0
        }
        ,1024);
        c.get = function() {
            return this._get() || new h
        }
        ;
        var u = function(t) {
            this.sys = t,
            this.particles = [],
            this.active = !1,
            this.readyToPlay = !0,
            this.finished = !1,
            this.elapsed = 0,
            this.emitCounter = 0,
            this._uvFilled = 0,
            this._worldRotation = 0
        };
        function _(t) {
            for (var e = 0, i = t; i; )
                e += i.angle,
                i = i.parent;
            return e
        }
        u.prototype.stop = function() {
            this.active = !1,
            this.readyToPlay = !1,
            this.elapsed = this.sys.duration,
            this.emitCounter = 0
        }
        ,
        u.prototype.reset = function() {
            this.active = !0,
            this.readyToPlay = !0,
            this.elapsed = 0,
            this.emitCounter = 0,
            this.finished = !1;
            for (var t = this.particles, e = 0; e < t.length; ++e)
                c.put(t[e]);
            t.length = 0
        }
        ,
        u.prototype.emitParticle = function(t) {
            var e = this.sys
              , i = n.clampf
              , r = c.get();
            this.particles.push(r),
            r.timeToLive = e.life + e.lifeVar * (Math.random() - .5) * 2;
            var s, a, o, l, h = r.timeToLive = Math.max(0, r.timeToLive);
            r.pos.x = e.sourcePos.x + e.posVar.x * (Math.random() - .5) * 2,
            r.pos.y = e.sourcePos.y + e.posVar.y * (Math.random() - .5) * 2;
            var u = e._startColor
              , _ = e._startColorVar
              , f = e._endColor
              , d = e._endColorVar;
            r.color.r = s = i(u.r + _.r * (Math.random() - .5) * 2, 0, 255),
            r.color.g = a = i(u.g + _.g * (Math.random() - .5) * 2, 0, 255),
            r.color.b = o = i(u.b + _.b * (Math.random() - .5) * 2, 0, 255),
            r.color.a = l = i(u.a + _.a * (Math.random() - .5) * 2, 0, 255);
            var p = r.color
              , m = r.preciseColor;
            m.r = p.r,
            m.g = p.g,
            m.b = p.b,
            m.a = p.a,
            r.deltaColor.r = (i(f.r + d.r * (Math.random() - .5) * 2, 0, 255) - s) / h,
            r.deltaColor.g = (i(f.g + d.g * (Math.random() - .5) * 2, 0, 255) - a) / h,
            r.deltaColor.b = (i(f.b + d.b * (Math.random() - .5) * 2, 0, 255) - o) / h,
            r.deltaColor.a = (i(f.a + d.a * (Math.random() - .5) * 2, 0, 255) - l) / h;
            var y = e.startSize + e.startSizeVar * (Math.random() - .5) * 2;
            if (y = Math.max(0, y),
            r.size = y,
            e.endSize === cc.ParticleSystem.START_SIZE_EQUAL_TO_END_SIZE)
                r.deltaSize = 0;
            else {
                var v = e.endSize + e.endSizeVar * (Math.random() - .5) * 2;
                v = Math.max(0, v),
                r.deltaSize = (v - y) / h
            }
            var g = e.startSpin + e.startSpinVar * (Math.random() - .5) * 2
              , A = e.endSpin + e.endSpinVar * (Math.random() - .5) * 2;
            r.rotation = g,
            r.deltaRotation = (A - g) / h,
            r.startPos.x = t.x,
            r.startPos.y = t.y,
            r.aspectRatio = e._aspectRatio || 1;
            var x = n.degreesToRadians(e.angle + this._worldRotation + e.angleVar * (Math.random() - .5) * 2);
            if (e.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) {
                var b = e.speed + e.speedVar * (Math.random() - .5) * 2;
                r.dir.x = Math.cos(x),
                r.dir.y = Math.sin(x),
                r.dir.mulSelf(b),
                r.radialAccel = e.radialAccel + e.radialAccelVar * (Math.random() - .5) * 2,
                r.tangentialAccel = e.tangentialAccel + e.tangentialAccelVar * (Math.random() - .5) * 2,
                e.rotationIsDir && (r.rotation = -n.radiansToDegrees(Math.atan2(r.dir.y, r.dir.x)))
            } else {
                var C = e.startRadius + e.startRadiusVar * (Math.random() - .5) * 2
                  , T = e.endRadius + e.endRadiusVar * (Math.random() - .5) * 2;
                r.radius = C,
                r.deltaRadius = e.endRadius === cc.ParticleSystem.START_RADIUS_EQUAL_TO_END_RADIUS ? 0 : (T - C) / h,
                r.angle = x,
                r.degreesPerSecond = n.degreesToRadians(e.rotatePerS + e.rotatePerSVar * (Math.random() - .5) * 2)
            }
        }
        ,
        u.prototype.updateUVs = function(t) {
            var e = this.sys._assembler;
            if (e) {
                var i = e.getBuffer();
                if (i && this.sys._renderSpriteFrame) {
                    for (var n = 4 * e._vfmt._bytes / 4, r = i._vData, s = this.sys._renderSpriteFrame.uv, a = t ? 0 : this._uvFilled, o = this.particles.length, l = a; l < o; l++) {
                        var h = l * n;
                        r[h + 2] = s[0],
                        r[h + 3] = s[1],
                        r[h + 7] = s[2],
                        r[h + 8] = s[3],
                        r[h + 12] = s[4],
                        r[h + 13] = s[5],
                        r[h + 17] = s[6],
                        r[h + 18] = s[7]
                    }
                    this._uvFilled = o
                }
            }
        }
        ,
        u.prototype.updateParticleBuffer = function(t, e, i, r) {
            var s = i._vData
              , a = i._uintVData
              , o = e.x
              , l = e.y
              , h = t.size
              , c = h
              , u = t.aspectRatio;
            u > 1 ? c = h / u : h = c * u;
            var _ = h / 2
              , f = c / 2;
            if (t.rotation) {
                var d = -_
                  , p = -f
                  , m = _
                  , y = f
                  , v = -n.degreesToRadians(t.rotation)
                  , g = Math.cos(v)
                  , A = Math.sin(v);
                s[r] = d * g - p * A + o,
                s[r + 1] = d * A + p * g + l,
                s[r + 5] = m * g - p * A + o,
                s[r + 6] = m * A + p * g + l,
                s[r + 10] = d * g - y * A + o,
                s[r + 11] = d * A + y * g + l,
                s[r + 15] = m * g - y * A + o,
                s[r + 16] = m * A + y * g + l
            } else
                s[r] = o - _,
                s[r + 1] = l - f,
                s[r + 5] = o + _,
                s[r + 6] = l - f,
                s[r + 10] = o - _,
                s[r + 11] = l + f,
                s[r + 15] = o + _,
                s[r + 16] = l + f;
            a[r + 4] = t.color._val,
            a[r + 9] = t.color._val,
            a[r + 14] = t.color._val,
            a[r + 19] = t.color._val
        }
        ,
        u.prototype.step = function(t) {
            t = t > cc.director._maxParticleDeltaTime ? cc.director._maxParticleDeltaTime : t;
            var e = this.sys
              , i = e.node
              , n = this.particles
              , r = 4 * this.sys._assembler._vfmt._bytes / 4
              , h = cc.ParticleSystem.PositionType;
            if (i._updateWorldMatrix(),
            e.positionType === h.FREE) {
                this._worldRotation = _(i);
                var u = i._worldMatrix.m;
                s.x = u[12],
                s.y = u[13]
            } else
                e.positionType === h.RELATIVE ? (this._worldRotation = i.angle,
                s.x = i.x,
                s.y = i.y) : this._worldRotation = 0;
            if (this.active && e.emissionRate) {
                var f = 1 / e.emissionRate;
                for (n.length < e.totalParticles && (this.emitCounter += t); n.length < e.totalParticles && this.emitCounter > f; )
                    this.emitParticle(s),
                    this.emitCounter -= f;
                this.elapsed += t,
                -1 !== e.duration && e.duration < this.elapsed && e.stopSystem()
            }
            var d = e._assembler.getBuffer()
              , p = n.length;
            d.reset(),
            d.request(4 * p, 6 * p),
            p > this._uvFilled && this.updateUVs();
            for (var m = 0; m < n.length; ) {
                a.x = a.y = o.x = o.y = l.x = l.y = 0;
                var y = n[m];
                if (y.timeToLive -= t,
                y.timeToLive > 0) {
                    if (e.emitterMode === cc.ParticleSystem.EmitterMode.GRAVITY) {
                        var v = l
                          , g = a
                          , A = o;
                        (y.pos.x || y.pos.y) && (g.set(y.pos),
                        g.normalizeSelf()),
                        A.set(g),
                        g.mulSelf(y.radialAccel);
                        var x = A.x;
                        A.x = -A.y,
                        A.y = x,
                        A.mulSelf(y.tangentialAccel),
                        v.set(g),
                        v.addSelf(A),
                        v.addSelf(e.gravity),
                        v.mulSelf(t),
                        y.dir.addSelf(v),
                        v.set(y.dir),
                        v.mulSelf(t),
                        y.pos.addSelf(v)
                    } else
                        y.angle += y.degreesPerSecond * t,
                        y.radius += y.deltaRadius * t,
                        y.pos.x = -Math.cos(y.angle) * y.radius,
                        y.pos.y = -Math.sin(y.angle) * y.radius;
                    var b = y.preciseColor
                      , C = y.deltaColor;
                    b.r += C.r * t,
                    b.g += C.g * t,
                    b.b += C.b * t,
                    b.a += C.a * t;
                    var T = y.color;
                    T.r = b.r,
                    T.g = b.g,
                    T.b = b.b,
                    T.a = b.a,
                    y.size += y.deltaSize * t,
                    y.size < 0 && (y.size = 0),
                    y.rotation += y.deltaRotation * t;
                    var S = a;
                    S.set(y.pos),
                    e.positionType !== h.GROUPED && S.addSelf(y.startPos);
                    var w = r * m;
                    this.updateParticleBuffer(y, S, d, w),
                    ++m
                } else {
                    var E = n[m];
                    m !== n.length - 1 && (n[m] = n[n.length - 1]),
                    c.put(E),
                    n.length--
                }
            }
            e._assembler._ia._count = 6 * n.length,
            n.length > 0 ? d.uploadData() : this.active || this.readyToPlay || (this.finished = !0,
            e._finishedSimulation())
        }
        ,
        e.exports = u
    }
    ), {
        "../core/platform/js": 214,
        "../core/utils/misc": 267
    }],
    302: [(function(t, e) {
        "use strict";
        var i = r(t("../core/renderer/assembler"))
          , n = r(t("../renderer/core/input-assembler"));
        function r(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a = t("./CCParticleSystem")
          , o = t("../core/renderer/")
          , l = t("../core/renderer/webgl/quad-buffer")
          , h = t("../core/renderer/webgl/vertex-format").vfmtPosUvColor
          , c = (function(t) {
            var e, i;
            function r(e) {
                var i;
                return (i = t.call(this, e) || this)._buffer = null,
                i._ia = null,
                i._vfmt = h,
                i
            }
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var a = r.prototype;
            return a.getBuffer = function() {
                return this._buffer || (this._buffer = new l(o._handle,h),
                this._ia = new n.default,
                this._ia._vertexBuffer = this._buffer._vb,
                this._ia._indexBuffer = this._buffer._ib,
                this._ia._start = 0,
                this._ia._count = 0),
                this._buffer
            }
            ,
            a.fillBuffers = function(t, e) {
                if (this._ia) {
                    var i = cc.ParticleSystem.PositionType;
                    t.positionType === i.RELATIVE ? e.node = t.node.parent : e.node = t.node,
                    e.material = t._materials[0],
                    e._flushIA(this._ia)
                }
            }
            ,
            r
        }
        )(i.default);
        i.default.register(a, c),
        e.exports = c
    }
    ), {
        "../core/renderer/": 224,
        "../core/renderer/assembler": 221,
        "../core/renderer/webgl/quad-buffer": 253,
        "../core/renderer/webgl/vertex-format": 256,
        "../renderer/core/input-assembler": 305,
        "./CCParticleSystem": 298
    }],
    303: [(function(t, e) {
        "use strict";
        var i, n, r, s, a, o, l, h, c, u, _, f, d, p, m, y, v, g, A, x, b, C, T, S, w, E, M, D, B, I, P, R, O, L, F, V, N, k, G, U, z, H;
        (function(t) {
            t[t.COMPRESSED_RGB_S3TC_DXT1_EXT = 33776] = "COMPRESSED_RGB_S3TC_DXT1_EXT",
            t[t.COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777] = "COMPRESSED_RGBA_S3TC_DXT1_EXT",
            t[t.COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778] = "COMPRESSED_RGBA_S3TC_DXT3_EXT",
            t[t.COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779] = "COMPRESSED_RGBA_S3TC_DXT5_EXT",
            t[t.COMPRESSED_SRGB_S3TC_DXT1_EXT = 35916] = "COMPRESSED_SRGB_S3TC_DXT1_EXT",
            t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 35917] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",
            t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 35918] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",
            t[t.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 35919] = "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",
            t[t.COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 35840] = "COMPRESSED_RGB_PVRTC_4BPPV1_IMG",
            t[t.COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 35841] = "COMPRESSED_RGB_PVRTC_2BPPV1_IMG",
            t[t.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 35842] = "COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",
            t[t.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 35843] = "COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",
            t[t.COMPRESSED_RGB_ETC1_WEBGL = 36196] = "COMPRESSED_RGB_ETC1_WEBGL"
        }
        )(i || (i = {})),
        (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN",
            t[t.BUFFER = 1] = "BUFFER",
            t[t.TEXTURE = 2] = "TEXTURE",
            t[t.TEXTURE_VIEW = 3] = "TEXTURE_VIEW",
            t[t.RENDER_PASS = 4] = "RENDER_PASS",
            t[t.FRAMEBUFFER = 5] = "FRAMEBUFFER",
            t[t.SAMPLER = 6] = "SAMPLER",
            t[t.SHADER = 7] = "SHADER",
            t[t.PIPELINE_LAYOUT = 8] = "PIPELINE_LAYOUT",
            t[t.PIPELINE_STATE = 9] = "PIPELINE_STATE",
            t[t.BINDING_LAYOUT = 10] = "BINDING_LAYOUT",
            t[t.INPUT_ASSEMBLER = 11] = "INPUT_ASSEMBLER",
            t[t.COMMAND_ALLOCATOR = 12] = "COMMAND_ALLOCATOR",
            t[t.COMMAND_BUFFER = 13] = "COMMAND_BUFFER",
            t[t.QUEUE = 14] = "QUEUE",
            t[t.WINDOW = 15] = "WINDOW"
        }
        )(n || (n = {})),
        (function(t) {
            t[t.UNREADY = 0] = "UNREADY",
            t[t.FAILED = 1] = "FAILED",
            t[t.SUCCESS = 2] = "SUCCESS"
        }
        )(r || (r = {})),
        (function() {
            function t(t) {
                this._gfxType = n.UNKNOWN,
                this._status = r.UNREADY,
                this._gfxType = t
            }
            Object.defineProperty(t.prototype, "gfxType", {
                get: function() {
                    return this._gfxType
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(t.prototype, "status", {
                get: function() {
                    return this._status
                },
                enumerable: !0,
                configurable: !0
            })
        }
        )(),
        (function(t) {
            t.ATTR_POSITION = "a_position",
            t.ATTR_NORMAL = "a_normal",
            t.ATTR_TANGENT = "a_tangent",
            t.ATTR_BITANGENT = "a_bitangent",
            t.ATTR_WEIGHTS = "a_weights",
            t.ATTR_JOINTS = "a_joints",
            t.ATTR_COLOR = "a_color",
            t.ATTR_COLOR1 = "a_color1",
            t.ATTR_COLOR2 = "a_color2",
            t.ATTR_TEX_COORD = "a_texCoord",
            t.ATTR_TEX_COORD1 = "a_texCoord1",
            t.ATTR_TEX_COORD2 = "a_texCoord2",
            t.ATTR_TEX_COORD3 = "a_texCoord3",
            t.ATTR_TEX_COORD4 = "a_texCoord4",
            t.ATTR_TEX_COORD5 = "a_texCoord5",
            t.ATTR_TEX_COORD6 = "a_texCoord6",
            t.ATTR_TEX_COORD7 = "a_texCoord7",
            t.ATTR_TEX_COORD8 = "a_texCoord8"
        }
        )(s || (s = {})),
        (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN",
            t[t.BOOL = 1] = "BOOL",
            t[t.BOOL2 = 2] = "BOOL2",
            t[t.BOOL3 = 3] = "BOOL3",
            t[t.BOOL4 = 4] = "BOOL4",
            t[t.INT = 5] = "INT",
            t[t.INT2 = 6] = "INT2",
            t[t.INT3 = 7] = "INT3",
            t[t.INT4 = 8] = "INT4",
            t[t.UINT = 9] = "UINT",
            t[t.UINT2 = 10] = "UINT2",
            t[t.UINT3 = 11] = "UINT3",
            t[t.UINT4 = 12] = "UINT4",
            t[t.FLOAT = 13] = "FLOAT",
            t[t.FLOAT2 = 14] = "FLOAT2",
            t[t.FLOAT3 = 15] = "FLOAT3",
            t[t.FLOAT4 = 16] = "FLOAT4",
            t[t.COLOR4 = 17] = "COLOR4",
            t[t.MAT2 = 18] = "MAT2",
            t[t.MAT2X3 = 19] = "MAT2X3",
            t[t.MAT2X4 = 20] = "MAT2X4",
            t[t.MAT3X2 = 21] = "MAT3X2",
            t[t.MAT3 = 22] = "MAT3",
            t[t.MAT3X4 = 23] = "MAT3X4",
            t[t.MAT4X2 = 24] = "MAT4X2",
            t[t.MAT4X3 = 25] = "MAT4X3",
            t[t.MAT4 = 26] = "MAT4",
            t[t.SAMPLER1D = 27] = "SAMPLER1D",
            t[t.SAMPLER1D_ARRAY = 28] = "SAMPLER1D_ARRAY",
            t[t.SAMPLER2D = 29] = "SAMPLER2D",
            t[t.SAMPLER2D_ARRAY = 30] = "SAMPLER2D_ARRAY",
            t[t.SAMPLER3D = 31] = "SAMPLER3D",
            t[t.SAMPLER_CUBE = 32] = "SAMPLER_CUBE",
            t[t.COUNT = 33] = "COUNT"
        }
        )(a || (a = {})),
        (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN",
            t[t.A8 = 1] = "A8",
            t[t.L8 = 2] = "L8",
            t[t.LA8 = 3] = "LA8",
            t[t.R8 = 4] = "R8",
            t[t.R8SN = 5] = "R8SN",
            t[t.R8UI = 6] = "R8UI",
            t[t.R8I = 7] = "R8I",
            t[t.R16F = 8] = "R16F",
            t[t.R16UI = 9] = "R16UI",
            t[t.R16I = 10] = "R16I",
            t[t.R32F = 11] = "R32F",
            t[t.R32UI = 12] = "R32UI",
            t[t.R32I = 13] = "R32I",
            t[t.RG8 = 14] = "RG8",
            t[t.RG8SN = 15] = "RG8SN",
            t[t.RG8UI = 16] = "RG8UI",
            t[t.RG8I = 17] = "RG8I",
            t[t.RG16F = 18] = "RG16F",
            t[t.RG16UI = 19] = "RG16UI",
            t[t.RG16I = 20] = "RG16I",
            t[t.RG32F = 21] = "RG32F",
            t[t.RG32UI = 22] = "RG32UI",
            t[t.RG32I = 23] = "RG32I",
            t[t.RGB8 = 24] = "RGB8",
            t[t.SRGB8 = 25] = "SRGB8",
            t[t.RGB8SN = 26] = "RGB8SN",
            t[t.RGB8UI = 27] = "RGB8UI",
            t[t.RGB8I = 28] = "RGB8I",
            t[t.RGB16F = 29] = "RGB16F",
            t[t.RGB16UI = 30] = "RGB16UI",
            t[t.RGB16I = 31] = "RGB16I",
            t[t.RGB32F = 32] = "RGB32F",
            t[t.RGB32UI = 33] = "RGB32UI",
            t[t.RGB32I = 34] = "RGB32I",
            t[t.RGBA8 = 35] = "RGBA8",
            t[t.SRGB8_A8 = 36] = "SRGB8_A8",
            t[t.RGBA8SN = 37] = "RGBA8SN",
            t[t.RGBA8UI = 38] = "RGBA8UI",
            t[t.RGBA8I = 39] = "RGBA8I",
            t[t.RGBA16F = 40] = "RGBA16F",
            t[t.RGBA16UI = 41] = "RGBA16UI",
            t[t.RGBA16I = 42] = "RGBA16I",
            t[t.RGBA32F = 43] = "RGBA32F",
            t[t.RGBA32UI = 44] = "RGBA32UI",
            t[t.RGBA32I = 45] = "RGBA32I",
            t[t.R5G6B5 = 46] = "R5G6B5",
            t[t.R11G11B10F = 47] = "R11G11B10F",
            t[t.RGB5A1 = 48] = "RGB5A1",
            t[t.RGBA4 = 49] = "RGBA4",
            t[t.RGB10A2 = 50] = "RGB10A2",
            t[t.RGB10A2UI = 51] = "RGB10A2UI",
            t[t.RGB9E5 = 52] = "RGB9E5",
            t[t.D16 = 53] = "D16",
            t[t.D16S8 = 54] = "D16S8",
            t[t.D24 = 55] = "D24",
            t[t.D24S8 = 56] = "D24S8",
            t[t.D32F = 57] = "D32F",
            t[t.D32F_S8 = 58] = "D32F_S8",
            t[t.BC1 = 59] = "BC1",
            t[t.BC1_ALPHA = 60] = "BC1_ALPHA",
            t[t.BC1_SRGB = 61] = "BC1_SRGB",
            t[t.BC1_SRGB_ALPHA = 62] = "BC1_SRGB_ALPHA",
            t[t.BC2 = 63] = "BC2",
            t[t.BC2_SRGB = 64] = "BC2_SRGB",
            t[t.BC3 = 65] = "BC3",
            t[t.BC3_SRGB = 66] = "BC3_SRGB",
            t[t.BC4 = 67] = "BC4",
            t[t.BC4_SNORM = 68] = "BC4_SNORM",
            t[t.BC5 = 69] = "BC5",
            t[t.BC5_SNORM = 70] = "BC5_SNORM",
            t[t.BC6H_UF16 = 71] = "BC6H_UF16",
            t[t.BC6H_SF16 = 72] = "BC6H_SF16",
            t[t.BC7 = 73] = "BC7",
            t[t.BC7_SRGB = 74] = "BC7_SRGB",
            t[t.ETC_RGB8 = 75] = "ETC_RGB8",
            t[t.ETC2_RGB8 = 76] = "ETC2_RGB8",
            t[t.ETC2_SRGB8 = 77] = "ETC2_SRGB8",
            t[t.ETC2_RGB8_A1 = 78] = "ETC2_RGB8_A1",
            t[t.ETC2_SRGB8_A1 = 79] = "ETC2_SRGB8_A1",
            t[t.ETC2_RGBA8 = 80] = "ETC2_RGBA8",
            t[t.ETC2_SRGB8_A8 = 81] = "ETC2_SRGB8_A8",
            t[t.EAC_R11 = 82] = "EAC_R11",
            t[t.EAC_R11SN = 83] = "EAC_R11SN",
            t[t.EAC_RG11 = 84] = "EAC_RG11",
            t[t.EAC_RG11SN = 85] = "EAC_RG11SN",
            t[t.PVRTC_RGB2 = 86] = "PVRTC_RGB2",
            t[t.PVRTC_RGBA2 = 87] = "PVRTC_RGBA2",
            t[t.PVRTC_RGB4 = 88] = "PVRTC_RGB4",
            t[t.PVRTC_RGBA4 = 89] = "PVRTC_RGBA4",
            t[t.PVRTC2_2BPP = 90] = "PVRTC2_2BPP",
            t[t.PVRTC2_4BPP = 91] = "PVRTC2_4BPP"
        }
        )(o || (o = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.TRANSFER_SRC = 1] = "TRANSFER_SRC",
            t[t.TRANSFER_DST = 2] = "TRANSFER_DST",
            t[t.INDEX = 4] = "INDEX",
            t[t.VERTEX = 8] = "VERTEX",
            t[t.UNIFORM = 16] = "UNIFORM",
            t[t.STORAGE = 32] = "STORAGE",
            t[t.INDIRECT = 64] = "INDIRECT"
        }
        )(l || (l = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.DEVICE = 1] = "DEVICE",
            t[t.HOST = 2] = "HOST"
        }
        )(h || (h = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.READ = 1] = "READ",
            t[t.WRITE = 2] = "WRITE"
        }
        )(c || (c = {})),
        (function(t) {
            t[t.POINT_LIST = 0] = "POINT_LIST",
            t[t.LINE_LIST = 1] = "LINE_LIST",
            t[t.LINE_STRIP = 2] = "LINE_STRIP",
            t[t.LINE_LOOP = 3] = "LINE_LOOP",
            t[t.LINE_LIST_ADJACENCY = 4] = "LINE_LIST_ADJACENCY",
            t[t.LINE_STRIP_ADJACENCY = 5] = "LINE_STRIP_ADJACENCY",
            t[t.ISO_LINE_LIST = 6] = "ISO_LINE_LIST",
            t[t.TRIANGLE_LIST = 7] = "TRIANGLE_LIST",
            t[t.TRIANGLE_STRIP = 8] = "TRIANGLE_STRIP",
            t[t.TRIANGLE_FAN = 9] = "TRIANGLE_FAN",
            t[t.TRIANGLE_LIST_ADJACENCY = 10] = "TRIANGLE_LIST_ADJACENCY",
            t[t.TRIANGLE_STRIP_ADJACENCY = 11] = "TRIANGLE_STRIP_ADJACENCY",
            t[t.TRIANGLE_PATCH_ADJACENCY = 12] = "TRIANGLE_PATCH_ADJACENCY",
            t[t.QUAD_PATCH_LIST = 13] = "QUAD_PATCH_LIST"
        }
        )(u || (u = {})),
        (function(t) {
            t[t.FILL = 0] = "FILL",
            t[t.POINT = 1] = "POINT",
            t[t.LINE = 2] = "LINE"
        }
        )(_ || (_ = {})),
        (function(t) {
            t[t.GOURAND = 0] = "GOURAND",
            t[t.FLAT = 1] = "FLAT"
        }
        )(f || (f = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.FRONT = 1] = "FRONT",
            t[t.BACK = 2] = "BACK"
        }
        )(d || (d = {})),
        (function(t) {
            t[t.NEVER = 0] = "NEVER",
            t[t.LESS = 1] = "LESS",
            t[t.EQUAL = 2] = "EQUAL",
            t[t.LESS_EQUAL = 3] = "LESS_EQUAL",
            t[t.GREATER = 4] = "GREATER",
            t[t.NOT_EQUAL = 5] = "NOT_EQUAL",
            t[t.GREATER_EQUAL = 6] = "GREATER_EQUAL",
            t[t.ALWAYS = 7] = "ALWAYS"
        }
        )(p || (p = {})),
        (function(t) {
            t[t.ZERO = 0] = "ZERO",
            t[t.KEEP = 1] = "KEEP",
            t[t.REPLACE = 2] = "REPLACE",
            t[t.INCR = 3] = "INCR",
            t[t.DECR = 4] = "DECR",
            t[t.INVERT = 5] = "INVERT",
            t[t.INCR_WRAP = 6] = "INCR_WRAP",
            t[t.DECR_WRAP = 7] = "DECR_WRAP"
        }
        )(m || (m = {})),
        (function(t) {
            t[t.ADD = 0] = "ADD",
            t[t.SUB = 1] = "SUB",
            t[t.REV_SUB = 2] = "REV_SUB",
            t[t.MIN = 3] = "MIN",
            t[t.MAX = 4] = "MAX"
        }
        )(y || (y = {})),
        (function(t) {
            t[t.ZERO = 0] = "ZERO",
            t[t.ONE = 1] = "ONE",
            t[t.SRC_ALPHA = 2] = "SRC_ALPHA",
            t[t.DST_ALPHA = 3] = "DST_ALPHA",
            t[t.ONE_MINUS_SRC_ALPHA = 4] = "ONE_MINUS_SRC_ALPHA",
            t[t.ONE_MINUS_DST_ALPHA = 5] = "ONE_MINUS_DST_ALPHA",
            t[t.SRC_COLOR = 6] = "SRC_COLOR",
            t[t.DST_COLOR = 7] = "DST_COLOR",
            t[t.ONE_MINUS_SRC_COLOR = 8] = "ONE_MINUS_SRC_COLOR",
            t[t.ONE_MINUS_DST_COLOR = 9] = "ONE_MINUS_DST_COLOR",
            t[t.SRC_ALPHA_SATURATE = 10] = "SRC_ALPHA_SATURATE",
            t[t.CONSTANT_COLOR = 11] = "CONSTANT_COLOR",
            t[t.ONE_MINUS_CONSTANT_COLOR = 12] = "ONE_MINUS_CONSTANT_COLOR",
            t[t.CONSTANT_ALPHA = 13] = "CONSTANT_ALPHA",
            t[t.ONE_MINUS_CONSTANT_ALPHA = 14] = "ONE_MINUS_CONSTANT_ALPHA"
        }
        )(v || (v = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.R = 1] = "R",
            t[t.G = 2] = "G",
            t[t.B = 4] = "B",
            t[t.A = 8] = "A",
            t[t.ALL = 15] = "ALL"
        }
        )(g || (g = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.POINT = 1] = "POINT",
            t[t.LINEAR = 2] = "LINEAR",
            t[t.ANISOTROPIC = 3] = "ANISOTROPIC"
        }
        )(A || (A = {})),
        (function(t) {
            t[t.WRAP = 0] = "WRAP",
            t[t.MIRROR = 1] = "MIRROR",
            t[t.CLAMP = 2] = "CLAMP",
            t[t.BORDER = 3] = "BORDER"
        }
        )(x || (x = {})),
        (function(t) {
            t[t.TEX1D = 0] = "TEX1D",
            t[t.TEX2D = 1] = "TEX2D",
            t[t.TEX3D = 2] = "TEX3D"
        }
        )(b || (b = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.TRANSFER_SRC = 1] = "TRANSFER_SRC",
            t[t.TRANSFER_DST = 2] = "TRANSFER_DST",
            t[t.SAMPLED = 4] = "SAMPLED",
            t[t.STORAGE = 8] = "STORAGE",
            t[t.COLOR_ATTACHMENT = 16] = "COLOR_ATTACHMENT",
            t[t.DEPTH_STENCIL_ATTACHMENT = 32] = "DEPTH_STENCIL_ATTACHMENT",
            t[t.TRANSIENT_ATTACHMENT = 64] = "TRANSIENT_ATTACHMENT",
            t[t.INPUT_ATTACHMENT = 128] = "INPUT_ATTACHMENT"
        }
        )(C || (C = {})),
        (function(t) {
            t[t.X1 = 0] = "X1",
            t[t.X2 = 1] = "X2",
            t[t.X4 = 2] = "X4",
            t[t.X8 = 3] = "X8",
            t[t.X16 = 4] = "X16",
            t[t.X32 = 5] = "X32",
            t[t.X64 = 6] = "X64"
        }
        )(T || (T = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.GEN_MIPMAP = 1] = "GEN_MIPMAP",
            t[t.CUBEMAP = 2] = "CUBEMAP",
            t[t.BAKUP_BUFFER = 4] = "BAKUP_BUFFER"
        }
        )(S || (S = {})),
        (function(t) {
            t[t.TV1D = 0] = "TV1D",
            t[t.TV2D = 1] = "TV2D",
            t[t.TV3D = 2] = "TV3D",
            t[t.CUBE = 3] = "CUBE",
            t[t.TV1D_ARRAY = 4] = "TV1D_ARRAY",
            t[t.TV2D_ARRAY = 5] = "TV2D_ARRAY"
        }
        )(w || (w = {})),
        (function(t) {
            t[t.VERTEX = 0] = "VERTEX",
            t[t.HULL = 1] = "HULL",
            t[t.DOMAIN = 2] = "DOMAIN",
            t[t.GEOMETRY = 3] = "GEOMETRY",
            t[t.FRAGMENT = 4] = "FRAGMENT",
            t[t.COMPUTE = 5] = "COMPUTE",
            t[t.COUNT = 6] = "COUNT"
        }
        )(E || (E = {})),
        (function(t) {
            t[t.UNKNOWN = 0] = "UNKNOWN",
            t[t.UNIFORM_BUFFER = 1] = "UNIFORM_BUFFER",
            t[t.SAMPLER = 2] = "SAMPLER",
            t[t.STORAGE_BUFFER = 3] = "STORAGE_BUFFER"
        }
        )(M || (M = {})),
        (function(t) {
            t[t.PRIMARY = 0] = "PRIMARY",
            t[t.SECONDARY = 1] = "SECONDARY"
        }
        )(D || (D = {})),
        (function(t) {
            t[t.LOAD = 0] = "LOAD",
            t[t.CLEAR = 1] = "CLEAR",
            t[t.DISCARD = 2] = "DISCARD"
        }
        )(B || (B = {})),
        (function(t) {
            t[t.STORE = 0] = "STORE",
            t[t.DISCARD = 1] = "DISCARD"
        }
        )(I || (I = {})),
        (function(t) {
            t[t.UNDEFINED = 0] = "UNDEFINED",
            t[t.GENERAL = 1] = "GENERAL",
            t[t.COLOR_ATTACHMENT_OPTIMAL = 2] = "COLOR_ATTACHMENT_OPTIMAL",
            t[t.DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3] = "DEPTH_STENCIL_ATTACHMENT_OPTIMAL",
            t[t.DEPTH_STENCIL_READONLY_OPTIMAL = 4] = "DEPTH_STENCIL_READONLY_OPTIMAL",
            t[t.SHADER_READONLY_OPTIMAL = 5] = "SHADER_READONLY_OPTIMAL",
            t[t.TRANSFER_SRC_OPTIMAL = 6] = "TRANSFER_SRC_OPTIMAL",
            t[t.TRANSFER_DST_OPTIMAL = 7] = "TRANSFER_DST_OPTIMAL",
            t[t.PREINITIALIZED = 8] = "PREINITIALIZED",
            t[t.PRESENT_SRC = 9] = "PRESENT_SRC"
        }
        )(P || (P = {})),
        (function(t) {
            t[t.GRAPHICS = 0] = "GRAPHICS",
            t[t.COMPUTE = 1] = "COMPUTE",
            t[t.RAY_TRACING = 2] = "RAY_TRACING"
        }
        )(R || (R = {})),
        (function(t) {
            t[t.VIEWPORT = 0] = "VIEWPORT",
            t[t.SCISSOR = 1] = "SCISSOR",
            t[t.LINE_WIDTH = 2] = "LINE_WIDTH",
            t[t.DEPTH_BIAS = 3] = "DEPTH_BIAS",
            t[t.BLEND_CONSTANTS = 4] = "BLEND_CONSTANTS",
            t[t.DEPTH_BOUNDS = 5] = "DEPTH_BOUNDS",
            t[t.STENCIL_WRITE_MASK = 6] = "STENCIL_WRITE_MASK",
            t[t.STENCIL_COMPARE_MASK = 7] = "STENCIL_COMPARE_MASK"
        }
        )(O || (O = {})),
        (function(t) {
            t[t.FRONT = 0] = "FRONT",
            t[t.BACK = 1] = "BACK",
            t[t.ALL = 2] = "ALL"
        }
        )(L || (L = {})),
        (function(t) {
            t[t.GRAPHICS = 0] = "GRAPHICS",
            t[t.COMPUTE = 1] = "COMPUTE",
            t[t.TRANSFER = 2] = "TRANSFER"
        }
        )(F || (F = {})),
        (function(t) {
            t[t.NONE = 0] = "NONE",
            t[t.COLOR = 1] = "COLOR",
            t[t.DEPTH = 2] = "DEPTH",
            t[t.STENCIL = 4] = "STENCIL",
            t[t.DEPTH_STENCIL = 6] = "DEPTH_STENCIL",
            t[t.ALL = 7] = "ALL"
        }
        )(V || (V = {})),
        (function(t) {
            t[t.DEFAULT = 100] = "DEFAULT"
        }
        )(N || (N = {})),
        (function(t) {
            t[t.MIN = 0] = "MIN",
            t[t.MAX = 255] = "MAX",
            t[t.DEFAULT = 128] = "DEFAULT"
        }
        )(k || (k = {})),
        (function(t) {
            t[t.UBO_GLOBAL = 23] = "UBO_GLOBAL",
            t[t.UBO_SHADOW = 22] = "UBO_SHADOW",
            t[t.UBO_LOCAL = 21] = "UBO_LOCAL",
            t[t.UBO_FORWARD_LIGHTS = 20] = "UBO_FORWARD_LIGHTS",
            t[t.UBO_SKINNING = 19] = "UBO_SKINNING",
            t[t.UBO_SKINNING_TEXTURE = 18] = "UBO_SKINNING_TEXTURE",
            t[t.UBO_UI = 17] = "UBO_UI",
            t[t.SAMPLER_JOINTS = 25] = "SAMPLER_JOINTS",
            t[t.SAMPLER_ENVIRONMENT = 26] = "SAMPLER_ENVIRONMENT",
            t[t.CUSTUM_UBO_BINDING_END_POINT = 17] = "CUSTUM_UBO_BINDING_END_POINT",
            t[t.CUSTOM_SAMPLER_BINDING_START_POINT = 30] = "CUSTOM_SAMPLER_BINDING_START_POINT"
        }
        )(G || (G = {})),
        (function(t) {
            t[t.minFilter = 0] = "minFilter",
            t[t.magFilter = 1] = "magFilter",
            t[t.mipFilter = 2] = "mipFilter",
            t[t.addressU = 3] = "addressU",
            t[t.addressV = 4] = "addressV",
            t[t.addressW = 5] = "addressW",
            t[t.maxAnisotropy = 6] = "maxAnisotropy",
            t[t.cmpFunc = 7] = "cmpFunc",
            t[t.minLOD = 8] = "minLOD",
            t[t.maxLOD = 9] = "maxLOD",
            t[t.mipLODBias = 10] = "mipLODBias",
            t[t.borderColor = 11] = "borderColor",
            t[t.total = 15] = "total"
        }
        )(H || (H = {}));
        var W = {};
        W[W.bool = a.BOOL] = "bool",
        W[W.int = a.INT] = "int",
        W[W.ivec2 = a.INT2] = "ivec2invTypeParams",
        W[W.ivec3 = a.INT3] = "ivec3",
        W[W.ivec4 = a.INT4] = "ivec4",
        W[W.float = a.FLOAT] = "float",
        W[W.vec2 = a.FLOAT2] = "vec2",
        W[W.vec3 = a.FLOAT3] = "vec3",
        W[W.vec4 = a.FLOAT4] = "vec4",
        W[W.mat2 = a.MAT2] = "mat2",
        W[W.mat3 = a.MAT3] = "mat3",
        W[W.mat4 = a.MAT4] = "mat4",
        W[W.sampler2D = a.SAMPLER2D] = "sampler2D",
        W[W.samplerCube = a.SAMPLER_CUBE] = "samplerCube";
        var j = ((U = {})[a.BOOL] = 4,
        U[a.INT] = 4,
        U[a.INT2] = 8,
        U[a.INT3] = 12,
        U[a.INT4] = 16,
        U[a.FLOAT] = 4,
        U[a.FLOAT2] = 8,
        U[a.FLOAT3] = 12,
        U[a.FLOAT4] = 16,
        U[a.MAT2] = 16,
        U[a.MAT3] = 36,
        U[a.MAT4] = 64,
        U[a.SAMPLER2D] = 4,
        U[a.SAMPLER_CUBE] = 4,
        U)
          , X = ((z = {})[a.BOOL] = o.R32I,
        z[a.INT] = o.R32I,
        z[a.INT2] = o.RG32I,
        z[a.INT3] = o.RGB32I,
        z[a.INT4] = o.RGBA32I,
        z[a.FLOAT] = o.R32F,
        z[a.FLOAT2] = o.RG32F,
        z[a.FLOAT3] = o.RGB32F,
        z[a.FLOAT4] = o.RGBA32F,
        z)
          , Y = {
            BACK: 1029,
            FRONT: 1028,
            NONE: 0,
            ADD: 32774,
            SUB: 32778,
            REV_SUB: 32779,
            ZERO: 0,
            ONE: 1,
            SRC_COLOR: 768,
            ONE_MINUS_SRC_COLOR: 769,
            DST_COLOR: 774,
            ONE_MINUS_DST_COLOR: 775,
            SRC_ALPHA: 770,
            ONE_MINUS_SRC_ALPHA: 771,
            DST_ALPHA: 772,
            ONE_MINUS_DST_ALPHA: 773,
            CONSTANT_COLOR: 32769,
            ONE_MINUS_CONSTANT_COLOR: 32770,
            CONSTANT_ALPHA: 32771,
            ONE_MINUS_CONSTANT_ALPHA: 32772,
            SRC_ALPHA_SATURATE: 776,
            NEVER: 512,
            LESS: 513,
            EQUAL: 514,
            LEQUAL: 515,
            GREATER: 516,
            NOTEQUAL: 517,
            GEQUAL: 518,
            ALWAYS: 519,
            KEEP: 7680,
            REPLACE: 7681,
            INCR: 7682,
            INCR_WRAP: 34055,
            DECR: 7683,
            DECR_WRAP: 34056,
            INVERT: 5386
        };
        Object.assign(Y, N);
        var q = {
            murmurhash2_32_gc: function(t, e) {
                for (var i, n = t.length, r = e ^ n, s = 0; n >= 4; )
                    i = 1540483477 * (65535 & (i = 255 & t.charCodeAt(s) | (255 & t.charCodeAt(++s)) << 8 | (255 & t.charCodeAt(++s)) << 16 | (255 & t.charCodeAt(++s)) << 24)) + ((1540483477 * (i >>> 16) & 65535) << 16),
                    r = 1540483477 * (65535 & r) + ((1540483477 * (r >>> 16) & 65535) << 16) ^ (i = 1540483477 * (65535 & (i ^= i >>> 24)) + ((1540483477 * (i >>> 16) & 65535) << 16)),
                    n -= 4,
                    ++s;
                switch (n) {
                case 3:
                    r ^= (255 & t.charCodeAt(s + 2)) << 16;
                case 2:
                    r ^= (255 & t.charCodeAt(s + 1)) << 8;
                case 1:
                    r = 1540483477 * (65535 & (r ^= 255 & t.charCodeAt(s))) + ((1540483477 * (r >>> 16) & 65535) << 16)
                }
                return r = 1540483477 * (65535 & (r ^= r >>> 13)) + ((1540483477 * (r >>> 16) & 65535) << 16),
                (r ^= r >>> 15) >>> 0
            },
            SamplerInfoIndex: H,
            effectStructure: {
                $techniques: [{
                    $passes: [{
                        depthStencilState: {},
                        rasterizerState: {},
                        blendState: {
                            targets: [{}]
                        },
                        properties: {
                            any: {
                                sampler: {},
                                inspector: {}
                            }
                        }
                    }]
                }]
            },
            typeMap: W,
            sizeMap: j,
            formatMap: X,
            passParams: Y,
            RenderQueue: {
                OPAQUE: 0,
                TRANSPARENT: 1,
                OVERLAY: 2
            },
            RenderPriority: k,
            GFXGetTypeSize: function(t) {
                switch (t) {
                case a.BOOL:
                case a.INT:
                case a.UINT:
                case a.FLOAT:
                    return 4;
                case a.BOOL2:
                case a.INT2:
                case a.UINT2:
                case a.FLOAT2:
                    return 8;
                case a.BOOL3:
                case a.INT3:
                case a.UINT3:
                case a.FLOAT3:
                    return 12;
                case a.BOOL4:
                case a.INT4:
                case a.UINT4:
                case a.FLOAT4:
                case a.MAT2:
                    return 16;
                case a.MAT2X3:
                    return 24;
                case a.MAT2X4:
                    return 32;
                case a.MAT3X2:
                    return 24;
                case a.MAT3:
                    return 36;
                case a.MAT3X4:
                    return 48;
                case a.MAT4X2:
                case a.MAT4X2:
                    return 32;
                case a.MAT4:
                    return 64;
                case a.SAMPLER1D:
                case a.SAMPLER1D_ARRAY:
                case a.SAMPLER2D:
                case a.SAMPLER2D_ARRAY:
                case a.SAMPLER3D:
                case a.SAMPLER_CUBE:
                    return 4;
                default:
                    return 0
                }
            },
            UniformBinding: G
        };
        e.exports = q
    }
    ), {}],
    304: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("../memop")
          , r = h(t("../enums"))
          , s = t("../../core/value-types")
          , a = h(t("./program-lib"))
          , o = h(t("./view"))
          , l = h(t("../gfx"));
        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var c = new s.Mat4
          , u = new n.RecyclePool(function() {
            return {
                stage: null,
                items: null
            }
        }
        ,8)
          , _ = new n.RecyclePool(function() {
            return new Float32Array(2)
        }
        ,8)
          , f = new n.RecyclePool(function() {
            return new Float32Array(3)
        }
        ,8)
          , d = new n.RecyclePool(function() {
            return new Float32Array(4)
        }
        ,8)
          , p = new n.RecyclePool(function() {
            return new Float32Array(9)
        }
        ,8)
          , m = new n.RecyclePool(function() {
            return new Float32Array(16)
        }
        ,8)
          , y = new n.RecyclePool(function() {
            return new Float32Array(64)
        }
        ,8)
          , v = new n.RecyclePool(function() {
            return new Int32Array(2)
        }
        ,8)
          , g = new n.RecyclePool(function() {
            return new Int32Array(3)
        }
        ,8)
          , A = new n.RecyclePool(function() {
            return new Int32Array(4)
        }
        ,8)
          , x = new n.RecyclePool(function() {
            return new Int32Array(64)
        }
        ,8)
          , b = (function() {
            function t(t, e) {
                var i;
                this._device = t,
                this._programLib = new a.default(t),
                this._opts = e,
                this._type2defaultValue = ((i = {})[r.default.PARAM_INT] = 0,
                i[r.default.PARAM_INT2] = new s.Vec2(0,0),
                i[r.default.PARAM_INT3] = new s.Vec3(0,0,0),
                i[r.default.PARAM_INT4] = new s.Vec4(0,0,0,0),
                i[r.default.PARAM_FLOAT] = 0,
                i[r.default.PARAM_FLOAT2] = new s.Vec2(0,0),
                i[r.default.PARAM_FLOAT3] = new s.Vec3(0,0,0),
                i[r.default.PARAM_FLOAT4] = new s.Vec4(0,0,0,0),
                i[r.default.PARAM_COLOR4] = new s.Color(0,0,0,1),
                i[r.default.PARAM_MAT3] = new s.Mat3,
                i[r.default.PARAM_MAT4] = new s.Mat4,
                i[r.default.PARAM_TEXTURE_2D] = e.defaultTexture,
                i[r.default.PARAM_TEXTURE_CUBE] = e.defaultTextureCube,
                i),
                this._stage2fn = {},
                this._usedTextureUnits = 0,
                this._viewPools = new n.RecyclePool(function() {
                    return new o.default
                }
                ,8),
                this._drawItemsPools = new n.RecyclePool(function() {
                    return {
                        model: null,
                        node: null,
                        ia: null,
                        effect: null,
                        defines: null,
                        uniforms: null
                    }
                }
                ,100),
                this._stageItemsPools = new n.RecyclePool(function() {
                    return new n.RecyclePool(function() {
                        return {
                            model: null,
                            node: null,
                            ia: null,
                            effect: null,
                            defines: null,
                            passes: [],
                            sortKey: -1,
                            uniforms: null
                        }
                    }
                    ,100)
                }
                ,16),
                this._definesChanged = !1
            }
            var e = t.prototype;
            return e._resetTextuerUnit = function() {
                this._usedTextureUnits = 0
            }
            ,
            e._allocTextureUnit = function() {
                var t = this._device
                  , e = this._usedTextureUnits;
                return e >= t._caps.maxTextureUnits && console.warn("Trying to use " + e + " texture units while this GPU supports only " + t._caps.maxTextureUnits),
                this._usedTextureUnits += 1,
                e
            }
            ,
            e._registerStage = function(t, e) {
                this._stage2fn[t] = e
            }
            ,
            e.clear = function() {
                this._programLib.clear(),
                this.reset()
            }
            ,
            e.reset = function() {
                this._viewPools.reset(),
                this._stageItemsPools.reset(),
                this._definesChanged = !1
            }
            ,
            e._requestView = function() {
                return this._viewPools.add()
            }
            ,
            e._render = function(t, e) {
                var i = this._device;
                i.setFrameBuffer(t._framebuffer),
                i.setViewport(t._rect.x, t._rect.y, t._rect.w, t._rect.h);
                var n = {};
                t._clearFlags & r.default.CLEAR_COLOR && (n.color = s.Vec4.toArray([], t._color)),
                t._clearFlags & r.default.CLEAR_DEPTH && (n.depth = t._depth),
                t._clearFlags & r.default.CLEAR_STENCIL && (n.stencil = t._stencil),
                i.clear(n),
                this._drawItemsPools.reset();
                for (var a = 0; a < e._models.length; ++a) {
                    var o = e._models.data[a];
                    if (0 != (o._cullingMask & t._cullingMask)) {
                        var l = this._drawItemsPools.add();
                        o.extractDrawItem(l)
                    }
                }
                u.reset();
                for (var h = 0; h < t._stages.length; ++h) {
                    var c = t._stages[h]
                      , _ = this._stageItemsPools.add();
                    _.reset();
                    for (var f = 0; f < this._drawItemsPools.length; ++f) {
                        var d = this._drawItemsPools.data[f]
                          , p = d.effect.stagePasses[c];
                        if (p && 0 !== p.length) {
                            var m = _.add();
                            m.passes = p,
                            m.model = d.model,
                            m.node = d.node,
                            m.ia = d.ia,
                            m.effect = d.effect,
                            m.defines = d.defines,
                            m.sortKey = -1,
                            m.uniforms = d.uniforms
                        }
                    }
                    var y = u.add();
                    y.stage = c,
                    y.items = _
                }
                for (var v = 0; v < u.length; ++v) {
                    var g = u.data[v];
                    (0,
                    this._stage2fn[g.stage])(t, g.items)
                }
            }
            ,
            e._setProperty = function(t) {
                var e = this._device
                  , i = t.value;
                if (void 0 === i && (i = t.val),
                void 0 === i && (i = this._type2defaultValue[t.type]),
                void 0 !== i)
                    if (t.type === r.default.PARAM_TEXTURE_2D || t.type === r.default.PARAM_TEXTURE_CUBE)
                        if (Array.isArray(i)) {
                            if (i.length > t.count)
                                return void console.error("Failed to set property [" + t.name + "] : The length of texture array [" + i.length + "] is bigger than [" + t.count + "].");
                            for (var n = x.add(), s = 0; s < i.length; ++s)
                                n[s] = this._allocTextureUnit();
                            e.setTextureArray(t.name, i, n)
                        } else
                            e.setTexture(t.name, i, this._allocTextureUnit());
                    else
                        t.directly ? e.setUniformDirectly(t.name, i) : e.setUniform(t.name, i);
                else
                    console.warn("Failed to set technique property " + t.name + ", value not found.")
            }
            ,
            e._draw = function(t) {
                var e = this._device
                  , i = this._programLib
                  , n = t.node
                  , r = t.ia
                  , a = t.passes
                  , o = t.effect;
                _.reset(),
                f.reset(),
                d.reset(),
                p.reset(),
                m.reset(),
                y.reset(),
                v.reset(),
                g.reset(),
                A.reset(),
                x.reset(),
                n.getWorldMatrix(c),
                e.setUniform("cc_matWorld", s.Mat4.toArray(m.add(), c)),
                s.Mat4.invert(c, c),
                s.Mat4.transpose(c, c),
                e.setUniform("cc_matWorldIT", s.Mat4.toArray(m.add(), c));
                for (var h = this._defines, u = 0; u < a.length; ++u) {
                    var b = a[u];
                    this._definesChanged && (b._programKey = null);
                    var C = r.count;
                    r._vertexBuffer && e.setVertexBuffer(0, r._vertexBuffer),
                    r._indexBuffer && e.setIndexBuffer(r._indexBuffer),
                    e.setPrimitiveType(r._primitiveType),
                    Object.setPrototypeOf(h, b._defines);
                    var T = i.getProgram(b, h, o.name);
                    e.setProgram(T);
                    for (var S = T._uniforms, w = b._properties, E = 0; E < S.length; E++) {
                        var M = w[S[E].name];
                        void 0 !== M && this._setProperty(M)
                    }
                    e.setCullMode(b._cullMode),
                    b._blend && (e.enableBlend(),
                    e.setBlendFuncSep(b._blendSrc, b._blendDst, b._blendSrcAlpha, b._blendDstAlpha),
                    e.setBlendEqSep(b._blendEq, b._blendAlphaEq),
                    e.setBlendColor32(b._blendColor)),
                    b._depthTest && (e.enableDepthTest(),
                    e.setDepthFunc(b._depthFunc)),
                    b._depthWrite && e.enableDepthWrite(),
                    e.setStencilTest(b._stencilTest),
                    b._stencilTest === l.default.STENCIL_ENABLE && (e.setStencilFuncFront(b._stencilFuncFront, b._stencilRefFront, b._stencilMaskFront),
                    e.setStencilOpFront(b._stencilFailOpFront, b._stencilZFailOpFront, b._stencilZPassOpFront, b._stencilWriteMaskFront),
                    e.setStencilFuncBack(b._stencilFuncBack, b._stencilRefBack, b._stencilMaskBack),
                    e.setStencilOpBack(b._stencilFailOpBack, b._stencilZFailOpBack, b._stencilZPassOpBack, b._stencilWriteMaskBack)),
                    e.draw(r._start, C),
                    this._resetTextuerUnit()
                }
            }
            ,
            t
        }
        )();
        i.default = b,
        e.exports = i.default
    }
    ), {
        "../../core/value-types": 282,
        "../enums": 310,
        "../gfx": 315,
        "../memop": 327,
        "./program-lib": 307,
        "./view": 309
    }],
    305: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../gfx")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = (function() {
            function t(t, e, i) {
                void 0 === i && (i = r.default.PT_TRIANGLES),
                this._vertexBuffer = t,
                this._indexBuffer = e,
                this._primitiveType = i,
                this._start = 0,
                this._count = -1
            }
            var e, i;
            return e = t,
            (i = [{
                key: "count",
                get: function() {
                    return -1 !== this._count ? this._count : this._indexBuffer ? this._indexBuffer.count : this._vertexBuffer ? this._vertexBuffer.count : 0
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../gfx": 315
    }],
    306: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = a(t("../gfx"))
          , r = a(t("../enums"))
          , s = a(t("../../core/value-types/value-type"));
        function a(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var o = (function() {
            function t(t, e, i, r, s, a) {
                void 0 === s && (s = {}),
                void 0 === a && (a = {}),
                this._name = t,
                this._detailName = e,
                this._programName = i,
                this._programKey = null,
                this._stage = r,
                this._properties = s,
                this._defines = a,
                this._cullMode = n.default.CULL_BACK,
                this._blend = !1,
                this._blendEq = n.default.BLEND_FUNC_ADD,
                this._blendAlphaEq = n.default.BLEND_FUNC_ADD,
                this._blendSrc = n.default.BLEND_SRC_ALPHA,
                this._blendDst = n.default.BLEND_ONE_MINUS_SRC_ALPHA,
                this._blendSrcAlpha = n.default.BLEND_SRC_ALPHA,
                this._blendDstAlpha = n.default.BLEND_ONE_MINUS_SRC_ALPHA,
                this._blendColor = 4294967295,
                this._depthTest = !1,
                this._depthWrite = !1,
                this._depthFunc = n.default.DS_FUNC_LESS,
                this._stencilTest = n.default.STENCIL_INHERIT,
                this._stencilFuncFront = n.default.DS_FUNC_ALWAYS,
                this._stencilRefFront = 0,
                this._stencilMaskFront = 255,
                this._stencilFailOpFront = n.default.STENCIL_OP_KEEP,
                this._stencilZFailOpFront = n.default.STENCIL_OP_KEEP,
                this._stencilZPassOpFront = n.default.STENCIL_OP_KEEP,
                this._stencilWriteMaskFront = 255,
                this._stencilFuncBack = n.default.DS_FUNC_ALWAYS,
                this._stencilRefBack = 0,
                this._stencilMaskBack = 255,
                this._stencilFailOpBack = n.default.STENCIL_OP_KEEP,
                this._stencilZFailOpBack = n.default.STENCIL_OP_KEEP,
                this._stencilZPassOpBack = n.default.STENCIL_OP_KEEP,
                this._stencilWriteMaskBack = 255
            }
            var e = t.prototype;
            return e.setCullMode = function(t) {
                void 0 === t && (t = n.default.CULL_BACK),
                this._cullMode = t
            }
            ,
            e.setBlend = function(t, e, i, r, s, a, o, l) {
                void 0 === t && (t = !1),
                void 0 === e && (e = n.default.BLEND_FUNC_ADD),
                void 0 === i && (i = n.default.BLEND_SRC_ALPHA),
                void 0 === r && (r = n.default.BLEND_ONE_MINUS_SRC_ALPHA),
                void 0 === s && (s = n.default.BLEND_FUNC_ADD),
                void 0 === a && (a = n.default.BLEND_SRC_ALPHA),
                void 0 === o && (o = n.default.BLEND_ONE_MINUS_SRC_ALPHA),
                void 0 === l && (l = 4294967295),
                this._blend = t,
                this._blendEq = e,
                this._blendSrc = i,
                this._blendDst = r,
                this._blendAlphaEq = s,
                this._blendSrcAlpha = a,
                this._blendDstAlpha = o,
                this._blendColor = l
            }
            ,
            e.setDepth = function(t, e, i) {
                void 0 === t && (t = !1),
                void 0 === e && (e = !1),
                void 0 === i && (i = n.default.DS_FUNC_LESS),
                this._depthTest = t,
                this._depthWrite = e,
                this._depthFunc = i
            }
            ,
            e.setStencilFront = function(t, e, i, r, s, a, o, l) {
                void 0 === t && (t = n.default.STENCIL_INHERIT),
                void 0 === e && (e = n.default.DS_FUNC_ALWAYS),
                void 0 === i && (i = 0),
                void 0 === r && (r = 255),
                void 0 === s && (s = n.default.STENCIL_OP_KEEP),
                void 0 === a && (a = n.default.STENCIL_OP_KEEP),
                void 0 === o && (o = n.default.STENCIL_OP_KEEP),
                void 0 === l && (l = 255),
                this._stencilTest = t,
                this._stencilFuncFront = e,
                this._stencilRefFront = i,
                this._stencilMaskFront = r,
                this._stencilFailOpFront = s,
                this._stencilZFailOpFront = a,
                this._stencilZPassOpFront = o,
                this._stencilWriteMaskFront = l
            }
            ,
            e.setStencilEnabled = function(t) {
                void 0 === t && (t = n.default.STENCIL_INHERIT),
                this._stencilTest = t
            }
            ,
            e.setStencilBack = function(t, e, i, r, s, a, o, l) {
                void 0 === t && (t = n.default.STENCIL_INHERIT),
                void 0 === e && (e = n.default.DS_FUNC_ALWAYS),
                void 0 === i && (i = 0),
                void 0 === r && (r = 255),
                void 0 === s && (s = n.default.STENCIL_OP_KEEP),
                void 0 === a && (a = n.default.STENCIL_OP_KEEP),
                void 0 === o && (o = n.default.STENCIL_OP_KEEP),
                void 0 === l && (l = 255),
                this._stencilTest = t,
                this._stencilFuncBack = e,
                this._stencilRefBack = i,
                this._stencilMaskBack = r,
                this._stencilFailOpBack = s,
                this._stencilZFailOpBack = a,
                this._stencilZPassOpBack = o,
                this._stencilWriteMaskBack = l
            }
            ,
            e.setStage = function(t) {
                this._stage = t
            }
            ,
            e.setProperties = function(t) {
                this._properties = t
            }
            ,
            e.getProperty = function(t) {
                if (this._properties[t])
                    return this._properties[t].value
            }
            ,
            e.setProperty = function(t, e, i) {
                var n = this._properties[t];
                if (!n)
                    return !1;
                if (n.directly = i,
                Array.isArray(e)) {
                    var a = n.value;
                    if (a.length !== e.length)
                        return void cc.warnID(9105, this._name, t);
                    for (var o = 0; o < e.length; o++)
                        a[o] = e[o]
                } else
                    e && !ArrayBuffer.isView(e) ? n.type === r.default.PARAM_TEXTURE_2D ? n.value = e.getImpl() : e instanceof s.default ? e.constructor.toArray(n.value, e) : ("object" == typeof e && cc.warnID(9106, this._name, t),
                    n.value = e) : n.value = e;
                return !0
            }
            ,
            e.getDefine = function(t) {
                return this._defines[t]
            }
            ,
            e.define = function(t, e, i) {
                var n = this._defines[t];
                return !(!i && void 0 === n || (n !== e && (this._defines[t] = e,
                this._programKey = null),
                0))
            }
            ,
            e.clone = function() {
                var e = new t(this._programName);
                Object.assign(e, this);
                var i = {}
                  , n = this._properties;
                for (var r in n) {
                    var s = n[r]
                      , a = i[r] = {}
                      , o = s.value;
                    for (var l in Array.isArray(o) ? a.value = o.concat() : ArrayBuffer.isView(o) ? a.value = new o.__proto__.constructor(o) : a.value = o,
                    s)
                        "value" !== l && (a[l] = s[l])
                }
                return e._properties = i,
                e._defines = Object.assign({}, this._defines),
                e
            }
            ,
            t
        }
        )();
        i.default = o,
        e.exports = i.default
    }
    ), {
        "../../core/value-types/value-type": 290,
        "../enums": 310,
        "../gfx": 315
    }],
    307: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../gfx")) && n.__esModule ? n : {
            default: n
        }, s = 0;
        function a(t, e) {
            for (var i = [], n = 0; n < t.length; n++) {
                var r = t[n].name
                  , s = e[r];
                "number" != typeof s && (s = s ? 1 : 0),
                i.push("#define " + r + " " + s)
            }
            return i.join("\n") + "\n"
        }
        function o(t, e, i) {
            for (var n = t, r = 0; r < e.length; r++) {
                var s = e[r].name
                  , a = i[s];
                if (Number.isInteger(a)) {
                    var o = new RegExp(s,"g");
                    n = n.replace(o, a)
                }
            }
            return n
        }
        function l(t) {
            return t.replace(/#pragma for (\w+) in range\(\s*(\d+)\s*,\s*(\d+)\s*\)([\s\S]+?)#pragma endFor/g, (function(t, e, i, n, r) {
                var s = ""
                  , a = parseInt(i)
                  , o = parseInt(n);
                (a.isNaN || o.isNaN) && console.error("Unroll For Loops Error: begin and end of range must be an int num.");
                for (var l = a; l < o; ++l)
                    s += r.replace(new RegExp("{" + e + "}","g"), l);
                return s
            }
            ))
        }
        function h(t) {
            return t.replace(/\bhighp\b/g, "mediump")
        }
        var c = (function() {
            function t(t) {
                this._device = t,
                this._templates = {},
                this._cache = {},
                this._checkPrecision()
            }
            var e = t.prototype;
            return e.clear = function() {
                this._templates = {},
                this._cache = {}
            }
            ,
            e.define = function(t) {
                var e = t.name
                  , i = t.defines
                  , n = t.glsl1 || t
                  , r = n.vert
                  , a = n.frag;
                if (!this._templates[e]) {
                    for (var o = ++s, l = 0, h = 0; h < i.length; ++h) {
                        var c = i[h]
                          , u = 1;
                        if ("number" === c.type) {
                            var _ = c.range || [];
                            c.min = _[0] || 0,
                            c.max = _[1] || 4,
                            u = Math.ceil(Math.log2(c.max - c.min)),
                            c._map = function(t) {
                                return t - this.min << this._offset
                            }
                            .bind(c)
                        } else
                            c._map = function(t) {
                                return t ? 1 << this._offset : 0
                            }
                            .bind(c);
                        c._offset = l,
                        l += u
                    }
                    var f = t.uniforms || [];
                    if (t.samplers)
                        for (var d = 0; d < t.samplers.length; d++)
                            f.push(t.samplers[d]);
                    if (t.blocks)
                        for (var p = 0; p < t.blocks.length; p++)
                            for (var m = t.blocks[p].defines, y = t.blocks[p].members, v = 0; v < y.length; v++)
                                f.push({
                                    defines: m,
                                    name: y[v].name,
                                    type: y[v].type
                                });
                    this._templates[e] = {
                        id: o,
                        name: e,
                        vert: r,
                        frag: a,
                        defines: i,
                        attributes: t.attributes,
                        uniforms: f,
                        extensions: t.extensions
                    }
                }
            }
            ,
            e.getTemplate = function(t) {
                return this._templates[t]
            }
            ,
            e.hasProgram = function(t) {
                return void 0 !== this._templates[t]
            }
            ,
            e.getKey = function(t, e) {
                for (var i = this._templates[t], n = 0, r = 0; r < i.defines.length; ++r) {
                    var s = i.defines[r]
                      , a = e[s.name];
                    void 0 !== a && (n |= s._map(a))
                }
                return i.id + ":" + n
            }
            ,
            e.getProgram = function(t, e, i) {
                var n = t._programKey = t._programKey || this.getKey(t._programName, e)
                  , s = this._cache[n];
                if (s)
                    return s;
                var c = this._templates[t._programName]
                  , u = a(c.defines, e)
                  , _ = o(c.vert, c.defines, e);
                _ = u + l(_),
                this._highpSupported || (_ = h(_));
                var f = o(c.frag, c.defines, e);
                f = u + l(f),
                this._highpSupported || (f = h(f));
                var d = (s = new r.default.Program(this._device,{
                    vert: _,
                    frag: f
                })).link();
                if (d) {
                    var p = _.split("\n")
                      , m = f.split("\n")
                      , y = c.defines.length;
                    d.forEach((function(t) {
                        var e = t.line - 1
                          , n = t.line - y
                          , r = ("vs" === t.type ? p : m)[e]
                          , s = t.info || "Failed to compile " + t.type + " " + t.fileID + " (ln " + n + "): \n " + t.message + ": \n  " + r;
                        cc.error(i + " : " + s)
                    }
                    ))
                }
                return this._cache[n] = s,
                s
            }
            ,
            e._checkPrecision = function() {
                var t = this._device._gl
                  , e = !1;
                if (t.getShaderPrecisionFormat) {
                    var i = t.getShaderPrecisionFormat(t.VERTEX_SHADER, t.HIGH_FLOAT)
                      , n = t.getShaderPrecisionFormat(t.FRAGMENT_SHADER, t.HIGH_FLOAT);
                    e = i && i.precision > 0 && n && n.precision > 0
                }
                e || cc.warnID(9102),
                this._highpSupported = e
            }
            ,
            t
        }
        )();
        i.default = c,
        e.exports = i.default
    }
    ), {
        "../gfx": 315
    }],
    308: [(function(t, e, i) {
        "use strict";
        function n(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        i.__esModule = !0,
        i.default = void 0;
        var r = (function() {
            function t(t, e) {
                this._name = t,
                this._passes = e
            }
            var e, i;
            return t.prototype.clone = function() {
                for (var e = [], i = 0; i < this._passes.length; i++)
                    e.push(this._passes[i].clone());
                return new t(this._name,e)
            }
            ,
            e = t,
            (i = [{
                key: "name",
                get: function() {
                    return this._name
                }
            }, {
                key: "passes",
                get: function() {
                    return this._passes
                }
            }]) && n(e.prototype, i),
            t
        }
        )();
        i.default = r,
        e.exports = i.default
    }
    ), {}],
    309: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../../core/value-types"), s = (n = t("../enums")) && n.__esModule ? n : {
            default: n
        }, a = new r.Mat4, o = 0, l = (function() {
            function t() {
                this._id = o++,
                this._priority = 0,
                this._rect = {
                    x: 0,
                    y: 0,
                    w: 1,
                    h: 1
                },
                this._color = new r.Vec4(.3,.3,.3,1),
                this._depth = 1,
                this._stencil = 0,
                this._clearFlags = s.default.CLEAR_COLOR | s.default.CLEAR_DEPTH,
                this._clearModel = null,
                this._matView = cc.mat4(),
                this._matViewInv = cc.mat4(),
                this._matProj = cc.mat4(),
                this._matViewProj = cc.mat4(),
                this._matInvViewProj = cc.mat4(),
                this._stages = [],
                this._cullingByID = !1,
                this._framebuffer = null,
                this._shadowLight = null,
                this._cullingMask = 4294967295
            }
            var e = t.prototype;
            return e.getForward = function(t) {
                var e = this._matView.m;
                return r.Vec3.set(t, -e[2], -e[6], -e[10])
            }
            ,
            e.getPosition = function(t) {
                return r.Mat4.invert(a, this._matView),
                r.Mat4.getTranslation(t, a)
            }
            ,
            t
        }
        )();
        i.default = l,
        e.exports = i.default
    }
    ), {
        "../../core/value-types": 282,
        "../enums": 310
    }],
    310: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("./build/mappings")
          , r = {
            PROJ_PERSPECTIVE: 0,
            PROJ_ORTHO: 1,
            LIGHT_DIRECTIONAL: 0,
            LIGHT_POINT: 1,
            LIGHT_SPOT: 2,
            LIGHT_AMBIENT: 3,
            SHADOW_NONE: 0,
            SHADOW_HARD: 1,
            SHADOW_SOFT: 2,
            PARAM_INT: n.typeMap.int,
            PARAM_INT2: n.typeMap.ivec2,
            PARAM_INT3: n.typeMap.ivec3,
            PARAM_INT4: n.typeMap.ivec4,
            PARAM_FLOAT: n.typeMap.float,
            PARAM_FLOAT2: n.typeMap.vec2,
            PARAM_FLOAT3: n.typeMap.vec3,
            PARAM_FLOAT4: n.typeMap.vec4,
            PARAM_MAT2: n.typeMap.mat2,
            PARAM_MAT3: n.typeMap.mat3,
            PARAM_MAT4: n.typeMap.mat4,
            PARAM_TEXTURE_2D: n.typeMap.sampler2D,
            PARAM_TEXTURE_CUBE: n.typeMap.samplerCube,
            CLEAR_COLOR: 1,
            CLEAR_DEPTH: 2,
            CLEAR_STENCIL: 4,
            CLEAR_SKYBOX: 8,
            BUFFER_VIEW_INT8: 0,
            BUFFER_VIEW_UINT8: 1,
            BUFFER_VIEW_INT16: 2,
            BUFFER_VIEW_UINT16: 3,
            BUFFER_VIEW_INT32: 4,
            BUFFER_VIEW_UINT32: 5,
            BUFFER_VIEW_FLOAT32: 6
        };
        i.default = r,
        e.exports = i.default
    }
    ), {
        "./build/mappings": 303
    }],
    311: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r, s = h(t("./state")), a = t("./enums"), o = h(t("./texture-2d")), l = h(t("./texture-cube"));
        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function c(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var u = ((n = {})[5124] = function(t, e, i) {
            t.uniform1i(e, i)
        }
        ,
        n[5126] = function(t, e, i) {
            t.uniform1f(e, i)
        }
        ,
        n[35664] = function(t, e, i) {
            t.uniform2fv(e, i)
        }
        ,
        n[35665] = function(t, e, i) {
            t.uniform3fv(e, i)
        }
        ,
        n[35666] = function(t, e, i) {
            t.uniform4fv(e, i)
        }
        ,
        n[35667] = function(t, e, i) {
            t.uniform2iv(e, i)
        }
        ,
        n[35668] = function(t, e, i) {
            t.uniform3iv(e, i)
        }
        ,
        n[35669] = function(t, e, i) {
            t.uniform4iv(e, i)
        }
        ,
        n[35670] = function(t, e, i) {
            t.uniform1i(e, i)
        }
        ,
        n[35671] = function(t, e, i) {
            t.uniform2iv(e, i)
        }
        ,
        n[35672] = function(t, e, i) {
            t.uniform3iv(e, i)
        }
        ,
        n[35673] = function(t, e, i) {
            t.uniform4iv(e, i)
        }
        ,
        n[35674] = function(t, e, i) {
            t.uniformMatrix2fv(e, !1, i)
        }
        ,
        n[35675] = function(t, e, i) {
            t.uniformMatrix3fv(e, !1, i)
        }
        ,
        n[35676] = function(t, e, i) {
            t.uniformMatrix4fv(e, !1, i)
        }
        ,
        n[35678] = function(t, e, i) {
            t.uniform1i(e, i)
        }
        ,
        n[35680] = function(t, e, i) {
            t.uniform1i(e, i)
        }
        ,
        n)
          , _ = ((r = {})[5124] = function(t, e, i) {
            t.uniform1iv(e, i)
        }
        ,
        r[5126] = function(t, e, i) {
            t.uniform1fv(e, i)
        }
        ,
        r[35664] = function(t, e, i) {
            t.uniform2fv(e, i)
        }
        ,
        r[35665] = function(t, e, i) {
            t.uniform3fv(e, i)
        }
        ,
        r[35666] = function(t, e, i) {
            t.uniform4fv(e, i)
        }
        ,
        r[35667] = function(t, e, i) {
            t.uniform2iv(e, i)
        }
        ,
        r[35668] = function(t, e, i) {
            t.uniform3iv(e, i)
        }
        ,
        r[35669] = function(t, e, i) {
            t.uniform4iv(e, i)
        }
        ,
        r[35670] = function(t, e, i) {
            t.uniform1iv(e, i)
        }
        ,
        r[35671] = function(t, e, i) {
            t.uniform2iv(e, i)
        }
        ,
        r[35672] = function(t, e, i) {
            t.uniform3iv(e, i)
        }
        ,
        r[35673] = function(t, e, i) {
            t.uniform4iv(e, i)
        }
        ,
        r[35674] = function(t, e, i) {
            t.uniformMatrix2fv(e, !1, i)
        }
        ,
        r[35675] = function(t, e, i) {
            t.uniformMatrix3fv(e, !1, i)
        }
        ,
        r[35676] = function(t, e, i) {
            t.uniformMatrix4fv(e, !1, i)
        }
        ,
        r[35678] = function(t, e, i) {
            t.uniform1iv(e, i)
        }
        ,
        r[35680] = function(t, e, i) {
            t.uniform1iv(e, i)
        }
        ,
        r);
        function f(t, e, i) {
            if (e.blend !== i.blend)
                return i.blend ? (t.enable(t.BLEND),
                i.blendSrc !== a.enums.BLEND_CONSTANT_COLOR && i.blendSrc !== a.enums.BLEND_ONE_MINUS_CONSTANT_COLOR && i.blendDst !== a.enums.BLEND_CONSTANT_COLOR && i.blendDst !== a.enums.BLEND_ONE_MINUS_CONSTANT_COLOR || t.blendColor((i.blendColor >> 24) / 255, (i.blendColor >> 16 & 255) / 255, (i.blendColor >> 8 & 255) / 255, (255 & i.blendColor) / 255),
                void (i.blendSep ? (t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha),
                t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (t.blendFunc(i.blendSrc, i.blendDst),
                t.blendEquation(i.blendEq)))) : void t.disable(t.BLEND);
            !1 !== i.blend && (e.blendColor !== i.blendColor && t.blendColor((i.blendColor >> 24) / 255, (i.blendColor >> 16 & 255) / 255, (i.blendColor >> 8 & 255) / 255, (255 & i.blendColor) / 255),
            e.blendSep === i.blendSep ? i.blendSep ? (e.blendSrc === i.blendSrc && e.blendDst === i.blendDst && e.blendSrcAlpha === i.blendSrcAlpha && e.blendDstAlpha === i.blendDstAlpha || t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha),
            e.blendEq === i.blendEq && e.blendAlphaEq === i.blendAlphaEq || t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (e.blendSrc === i.blendSrc && e.blendDst === i.blendDst || t.blendFunc(i.blendSrc, i.blendDst),
            e.blendEq !== i.blendEq && t.blendEquation(i.blendEq)) : i.blendSep ? (t.blendFuncSeparate(i.blendSrc, i.blendDst, i.blendSrcAlpha, i.blendDstAlpha),
            t.blendEquationSeparate(i.blendEq, i.blendAlphaEq)) : (t.blendFunc(i.blendSrc, i.blendDst),
            t.blendEquation(i.blendEq)))
        }
        function d(t, e, i) {
            if (e.depthTest !== i.depthTest)
                return i.depthTest ? (t.enable(t.DEPTH_TEST),
                t.depthFunc(i.depthFunc),
                void t.depthMask(i.depthWrite)) : void t.disable(t.DEPTH_TEST);
            e.depthWrite !== i.depthWrite && t.depthMask(i.depthWrite),
            !1 !== i.depthTest ? e.depthFunc !== i.depthFunc && t.depthFunc(i.depthFunc) : i.depthWrite && (i.depthTest = !0,
            i.depthFunc = a.enums.DS_FUNC_ALWAYS,
            t.enable(t.DEPTH_TEST),
            t.depthFunc(i.depthFunc))
        }
        function p(t, e, i) {
            if (i.stencilTest !== a.enums.STENCIL_INHERIT)
                return i.stencilTest !== e.stencilTest ? i.stencilTest === a.enums.STENCIL_DISABLE ? void t.disable(t.STENCIL_TEST) : (t.enable(t.STENCIL_TEST),
                void (i.stencilSep ? (t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront),
                t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront),
                t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack),
                t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack),
                t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                t.stencilMask(i.stencilWriteMaskFront),
                t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront)))) : void (i.stencilTest !== a.enums.STENCIL_DISABLE && (e.stencilSep === i.stencilSep ? i.stencilSep ? (e.stencilFuncFront === i.stencilFuncFront && e.stencilRefFront === i.stencilRefFront && e.stencilMaskFront === i.stencilMaskFront || t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                e.stencilWriteMaskFront !== i.stencilWriteMaskFront && t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront),
                e.stencilFailOpFront === i.stencilFailOpFront && e.stencilZFailOpFront === i.stencilZFailOpFront && e.stencilZPassOpFront === i.stencilZPassOpFront || t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront),
                e.stencilFuncBack === i.stencilFuncBack && e.stencilRefBack === i.stencilRefBack && e.stencilMaskBack === i.stencilMaskBack || t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack),
                e.stencilWriteMaskBack !== i.stencilWriteMaskBack && t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack),
                e.stencilFailOpBack === i.stencilFailOpBack && e.stencilZFailOpBack === i.stencilZFailOpBack && e.stencilZPassOpBack === i.stencilZPassOpBack || t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (e.stencilFuncFront === i.stencilFuncFront && e.stencilRefFront === i.stencilRefFront && e.stencilMaskFront === i.stencilMaskFront || t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                e.stencilWriteMaskFront !== i.stencilWriteMaskFront && t.stencilMask(i.stencilWriteMaskFront),
                e.stencilFailOpFront === i.stencilFailOpFront && e.stencilZFailOpFront === i.stencilZFailOpFront && e.stencilZPassOpFront === i.stencilZPassOpFront || t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront)) : i.stencilSep ? (t.stencilFuncSeparate(t.FRONT, i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                t.stencilMaskSeparate(t.FRONT, i.stencilWriteMaskFront),
                t.stencilOpSeparate(t.FRONT, i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront),
                t.stencilFuncSeparate(t.BACK, i.stencilFuncBack, i.stencilRefBack, i.stencilMaskBack),
                t.stencilMaskSeparate(t.BACK, i.stencilWriteMaskBack),
                t.stencilOpSeparate(t.BACK, i.stencilFailOpBack, i.stencilZFailOpBack, i.stencilZPassOpBack)) : (t.stencilFunc(i.stencilFuncFront, i.stencilRefFront, i.stencilMaskFront),
                t.stencilMask(i.stencilWriteMaskFront),
                t.stencilOp(i.stencilFailOpFront, i.stencilZFailOpFront, i.stencilZPassOpFront))))
        }
        function m(t, e, i) {
            e.cullMode !== i.cullMode && (i.cullMode !== a.enums.CULL_NONE ? (t.enable(t.CULL_FACE),
            t.cullFace(i.cullMode)) : t.disable(t.CULL_FACE))
        }
        function y(t, e, i, n) {
            var r = !1;
            if (-1 !== n.maxStream) {
                if (i.maxStream !== n.maxStream)
                    r = !0;
                else if (i.program !== n.program)
                    r = !0;
                else
                    for (var s = 0; s < n.maxStream + 1; ++s)
                        if (i.vertexBuffers[s] !== n.vertexBuffers[s] || i.vertexBufferOffsets[s] !== n.vertexBufferOffsets[s]) {
                            r = !0;
                            break
                        }
                if (r) {
                    for (var a = 0; a < t._caps.maxVertexAttribs; ++a)
                        t._newAttributes[a] = 0;
                    for (var o = 0; o < n.maxStream + 1; ++o) {
                        var l = n.vertexBuffers[o]
                          , h = n.vertexBufferOffsets[o];
                        if (l && -1 !== l._glID) {
                            e.bindBuffer(e.ARRAY_BUFFER, l._glID);
                            for (var c = 0; c < n.program._attributes.length; ++c) {
                                var u = n.program._attributes[c]
                                  , _ = l._format.element(u.name);
                                _ ? (0 === t._enabledAttributes[u.location] && (e.enableVertexAttribArray(u.location),
                                t._enabledAttributes[u.location] = 1),
                                t._newAttributes[u.location] = 1,
                                e.vertexAttribPointer(u.location, _.num, _.type, _.normalize, _.stride, _.offset + h * _.stride)) : console.warn("Can not find vertex attribute: " + u.name)
                            }
                        }
                    }
                    for (var f = 0; f < t._caps.maxVertexAttribs; ++f)
                        t._enabledAttributes[f] !== t._newAttributes[f] && (e.disableVertexAttribArray(f),
                        t._enabledAttributes[f] = 0)
                }
            }
        }
        function v(t, e, i) {
            for (var n = 0; n < i.maxTextureSlot + 1; ++n)
                if (e.textureUnits[n] !== i.textureUnits[n]) {
                    var r = i.textureUnits[n];
                    r && -1 !== r._glID && (t.activeTexture(t.TEXTURE0 + n),
                    t.bindTexture(r._target, r._glID))
                }
        }
        function g(t, e, i, n) {
            void 0 === n && (n = 0),
            i instanceof o.default ? t.framebufferTexture2D(t.FRAMEBUFFER, e, t.TEXTURE_2D, i._glID, 0) : i instanceof l.default ? t.framebufferTexture2D(t.FRAMEBUFFER, e, t.TEXTURE_CUBE_MAP_POSITIVE_X + n, i._glID, 0) : t.framebufferRenderbuffer(t.FRAMEBUFFER, e, t.RENDERBUFFER, i._glID)
        }
        var A = (function() {
            function t(t, e) {
                var i;
                void 0 === (e = e || {}).alpha && (e.alpha = !1),
                void 0 === e.stencil && (e.stencil = !0),
                void 0 === e.depth && (e.depth = !0),
                void 0 === e.antialias && (e.antialias = !1),
                void 0 === e.preserveDrawingBuffer && (e.preserveDrawingBuffer = !1);
                try {
                    i = t.getContext("webgl", e) || t.getContext("experimental-webgl", e) || t.getContext("webkit-3d", e) || t.getContext("moz-webgl", e)
                } catch (r) {
                    return void console.error(r)
                }
                i || console.error("This device does not support webgl"),
                this._gl = i,
                this._extensions = {},
                this._caps = {},
                this._stats = {
                    texture: 0,
                    vb: 0,
                    ib: 0,
                    drawcalls: 0
                },
                this._initExtensions(["EXT_texture_filter_anisotropic", "EXT_shader_texture_lod", "OES_standard_derivatives", "OES_texture_float", "OES_texture_float_linear", "OES_texture_half_float", "OES_texture_half_float_linear", "OES_vertex_array_object", "WEBGL_compressed_texture_atc", "WEBGL_compressed_texture_etc", "WEBGL_compressed_texture_etc1", "WEBGL_compressed_texture_pvrtc", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", "WEBGL_draw_buffers"]),
                this._initCaps(),
                this._initStates(),
                s.default.initDefault(this),
                this._current = new s.default(this),
                this._next = new s.default(this),
                this._uniforms = {},
                this._vx = this._vy = this._vw = this._vh = 0,
                this._sx = this._sy = this._sw = this._sh = 0,
                this._framebuffer = null,
                this._enabledAttributes = new Array(this._caps.maxVertexAttribs),
                this._newAttributes = new Array(this._caps.maxVertexAttribs);
                for (var n = 0; n < this._caps.maxVertexAttribs; ++n)
                    this._enabledAttributes[n] = 0,
                    this._newAttributes[n] = 0
            }
            var e, i, n = t.prototype;
            return n._initExtensions = function(t) {
                for (var e = this._gl, i = 0; i < t.length; ++i)
                    for (var n = t[i], r = ["", "WEBKIT_", "MOZ_"], s = 0; s < r.length; s++)
                        try {
                            var a = e.getExtension(r[s] + n);
                            if (a) {
                                this._extensions[n] = a;
                                break
                            }
                        } catch (o) {
                            console.error(o)
                        }
            }
            ,
            n._initCaps = function() {
                var t = this._gl
                  , e = this.ext("WEBGL_draw_buffers");
                this._caps.maxVertexStreams = 4,
                this._caps.maxVertexTextures = t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),
                this._caps.maxFragUniforms = t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),
                this._caps.maxTextureUnits = t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),
                this._caps.maxVertexAttribs = t.getParameter(t.MAX_VERTEX_ATTRIBS),
                this._caps.maxTextureSize = t.getParameter(t.MAX_TEXTURE_SIZE),
                this._caps.maxDrawBuffers = e ? t.getParameter(e.MAX_DRAW_BUFFERS_WEBGL) : 1,
                this._caps.maxColorAttachments = e ? t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL) : 1
            }
            ,
            n._initStates = function() {
                var t = this._gl;
                t.disable(t.BLEND),
                t.blendFunc(t.ONE, t.ZERO),
                t.blendEquation(t.FUNC_ADD),
                t.blendColor(1, 1, 1, 1),
                t.colorMask(!0, !0, !0, !0),
                t.enable(t.CULL_FACE),
                t.cullFace(t.BACK),
                t.disable(t.DEPTH_TEST),
                t.depthFunc(t.LESS),
                t.depthMask(!1),
                t.disable(t.POLYGON_OFFSET_FILL),
                t.depthRange(0, 1),
                t.disable(t.STENCIL_TEST),
                t.stencilFunc(t.ALWAYS, 0, 255),
                t.stencilMask(255),
                t.stencilOp(t.KEEP, t.KEEP, t.KEEP),
                t.clearDepth(1),
                t.clearColor(0, 0, 0, 0),
                t.clearStencil(0),
                t.disable(t.SCISSOR_TEST)
            }
            ,
            n._restoreTexture = function(t) {
                var e = this._gl
                  , i = this._current.textureUnits[t];
                i && -1 !== i._glID ? e.bindTexture(i._target, i._glID) : e.bindTexture(e.TEXTURE_2D, null)
            }
            ,
            n._restoreIndexBuffer = function() {
                var t = this._gl
                  , e = this._current.indexBuffer;
                e && -1 !== e._glID ? t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, e._glID) : t.bindBuffer(t.ELEMENT_ARRAY_BUFFER, null)
            }
            ,
            n.ext = function(t) {
                return this._extensions[t]
            }
            ,
            n.allowFloatTexture = function() {
                return null != this.ext("OES_texture_float")
            }
            ,
            n.setFrameBuffer = function(t) {
                if (this._framebuffer !== t) {
                    this._framebuffer = t;
                    var e = this._gl;
                    if (t) {
                        e.bindFramebuffer(e.FRAMEBUFFER, t._glID);
                        for (var i = t._colors.length, n = 0; n < i; ++n) {
                            var r = t._colors[n];
                            g(e, e.COLOR_ATTACHMENT0 + n, r)
                        }
                        for (var s = i; s < this._caps.maxColorAttachments; ++s)
                            e.framebufferTexture2D(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0 + s, e.TEXTURE_2D, null, 0);
                        t._depth && g(e, e.DEPTH_ATTACHMENT, t._depth),
                        t._stencil && g(e, e.STENCIL_ATTACHMENT, t._stencil),
                        t._depthStencil && g(e, e.DEPTH_STENCIL_ATTACHMENT, t._depthStencil)
                    } else
                        e.bindFramebuffer(e.FRAMEBUFFER, null)
                }
            }
            ,
            n.setViewport = function(t, e, i, n) {
                this._vx === t && this._vy === e && this._vw === i && this._vh === n || (this._gl.viewport(t, e, i, n),
                this._vx = t,
                this._vy = e,
                this._vw = i,
                this._vh = n)
            }
            ,
            n.setScissor = function(t, e, i, n) {
                this._sx === t && this._sy === e && this._sw === i && this._sh === n || (this._gl.scissor(t, e, i, n),
                this._sx = t,
                this._sy = e,
                this._sw = i,
                this._sh = n)
            }
            ,
            n.clear = function(t) {
                if (void 0 !== t.color || void 0 !== t.depth || void 0 !== t.stencil) {
                    var e = this._gl
                      , i = 0;
                    void 0 !== t.color && (i |= e.COLOR_BUFFER_BIT,
                    e.clearColor(t.color[0], t.color[1], t.color[2], t.color[3])),
                    void 0 !== t.depth && (i |= e.DEPTH_BUFFER_BIT,
                    e.clearDepth(t.depth),
                    e.enable(e.DEPTH_TEST),
                    e.depthMask(!0),
                    e.depthFunc(e.ALWAYS)),
                    void 0 !== t.stencil && (i |= e.STENCIL_BUFFER_BIT,
                    e.clearStencil(t.stencil)),
                    e.clear(i),
                    void 0 !== t.depth && (!1 === this._current.depthTest ? e.disable(e.DEPTH_TEST) : (!1 === this._current.depthWrite && e.depthMask(!1),
                    this._current.depthFunc !== a.enums.DS_FUNC_ALWAYS && e.depthFunc(this._current.depthFunc)))
                }
            }
            ,
            n.enableBlend = function() {
                this._next.blend = !0
            }
            ,
            n.enableDepthTest = function() {
                this._next.depthTest = !0
            }
            ,
            n.enableDepthWrite = function() {
                this._next.depthWrite = !0
            }
            ,
            n.setStencilTest = function(t) {
                this._next.stencilTest = t
            }
            ,
            n.setStencilFunc = function(t, e, i) {
                this._next.stencilSep = !1,
                this._next.stencilFuncFront = this._next.stencilFuncBack = t,
                this._next.stencilRefFront = this._next.stencilRefBack = e,
                this._next.stencilMaskFront = this._next.stencilMaskBack = i
            }
            ,
            n.setStencilFuncFront = function(t, e, i) {
                this._next.stencilSep = !0,
                this._next.stencilFuncFront = t,
                this._next.stencilRefFront = e,
                this._next.stencilMaskFront = i
            }
            ,
            n.setStencilFuncBack = function(t, e, i) {
                this._next.stencilSep = !0,
                this._next.stencilFuncBack = t,
                this._next.stencilRefBack = e,
                this._next.stencilMaskBack = i
            }
            ,
            n.setStencilOp = function(t, e, i, n) {
                this._next.stencilFailOpFront = this._next.stencilFailOpBack = t,
                this._next.stencilZFailOpFront = this._next.stencilZFailOpBack = e,
                this._next.stencilZPassOpFront = this._next.stencilZPassOpBack = i,
                this._next.stencilWriteMaskFront = this._next.stencilWriteMaskBack = n
            }
            ,
            n.setStencilOpFront = function(t, e, i, n) {
                this._next.stencilSep = !0,
                this._next.stencilFailOpFront = t,
                this._next.stencilZFailOpFront = e,
                this._next.stencilZPassOpFront = i,
                this._next.stencilWriteMaskFront = n
            }
            ,
            n.setStencilOpBack = function(t, e, i, n) {
                this._next.stencilSep = !0,
                this._next.stencilFailOpBack = t,
                this._next.stencilZFailOpBack = e,
                this._next.stencilZPassOpBack = i,
                this._next.stencilWriteMaskBack = n
            }
            ,
            n.setDepthFunc = function(t) {
                this._next.depthFunc = t
            }
            ,
            n.setBlendColor32 = function(t) {
                this._next.blendColor = t
            }
            ,
            n.setBlendColor = function(t, e, i, n) {
                this._next.blendColor = (255 * t << 24 | 255 * e << 16 | 255 * i << 8 | 255 * n) >>> 0
            }
            ,
            n.setBlendFunc = function(t, e) {
                this._next.blendSep = !1,
                this._next.blendSrc = t,
                this._next.blendDst = e
            }
            ,
            n.setBlendFuncSep = function(t, e, i, n) {
                this._next.blendSep = !0,
                this._next.blendSrc = t,
                this._next.blendDst = e,
                this._next.blendSrcAlpha = i,
                this._next.blendDstAlpha = n
            }
            ,
            n.setBlendEq = function(t) {
                this._next.blendSep = !1,
                this._next.blendEq = t
            }
            ,
            n.setBlendEqSep = function(t, e) {
                this._next.blendSep = !0,
                this._next.blendEq = t,
                this._next.blendAlphaEq = e
            }
            ,
            n.setCullMode = function(t) {
                this._next.cullMode = t
            }
            ,
            n.setVertexBuffer = function(t, e, i) {
                void 0 === i && (i = 0),
                this._next.vertexBuffers[t] = e,
                this._next.vertexBufferOffsets[t] = i,
                this._next.maxStream < t && (this._next.maxStream = t)
            }
            ,
            n.setIndexBuffer = function(t) {
                this._next.indexBuffer = t
            }
            ,
            n.setProgram = function(t) {
                this._next.program = t
            }
            ,
            n.setTexture = function(t, e, i) {
                i >= this._caps.maxTextureUnits ? console.warn("Can not set texture " + t + " at stage " + i + ", max texture exceed: " + this._caps.maxTextureUnits) : (this._next.textureUnits[i] = e,
                this.setUniform(t, i),
                this._next.maxTextureSlot < i && (this._next.maxTextureSlot = i))
            }
            ,
            n.setTextureArray = function(t, e, i) {
                var n = e.length;
                if (n >= this._caps.maxTextureUnits)
                    console.warn("Can not set " + n + " textures for " + t + ", max texture exceed: " + this._caps.maxTextureUnits);
                else {
                    for (var r = 0; r < n; ++r) {
                        var s = i[r];
                        this._next.textureUnits[s] = e[r],
                        this._next.maxTextureSlot < s && (this._next.maxTextureSlot = s)
                    }
                    this.setUniform(t, i)
                }
            }
            ,
            n.setUniform = function(t, e) {
                var i = this._uniforms[t]
                  , n = !1
                  , r = !1
                  , s = !1
                  , a = !1;
                do {
                    if (!i)
                        break;
                    if (s = Array.isArray(e) || e instanceof Float32Array,
                    a = e instanceof Int32Array,
                    r = s || a,
                    i.isArray !== r)
                        break;
                    if (i.isArray && i.value.length !== e.length)
                        break;
                    n = !0
                } while (0);if (n) {
                    var o = i.value
                      , l = !1;
                    if (i.isArray)
                        for (var h = 0, c = o.length; h < c; h++)
                            o[h] !== e[h] && (l = !0,
                            o[h] = e[h]);
                    else
                        o !== e && (l = !0,
                        i.value = e);
                    l && (i.dirty = !0)
                } else {
                    var u = e;
                    s ? u = new Float32Array(e) : a && (u = new Int32Array(e)),
                    i = {
                        dirty: !0,
                        value: u,
                        isArray: r
                    }
                }
                this._uniforms[t] = i
            }
            ,
            n.setUniformDirectly = function(t, e) {
                var i = this._uniforms[t];
                i || (this._uniforms[t] = i = {}),
                i.dirty = !0,
                i.value = e
            }
            ,
            n.setPrimitiveType = function(t) {
                this._next.primitiveType = t
            }
            ,
            n.resetDrawCalls = function() {
                this._stats.drawcalls = 0
            }
            ,
            n.getDrawCalls = function() {
                return this._stats.drawcalls
            }
            ,
            n.draw = function(t, e) {
                var i = this._gl
                  , n = this._current
                  , r = this._next;
                f(i, n, r),
                d(i, n, r),
                p(i, n, r),
                m(i, n, r),
                y(this, i, n, r),
                n.indexBuffer !== r.indexBuffer && i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, r.indexBuffer && -1 !== r.indexBuffer._glID ? r.indexBuffer._glID : null);
                var s = !1;
                n.program !== r.program && (r.program._linked ? i.useProgram(r.program._glID) : console.warn("Failed to use program: has not linked yet."),
                s = !0),
                v(i, n, r);
                for (var a = 0; a < r.program._uniforms.length; ++a) {
                    var o = r.program._uniforms[a]
                      , l = this._uniforms[o.name];
                    if (l && (s || l.dirty)) {
                        l.dirty = !1;
                        var h = void 0 === o.size ? u[o.type] : _[o.type];
                        h ? h(i, o.location, l.value) : console.warn("Can not find commit function for uniform " + o.name)
                    }
                }
                e && (r.indexBuffer ? i.drawElements(this._next.primitiveType, e, r.indexBuffer._format, t * r.indexBuffer._bytesPerIndex) : i.drawArrays(this._next.primitiveType, t, e),
                this._stats.drawcalls++),
                n.set(r),
                r.reset()
            }
            ,
            e = t,
            (i = [{
                key: "caps",
                get: function() {
                    return this._caps
                }
            }]) && c(e.prototype, i),
            t
        }
        )();
        i.default = A,
        e.exports = i.default
    }
    ), {
        "./enums": 312,
        "./state": 319,
        "./texture-2d": 320,
        "./texture-cube": 321
    }],
    312: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.attrTypeBytes = function(t) {
            return t === s.ATTR_TYPE_INT8 ? 1 : t === s.ATTR_TYPE_UINT8 ? 1 : t === s.ATTR_TYPE_INT16 ? 2 : t === s.ATTR_TYPE_UINT16 ? 2 : t === s.ATTR_TYPE_INT32 ? 4 : t === s.ATTR_TYPE_UINT32 ? 4 : t === s.ATTR_TYPE_FLOAT32 ? 4 : (console.warn("Unknown ATTR_TYPE: " + t),
            0)
        }
        ,
        i.glFilter = function(t, e, i) {
            void 0 === i && (i = -1);
            var r = n[e][i + 1];
            return void 0 === r ? (console.warn("Unknown FILTER: " + e),
            -1 === i ? t.LINEAR : t.LINEAR_MIPMAP_LINEAR) : r
        }
        ,
        i.glTextureFmt = function(t) {
            var e = r[t];
            return void 0 === e ? (console.warn("Unknown TEXTURE_FMT: " + t),
            r[s.TEXTURE_FMT_RGBA8]) : e
        }
        ,
        i.enums = void 0;
        var n = [[9728, 9984, 9986], [9729, 9985, 9987]]
          , r = [{
            format: 6407,
            internalFormat: 33776,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 33777,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 33778,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 33779,
            pixelType: null
        }, {
            format: 6407,
            internalFormat: 36196,
            pixelType: null
        }, {
            format: 6407,
            internalFormat: 35841,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 35843,
            pixelType: null
        }, {
            format: 6407,
            internalFormat: 35840,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 35842,
            pixelType: null
        }, {
            format: 6406,
            internalFormat: 6406,
            pixelType: 5121
        }, {
            format: 6409,
            internalFormat: 6409,
            pixelType: 5121
        }, {
            format: 6410,
            internalFormat: 6410,
            pixelType: 5121
        }, {
            format: 6407,
            internalFormat: 6407,
            pixelType: 33635
        }, {
            format: 6408,
            internalFormat: 6408,
            pixelType: 32820
        }, {
            format: 6408,
            internalFormat: 6408,
            pixelType: 32819
        }, {
            format: 6407,
            internalFormat: 6407,
            pixelType: 5121
        }, {
            format: 6408,
            internalFormat: 6408,
            pixelType: 5121
        }, {
            format: 6407,
            internalFormat: 6407,
            pixelType: 36193
        }, {
            format: 6408,
            internalFormat: 6408,
            pixelType: 36193
        }, {
            format: 6407,
            internalFormat: 6407,
            pixelType: 5126
        }, {
            format: 6408,
            internalFormat: 6408,
            pixelType: 5126
        }, {
            format: null,
            internalFormat: null,
            pixelType: null
        }, {
            format: null,
            internalFormat: null,
            pixelType: null
        }, {
            format: null,
            internalFormat: null,
            pixelType: null
        }, {
            format: null,
            internalFormat: null,
            pixelType: null
        }, {
            format: 6402,
            internalFormat: 6402,
            pixelType: 5123
        }, {
            format: 6402,
            internalFormat: 6402,
            pixelType: 5125
        }, {
            format: 6402,
            internalFormat: 6402,
            pixelType: 5125
        }, {
            format: 6407,
            internalFormat: 37492,
            pixelType: null
        }, {
            format: 6408,
            internalFormat: 37496,
            pixelType: null
        }]
          , s = {
            USAGE_STATIC: 35044,
            USAGE_DYNAMIC: 35048,
            USAGE_STREAM: 35040,
            INDEX_FMT_UINT8: 5121,
            INDEX_FMT_UINT16: 5123,
            INDEX_FMT_UINT32: 5125,
            ATTR_POSITION: "a_position",
            ATTR_NORMAL: "a_normal",
            ATTR_TANGENT: "a_tangent",
            ATTR_BITANGENT: "a_bitangent",
            ATTR_WEIGHTS: "a_weights",
            ATTR_JOINTS: "a_joints",
            ATTR_COLOR: "a_color",
            ATTR_COLOR0: "a_color0",
            ATTR_COLOR1: "a_color1",
            ATTR_UV: "a_uv",
            ATTR_UV0: "a_uv0",
            ATTR_UV1: "a_uv1",
            ATTR_UV2: "a_uv2",
            ATTR_UV3: "a_uv3",
            ATTR_UV4: "a_uv4",
            ATTR_UV5: "a_uv5",
            ATTR_UV6: "a_uv6",
            ATTR_UV7: "a_uv7",
            ATTR_TEX_COORD: "a_texCoord",
            ATTR_TEX_COORD1: "a_texCoord1",
            ATTR_TEX_COORD2: "a_texCoord2",
            ATTR_TEX_COORD3: "a_texCoord3",
            ATTR_TEX_COORD4: "a_texCoord4",
            ATTR_TEX_COORD5: "a_texCoord5",
            ATTR_TEX_COORD6: "a_texCoord6",
            ATTR_TEX_COORD7: "a_texCoord7",
            ATTR_TEX_COORD8: "a_texCoord8",
            ATTR_TYPE_INT8: 5120,
            ATTR_TYPE_UINT8: 5121,
            ATTR_TYPE_INT16: 5122,
            ATTR_TYPE_UINT16: 5123,
            ATTR_TYPE_INT32: 5124,
            ATTR_TYPE_UINT32: 5125,
            ATTR_TYPE_FLOAT32: 5126,
            FILTER_NEAREST: 0,
            FILTER_LINEAR: 1,
            WRAP_REPEAT: 10497,
            WRAP_CLAMP: 33071,
            WRAP_MIRROR: 33648,
            TEXTURE_FMT_RGB_DXT1: 0,
            TEXTURE_FMT_RGBA_DXT1: 1,
            TEXTURE_FMT_RGBA_DXT3: 2,
            TEXTURE_FMT_RGBA_DXT5: 3,
            TEXTURE_FMT_RGB_ETC1: 4,
            TEXTURE_FMT_RGB_PVRTC_2BPPV1: 5,
            TEXTURE_FMT_RGBA_PVRTC_2BPPV1: 6,
            TEXTURE_FMT_RGB_PVRTC_4BPPV1: 7,
            TEXTURE_FMT_RGBA_PVRTC_4BPPV1: 8,
            TEXTURE_FMT_A8: 9,
            TEXTURE_FMT_L8: 10,
            TEXTURE_FMT_L8_A8: 11,
            TEXTURE_FMT_R5_G6_B5: 12,
            TEXTURE_FMT_R5_G5_B5_A1: 13,
            TEXTURE_FMT_R4_G4_B4_A4: 14,
            TEXTURE_FMT_RGB8: 15,
            TEXTURE_FMT_RGBA8: 16,
            TEXTURE_FMT_RGB16F: 17,
            TEXTURE_FMT_RGBA16F: 18,
            TEXTURE_FMT_RGB32F: 19,
            TEXTURE_FMT_RGBA32F: 20,
            TEXTURE_FMT_R32F: 21,
            TEXTURE_FMT_111110F: 22,
            TEXTURE_FMT_SRGB: 23,
            TEXTURE_FMT_SRGBA: 24,
            TEXTURE_FMT_D16: 25,
            TEXTURE_FMT_D32: 26,
            TEXTURE_FMT_D24S8: 27,
            TEXTURE_FMT_RGB_ETC2: 28,
            TEXTURE_FMT_RGBA_ETC2: 29,
            DS_FUNC_NEVER: 512,
            DS_FUNC_LESS: 513,
            DS_FUNC_EQUAL: 514,
            DS_FUNC_LEQUAL: 515,
            DS_FUNC_GREATER: 516,
            DS_FUNC_NOTEQUAL: 517,
            DS_FUNC_GEQUAL: 518,
            DS_FUNC_ALWAYS: 519,
            RB_FMT_RGBA4: 32854,
            RB_FMT_RGB5_A1: 32855,
            RB_FMT_RGB565: 36194,
            RB_FMT_D16: 33189,
            RB_FMT_S8: 36168,
            RB_FMT_D24S8: 34041,
            BLEND_FUNC_ADD: 32774,
            BLEND_FUNC_SUBTRACT: 32778,
            BLEND_FUNC_REVERSE_SUBTRACT: 32779,
            BLEND_ZERO: 0,
            BLEND_ONE: 1,
            BLEND_SRC_COLOR: 768,
            BLEND_ONE_MINUS_SRC_COLOR: 769,
            BLEND_DST_COLOR: 774,
            BLEND_ONE_MINUS_DST_COLOR: 775,
            BLEND_SRC_ALPHA: 770,
            BLEND_ONE_MINUS_SRC_ALPHA: 771,
            BLEND_DST_ALPHA: 772,
            BLEND_ONE_MINUS_DST_ALPHA: 773,
            BLEND_CONSTANT_COLOR: 32769,
            BLEND_ONE_MINUS_CONSTANT_COLOR: 32770,
            BLEND_CONSTANT_ALPHA: 32771,
            BLEND_ONE_MINUS_CONSTANT_ALPHA: 32772,
            BLEND_SRC_ALPHA_SATURATE: 776,
            STENCIL_DISABLE: 0,
            STENCIL_ENABLE: 1,
            STENCIL_INHERIT: 2,
            STENCIL_OP_KEEP: 7680,
            STENCIL_OP_ZERO: 0,
            STENCIL_OP_REPLACE: 7681,
            STENCIL_OP_INCR: 7682,
            STENCIL_OP_INCR_WRAP: 34055,
            STENCIL_OP_DECR: 7683,
            STENCIL_OP_DECR_WRAP: 34056,
            STENCIL_OP_INVERT: 5386,
            CULL_NONE: 0,
            CULL_FRONT: 1028,
            CULL_BACK: 1029,
            CULL_FRONT_AND_BACK: 1032,
            PT_POINTS: 0,
            PT_LINES: 1,
            PT_LINE_LOOP: 2,
            PT_LINE_STRIP: 3,
            PT_TRIANGLES: 4,
            PT_TRIANGLE_STRIP: 5,
            PT_TRIANGLE_FAN: 6
        };
        i.enums = s
    }
    ), {}],
    313: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t(t, e, i, n) {
                this._device = t,
                this._width = e,
                this._height = i,
                this._colors = n.colors || [],
                this._depth = n.depth || null,
                this._stencil = n.stencil || null,
                this._depthStencil = n.depthStencil || null,
                this._glID = t._gl.createFramebuffer()
            }
            var e = t.prototype;
            return e.destroy = function() {
                null !== this._glID ? (this._device._gl.deleteFramebuffer(this._glID),
                this._glID = null) : console.error("The frame-buffer already destroyed")
            }
            ,
            e.getHandle = function() {
                return this._glID
            }
            ,
            t
        }
        )();
        i.default = n,
        e.exports = i.default
    }
    ), {}],
    314: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("./enums");
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = ((n = {})[r.enums.INDEX_FMT_UINT8] = 1,
        n[r.enums.INDEX_FMT_UINT16] = 2,
        n[r.enums.INDEX_FMT_UINT32] = 4,
        n)
          , o = (function() {
            function t(t, e, i, n) {
                this._device = t,
                this._format = e,
                this._usage = i,
                this._bytesPerIndex = a[e],
                this._bytes = n.byteLength,
                this._numIndices = this._bytes / this._bytesPerIndex,
                this._needExpandDataStore = !0,
                this._glID = t._gl.createBuffer(),
                this.update(0, n),
                t._stats.ib += this._bytes
            }
            var e, i, n = t.prototype;
            return n.destroy = function() {
                -1 !== this._glID ? (this._device._gl.deleteBuffer(this._glID),
                this._device._stats.ib -= this.bytes,
                this._glID = -1) : console.error("The buffer already destroyed")
            }
            ,
            n.update = function(t, e) {
                if (-1 !== this._glID) {
                    if (0 !== e.byteLength) {
                        if (t + e.byteLength > this._bytes) {
                            if (t)
                                return void console.error("Failed to update data, bytes exceed.");
                            this._needExpandDataStore = !0,
                            this._bytes = t + e.byteLength,
                            this._numIndices = this._bytes / this._bytesPerIndex
                        }
                        var i = this._device._gl
                          , n = this._usage;
                        i.bindBuffer(i.ELEMENT_ARRAY_BUFFER, this._glID),
                        this._needExpandDataStore ? (i.bufferData(i.ELEMENT_ARRAY_BUFFER, e, n),
                        this._needExpandDataStore = !1) : i.bufferSubData(i.ELEMENT_ARRAY_BUFFER, t, e),
                        this._device._restoreIndexBuffer()
                    }
                } else
                    console.error("The buffer is destroyed")
            }
            ,
            n.setUsage = function(t) {
                this._usage = t
            }
            ,
            e = t,
            (i = [{
                key: "count",
                get: function() {
                    return this._numIndices
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        o.BYTES_PER_INDEX = a;
        var l = o;
        i.default = l,
        e.exports = i.default
    }
    ), {
        "./enums": 312
    }],
    315: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("./enums");
        n = {
            VertexFormat: t("./vertex-format"),
            IndexBuffer: t("./index-buffer"),
            VertexBuffer: t("./vertex-buffer"),
            Program: t("./program"),
            Texture: t("./texture"),
            Texture2D: t("./texture-2d"),
            TextureCube: t("./texture-cube"),
            RenderBuffer: t("./render-buffer"),
            FrameBuffer: t("./frame-buffer"),
            Device: t("./device"),
            attrTypeBytes: r.attrTypeBytes,
            glFilter: r.glFilter,
            glTextureFmt: r.glTextureFmt
        },
        Object.assign(n, r.enums);
        var s = n;
        i.default = s,
        cc.gfx = n,
        e.exports = i.default
    }
    ), {
        "./device": 311,
        "./enums": 312,
        "./frame-buffer": 313,
        "./index-buffer": 314,
        "./program": 317,
        "./render-buffer": 318,
        "./texture": 322,
        "./texture-2d": 320,
        "./texture-cube": 321,
        "./vertex-buffer": 323,
        "./vertex-format": 324
    }],
    316: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.isPow2 = function(t) {
            return !(t & t - 1 || !t)
        }
    }
    ), {}],
    317: [(function(t, e, i) {
        "use strict";
        function n(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        i.__esModule = !0,
        i.default = void 0;
        var r = 0;
        function s(t, e, i) {
            i && i.split("\n").forEach((function(i) {
                if (!(i.length < 5)) {
                    var n = /^ERROR:\s+(\d+):(\d+):\s*(.*)$/.exec(i);
                    n ? t.push({
                        type: e,
                        fileID: 0 | n[1],
                        line: 0 | n[2],
                        message: n[3].trim()
                    }) : i.length > 0 && t.push({
                        type: e,
                        fileID: -1,
                        line: 0,
                        message: i
                    })
                }
            }
            ))
        }
        var a = (function() {
            function t(t, e) {
                this._device = t,
                this._attributes = [],
                this._uniforms = [],
                this._samplers = [],
                this._errors = [],
                this._linked = !1,
                this._vertSource = e.vert,
                this._fragSource = e.frag,
                this._glID = null,
                this._id = r++
            }
            var e, i, a = t.prototype;
            return a.link = function() {
                if (!this._linked) {
                    var t = this._device._gl
                      , e = o(t, t.VERTEX_SHADER, this._vertSource)
                      , i = o(t, t.FRAGMENT_SHADER, this._fragSource)
                      , n = t.createProgram();
                    t.attachShader(n, e),
                    t.attachShader(n, i),
                    t.linkProgram(n);
                    var r = !1
                      , a = this._errors;
                    if (t.getShaderParameter(e, t.COMPILE_STATUS) || (s(a, "vs", t.getShaderInfoLog(e)),
                    r = !0),
                    t.getShaderParameter(i, t.COMPILE_STATUS) || (s(a, "fs", t.getShaderInfoLog(i)),
                    r = !0),
                    t.deleteShader(e),
                    t.deleteShader(i),
                    r)
                        return a;
                    if (!t.getProgramParameter(n, t.LINK_STATUS))
                        return a.push({
                            info: "Failed to link shader program: " + t.getProgramInfoLog(n)
                        }),
                        a;
                    this._glID = n;
                    for (var l = t.getProgramParameter(n, t.ACTIVE_ATTRIBUTES), h = 0; h < l; ++h) {
                        var c = t.getActiveAttrib(n, h)
                          , u = t.getAttribLocation(n, c.name);
                        this._attributes.push({
                            name: c.name,
                            location: u,
                            type: c.type
                        })
                    }
                    for (var _ = t.getProgramParameter(n, t.ACTIVE_UNIFORMS), f = 0; f < _; ++f) {
                        var d = t.getActiveUniform(n, f)
                          , p = d.name
                          , m = t.getUniformLocation(n, p)
                          , y = "[0]" === p.substr(p.length - 3);
                        y && (p = p.substr(0, p.length - 3));
                        var v = {
                            name: p,
                            location: m,
                            type: d.type,
                            size: y ? d.size : void 0
                        };
                        this._uniforms.push(v)
                    }
                    this._linked = !0
                }
            }
            ,
            a.destroy = function() {
                this._device._gl.deleteProgram(this._glID),
                this._linked = !1,
                this._glID = null,
                this._attributes = [],
                this._uniforms = [],
                this._samplers = []
            }
            ,
            e = t,
            (i = [{
                key: "id",
                get: function() {
                    return this._id
                }
            }]) && n(e.prototype, i),
            t
        }
        )();
        function o(t, e, i) {
            var n = t.createShader(e);
            return t.shaderSource(n, i),
            t.compileShader(n),
            n
        }
        i.default = a,
        e.exports = i.default
    }
    ), {}],
    318: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t(t, e, i, n) {
                this._device = t,
                this._format = e,
                this._glID = t._gl.createRenderbuffer(),
                this.update(i, n)
            }
            var e = t.prototype;
            return e.update = function(t, e) {
                this._width = t,
                this._height = e;
                var i = this._device._gl;
                i.bindRenderbuffer(i.RENDERBUFFER, this._glID),
                i.renderbufferStorage(i.RENDERBUFFER, this._format, t, e),
                i.bindRenderbuffer(i.RENDERBUFFER, null)
            }
            ,
            e.destroy = function() {
                if (null !== this._glID) {
                    var t = this._device._gl;
                    t.bindRenderbuffer(t.RENDERBUFFER, null),
                    t.deleteRenderbuffer(this._glID),
                    this._glID = null
                } else
                    console.error("The render-buffer already destroyed")
            }
            ,
            t
        }
        )();
        i.default = n,
        e.exports = i.default
    }
    ), {}],
    319: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("./enums")
          , r = {
            blend: !1,
            blendSep: !1,
            blendColor: 4294967295,
            blendEq: n.enums.BLEND_FUNC_ADD,
            blendAlphaEq: n.enums.BLEND_FUNC_ADD,
            blendSrc: n.enums.BLEND_ONE,
            blendDst: n.enums.BLEND_ZERO,
            blendSrcAlpha: n.enums.BLEND_ONE,
            blendDstAlpha: n.enums.BLEND_ZERO,
            depthTest: !1,
            depthWrite: !1,
            depthFunc: n.enums.DS_FUNC_LESS,
            stencilTest: !1,
            stencilSep: !1,
            stencilFuncFront: n.enums.DS_FUNC_ALWAYS,
            stencilRefFront: 0,
            stencilMaskFront: 255,
            stencilFailOpFront: n.enums.STENCIL_OP_KEEP,
            stencilZFailOpFront: n.enums.STENCIL_OP_KEEP,
            stencilZPassOpFront: n.enums.STENCIL_OP_KEEP,
            stencilWriteMaskFront: 255,
            stencilFuncBack: n.enums.DS_FUNC_ALWAYS,
            stencilRefBack: 0,
            stencilMaskBack: 255,
            stencilFailOpBack: n.enums.STENCIL_OP_KEEP,
            stencilZFailOpBack: n.enums.STENCIL_OP_KEEP,
            stencilZPassOpBack: n.enums.STENCIL_OP_KEEP,
            stencilWriteMaskBack: 255,
            cullMode: n.enums.CULL_BACK,
            primitiveType: n.enums.PT_TRIANGLES,
            maxStream: -1,
            vertexBuffers: [],
            vertexBufferOffsets: [],
            indexBuffer: null,
            maxTextureSlot: -1,
            textureUnits: [],
            program: null
        }
          , s = (function() {
            function t(t) {
                this.vertexBuffers = new Array(t._caps.maxVertexStreams),
                this.vertexBufferOffsets = new Array(t._caps.maxVertexStreams),
                this.textureUnits = new Array(t._caps.maxTextureUnits),
                this.set(r)
            }
            t.initDefault = function(t) {
                r.vertexBuffers = new Array(t._caps.maxVertexStreams),
                r.vertexBufferOffsets = new Array(t._caps.maxVertexStreams),
                r.textureUnits = new Array(t._caps.maxTextureUnits)
            }
            ;
            var e = t.prototype;
            return e.reset = function() {
                this.set(r)
            }
            ,
            e.set = function(t) {
                this.blend = t.blend,
                this.blendSep = t.blendSep,
                this.blendColor = t.blendColor,
                this.blendEq = t.blendEq,
                this.blendAlphaEq = t.blendAlphaEq,
                this.blendSrc = t.blendSrc,
                this.blendDst = t.blendDst,
                this.blendSrcAlpha = t.blendSrcAlpha,
                this.blendDstAlpha = t.blendDstAlpha,
                this.depthTest = t.depthTest,
                this.depthWrite = t.depthWrite,
                this.depthFunc = t.depthFunc,
                this.stencilTest = t.stencilTest,
                this.stencilSep = t.stencilSep,
                this.stencilFuncFront = t.stencilFuncFront,
                this.stencilRefFront = t.stencilRefFront,
                this.stencilMaskFront = t.stencilMaskFront,
                this.stencilFailOpFront = t.stencilFailOpFront,
                this.stencilZFailOpFront = t.stencilZFailOpFront,
                this.stencilZPassOpFront = t.stencilZPassOpFront,
                this.stencilWriteMaskFront = t.stencilWriteMaskFront,
                this.stencilFuncBack = t.stencilFuncBack,
                this.stencilRefBack = t.stencilRefBack,
                this.stencilMaskBack = t.stencilMaskBack,
                this.stencilFailOpBack = t.stencilFailOpBack,
                this.stencilZFailOpBack = t.stencilZFailOpBack,
                this.stencilZPassOpBack = t.stencilZPassOpBack,
                this.stencilWriteMaskBack = t.stencilWriteMaskBack,
                this.cullMode = t.cullMode,
                this.primitiveType = t.primitiveType,
                this.maxStream = t.maxStream;
                for (var e = 0; e < t.vertexBuffers.length; ++e)
                    this.vertexBuffers[e] = t.vertexBuffers[e];
                for (var i = 0; i < t.vertexBufferOffsets.length; ++i)
                    this.vertexBufferOffsets[i] = t.vertexBufferOffsets[i];
                this.indexBuffer = t.indexBuffer,
                this.maxTextureSlot = t.maxTextureSlot;
                for (var n = 0; n < t.textureUnits.length; ++n)
                    this.textureUnits[n] = t.textureUnits[n];
                this.program = t.program
            }
            ,
            t
        }
        )();
        i.default = s,
        e.exports = i.default
    }
    ), {
        "./enums": 312
    }],
    320: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./texture")) && n.__esModule ? n : {
            default: n
        }, s = t("./enums"), a = t("./misc");
        function o(t, e) {
            return (o = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var l = (function(t) {
            var e, i;
            function n(e, i) {
                var n, r = (n = t.call(this, e) || this)._device._gl;
                return n._target = r.TEXTURE_2D,
                n._glID = r.createTexture(),
                i.images = i.images || [null],
                n.update(i),
                n
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            o(e, i);
            var r = n.prototype;
            return r.update = function(t) {
                var e = this._device._gl
                  , i = this._genMipmap;
                if (t) {
                    void 0 !== t.width && (this._width = t.width),
                    void 0 !== t.height && (this._height = t.height),
                    void 0 !== t.anisotropy && (this._anisotropy = t.anisotropy),
                    void 0 !== t.minFilter && (this._minFilter = t.minFilter),
                    void 0 !== t.magFilter && (this._magFilter = t.magFilter),
                    void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter),
                    void 0 !== t.wrapS && (this._wrapS = t.wrapS),
                    void 0 !== t.wrapT && (this._wrapT = t.wrapT),
                    void 0 !== t.format && (this._format = t.format,
                    this._compressed = this._format >= s.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= s.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= s.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= s.enums.TEXTURE_FMT_RGBA_ETC2),
                    void 0 !== t.genMipmaps && (this._genMipmap = t.genMipmaps,
                    i = t.genMipmaps);
                    var n = this._device.caps.maxTextureSize || Number.MAX_VALUE
                      , r = Math.max(t.width || 0, t.height || 0);
                    n < r && console.warn("The current texture size " + r + " exceeds the maximum size [" + n + "] supported on the device."),
                    void 0 !== t.images && t.images.length > 1 && (i = !1,
                    (t.width > t.height ? t.width : t.height) >> t.images.length - 1 != 1 && console.error("texture-2d mipmap is invalid, should have a 1x1 mipmap."))
                }
                (0,
                a.isPow2)(this._width) && (0,
                a.isPow2)(this._height) || (i = !1),
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_2D, this._glID),
                void 0 !== t.images && t.images.length > 0 && (this._setMipmap(t.images, t.flipY, t.premultiplyAlpha),
                t.images.length > 1 && (this._genMipmap = !0)),
                i && (e.hint(e.GENERATE_MIPMAP_HINT, e.NICEST),
                e.generateMipmap(e.TEXTURE_2D),
                this._genMipmap = !0),
                this._setTexInfo(),
                this._device._restoreTexture(0)
            }
            ,
            r.updateSubImage = function(t) {
                var e = this._device._gl
                  , i = (0,
                s.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_2D, this._glID),
                this._setSubImage(i, t),
                this._device._restoreTexture(0)
            }
            ,
            r.updateImage = function(t) {
                var e = this._device._gl
                  , i = (0,
                s.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_2D, this._glID),
                this._setImage(i, t),
                this._device._restoreTexture(0)
            }
            ,
            r._setSubImage = function(t, e) {
                var i = this._device._gl
                  , n = e.flipY
                  , r = e.premultiplyAlpha
                  , s = e.image;
                !s || ArrayBuffer.isView(s) || s instanceof ArrayBuffer ? (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                this._compressed ? i.compressedTexSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, e.width, e.height, t.format, s) : i.texSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, e.width, e.height, t.format, t.pixelType, s)) : (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !0) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                i.texSubImage2D(i.TEXTURE_2D, e.level, e.x, e.y, t.format, t.pixelType, s))
            }
            ,
            r._setImage = function(t, e) {
                var i = this._device._gl
                  , n = e.flipY
                  , r = e.premultiplyAlpha
                  , s = e.image;
                !s || ArrayBuffer.isView(s) || s instanceof ArrayBuffer ? (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                this._compressed ? i.compressedTexImage2D(i.TEXTURE_2D, e.level, t.internalFormat, e.width, e.height, 0, s) : i.texImage2D(i.TEXTURE_2D, e.level, t.internalFormat, e.width, e.height, 0, t.format, t.pixelType, s)) : (void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !0) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                i.texImage2D(i.TEXTURE_2D, e.level, t.internalFormat, t.format, t.pixelType, s))
            }
            ,
            r._setMipmap = function(t, e, i) {
                for (var n = (0,
                s.glTextureFmt)(this._format), r = {
                    width: this._width,
                    height: this._height,
                    flipY: e,
                    premultiplyAlpha: i,
                    level: 0,
                    image: null
                }, a = 0; a < t.length; ++a)
                    r.level = a,
                    r.width = this._width >> a,
                    r.height = this._height >> a,
                    r.image = t[a],
                    this._setImage(n, r)
            }
            ,
            r._setTexInfo = function() {
                var t = this._device._gl
                  , e = (0,
                a.isPow2)(this._width) && (0,
                a.isPow2)(this._height);
                e || this._wrapS === s.enums.WRAP_CLAMP && this._wrapT === s.enums.WRAP_CLAMP || (console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"),
                this._wrapS = s.enums.WRAP_CLAMP,
                this._wrapT = s.enums.WRAP_CLAMP);
                var i = this._genMipmap ? this._mipFilter : -1;
                e || -1 === i || (console.warn("NPOT textures do not support mipmap filter"),
                i = -1),
                t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, (0,
                s.glFilter)(t, this._minFilter, i)),
                t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, (0,
                s.glFilter)(t, this._magFilter, -1)),
                t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, this._wrapS),
                t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, this._wrapT);
                var n = this._device.ext("EXT_texture_filter_anisotropic");
                n && t.texParameteri(t.TEXTURE_2D, n.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy)
            }
            ,
            n
        }
        )(r.default);
        i.default = l,
        e.exports = i.default
    }
    ), {
        "./enums": 312,
        "./misc": 316,
        "./texture": 322
    }],
    321: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./texture")) && n.__esModule ? n : {
            default: n
        }, s = t("./enums"), a = t("./misc");
        function o(t, e) {
            return (o = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var l = (function(t) {
            var e, i;
            function n(e, i) {
                var n, r = (n = t.call(this, e) || this)._device._gl;
                return n._target = r.TEXTURE_CUBE_MAP,
                n._glID = r.createTexture(),
                n.update(i),
                n
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            o(e, i);
            var r = n.prototype;
            return r.update = function(t) {
                var e = this._device._gl
                  , i = this._genMipmaps;
                t && (void 0 !== t.width && (this._width = t.width),
                void 0 !== t.height && (this._height = t.height),
                void 0 !== t.anisotropy && (this._anisotropy = t.anisotropy),
                void 0 !== t.minFilter && (this._minFilter = t.minFilter),
                void 0 !== t.magFilter && (this._magFilter = t.magFilter),
                void 0 !== t.mipFilter && (this._mipFilter = t.mipFilter),
                void 0 !== t.wrapS && (this._wrapS = t.wrapS),
                void 0 !== t.wrapT && (this._wrapT = t.wrapT),
                void 0 !== t.format && (this._format = t.format,
                this._compressed = this._format >= s.enums.TEXTURE_FMT_RGB_DXT1 && this._format <= s.enums.TEXTURE_FMT_RGBA_PVRTC_4BPPV1 || this._format >= s.enums.TEXTURE_FMT_RGB_ETC2 && this._format <= s.enums.TEXTURE_FMT_RGBA_ETC2),
                void 0 !== t.genMipmaps && (this._genMipmaps = t.genMipmaps,
                i = t.genMipmaps),
                void 0 !== t.images && t.images.length > 1 && (i = !1,
                t.width !== t.height && console.warn("texture-cube width and height should be identical."),
                t.width >> t.images.length - 1 != 1 && console.error("texture-cube mipmap is invalid. please set mipmap as 1x1, 2x2, 4x4 ... nxn"))),
                (0,
                a.isPow2)(this._width) && (0,
                a.isPow2)(this._height) || (i = !1),
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID),
                void 0 !== t.images && t.images.length > 0 && (this._setMipmap(t.images, t.flipY, t.premultiplyAlpha),
                t.images.length > 1 && (this._genMipmaps = !0)),
                i && (e.hint(e.GENERATE_MIPMAP_HINT, e.NICEST),
                e.generateMipmap(e.TEXTURE_CUBE_MAP),
                this._genMipmaps = !0),
                this._setTexInfo(),
                this._device._restoreTexture(0)
            }
            ,
            r.updateSubImage = function(t) {
                var e = this._device._gl
                  , i = (0,
                s.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID),
                this._setSubImage(i, t),
                this._device._restoreTexture(0)
            }
            ,
            r.updateImage = function(t) {
                var e = this._device._gl
                  , i = (0,
                s.glTextureFmt)(this._format);
                e.activeTexture(e.TEXTURE0),
                e.bindTexture(e.TEXTURE_CUBE_MAP, this._glID),
                this._setImage(i, t),
                this._device._restoreTexture(0)
            }
            ,
            r._setSubImage = function(t, e) {
                var i = this._device._gl
                  , n = e.flipY
                  , r = e.premultiplyAlpha
                  , s = e.faceIndex
                  , a = e.image;
                void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                !a || ArrayBuffer.isView(a) || a instanceof ArrayBuffer ? this._compressed ? i.compressedTexSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, e.width, e.height, t.format, a) : i.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, e.width, e.height, t.format, t.pixelType, a) : i.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, e.x, e.y, t.format, t.pixelType, a)
            }
            ,
            r._setImage = function(t, e) {
                var i = this._device._gl
                  , n = e.flipY
                  , r = e.premultiplyAlpha
                  , s = e.faceIndex
                  , a = e.image;
                void 0 === n ? i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, !1) : i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, n),
                void 0 === r ? i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, !1) : i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL, r),
                !a || ArrayBuffer.isView(a) || a instanceof ArrayBuffer ? this._compressed ? i.compressedTexImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, e.width, e.height, 0, a) : i.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, e.width, e.height, 0, t.format, t.pixelType, a) : i.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X + s, e.level, t.internalFormat, t.format, t.pixelType, a)
            }
            ,
            r._setMipmap = function(t, e, i) {
                for (var n = (0,
                s.glTextureFmt)(this._format), r = {
                    width: this._width,
                    height: this._height,
                    faceIndex: 0,
                    flipY: e,
                    premultiplyAlpha: i,
                    level: 0,
                    image: null
                }, a = 0; a < t.length; ++a) {
                    var o = t[a];
                    r.level = a,
                    r.width = this._width >> a,
                    r.height = this._height >> a;
                    for (var l = 0; l < 6; ++l)
                        r.faceIndex = l,
                        r.image = o[l],
                        this._setImage(n, r)
                }
            }
            ,
            r._setTexInfo = function() {
                var t = this._device._gl
                  , e = (0,
                a.isPow2)(this._width) && (0,
                a.isPow2)(this._height);
                e || this._wrapS === s.enums.WRAP_CLAMP && this._wrapT === s.enums.WRAP_CLAMP || (console.warn("WebGL1 doesn't support all wrap modes with NPOT textures"),
                this._wrapS = s.enums.WRAP_CLAMP,
                this._wrapT = s.enums.WRAP_CLAMP);
                var i = this._genMipmaps ? this._mipFilter : -1;
                e || -1 === i || (console.warn("NPOT textures do not support mipmap filter"),
                i = -1),
                t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MIN_FILTER, (0,
                s.glFilter)(t, this._minFilter, i)),
                t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MAG_FILTER, (0,
                s.glFilter)(t, this._magFilter, -1)),
                t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_S, this._wrapS),
                t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_T, this._wrapT);
                var n = this._device.ext("EXT_texture_filter_anisotropic");
                n && t.texParameteri(t.TEXTURE_CUBE_MAP, n.TEXTURE_MAX_ANISOTROPY_EXT, this._anisotropy)
            }
            ,
            n
        }
        )(r.default);
        i.default = l,
        e.exports = i.default
    }
    ), {
        "./enums": 312,
        "./misc": 316,
        "./texture": 322
    }],
    322: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("./enums")
          , r = 0
          , s = (function() {
            function t(t) {
                this._device = t,
                this._width = 4,
                this._height = 4,
                this._genMipmaps = !1,
                this._compressed = !1,
                this._anisotropy = 1,
                this._minFilter = n.enums.FILTER_LINEAR,
                this._magFilter = n.enums.FILTER_LINEAR,
                this._mipFilter = n.enums.FILTER_LINEAR,
                this._wrapS = n.enums.WRAP_REPEAT,
                this._wrapT = n.enums.WRAP_REPEAT,
                this._format = n.enums.TEXTURE_FMT_RGBA8,
                this._target = -1,
                this._id = r++
            }
            return t.prototype.destroy = function() {
                null !== this._glID ? (this._device._gl.deleteTexture(this._glID),
                this._device._stats.tex -= this.bytes,
                this._glID = null) : console.error("The texture already destroyed")
            }
            ,
            t
        }
        )();
        i.default = s,
        e.exports = i.default
    }
    ), {
        "./enums": 312
    }],
    323: [(function(t, e, i) {
        "use strict";
        function n(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        i.__esModule = !0,
        i.default = void 0,
        t("./enums");
        var r = (function() {
            function t(t, e, i, n) {
                this._device = t,
                this._format = e,
                this._usage = i,
                this._bytesPerVertex = this._format._bytes,
                this._bytes = n.byteLength,
                this._numVertices = this._bytes / this._bytesPerVertex,
                this._needExpandDataStore = !0,
                this._glID = t._gl.createBuffer(),
                this.update(0, n),
                t._stats.vb += this._bytes
            }
            var e, i, r = t.prototype;
            return r.destroy = function() {
                -1 !== this._glID ? (this._device._gl.deleteBuffer(this._glID),
                this._device._stats.vb -= this.bytes,
                this._glID = -1) : console.error("The buffer already destroyed")
            }
            ,
            r.update = function(t, e) {
                if (-1 !== this._glID) {
                    if (0 !== e.byteLength) {
                        if (t + e.byteLength > this._bytes) {
                            if (t)
                                return void console.error("Failed to update data, bytes exceed.");
                            this._needExpandDataStore = !0,
                            this._bytes = t + e.byteLength,
                            this._numVertices = this._bytes / this._bytesPerVertex
                        }
                        var i = this._device._gl
                          , n = this._usage;
                        i.bindBuffer(i.ARRAY_BUFFER, this._glID),
                        this._needExpandDataStore ? (i.bufferData(i.ARRAY_BUFFER, e, n),
                        this._needExpandDataStore = !1) : i.bufferSubData(i.ARRAY_BUFFER, t, e),
                        i.bindBuffer(i.ARRAY_BUFFER, null)
                    }
                } else
                    console.error("The buffer is destroyed")
            }
            ,
            r.getFormat = function(t) {
                return this._format.element(t)
            }
            ,
            r.setUsage = function(t) {
                this._usage = t
            }
            ,
            e = t,
            (i = [{
                key: "count",
                get: function() {
                    return this._numVertices
                }
            }]) && n(e.prototype, i),
            t
        }
        )();
        i.default = r,
        e.exports = i.default
    }
    ), {
        "./enums": 312
    }],
    324: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("./enums"), s = (n = t("../murmurhash2_gc")) && n.__esModule ? n : {
            default: n
        }, a = (function() {
            function t(t) {
                this._attr2el = {},
                this._elements = [],
                this._bytes = 0;
                for (var e = "", i = 0, n = t.length; i < n; ++i) {
                    var a = t[i]
                      , o = {
                        name: a.name,
                        offset: this._bytes,
                        stride: 0,
                        stream: -1,
                        type: a.type,
                        num: a.num,
                        normalize: void 0 !== a.normalize && a.normalize,
                        bytes: a.num * (0,
                        r.attrTypeBytes)(a.type)
                    };
                    this._attr2el[o.name] = o,
                    this._elements.push(o),
                    this._bytes += o.bytes,
                    e += o.name + ":" + o.num + ":" + o.type + ":" + o.normalize
                }
                for (var l = 0, h = this._elements.length; l < h; ++l)
                    this._elements[l].stride = this._bytes;
                this._hash = (0,
                s.default)(e, 666)
            }
            var e = t.prototype;
            return e.element = function(t) {
                return this._attr2el[t]
            }
            ,
            e.getHash = function() {
                return this._hash
            }
            ,
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "../murmurhash2_gc": 333,
        "./enums": 312
    }],
    325: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t(t, e) {
                this._cursor = 0,
                this._data = new Array(e);
                for (var i = 0; i < e; ++i)
                    this._data[i] = t()
            }
            return t.prototype.request = function() {
                var t = this._data[this._cursor];
                return this._cursor = (this._cursor + 1) % this._data.length,
                t
            }
            ,
            t
        }
        )();
        i.default = n,
        e.exports = i.default
    }
    ), {}],
    326: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./timsort")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = (function() {
            function t(t) {
                this._count = 0,
                this._data = new Array(t)
            }
            var e, i, n = t.prototype;
            return n._resize = function(t) {
                if (t > this._data.length)
                    for (var e = this._data.length; e < t; ++e)
                        this._data[e] = void 0
            }
            ,
            n.reset = function() {
                for (var t = 0; t < this._count; ++t)
                    this._data[t] = void 0;
                this._count = 0
            }
            ,
            n.push = function(t) {
                this._count >= this._data.length && this._resize(2 * this._data.length),
                this._data[this._count] = t,
                ++this._count
            }
            ,
            n.pop = function() {
                --this._count,
                this._count < 0 && (this._count = 0);
                var t = this._data[this._count];
                return this._data[this._count] = void 0,
                t
            }
            ,
            n.fastRemove = function(t) {
                if (!(t >= this._count || t < 0)) {
                    var e = this._count - 1;
                    this._data[t] = this._data[e],
                    this._data[e] = void 0,
                    this._count -= 1
                }
            }
            ,
            n.indexOf = function(t) {
                return this._data.indexOf(t)
            }
            ,
            n.sort = function(t) {
                return (0,
                r.default)(this._data, 0, this._count, t)
            }
            ,
            e = t,
            (i = [{
                key: "length",
                get: function() {
                    return this._count
                }
            }, {
                key: "data",
                get: function() {
                    return this._data
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "./timsort": 331
    }],
    327: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.TypedArrayPool = i.RecyclePool = i.Pool = i.LinkedArray = i.FixedArray = i.CircularPool = void 0;
        var n = h(t("./circular-pool"));
        i.CircularPool = n.default;
        var r = h(t("./fixed-array"));
        i.FixedArray = r.default;
        var s = h(t("./linked-array"));
        i.LinkedArray = s.default;
        var a = h(t("./pool"));
        i.Pool = a.default;
        var o = h(t("./recycle-pool"));
        i.RecyclePool = o.default;
        var l = h(t("./typed-array-pool"));
        function h(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        i.TypedArrayPool = l.default
    }
    ), {
        "./circular-pool": 325,
        "./fixed-array": 326,
        "./linked-array": 328,
        "./pool": 329,
        "./recycle-pool": 330,
        "./typed-array-pool": 332
    }],
    328: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./pool")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = (function() {
            function t(t, e) {
                this._fn = t,
                this._count = 0,
                this._head = null,
                this._tail = null,
                this._pool = new r.default(t,e)
            }
            var e, i, n = t.prototype;
            return n.add = function() {
                var t = this._pool.alloc();
                return this._tail ? (this._tail._next = t,
                t._prev = this._tail) : this._head = t,
                this._tail = t,
                this._count += 1,
                t
            }
            ,
            n.remove = function(t) {
                t._prev ? t._prev._next = t._next : this._head = t._next,
                t._next ? t._next._prev = t._prev : this._tail = t._prev,
                t._next = null,
                t._prev = null,
                this._pool.free(t),
                this._count -= 1
            }
            ,
            n.forEach = function(t, e) {
                var i = this._head;
                if (i) {
                    e && (t = t.bind(e));
                    for (var n = 0, r = i; i; )
                        r = i._next,
                        t(i, n, this),
                        i = r,
                        ++n
                }
            }
            ,
            e = t,
            (i = [{
                key: "head",
                get: function() {
                    return this._head
                }
            }, {
                key: "tail",
                get: function() {
                    return this._tail
                }
            }, {
                key: "length",
                get: function() {
                    return this._count
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        i.default = a,
        e.exports = i.default
    }
    ), {
        "./pool": 329
    }],
    329: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t(t, e) {
                this._fn = t,
                this._idx = e - 1,
                this._frees = new Array(e);
                for (var i = 0; i < e; ++i)
                    this._frees[i] = t()
            }
            var e = t.prototype;
            return e._expand = function(t) {
                var e = this._frees;
                this._frees = new Array(t);
                for (var i = t - e.length, n = 0; n < i; ++n)
                    this._frees[n] = this._fn();
                for (var r = i, s = 0; r < t; ++r,
                ++s)
                    this._frees[r] = e[s];
                this._idx += i
            }
            ,
            e.alloc = function() {
                this._idx < 0 && this._expand(Math.round(1.2 * this._frees.length) + 1);
                var t = this._frees[this._idx];
                return this._frees[this._idx] = null,
                --this._idx,
                t
            }
            ,
            e.free = function(t) {
                ++this._idx,
                this._frees[this._idx] = t
            }
            ,
            e.clear = function(t) {
                for (var e = 0; e <= this._idx; e++)
                    t && t(this._frees[e]);
                this._frees.length = 0,
                this._idx = -1
            }
            ,
            t
        }
        )();
        i.default = n,
        e.exports = i.default
    }
    ), {}],
    330: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("./timsort")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var a = (function() {
            function t(t, e) {
                this._fn = t,
                this._count = 0,
                this._data = new Array(e);
                for (var i = 0; i < e; ++i)
                    this._data[i] = t()
            }
            var e, i, n = t.prototype;
            return n.reset = function() {
                this._count = 0
            }
            ,
            n.resize = function(t) {
                if (t > this._data.length)
                    for (var e = this._data.length; e < t; ++e)
                        this._data[e] = this._fn()
            }
            ,
            n.add = function() {
                return this._count >= this._data.length && this.resize(2 * this._data.length),
                this._data[this._count++]
            }
            ,
            n.remove = function(t) {
                if (!(t >= this._count)) {
                    var e = this._count - 1
                      , i = this._data[t];
                    this._data[t] = this._data[e],
                    this._data[e] = i,
                    this._count -= 1
                }
            }
            ,
            n.sort = function(t) {
                return (0,
                r.default)(this._data, 0, this._count, t)
            }
            ,
            e = t,
            (i = [{
                key: "length",
                get: function() {
                    return this._count
                }
            }, {
                key: "data",
                get: function() {
                    return this._data
                }
            }]) && s(e.prototype, i),
            t
        }
        )();
        i.default = a,
        cc.RecyclePool = a,
        e.exports = i.default
    }
    ), {
        "./timsort": 331
    }],
    331: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = function(t, e, i, r) {
            if (!Array.isArray(t))
                throw new TypeError("Can only sort arrays");
            void 0 === e && (e = 0),
            void 0 === i && (i = t.length),
            void 0 === r && (r = l);
            var s = i - e;
            if (!(s < 2)) {
                var a = 0;
                if (s < n)
                    return void _(t, e, i, e + (a = c(t, e, i, r)), r);
                var o = new p(t,r)
                  , u = h(s);
                do {
                    if ((a = c(t, e, i, r)) < u) {
                        var f = s;
                        f > u && (f = u),
                        _(t, e, e + f, e + a, r),
                        a = f
                    }
                    o.pushRun(e, a),
                    o.mergeRuns(),
                    s -= a,
                    e += a
                } while (0 !== s);o.forceMergeRuns()
            }
        }
        ;
        var n = 32
          , r = 7
          , s = 256
          , a = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9];
        function o(t) {
            return t < 1e5 ? t < 100 ? t < 10 ? 0 : 1 : t < 1e4 ? t < 1e3 ? 2 : 3 : 4 : t < 1e7 ? t < 1e6 ? 5 : 6 : t < 1e9 ? t < 1e8 ? 7 : 8 : 9
        }
        function l(t, e) {
            if (t === e)
                return 0;
            if (~~t === t && ~~e === e) {
                if (0 === t || 0 === e)
                    return t < e ? -1 : 1;
                if (t < 0 || e < 0) {
                    if (e >= 0)
                        return -1;
                    if (t >= 0)
                        return 1;
                    t = -t,
                    e = -e
                }
                var i = o(t)
                  , n = o(e)
                  , r = 0;
                return i < n ? (t *= a[n - i - 1],
                e /= 10,
                r = -1) : i > n && (e *= a[i - n - 1],
                t /= 10,
                r = 1),
                t === e ? r : t < e ? -1 : 1
            }
            var s = String(t)
              , l = String(e);
            return s === l ? 0 : s < l ? -1 : 1
        }
        function h(t) {
            for (var e = 0; t >= n; )
                e |= 1 & t,
                t >>= 1;
            return t + e
        }
        function c(t, e, i, n) {
            var r = e + 1;
            if (r === i)
                return 1;
            if (n(t[r++], t[e]) < 0) {
                for (; r < i && n(t[r], t[r - 1]) < 0; )
                    r++;
                u(t, e, r)
            } else
                for (; r < i && n(t[r], t[r - 1]) >= 0; )
                    r++;
            return r - e
        }
        function u(t, e, i) {
            for (i--; e < i; ) {
                var n = t[e];
                t[e++] = t[i],
                t[i--] = n
            }
        }
        function _(t, e, i, n, r) {
            for (n === e && n++; n < i; n++) {
                for (var s = t[n], a = e, o = n; a < o; ) {
                    var l = a + o >>> 1;
                    r(s, t[l]) < 0 ? o = l : a = l + 1
                }
                var h = n - a;
                switch (h) {
                case 3:
                    t[a + 3] = t[a + 2];
                case 2:
                    t[a + 2] = t[a + 1];
                case 1:
                    t[a + 1] = t[a];
                    break;
                default:
                    for (; h > 0; )
                        t[a + h] = t[a + h - 1],
                        h--
                }
                t[a] = s
            }
        }
        function f(t, e, i, n, r, s) {
            var a = 0
              , o = 0
              , l = 1;
            if (s(t, e[i + r]) > 0) {
                for (o = n - r; l < o && s(t, e[i + r + l]) > 0; )
                    a = l,
                    (l = 1 + (l << 1)) <= 0 && (l = o);
                l > o && (l = o),
                a += r,
                l += r
            } else {
                for (o = r + 1; l < o && s(t, e[i + r - l]) <= 0; )
                    a = l,
                    (l = 1 + (l << 1)) <= 0 && (l = o);
                l > o && (l = o);
                var h = a;
                a = r - l,
                l = r - h
            }
            for (a++; a < l; ) {
                var c = a + (l - a >>> 1);
                s(t, e[i + c]) > 0 ? a = c + 1 : l = c
            }
            return l
        }
        function d(t, e, i, n, r, s) {
            var a = 0
              , o = 0
              , l = 1;
            if (s(t, e[i + r]) < 0) {
                for (o = r + 1; l < o && s(t, e[i + r - l]) < 0; )
                    a = l,
                    (l = 1 + (l << 1)) <= 0 && (l = o);
                l > o && (l = o);
                var h = a;
                a = r - l,
                l = r - h
            } else {
                for (o = n - r; l < o && s(t, e[i + r + l]) >= 0; )
                    a = l,
                    (l = 1 + (l << 1)) <= 0 && (l = o);
                l > o && (l = o),
                a += r,
                l += r
            }
            for (a++; a < l; ) {
                var c = a + (l - a >>> 1);
                s(t, e[i + c]) < 0 ? l = c : a = c + 1
            }
            return l
        }
        var p = (function() {
            function t(t, e) {
                this.array = t,
                this.compare = e,
                this.minGallop = r,
                this.length = t.length,
                this.tmpStorageLength = s,
                this.length < 2 * s && (this.tmpStorageLength = this.length >>> 1),
                this.tmp = new Array(this.tmpStorageLength),
                this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40,
                this.runStart = new Array(this.stackLength),
                this.runLength = new Array(this.stackLength),
                this.stackSize = 0
            }
            var e = t.prototype;
            return e.pushRun = function(t, e) {
                this.runStart[this.stackSize] = t,
                this.runLength[this.stackSize] = e,
                this.stackSize += 1
            }
            ,
            e.mergeRuns = function() {
                for (; this.stackSize > 1; ) {
                    var t = this.stackSize - 2;
                    if (t >= 1 && this.runLength[t - 1] <= this.runLength[t] + this.runLength[t + 1] || t >= 2 && this.runLength[t - 2] <= this.runLength[t] + this.runLength[t - 1])
                        this.runLength[t - 1] < this.runLength[t + 1] && t--;
                    else if (this.runLength[t] > this.runLength[t + 1])
                        break;
                    this.mergeAt(t)
                }
            }
            ,
            e.forceMergeRuns = function() {
                for (; this.stackSize > 1; ) {
                    var t = this.stackSize - 2;
                    t > 0 && this.runLength[t - 1] < this.runLength[t + 1] && t--,
                    this.mergeAt(t)
                }
            }
            ,
            e.mergeAt = function(t) {
                var e = this.compare
                  , i = this.array
                  , n = this.runStart[t]
                  , r = this.runLength[t]
                  , s = this.runStart[t + 1]
                  , a = this.runLength[t + 1];
                this.runLength[t] = r + a,
                t === this.stackSize - 3 && (this.runStart[t + 1] = this.runStart[t + 2],
                this.runLength[t + 1] = this.runLength[t + 2]),
                this.stackSize--;
                var o = d(i[s], i, n, r, 0, e);
                n += o,
                0 != (r -= o) && 0 !== (a = f(i[n + r - 1], i, s, a, a - 1, e)) && (r <= a ? this.mergeLow(n, r, s, a) : this.mergeHigh(n, r, s, a))
            }
            ,
            e.mergeLow = function(t, e, i, n) {
                var s = this.compare
                  , a = this.array
                  , o = this.tmp
                  , l = 0;
                for (l = 0; l < e; l++)
                    o[l] = a[t + l];
                var h = 0
                  , c = i
                  , u = t;
                if (a[u++] = a[c++],
                0 != --n)
                    if (1 !== e) {
                        for (var _ = this.minGallop; ; ) {
                            var p = 0
                              , m = 0
                              , y = !1;
                            do {
                                if (s(a[c], o[h]) < 0) {
                                    if (a[u++] = a[c++],
                                    m++,
                                    p = 0,
                                    0 == --n) {
                                        y = !0;
                                        break
                                    }
                                } else if (a[u++] = o[h++],
                                p++,
                                m = 0,
                                1 == --e) {
                                    y = !0;
                                    break
                                }
                            } while ((p | m) < _);if (y)
                                break;
                            do {
                                if (0 !== (p = d(a[c], o, h, e, 0, s))) {
                                    for (l = 0; l < p; l++)
                                        a[u + l] = o[h + l];
                                    if (u += p,
                                    h += p,
                                    (e -= p) <= 1) {
                                        y = !0;
                                        break
                                    }
                                }
                                if (a[u++] = a[c++],
                                0 == --n) {
                                    y = !0;
                                    break
                                }
                                if (0 !== (m = f(o[h], a, c, n, 0, s))) {
                                    for (l = 0; l < m; l++)
                                        a[u + l] = a[c + l];
                                    if (u += m,
                                    c += m,
                                    0 == (n -= m)) {
                                        y = !0;
                                        break
                                    }
                                }
                                if (a[u++] = o[h++],
                                1 == --e) {
                                    y = !0;
                                    break
                                }
                                _--
                            } while (p >= r || m >= r);if (y)
                                break;
                            _ < 0 && (_ = 0),
                            _ += 2
                        }
                        if (this.minGallop = _,
                        _ < 1 && (this.minGallop = 1),
                        1 === e) {
                            for (l = 0; l < n; l++)
                                a[u + l] = a[c + l];
                            a[u + n] = o[h]
                        } else {
                            if (0 === e)
                                throw new Error("mergeLow preconditions were not respected");
                            for (l = 0; l < e; l++)
                                a[u + l] = o[h + l]
                        }
                    } else {
                        for (l = 0; l < n; l++)
                            a[u + l] = a[c + l];
                        a[u + n] = o[h]
                    }
                else
                    for (l = 0; l < e; l++)
                        a[u + l] = o[h + l]
            }
            ,
            e.mergeHigh = function(t, e, i, n) {
                var s = this.compare
                  , a = this.array
                  , o = this.tmp
                  , l = 0;
                for (l = 0; l < n; l++)
                    o[l] = a[i + l];
                var h = t + e - 1
                  , c = n - 1
                  , u = i + n - 1
                  , _ = 0
                  , p = 0;
                if (a[u--] = a[h--],
                0 != --e)
                    if (1 !== n) {
                        for (var m = this.minGallop; ; ) {
                            var y = 0
                              , v = 0
                              , g = !1;
                            do {
                                if (s(o[c], a[h]) < 0) {
                                    if (a[u--] = a[h--],
                                    y++,
                                    v = 0,
                                    0 == --e) {
                                        g = !0;
                                        break
                                    }
                                } else if (a[u--] = o[c--],
                                v++,
                                y = 0,
                                1 == --n) {
                                    g = !0;
                                    break
                                }
                            } while ((y | v) < m);if (g)
                                break;
                            do {
                                if (0 != (y = e - d(o[c], a, t, e, e - 1, s))) {
                                    for (e -= y,
                                    p = 1 + (u -= y),
                                    _ = 1 + (h -= y),
                                    l = y - 1; l >= 0; l--)
                                        a[p + l] = a[_ + l];
                                    if (0 === e) {
                                        g = !0;
                                        break
                                    }
                                }
                                if (a[u--] = o[c--],
                                1 == --n) {
                                    g = !0;
                                    break
                                }
                                if (0 != (v = n - f(a[h], o, 0, n, n - 1, s))) {
                                    for (n -= v,
                                    p = 1 + (u -= v),
                                    _ = 1 + (c -= v),
                                    l = 0; l < v; l++)
                                        a[p + l] = o[_ + l];
                                    if (n <= 1) {
                                        g = !0;
                                        break
                                    }
                                }
                                if (a[u--] = a[h--],
                                0 == --e) {
                                    g = !0;
                                    break
                                }
                                m--
                            } while (y >= r || v >= r);if (g)
                                break;
                            m < 0 && (m = 0),
                            m += 2
                        }
                        if (this.minGallop = m,
                        m < 1 && (this.minGallop = 1),
                        1 === n) {
                            for (p = 1 + (u -= e),
                            _ = 1 + (h -= e),
                            l = e - 1; l >= 0; l--)
                                a[p + l] = a[_ + l];
                            a[u] = o[c]
                        } else {
                            if (0 === n)
                                throw new Error("mergeHigh preconditions were not respected");
                            for (_ = u - (n - 1),
                            l = 0; l < n; l++)
                                a[_ + l] = o[l]
                        }
                    } else {
                        for (p = 1 + (u -= e),
                        _ = 1 + (h -= e),
                        l = e - 1; l >= 0; l--)
                            a[p + l] = a[_ + l];
                        a[u] = o[c]
                    }
                else
                    for (_ = u - (n - 1),
                    l = 0; l < n; l++)
                        a[_ + l] = o[l]
            }
            ,
            t
        }
        )();
        e.exports = i.default
    }
    ), {}],
    332: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        for (var n = Array(8), r = 0; r < 8; ++r)
            n[r] = [];
        function s(t) {
            for (var e = 16; e <= 1 << 28; e *= 16)
                if (t <= e)
                    return e;
            return 0
        }
        function a(t) {
            var e, i;
            return e = (t > 65535) << 4,
            e |= i = ((t >>>= e) > 255) << 3,
            e |= i = ((t >>>= i) > 15) << 2,
            (e |= i = ((t >>>= i) > 3) << 1) | (t >>>= i) >> 1
        }
        function o(t) {
            var e = s(t)
              , i = n[a(e) >> 2];
            return i.length > 0 ? i.pop() : new ArrayBuffer(e)
        }
        var l = {
            alloc_int8: function(t) {
                var e = new Int8Array(o(t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint8: function(t) {
                var e = new Uint8Array(o(t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_int16: function(t) {
                var e = new Int16Array(o(2 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint16: function(t) {
                var e = new Uint16Array(o(2 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_int32: function(t) {
                var e = new Int32Array(o(4 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_uint32: function(t) {
                var e = new Uint32Array(o(4 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_float32: function(t) {
                var e = new Float32Array(o(4 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_float64: function(t) {
                var e = new Float64Array(o(8 * t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            alloc_dataview: function(t) {
                var e = new DataView(o(t),0,t);
                return e.length !== t ? e.subarray(0, t) : e
            },
            free: function(t) {
                var e;
                e = t.buffer,
                n[a(e.byteLength) >> 2].push(e)
            },
            reset: function() {
                for (var t = Array(8), e = 0; e < 8; ++e)
                    t[e] = []
            }
        };
        i.default = l,
        e.exports = i.default
    }
    ), {}],
    333: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = function(t, e) {
            for (var i, n = t.length, r = e ^ n, s = 0; n >= 4; )
                i = 1540483477 * (65535 & (i = 255 & t.charCodeAt(s) | (255 & t.charCodeAt(++s)) << 8 | (255 & t.charCodeAt(++s)) << 16 | (255 & t.charCodeAt(++s)) << 24)) + ((1540483477 * (i >>> 16) & 65535) << 16),
                r = 1540483477 * (65535 & r) + ((1540483477 * (r >>> 16) & 65535) << 16) ^ (i = 1540483477 * (65535 & (i ^= i >>> 24)) + ((1540483477 * (i >>> 16) & 65535) << 16)),
                n -= 4,
                ++s;
            switch (n) {
            case 3:
                r ^= (255 & t.charCodeAt(s + 2)) << 16;
            case 2:
                r ^= (255 & t.charCodeAt(s + 1)) << 8;
            case 1:
                r = 1540483477 * (65535 & (r ^= 255 & t.charCodeAt(s))) + ((1540483477 * (r >>> 16) & 65535) << 16)
            }
            return r = 1540483477 * (65535 & (r ^= r >>> 13)) + ((1540483477 * (r >>> 16) & 65535) << 16),
            (r ^= r >>> 15) >>> 0
        }
        ,
        e.exports = i.default
    }
    ), {}],
    334: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("../../core/value-types")
          , r = o(t("../core/base-renderer"))
          , s = o(t("../enums"))
          , a = t("../memop");
        function o(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function l(t) {
            if (void 0 === t)
                throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
            return t
        }
        function h(t, e) {
            return (h = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var c = new Float32Array(16)
          , u = new Float32Array(16)
          , _ = new Float32Array(16)
          , f = new Float32Array(16)
          , d = new Float32Array(4)
          , p = new Float32Array(64)
          , m = []
          , y = new Float32Array(4)
          , v = new n.Vec4(0,0,0,0)
          , g = new n.Vec3(0,0,0)
          , A = new n.Vec3(0,0,0)
          , x = new a.RecyclePool(function() {
            return new Float32Array(16)
        }
        ,8);
        function b(t, e) {
            return t._priority - e._priority
        }
        var C = (function(t) {
            var e, i;
            function r(e, i) {
                var n;
                return (n = t.call(this, e, i) || this)._time = new Float32Array(4),
                n._lights = [],
                n._shadowLights = [],
                n._numLights = 0,
                n._defines = {},
                n._registerStage("shadowcast", n._shadowStage.bind(l(n))),
                n._registerStage("opaque", n._opaqueStage.bind(l(n))),
                n._registerStage("transparent", n._transparentStage.bind(l(n))),
                n
            }
            i = t,
            (e = r).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            h(e, i);
            var a = r.prototype;
            return a.reset = function() {
                x.reset(),
                t.prototype.reset.call(this)
            }
            ,
            a.render = function(t, e) {
                this.reset(),
                e && (this._time[0] += e,
                this._time[1] = e,
                this._time[2]++),
                this._device.setUniform("cc_time", this._time),
                this._updateLights(t);
                for (var i = this._device._gl.canvas, n = 0; n < t._cameras.length; ++n) {
                    var r = this._requestView()
                      , s = i.width
                      , a = i.height;
                    t._cameras.data[n].extractView(r, s, a)
                }
                this._viewPools.sort(b);
                for (var o = 0; o < this._viewPools.length; ++o) {
                    var l = this._viewPools.data[o];
                    this._render(l, t)
                }
            }
            ,
            a.renderCamera = function(t, e) {
                this.reset(),
                this._updateLights(e);
                var i = this._device._gl.canvas
                  , n = i.width
                  , r = i.height
                  , s = this._requestView();
                t.extractView(s, n, r),
                this._viewPools.sort(b);
                for (var a = 0; a < this._viewPools.length; ++a) {
                    var o = this._viewPools.data[a];
                    this._render(o, e)
                }
            }
            ,
            a._updateLights = function(t) {
                this._lights.length = 0,
                this._shadowLights.length = 0;
                for (var e = t._lights, i = 0; i < e.length; ++i) {
                    var n = e.data[i];
                    if (n.update(this._device),
                    n.shadowType !== s.default.SHADOW_NONE) {
                        this._shadowLights.length < 2 && this._shadowLights.splice(0, 0, n);
                        var r = this._requestView();
                        n.extractView(r, ["shadowcast"]),
                        this._lights.splice(0, 0, n)
                    } else
                        this._lights.push(n)
                }
                this._updateLightDefines(),
                this._numLights = e._count
            }
            ,
            a._updateLightDefines = function() {
                for (var t = this._defines, e = 0; e < this._lights.length; ++e) {
                    var i = this._lights[e]
                      , n = "CC_LIGHT_" + e + "_TYPE"
                      , r = "CC_SHADOW_" + e + "_TYPE";
                    t[n] !== i._type && (t[n] = i._type,
                    this._definesChanged = !0),
                    t[r] !== i._shadowType && (t[r] = i._shadowType,
                    this._definesChanged = !0)
                }
                var s = Math.min(4, this._lights.length);
                t.CC_NUM_LIGHTS !== s && (t.CC_NUM_LIGHTS = s,
                this._definesChanged = !0),
                s = Math.min(4, this._shadowLights.length),
                t.CC_NUM_SHADOW_LIGHTS !== s && (t.CC_NUM_SHADOW_LIGHTS = s,
                this._definesChanged = !0)
            }
            ,
            a._submitLightsUniforms = function() {
                var t = this._device;
                if (this._lights.length > 0) {
                    for (var e = x.add(), i = x.add(), n = x.add(), r = Math.min(4, this._lights.length), a = 0; a < r; ++a) {
                        var o = this._lights[a]
                          , l = 4 * a;
                        n.set(o._colorUniform, l),
                        i.set(o._directionUniform, l),
                        e.set(o._positionUniform, l),
                        e[l + 3] = o._range,
                        o._type === s.default.LIGHT_SPOT ? (i[l + 3] = o._spotUniform[0],
                        n[l + 3] = o._spotUniform[1]) : (i[l + 3] = 0,
                        n[l + 3] = 0)
                    }
                    t.setUniform("cc_lightDirection", i),
                    t.setUniform("cc_lightColor", n),
                    t.setUniform("cc_lightPositionAndRange", e)
                }
            }
            ,
            a._submitShadowStageUniforms = function(t) {
                var e = t._shadowLight
                  , i = y;
                i[0] = e.shadowMinDepth,
                i[1] = e.shadowMaxDepth,
                i[2] = e.shadowDepthScale,
                i[3] = e.shadowDarkness,
                this._device.setUniform("cc_shadow_map_lightViewProjMatrix", n.Mat4.toArray(f, t._matViewProj)),
                this._device.setUniform("cc_shadow_map_info", i),
                this._device.setUniform("cc_shadow_map_bias", e.shadowBias),
                this._defines.CC_SHADOW_TYPE = e._shadowType
            }
            ,
            a._submitOtherStagesUniforms = function() {
                for (var t = x.add(), e = 0; e < this._shadowLights.length; ++e) {
                    var i = this._shadowLights[e]
                      , r = m[e];
                    r || (r = m[e] = new Float32Array(p.buffer,64 * e,16)),
                    n.Mat4.toArray(r, i.viewProjMatrix);
                    var s = 4 * e;
                    t[s] = i.shadowMinDepth,
                    t[s + 1] = i.shadowMaxDepth,
                    t[s + 2] = i._shadowResolution,
                    t[s + 3] = i.shadowDarkness
                }
                this._device.setUniform("cc_shadow_lightViewProjMatrix", p),
                this._device.setUniform("cc_shadow_info", t)
            }
            ,
            a._sortItems = function(t) {
                t.sort((function(t, e) {
                    return t.passes.length !== e.passes.length ? t.passes.length - e.passes.length : t.sortKey - e.sortKey
                }
                ))
            }
            ,
            a._shadowStage = function(t, e) {
                this._submitShadowStageUniforms(t);
                for (var i = 0; i < e.length; ++i) {
                    var n = e.data[i];
                    n.effect.getDefine("CC_CASTING_SHADOW") && this._draw(n)
                }
            }
            ,
            a._drawItems = function(t, e) {
                var i = this._shadowLights;
                if (0 === i.length && 0 === this._numLights)
                    for (var n = 0; n < e.length; ++n) {
                        var r = e.data[n];
                        this._draw(r)
                    }
                else
                    for (var s = 0; s < e.length; ++s) {
                        for (var a = e.data[s], o = 0; o < i.length; ++o)
                            this._device.setTexture("cc_shadow_map_" + o, i[o].shadowMap, this._allocTextureUnit());
                        this._draw(a)
                    }
            }
            ,
            a._opaqueStage = function(t, e) {
                t.getPosition(v),
                this._device.setUniform("cc_matView", n.Mat4.toArray(c, t._matView)),
                this._device.setUniform("cc_matViewInv", n.Mat4.toArray(u, t._matViewInv)),
                this._device.setUniform("cc_matProj", n.Mat4.toArray(_, t._matProj)),
                this._device.setUniform("cc_matViewProj", n.Mat4.toArray(f, t._matViewProj)),
                this._device.setUniform("cc_cameraPos", n.Vec4.toArray(d, v)),
                this._submitLightsUniforms(),
                this._submitOtherStagesUniforms(),
                this._drawItems(t, e)
            }
            ,
            a._transparentStage = function(t, e) {
                t.getPosition(v),
                t.getForward(g),
                this._device.setUniform("cc_matView", n.Mat4.toArray(c, t._matView)),
                this._device.setUniform("cc_matViewInv", n.Mat4.toArray(u, t._matViewInv)),
                this._device.setUniform("cc_matProj", n.Mat4.toArray(_, t._matProj)),
                this._device.setUniform("cc_matViewProj", n.Mat4.toArray(f, t._matViewProj)),
                this._device.setUniform("cc_cameraPos", n.Vec4.toArray(d, v)),
                this._submitLightsUniforms(),
                this._submitOtherStagesUniforms();
                for (var i = 0; i < e.length; ++i) {
                    var r = e.data[i];
                    r.node.getWorldPosition(A),
                    n.Vec3.sub(A, A, v),
                    r.sortKey = -n.Vec3.dot(A, g)
                }
                this._sortItems(e),
                this._drawItems(t, e)
            }
            ,
            r
        }
        )(r.default);
        i.default = C,
        e.exports = i.default
    }
    ), {
        "../../core/value-types": 282,
        "../core/base-renderer": 304,
        "../enums": 310,
        "../memop": 327
    }],
    335: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = t("../../core/value-types"), s = t("../../core/geom-utils"), a = (n = t("../enums")) && n.__esModule ? n : {
            default: n
        };
        function o(t, e) {
            for (var i = 0; i < e.length; i++) {
                var n = e[i];
                n.enumerable = n.enumerable || !1,
                n.configurable = !0,
                "value"in n && (n.writable = !0),
                Object.defineProperty(t, n.key, n)
            }
        }
        var l = new r.Mat4
          , h = new r.Mat4
          , c = new r.Mat4
          , u = new r.Mat4
          , _ = new r.Mat4
          , f = new r.Mat4
          , d = new r.Vec3
          , p = new r.Vec3
          , m = (function() {
            function t() {
                this._poolID = -1,
                this._node = null,
                this._projection = a.default.PROJ_PERSPECTIVE,
                this._priority = 0,
                this._color = new r.Vec4(.2,.3,.47,1),
                this._depth = 1,
                this._stencil = 0,
                this._clearFlags = a.default.CLEAR_COLOR | a.default.CLEAR_DEPTH,
                this._clearModel = null,
                this._stages = [],
                this._framebuffer = null,
                this._near = .01,
                this._far = 1e3,
                this._fov = Math.PI / 4,
                this._rect = {
                    x: 0,
                    y: 0,
                    w: 1,
                    h: 1
                },
                this._orthoHeight = 10,
                this._cullingMask = 4294967295
            }
            var e, i, n = t.prototype;
            return n.setCullingMask = function(t) {
                this._cullingMask = t
            }
            ,
            n.getNode = function() {
                return this._node
            }
            ,
            n.setNode = function(t) {
                this._node = t
            }
            ,
            n.getType = function() {
                return this._projection
            }
            ,
            n.setType = function(t) {
                this._projection = t
            }
            ,
            n.getPriority = function() {
                return this._priority
            }
            ,
            n.setPriority = function(t) {
                this._priority = t
            }
            ,
            n.getOrthoHeight = function() {
                return this._orthoHeight
            }
            ,
            n.setOrthoHeight = function(t) {
                this._orthoHeight = t
            }
            ,
            n.getFov = function() {
                return this._fov
            }
            ,
            n.setFov = function(t) {
                this._fov = t
            }
            ,
            n.getNear = function() {
                return this._near
            }
            ,
            n.setNear = function(t) {
                this._near = t
            }
            ,
            n.getFar = function() {
                return this._far
            }
            ,
            n.setFar = function(t) {
                this._far = t
            }
            ,
            n.getColor = function(t) {
                return r.Vec4.copy(t, this._color)
            }
            ,
            n.setColor = function(t, e, i, n) {
                r.Vec4.set(this._color, t, e, i, n)
            }
            ,
            n.getDepth = function() {
                return this._depth
            }
            ,
            n.setDepth = function(t) {
                this._depth = t
            }
            ,
            n.getStencil = function() {
                return this._stencil
            }
            ,
            n.setStencil = function(t) {
                this._stencil = t
            }
            ,
            n.getClearFlags = function() {
                return this._clearFlags
            }
            ,
            n.setClearFlags = function(t) {
                this._clearFlags = t
            }
            ,
            n.getRect = function(t) {
                return t.x = this._rect.x,
                t.y = this._rect.y,
                t.w = this._rect.w,
                t.h = this._rect.h,
                t
            }
            ,
            n.setRect = function(t, e, i, n) {
                this._rect.x = t,
                this._rect.y = e,
                this._rect.w = i,
                this._rect.h = n
            }
            ,
            n.getStages = function() {
                return this._stages
            }
            ,
            n.setStages = function(t) {
                this._stages = t
            }
            ,
            n.getFramebuffer = function() {
                return this._framebuffer
            }
            ,
            n.setFrameBuffer = function(t) {
                this._framebuffer = t
            }
            ,
            n._calcMatrices = function(t, e) {
                this._node.getWorldRT(c),
                r.Mat4.invert(h, c);
                var i = t / e;
                if (this._projection === a.default.PROJ_PERSPECTIVE)
                    r.Mat4.perspective(u, this._fov, i, this._near, this._far);
                else {
                    var n = this._orthoHeight * i
                      , s = this._orthoHeight;
                    r.Mat4.ortho(u, -n, n, -s, s, this._near, this._far)
                }
                r.Mat4.mul(_, u, h),
                r.Mat4.invert(f, _)
            }
            ,
            n.extractView = function(t, e, i) {
                this._framebuffer && (e = this._framebuffer._width,
                i = this._framebuffer._height),
                t._priority = this._priority,
                t._rect.x = this._rect.x * e,
                t._rect.y = this._rect.y * i,
                t._rect.w = this._rect.w * e,
                t._rect.h = this._rect.h * i,
                this.getColor(t._color),
                t._depth = this._depth,
                t._stencil = this._stencil,
                t._clearFlags = this._clearFlags,
                t._clearModel = this._clearModel,
                t._stages = this._stages,
                t._framebuffer = this._framebuffer,
                this._calcMatrices(e, i),
                r.Mat4.copy(t._matView, h),
                r.Mat4.copy(t._matViewInv, c),
                r.Mat4.copy(t._matProj, u),
                r.Mat4.copy(t._matViewProj, _),
                r.Mat4.copy(t._matInvViewProj, f),
                t._cullingMask = this._cullingMask
            }
            ,
            n.screenPointToRay = function(t, e, i, n, o) {
                if (!cc.geomUtils)
                    return o;
                o = o || new s.Ray,
                this._calcMatrices(i, n);
                var l = this._rect.x * i
                  , h = this._rect.y * n
                  , c = this._rect.w * i
                  , u = this._rect.h * n;
                return r.Vec3.set(p, (t - l) / c * 2 - 1, (e - h) / u * 2 - 1, 1),
                r.Vec3.transformMat4(p, p, f),
                this._projection === a.default.PROJ_PERSPECTIVE ? this._node.getWorldPosition(d) : (r.Vec3.set(d, (t - l) / c * 2 - 1, (e - h) / u * 2 - 1, -1),
                r.Vec3.transformMat4(d, d, f)),
                s.Ray.fromPoints(o, d, p)
            }
            ,
            n.screenToWorld = function(t, e, i, n) {
                this._calcMatrices(i, n);
                var s = this._rect.x * i
                  , o = this._rect.y * n
                  , l = this._rect.w * i
                  , h = this._rect.h * n;
                return this._projection === a.default.PROJ_PERSPECTIVE ? (r.Vec3.set(t, (e.x - s) / l * 2 - 1, (e.y - o) / h * 2 - 1, .9999),
                r.Vec3.transformMat4(t, t, f),
                this._node.getWorldPosition(d),
                r.Vec3.lerp(t, d, t, (0,
                r.lerp)(this._near / this._far, 1, e.z))) : (r.Vec3.set(t, (e.x - s) / l * 2 - 1, (e.y - o) / h * 2 - 1, 2 * e.z - 1),
                r.Vec3.transformMat4(t, t, f)),
                t
            }
            ,
            n.worldToScreen = function(t, e, i, n) {
                this._calcMatrices(i, n);
                var s = this._rect.x * i
                  , a = this._rect.y * n
                  , o = this._rect.w * i
                  , l = this._rect.h * n;
                return r.Vec3.transformMat4(t, e, _),
                t.x = s + .5 * (t.x + 1) * o,
                t.y = a + .5 * (t.y + 1) * l,
                t.z = .5 * t.z + .5,
                t
            }
            ,
            n.worldMatrixToScreen = function(t, e, i, n) {
                this._calcMatrices(i, n),
                r.Mat4.mul(t, _, e);
                var s = i / 2
                  , a = n / 2;
                return r.Mat4.identity(l),
                r.Mat4.transform(l, l, r.Vec3.set(d, s, a, 0)),
                r.Mat4.scale(l, l, r.Vec3.set(d, s, a, 1)),
                r.Mat4.mul(t, l, t),
                t
            }
            ,
            e = t,
            (i = [{
                key: "cullingMask",
                get: function() {
                    return this._cullingMask
                },
                set: function(t) {
                    this._cullingMask = t
                }
            }]) && o(e.prototype, i),
            t
        }
        )();
        i.default = m,
        e.exports = i.default
    }
    ), {
        "../../core/geom-utils": 148,
        "../../core/value-types": 282,
        "../enums": 310
    }],
    336: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = (function() {
            function t() {
                this._type = "default",
                this._poolID = -1,
                this._node = null,
                this._inputAssembler = null,
                this._effect = null,
                this._viewID = -1,
                this._cameraID = -1,
                this._userKey = -1,
                this._castShadow = !1,
                this._boundingShape = null
            }
            var e = t.prototype;
            return e.setNode = function(t) {
                this._node = t
            }
            ,
            e.setInputAssembler = function(t) {
                this._inputAssembler = t
            }
            ,
            e.setEffect = function(t) {
                this._effect = t
            }
            ,
            e.setUserKey = function(t) {
                this._userKey = t
            }
            ,
            e.extractDrawItem = function(t) {
                t.model = this,
                t.node = this._node,
                t.ia = this._inputAssembler,
                t.effect = this._effect
            }
            ,
            t
        }
        )();
        i.default = n,
        e.exports = i.default
    }
    ), {}],
    337: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = t("../memop")
          , r = (function() {
            function t(t) {
                this._lights = new n.FixedArray(16),
                this._models = new n.FixedArray(16),
                this._cameras = new n.FixedArray(16),
                this._debugCamera = null,
                this._app = t,
                this._views = []
            }
            var e = t.prototype;
            return e._add = function(t, e) {
                -1 === e._poolID && (t.push(e),
                e._poolID = t.length - 1)
            }
            ,
            e._remove = function(t, e) {
                -1 !== e._poolID && (t.data[t.length - 1]._poolID = e._poolID,
                t.fastRemove(e._poolID),
                e._poolID = -1)
            }
            ,
            e.reset = function() {
                for (var t = 0; t < this._models.length; ++t)
                    this._models.data[t]._viewID = -1
            }
            ,
            e.setDebugCamera = function(t) {
                this._debugCamera = t
            }
            ,
            e.getCameraCount = function() {
                return this._cameras.length
            }
            ,
            e.getCamera = function(t) {
                return this._cameras.data[t]
            }
            ,
            e.addCamera = function(t) {
                this._add(this._cameras, t)
            }
            ,
            e.removeCamera = function(t) {
                this._remove(this._cameras, t)
            }
            ,
            e.getModelCount = function() {
                return this._models.length
            }
            ,
            e.getModel = function(t) {
                return this._models.data[t]
            }
            ,
            e.addModel = function(t) {
                this._add(this._models, t)
            }
            ,
            e.removeModel = function(t) {
                this._remove(this._models, t)
            }
            ,
            e.getLightCount = function() {
                return this._lights.length
            }
            ,
            e.getLight = function(t) {
                return this._lights.data[t]
            }
            ,
            e.addLight = function(t) {
                this._add(this._lights, t)
            }
            ,
            e.removeLight = function(t) {
                this._remove(this._lights, t)
            }
            ,
            e.addView = function(t) {
                -1 === this._views.indexOf(t) && this._views.push(t)
            }
            ,
            e.removeView = function(t) {
                var e = this._views.indexOf(t);
                -1 !== e && this._views.splice(e, 1)
            }
            ,
            t
        }
        )();
        i.default = r,
        e.exports = i.default
    }
    ), {
        "../memop": 327
    }],
    338: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.getInspectorProps = function(t) {
            var e = {
                type: t.type
            };
            Object.assign(e, t.editor || t.inspector),
            e.defines = t.defines,
            e.value = v(e.type)(t.value),
            t.range && (e.range = t.range);
            var i = g(e.type);
            return e.typeName = A[i] || i,
            e.valueCtor = d[e.type],
            "cc.Texture2D" == e.typeName && (e.typeName = "cc.Asset",
            e.assetType = "cc.Texture2D"),
            e
        }
        ,
        i.getClassName = i.getInstanceCtor = i.getInstanceType = i.enums2default = i.ctor2enums = void 0;
        var n, r, s, a, o = c(t("./enums")), l = t("../core/value-types"), h = c(t("../core/assets/CCTexture2D"));
        function c(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        var u;
        u = t("./gfx/texture-2d");
        var _ = cc.Object
          , f = ((n = {})[Boolean] = function(t) {
            return t || !1
        }
        ,
        n[Number] = function(t) {
            return t ? ArrayBuffer.isView(t) ? t[0] : t : 0
        }
        ,
        n[l.Vec2] = function(t) {
            return t ? cc.v2(t[0], t[1]) : cc.v2()
        }
        ,
        n[l.Vec3] = function(t) {
            return t ? cc.v3(t[0], t[1], t[2]) : cc.v3()
        }
        ,
        n[l.Vec4] = function(t) {
            return t ? cc.v4(t[0], t[1], t[2], t[3]) : cc.v4()
        }
        ,
        n[l.Color] = function(t) {
            return t ? cc.color(255 * t[0], 255 * t[1], 255 * t[2], 255 * (t[3] || 1)) : cc.color()
        }
        ,
        n[l.Mat4] = function(t) {
            return t ? cc.mat4(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15]) : cc.mat4()
        }
        ,
        n[h.default] = function() {
            return null
        }
        ,
        n[_] = function() {
            return null
        }
        ,
        n)
          , d = ((r = {})[o.default.PARAM_INT] = Number,
        r[o.default.PARAM_INT2] = l.Vec2,
        r[o.default.PARAM_INT3] = l.Vec3,
        r[o.default.PARAM_INT4] = l.Vec4,
        r[o.default.PARAM_FLOAT] = Number,
        r[o.default.PARAM_FLOAT2] = l.Vec2,
        r[o.default.PARAM_FLOAT3] = l.Vec3,
        r[o.default.PARAM_FLOAT4] = l.Vec4,
        r[o.default.PARAM_MAT4] = l.Mat4,
        r[o.default.PARAM_TEXTURE_2D] = h.default,
        r.color = l.Color,
        r.number = Number,
        r.boolean = Boolean,
        r.default = _,
        r)
          , p = ((s = {})[Number] = o.default.PARAM_FLOAT,
        s[l.Vec2] = o.default.PARAM_FLOAT2,
        s[l.Vec3] = o.default.PARAM_FLOAT3,
        s[l.Vec4] = o.default.PARAM_FLOAT4,
        s[l.Color] = o.default.PARAM_COLOR3,
        s[l.Color] = o.default.PARAM_COLOR4,
        s[l.Mat4] = o.default.PARAM_MAT4,
        s[h.default] = o.default.PARAM_TEXTURE_2D,
        s[u] = o.default.PARAM_TEXTURE_2D,
        s);
        i.ctor2enums = p;
        var m = ((a = {})[o.default.PARAM_INT] = new Uint32Array([0]),
        a[o.default.PARAM_INT2] = new Uint32Array([0, 0]),
        a[o.default.PARAM_INT3] = new Uint32Array([0, 0, 0]),
        a[o.default.PARAM_INT4] = new Uint32Array([0, 0, 0, 0]),
        a[o.default.PARAM_FLOAT] = new Float32Array([0]),
        a[o.default.PARAM_FLOAT2] = new Float32Array([0, 0]),
        a[o.default.PARAM_FLOAT3] = new Float32Array([0, 0, 0]),
        a[o.default.PARAM_FLOAT4] = new Float32Array([0, 0, 0, 0]),
        a[o.default.PARAM_MAT4] = cc.mat4().m,
        a[o.default.PARAM_TEXTURE_2D] = null,
        a.number = 0,
        a.boolean = !1,
        a);
        i.enums2default = m;
        var y = function(t) {
            return d[t] || d.default
        };
        i.getInstanceType = y;
        var v = function(t) {
            return f[y(t)]
        };
        i.getInstanceCtor = v;
        var g = function(t) {
            return cc.js.getClassName(y(t))
        };
        i.getClassName = g;
        var A = {
            Number: "number",
            Boolean: "boolean"
        }
    }
    ), {
        "../core/assets/CCTexture2D": 77,
        "../core/value-types": 282,
        "./enums": 310,
        "./gfx/texture-2d": 320
    }],
    339: [(function(t) {
        "use strict";
        var e = t("../compression/ZipUtils")
          , i = t("../compression/zlib.min")
          , n = t("../core/platform/js");
        function r(t) {
            if (t.length % 4 != 0)
                return null;
            for (var e = t.length / 4, i = window.Uint32Array ? new Uint32Array(e) : [], n = 0; n < e; n++) {
                var r = 4 * n;
                i[n] = t[r] + 256 * t[r + 1] + 65536 * t[r + 2] + t[r + 3] * (1 << 24)
            }
            return i
        }
        function s(t) {
            var e = cc.Label.HorizontalAlign;
            switch (t) {
            case "center":
                return e.CENTER;
            case "right":
                return e.RIGHT;
            default:
                return e.LEFT
            }
        }
        function a(t) {
            var e = cc.Label.VerticalAlign;
            switch (t) {
            case "center":
                return e.CENTER;
            case "bottom":
                return e.BOTTOM;
            default:
                return e.TOP
            }
        }
        function o(t) {
            if (!t)
                return cc.color(0, 0, 0, 255);
            if (8 === (t = -1 !== t.indexOf("#") ? t.substring(1) : t).length) {
                var e = parseInt(t.substr(0, 2), 16) || 255
                  , i = parseInt(t.substr(2, 2), 16) || 0
                  , n = parseInt(t.substr(4, 2), 16) || 0
                  , r = parseInt(t.substr(6, 2), 16) || 0;
                return cc.color(i, n, r, e)
            }
            var s = parseInt(t.substr(0, 2), 16) || 0
              , a = parseInt(t.substr(2, 2), 16) || 0
              , o = parseInt(t.substr(4, 2), 16) || 0;
            return cc.color(s, a, o, 255)
        }
        function l(t, e) {
            for (var i = [], n = t.getElementsByTagName("properties"), r = 0; r < n.length; ++r)
                for (var s = n[r].getElementsByTagName("property"), a = 0; a < s.length; ++a)
                    i.push(s[a]);
            e = e || {};
            for (var l = 0; l < i.length; l++) {
                var h = i[l]
                  , c = h.getAttribute("name")
                  , u = h.getAttribute("type") || "string"
                  , _ = h.getAttribute("value");
                "int" === u ? _ = parseInt(_) : "float" === u ? _ = parseFloat(_) : "bool" === u ? _ = "true" === _ : "color" === u && (_ = o(_)),
                e[c] = _
            }
            return e
        }
        t("../core/platform/CCSAXParser"),
        cc.TMXLayerInfo = function() {
            this.properties = {},
            this.name = "",
            this._layerSize = null,
            this._tiles = [],
            this.visible = !0,
            this._opacity = 0,
            this.ownTiles = !0,
            this._minGID = 1e5,
            this._maxGID = 0,
            this.offset = cc.v2(0, 0)
        }
        ,
        cc.TMXLayerInfo.prototype = {
            constructor: cc.TMXLayerInfo,
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            }
        },
        cc.TMXImageLayerInfo = function() {
            this.name = "",
            this.visible = !0,
            this.width = 0,
            this.height = 0,
            this.offset = cc.v2(0, 0),
            this._opacity = 0,
            this._trans = new cc.Color(255,255,255,255),
            this.sourceImage = null
        }
        ,
        cc.TMXObjectGroupInfo = function() {
            this.properties = {},
            this.name = "",
            this._objects = [],
            this.visible = !0,
            this._opacity = 0,
            this._color = new cc.Color(255,255,255,255),
            this.offset = cc.v2(0, 0),
            this._draworder = "topdown"
        }
        ,
        cc.TMXObjectGroupInfo.prototype = {
            constructor: cc.TMXObjectGroupInfo,
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            }
        },
        cc.TMXTilesetInfo = function() {
            this.name = "",
            this.firstGid = 0,
            this.spacing = 0,
            this.margin = 0,
            this.sourceImage = null,
            this.imageSize = cc.size(0, 0),
            this.tileOffset = cc.v2(0, 0),
            this._tileSize = cc.size(0, 0)
        }
        ,
        cc.TMXTilesetInfo.prototype = {
            constructor: cc.TMXTilesetInfo,
            rectForGID: function(t, e) {
                var i = e || cc.rect(0, 0, 0, 0);
                i.width = this._tileSize.width,
                i.height = this._tileSize.height,
                t &= cc.TiledMap.TileFlag.FLIPPED_MASK,
                t -= parseInt(this.firstGid, 10);
                var n = parseInt((this.imageSize.width - 2 * this.margin + this.spacing) / (this._tileSize.width + this.spacing), 10);
                return i.x = parseInt(t % n * (this._tileSize.width + this.spacing) + this.margin, 10),
                i.y = parseInt(parseInt(t / n, 10) * (this._tileSize.height + this.spacing) + this.margin, 10),
                i
            }
        },
        cc.TMXMapInfo = function(t, e, i, n, r) {
            this.properties = [],
            this.orientation = null,
            this.parentElement = null,
            this.parentGID = null,
            this.layerAttrs = 0,
            this.storingCharacters = !1,
            this.currentString = null,
            this.renderOrder = cc.TiledMap.RenderOrder.RightDown,
            this._supportVersion = [1, 2, 0],
            this._parser = new cc.SAXParser,
            this._objectGroups = [],
            this._allChildren = [],
            this._mapSize = cc.size(0, 0),
            this._tileSize = cc.size(0, 0),
            this._layers = [],
            this._tilesets = [],
            this._imageLayers = [],
            this._tileProperties = {},
            this._tileAnimations = {},
            this._tsxMap = null,
            this._textures = null,
            this._staggerAxis = null,
            this._staggerIndex = null,
            this._hexSideLength = 0,
            this._imageLayerTextures = null,
            this.initWithXML(t, e, i, n, r)
        }
        ,
        cc.TMXMapInfo.prototype = {
            constructor: cc.TMXMapInfo,
            getOrientation: function() {
                return this.orientation
            },
            setOrientation: function(t) {
                this.orientation = t
            },
            getStaggerAxis: function() {
                return this._staggerAxis
            },
            setStaggerAxis: function(t) {
                this._staggerAxis = t
            },
            getStaggerIndex: function() {
                return this._staggerIndex
            },
            setStaggerIndex: function(t) {
                this._staggerIndex = t
            },
            getHexSideLength: function() {
                return this._hexSideLength
            },
            setHexSideLength: function(t) {
                this._hexSideLength = t
            },
            getMapSize: function() {
                return cc.size(this._mapSize.width, this._mapSize.height)
            },
            setMapSize: function(t) {
                this._mapSize.width = t.width,
                this._mapSize.height = t.height
            },
            _getMapWidth: function() {
                return this._mapSize.width
            },
            _setMapWidth: function(t) {
                this._mapSize.width = t
            },
            _getMapHeight: function() {
                return this._mapSize.height
            },
            _setMapHeight: function(t) {
                this._mapSize.height = t
            },
            getTileSize: function() {
                return cc.size(this._tileSize.width, this._tileSize.height)
            },
            setTileSize: function(t) {
                this._tileSize.width = t.width,
                this._tileSize.height = t.height
            },
            _getTileWidth: function() {
                return this._tileSize.width
            },
            _setTileWidth: function(t) {
                this._tileSize.width = t
            },
            _getTileHeight: function() {
                return this._tileSize.height
            },
            _setTileHeight: function(t) {
                this._tileSize.height = t
            },
            getLayers: function() {
                return this._layers
            },
            setLayers: function(t) {
                this._allChildren.push(t),
                this._layers.push(t)
            },
            getImageLayers: function() {
                return this._imageLayers
            },
            setImageLayers: function(t) {
                this._allChildren.push(t),
                this._imageLayers.push(t)
            },
            getTilesets: function() {
                return this._tilesets
            },
            setTilesets: function(t) {
                this._tilesets.push(t)
            },
            getObjectGroups: function() {
                return this._objectGroups
            },
            setObjectGroups: function(t) {
                this._allChildren.push(t),
                this._objectGroups.push(t)
            },
            getAllChildren: function() {
                return this._allChildren
            },
            getParentElement: function() {
                return this.parentElement
            },
            setParentElement: function(t) {
                this.parentElement = t
            },
            getParentGID: function() {
                return this.parentGID
            },
            setParentGID: function(t) {
                this.parentGID = t
            },
            getLayerAttribs: function() {
                return this.layerAttrs
            },
            setLayerAttribs: function(t) {
                this.layerAttrs = t
            },
            getStoringCharacters: function() {
                return this.storingCharacters
            },
            setStoringCharacters: function(t) {
                this.storingCharacters = t
            },
            getProperties: function() {
                return this.properties
            },
            setProperties: function(t) {
                this.properties = t
            },
            initWithXML: function(t, e, i, n, r) {
                return this._tilesets.length = 0,
                this._layers.length = 0,
                this._imageLayers.length = 0,
                this._tsxMap = e,
                this._textures = i,
                this._imageLayerTextures = r,
                this._textureSizes = n,
                this._objectGroups.length = 0,
                this._allChildren.length = 0,
                this.properties.length = 0,
                this._tileProperties = {},
                this._tileAnimations = {},
                this.currentString = "",
                this.storingCharacters = !1,
                this.layerAttrs = cc.TMXLayerInfo.ATTRIB_NONE,
                this.parentElement = cc.TiledMap.NONE,
                this.parseXMLString(t)
            },
            parseXMLString: function(t, e) {
                var i, n = this._parser._parseXML(t).documentElement, r = n.getAttribute("orientation"), s = n.getAttribute("staggeraxis"), a = n.getAttribute("staggerindex"), o = n.getAttribute("hexsidelength"), h = n.getAttribute("renderorder"), c = n.getAttribute("version") || "1.0.0";
                if ("map" === n.nodeName) {
                    for (var u = c.split("."), _ = this._supportVersion, f = 0; f < _.length; f++) {
                        var d = parseInt(u[f]) || 0;
                        if (_[f] < d) {
                            cc.logID(7216, c);
                            break
                        }
                    }
                    "orthogonal" === r ? this.orientation = cc.TiledMap.Orientation.ORTHO : "isometric" === r ? this.orientation = cc.TiledMap.Orientation.ISO : "hexagonal" === r ? this.orientation = cc.TiledMap.Orientation.HEX : null !== r && cc.logID(7217, r),
                    this.renderOrder = "right-up" === h ? cc.TiledMap.RenderOrder.RightUp : "left-up" === h ? cc.TiledMap.RenderOrder.LeftUp : "left-down" === h ? cc.TiledMap.RenderOrder.LeftDown : cc.TiledMap.RenderOrder.RightDown,
                    "x" === s ? this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_X) : "y" === s && this.setStaggerAxis(cc.TiledMap.StaggerAxis.STAGGERAXIS_Y),
                    "odd" === a ? this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD) : "even" === a && this.setStaggerIndex(cc.TiledMap.StaggerIndex.STAGGERINDEX_EVEN),
                    o && this.setHexSideLength(parseFloat(o));
                    var p = cc.size(0, 0);
                    p.width = parseFloat(n.getAttribute("width")),
                    p.height = parseFloat(n.getAttribute("height")),
                    this.setMapSize(p),
                    (p = cc.size(0, 0)).width = parseFloat(n.getAttribute("tilewidth")),
                    p.height = parseFloat(n.getAttribute("tileheight")),
                    this.setTileSize(p),
                    this.properties = l(n)
                }
                var m = n.getElementsByTagName("tileset");
                for ("map" !== n.nodeName && (m = []).push(n),
                i = 0; i < m.length; i++) {
                    var y = m[i]
                      , v = y.getAttribute("source");
                    if (v) {
                        var g = parseInt(y.getAttribute("firstgid"))
                          , A = this._tsxMap[v];
                        A && this.parseXMLString(A, g)
                    } else {
                        var x = y.getElementsByTagName("image")
                          , b = x.length > 1
                          , C = x[0]
                          , T = C.getAttribute("source");
                        T = T.replace(/\\/g, "/");
                        var S = y.getElementsByTagName("tile")
                          , w = S && S.length || 1
                          , E = null
                          , M = y.getAttribute("name") || ""
                          , D = parseInt(y.getAttribute("spacing")) || 0
                          , B = parseInt(y.getAttribute("margin")) || 0
                          , I = parseInt(e);
                        I || (I = parseInt(y.getAttribute("firstgid")) || 0);
                        var P = cc.size(0, 0);
                        P.width = parseFloat(y.getAttribute("tilewidth")),
                        P.height = parseFloat(y.getAttribute("tileheight"));
                        var R = y.getElementsByTagName("tileoffset")[0]
                          , O = cc.v2(0, 0);
                        R && (O.x = parseFloat(R.getAttribute("x")),
                        O.y = parseFloat(R.getAttribute("y")));
                        for (var L = null, F = 0; F < w; F++)
                            if (L && !b || ((L = new cc.TMXTilesetInfo).name = M,
                            L.firstGid = I,
                            L.spacing = D,
                            L.margin = B,
                            L._tileSize = P,
                            L.tileOffset = O,
                            L.sourceImage = this._textures[T],
                            L.imageSize = this._textureSizes[T] || L.imageSize,
                            L.sourceImage || cc.errorID(7221, T),
                            this.setTilesets(L)),
                            E = S && S[F]) {
                                this.parentGID = parseInt(I) + parseInt(E.getAttribute("id") || 0);
                                var V = E.getElementsByTagName("image");
                                if (V && V.length > 0) {
                                    var N = (C = V[0]).getAttribute("source");
                                    N = N.replace(/\\/g, "/"),
                                    L.sourceImage = this._textures[N],
                                    L.sourceImage || cc.errorID(7221, N);
                                    var k = cc.size(0, 0);
                                    k.width = parseFloat(C.getAttribute("width")),
                                    k.height = parseFloat(C.getAttribute("height")),
                                    L._tileSize = k,
                                    L.firstGid = this.parentGID
                                }
                                this._tileProperties[this.parentGID] = l(E);
                                var G = E.getElementsByTagName("animation");
                                if (G && G.length > 0) {
                                    var U = G[0].getElementsByTagName("frame")
                                      , z = {
                                        frames: [],
                                        dt: 0,
                                        frameIdx: 0
                                    };
                                    this._tileAnimations[this.parentGID] = z;
                                    for (var H = z.frames, W = 0; W < U.length; W++) {
                                        var j = U[W]
                                          , X = parseInt(I) + parseInt(j.getAttribute("tileid"))
                                          , Y = parseFloat(j.getAttribute("duration"));
                                        H.push({
                                            tileid: X,
                                            duration: Y / 1e3,
                                            grid: null
                                        })
                                    }
                                }
                            }
                    }
                }
                var q = n.childNodes;
                for (i = 0; i < q.length; i++) {
                    var J = q[i];
                    if (!this._shouldIgnoreNode(J)) {
                        if ("imagelayer" === J.nodeName) {
                            var Z = this._parseImageLayer(J);
                            Z && this.setImageLayers(Z)
                        }
                        if ("layer" === J.nodeName) {
                            var K = this._parseLayer(J);
                            this.setLayers(K)
                        }
                        if ("objectgroup" === J.nodeName) {
                            var Q = this._parseObjectGroup(J);
                            this.setObjectGroups(Q)
                        }
                    }
                }
                return n
            },
            _shouldIgnoreNode: function(t) {
                return 3 === t.nodeType || 8 === t.nodeType || 4 === t.nodeType
            },
            _parseImageLayer: function(t) {
                var e = t.getElementsByTagName("image");
                if (!e || 0 == e.length)
                    return null;
                var i = new cc.TMXImageLayerInfo;
                i.name = t.getAttribute("name"),
                i.offset.x = parseFloat(t.getAttribute("offsetx")) || 0,
                i.offset.y = parseFloat(t.getAttribute("offsety")) || 0;
                var n = t.getAttribute("visible");
                i.visible = !("0" === n);
                var r = t.getAttribute("opacity") || 1;
                i.opacity = parseInt(255 * parseFloat(r)) || 255;
                var s = e[0]
                  , a = s.getAttribute("source");
                return i.sourceImage = this._imageLayerTextures[a],
                i.width = parseInt(s.getAttribute("width")) || 0,
                i.height = parseInt(s.getAttribute("height")) || 0,
                i.trans = o(s.getAttribute("trans")),
                i.sourceImage ? i : (cc.errorID(7221, a),
                null)
            },
            _parseLayer: function(t) {
                var n = t.getElementsByTagName("data")[0]
                  , s = new cc.TMXLayerInfo;
                s.name = t.getAttribute("name");
                var a = cc.size(0, 0);
                a.width = parseFloat(t.getAttribute("width")),
                a.height = parseFloat(t.getAttribute("height")),
                s._layerSize = a;
                var o = t.getAttribute("visible");
                s.visible = !("0" === o);
                var h = t.getAttribute("opacity") || 1;
                s._opacity = h ? parseInt(255 * parseFloat(h)) : 255,
                s.offset = cc.v2(parseFloat(t.getAttribute("offsetx")) || 0, parseFloat(t.getAttribute("offsety")) || 0);
                for (var c = "", u = 0; u < n.childNodes.length; u++)
                    c += n.childNodes[u].nodeValue;
                c = c.trim();
                var _, f = n.getAttribute("compression"), d = n.getAttribute("encoding");
                if (f && "gzip" !== f && "zlib" !== f)
                    return cc.logID(7218),
                    null;
                switch (f) {
                case "gzip":
                    _ = e.unzipBase64AsArray(c, 4);
                    break;
                case "zlib":
                    _ = r(new i.Inflate(e.Base64.decodeAsArray(c, 1)).decompress());
                    break;
                case null:
                case "":
                    if ("base64" === d)
                        _ = e.Base64.decodeAsArray(c, 4);
                    else if ("csv" === d) {
                        _ = [];
                        for (var p = c.split(","), m = 0; m < p.length; m++)
                            _.push(parseInt(p[m]))
                    } else {
                        var y = n.getElementsByTagName("tile");
                        _ = [];
                        for (var v = 0; v < y.length; v++)
                            _.push(parseInt(y[v].getAttribute("gid")))
                    }
                    break;
                default:
                    this.layerAttrs === cc.TMXLayerInfo.ATTRIB_NONE && cc.logID(7219)
                }
                return _ && (s._tiles = new Uint32Array(_)),
                s.properties = l(t),
                s
            },
            _parseObjectGroup: function(t) {
                var e = new cc.TMXObjectGroupInfo;
                e.name = t.getAttribute("name") || "",
                e.offset = cc.v2(parseFloat(t.getAttribute("offsetx")), parseFloat(t.getAttribute("offsety")));
                var i = t.getAttribute("opacity") || 1;
                e._opacity = i ? parseInt(255 * parseFloat(i)) : 255;
                var n = t.getAttribute("visible");
                n && 0 === parseInt(n) && (e.visible = !1);
                var r = t.getAttribute("color");
                r && e._color.fromHEX(r);
                var h = t.getAttribute("draworder");
                h && (e._draworder = h),
                e.setProperties(l(t));
                var c = t.getElementsByTagName("object");
                if (c) {
                    for (var u = 0; u < c.length; u++) {
                        var _ = c[u]
                          , f = {};
                        f.id = _.getAttribute("id") || u,
                        f.name = _.getAttribute("name") || "",
                        f.width = parseFloat(_.getAttribute("width")) || 0,
                        f.height = parseFloat(_.getAttribute("height")) || 0,
                        f.x = parseFloat(_.getAttribute("x")) || 0,
                        f.y = parseFloat(_.getAttribute("y")) || 0,
                        f.rotation = parseFloat(_.getAttribute("rotation")) || 0,
                        l(_, f);
                        var d = _.getAttribute("visible");
                        f.visible = !(d && 0 === parseInt(d));
                        var p = _.getElementsByTagName("text");
                        if (p && p.length > 0) {
                            var m = p[0];
                            f.type = cc.TiledMap.TMXObjectType.TEXT,
                            f.wrap = "1" == m.getAttribute("wrap"),
                            f.color = o(m.getAttribute("color")),
                            f.halign = s(m.getAttribute("halign")),
                            f.valign = a(m.getAttribute("valign")),
                            f.pixelsize = parseInt(m.getAttribute("pixelsize")) || 16,
                            f.text = m.childNodes[0].nodeValue
                        }
                        var y = _.getAttribute("gid");
                        y && (f.gid = parseInt(y),
                        f.type = cc.TiledMap.TMXObjectType.IMAGE);
                        var v = _.getElementsByTagName("ellipse");
                        v && v.length > 0 && (f.type = cc.TiledMap.TMXObjectType.ELLIPSE);
                        var g = _.getElementsByTagName("polygon");
                        if (g && g.length > 0) {
                            f.type = cc.TiledMap.TMXObjectType.POLYGON;
                            var A = g[0].getAttribute("points");
                            A && (f.points = this._parsePointsString(A))
                        }
                        var x = _.getElementsByTagName("polyline");
                        if (x && x.length > 0) {
                            f.type = cc.TiledMap.TMXObjectType.POLYLINE;
                            var b = x[0].getAttribute("points");
                            b && (f.polylinePoints = this._parsePointsString(b))
                        }
                        f.type || (f.type = cc.TiledMap.TMXObjectType.RECT),
                        e._objects.push(f)
                    }
                    "index" !== h && e._objects.sort((function(t, e) {
                        return t.y - e.y
                    }
                    ))
                }
                return e
            },
            _parsePointsString: function(t) {
                if (!t)
                    return null;
                for (var e = [], i = t.split(" "), n = 0; n < i.length; n++) {
                    var r = i[n].split(",");
                    e.push({
                        x: parseFloat(r[0]),
                        y: parseFloat(r[1])
                    })
                }
                return e
            },
            setTileAnimations: function(t) {
                this._tileAnimations = t
            },
            getTileAnimations: function() {
                return this._tileAnimations
            },
            getTileProperties: function() {
                return this._tileProperties
            },
            setTileProperties: function(t) {
                this._tileProperties = t
            },
            getCurrentString: function() {
                return this.currentString
            },
            setCurrentString: function(t) {
                this.currentString = t
            }
        };
        var h = cc.TMXMapInfo.prototype;
        n.getset(h, "mapWidth", h._getMapWidth, h._setMapWidth),
        n.getset(h, "mapHeight", h._getMapHeight, h._setMapHeight),
        n.getset(h, "tileWidth", h._getTileWidth, h._setTileWidth),
        n.getset(h, "tileHeight", h._getTileHeight, h._setTileHeight),
        cc.TMXLayerInfo.ATTRIB_NONE = 1,
        cc.TMXLayerInfo.ATTRIB_BASE64 = 2,
        cc.TMXLayerInfo.ATTRIB_GZIP = 4,
        cc.TMXLayerInfo.ATTRIB_ZLIB = 8
    }
    ), {
        "../compression/ZipUtils": 22,
        "../compression/zlib.min": 25,
        "../core/platform/CCSAXParser": 200,
        "../core/platform/js": 214
    }],
    340: [(function(t, e) {
        "use strict";
        var i, n = t("../core/value-types"), r = (i = t("../core/assets/material/material-variant")) && i.__esModule ? i : {
            default: i
        }, s = t("../core/components/CCRenderComponent"), a = t("../core/assets/material/CCMaterial"), o = t("../core/renderer/render-flow"), l = cc.mat4(), h = cc.v2(), c = cc.v2(), u = cc.v2(), _ = {
            row: 0,
            col: 0
        }, f = cc.Class({
            name: "cc.TiledUserNodeData",
            extends: cc.Component,
            ctor: function() {
                this._index = -1,
                this._row = -1,
                this._col = -1,
                this._tiledLayer = null
            }
        }), d = cc.Class({
            name: "cc.TiledLayer",
            extends: s,
            editor: {
                inspector: "packages://inspector/inspectors/comps/tiled-layer.js"
            },
            ctor: function() {
                this._userNodeGrid = {},
                this._userNodeMap = {},
                this._userNodeDirty = !1,
                this._tiledTiles = [],
                this._tilesetIndexArr = [],
                this._tilesetIndexToArrIndex = {},
                this._texIdToMatIndex = {},
                this._viewPort = {
                    x: -1,
                    y: -1,
                    width: -1,
                    height: -1
                },
                this._cullingRect = {
                    leftDown: {
                        row: -1,
                        col: -1
                    },
                    rightTop: {
                        row: -1,
                        col: -1
                    }
                },
                this._cullingDirty = !0,
                this._rightTop = {
                    row: -1,
                    col: -1
                },
                this._layerInfo = null,
                this._mapInfo = null,
                this._topOffset = 0,
                this._downOffset = 0,
                this._leftOffset = 0,
                this._rightOffset = 0,
                this._tiles = [],
                this._vertices = [],
                this._verticesDirty = !0,
                this._layerName = "",
                this._layerOrientation = null,
                this._texGrids = null,
                this._textures = null,
                this._tilesets = null,
                this._leftDownToCenterX = 0,
                this._leftDownToCenterY = 0,
                this._hasTiledNodeGrid = !1,
                this._hasAniGrid = !1,
                this._animations = null,
                this._enableCulling = cc.macro.ENABLE_TILEDMAP_CULLING
            },
            _hasTiledNode: function() {
                return this._hasTiledNodeGrid
            },
            _hasAnimation: function() {
                return this._hasAniGrid
            },
            enableCulling: function(t) {
                this._enableCulling != t && (this._enableCulling = t,
                this._cullingDirty = !0)
            },
            addUserNode: function(t) {
                var e = t.getComponent(f);
                return e ? (cc.warn("CCTiledLayer:addUserNode node has been added"),
                !1) : (e = t.addComponent(f),
                t.parent = this.node,
                t._renderFlag |= o.FLAG_BREAK_FLOW,
                this._userNodeMap[t._id] = e,
                e._row = -1,
                e._col = -1,
                e._tiledLayer = this,
                this._nodeLocalPosToLayerPos(t, h),
                this._positionToRowCol(h.x, h.y, _),
                this._addUserNodeToGrid(e, _),
                this._updateCullingOffsetByUserNode(t),
                t.on(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, e),
                t.on(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, e),
                !0)
            },
            removeUserNode: function(t) {
                var e = t.getComponent(f);
                return e ? (t.off(cc.Node.EventType.POSITION_CHANGED, this._userNodePosChange, e),
                t.off(cc.Node.EventType.SIZE_CHANGED, this._userNodeSizeChange, e),
                this._removeUserNodeFromGrid(e),
                delete this._userNodeMap[t._id],
                t._removeComponent(e),
                e.destroy(),
                t.removeFromParent(!0),
                t._renderFlag &= ~o.FLAG_BREAK_FLOW,
                !0) : (cc.warn("CCTiledLayer:removeUserNode node is not exist"),
                !1)
            },
            destroyUserNode: function(t) {
                this.removeUserNode(t),
                t.destroy()
            },
            _nodeLocalPosToLayerPos: function(t, e) {
                e.x = t.x + this._leftDownToCenterX,
                e.y = t.y + this._leftDownToCenterY
            },
            _getNodesByRowCol: function(t, e) {
                var i = this._userNodeGrid[t];
                return i ? i[e] : null
            },
            _getNodesCountByRow: function(t) {
                var e = this._userNodeGrid[t];
                return e ? e.count : 0
            },
            _updateAllUserNode: function() {
                for (var t in this._userNodeGrid = {},
                this._userNodeMap) {
                    var e = this._userNodeMap[t];
                    this._nodeLocalPosToLayerPos(e.node, h),
                    this._positionToRowCol(h.x, h.y, _),
                    this._addUserNodeToGrid(e, _),
                    this._updateCullingOffsetByUserNode(e.node)
                }
            },
            _updateCullingOffsetByUserNode: function(t) {
                this._topOffset < t.height && (this._topOffset = t.height),
                this._downOffset < t.height && (this._downOffset = t.height),
                this._leftOffset < t.width && (this._leftOffset = t.width),
                this._rightOffset < t.width && (this._rightOffset = t.width)
            },
            _userNodeSizeChange: function() {
                var t = this.node;
                this._tiledLayer._updateCullingOffsetByUserNode(t)
            },
            _userNodePosChange: function() {
                var t = this.node
                  , e = this._tiledLayer;
                e._nodeLocalPosToLayerPos(t, h),
                e._positionToRowCol(h.x, h.y, _),
                e._limitInLayer(_),
                _.row === this._row && _.col === this._col || (e._removeUserNodeFromGrid(this),
                e._addUserNodeToGrid(this, _))
            },
            _removeUserNodeFromGrid: function(t) {
                var e = t._row
                  , i = t._col
                  , n = t._index
                  , r = this._userNodeGrid[e]
                  , s = r && r[i];
                s && (r.count--,
                s.count--,
                s.list[n] = null,
                s.count <= 0 && (s.list.length = 0,
                s.count = 0)),
                t._row = -1,
                t._col = -1,
                t._index = -1,
                this._userNodeDirty = !0
            },
            _limitInLayer: function(t) {
                var e = t.row
                  , i = t.col;
                e < 0 && (t.row = 0),
                e > this._rightTop.row && (t.row = this._rightTop.row),
                i < 0 && (t.col = 0),
                i > this._rightTop.col && (t.col = this._rightTop.col)
            },
            _addUserNodeToGrid: function(t, e) {
                var i = e.row
                  , n = e.col
                  , r = this._userNodeGrid[i] = this._userNodeGrid[i] || {
                    count: 0
                }
                  , s = r[n] = r[n] || {
                    count: 0,
                    list: []
                };
                t._row = i,
                t._col = n,
                t._index = s.list.length,
                r.count++,
                s.count++,
                s.list.push(t),
                this._userNodeDirty = !0
            },
            _isUserNodeDirty: function() {
                return this._userNodeDirty
            },
            _setUserNodeDirty: function(t) {
                this._userNodeDirty = t
            },
            onEnable: function() {
                this._super(),
                this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this),
                this._activateMaterial()
            },
            onDisable: function() {
                this._super(),
                this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
            },
            _syncAnchorPoint: function() {
                var t = this.node;
                this._leftDownToCenterX = t.width * t.anchorX * t.scaleX,
                this._leftDownToCenterY = t.height * t.anchorY * t.scaleY,
                this._cullingDirty = !0
            },
            onDestroy: function() {
                this._super(),
                this._buffer && (this._buffer.destroy(),
                this._buffer = null),
                this._renderDataList = null
            },
            getLayerName: function() {
                return this._layerName
            },
            setLayerName: function(t) {
                this._layerName = t
            },
            getProperty: function(t) {
                return this._properties[t]
            },
            getPositionAt: function(t, e) {
                var i, n;
                switch (void 0 !== e ? (i = Math.floor(t),
                e = Math.floor(e)) : (i = Math.floor(t.x),
                e = Math.floor(t.y)),
                this._layerOrientation) {
                case cc.TiledMap.Orientation.ORTHO:
                    n = this._positionForOrthoAt(i, e);
                    break;
                case cc.TiledMap.Orientation.ISO:
                    n = this._positionForIsoAt(i, e);
                    break;
                case cc.TiledMap.Orientation.HEX:
                    n = this._positionForHexAt(i, e)
                }
                return n
            },
            _isInvalidPosition: function(t, e) {
                if (t && "object" == typeof t) {
                    var i = t;
                    e = i.y,
                    t = i.x
                }
                return t >= this._layerSize.width || e >= this._layerSize.height || t < 0 || e < 0
            },
            _positionForIsoAt: function(t, e) {
                var i = 0
                  , n = 0
                  , r = Math.floor(t) + Math.floor(e) * this._layerSize.width
                  , s = this._tiles[r];
                if (s) {
                    var a = (s & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0
                      , o = this._texGrids[a].tileset.tileOffset;
                    i = o.x,
                    n = o.y
                }
                return cc.v2(.5 * this._mapTileSize.width * (this._layerSize.height + t - e - 1) + i, .5 * this._mapTileSize.height * (this._layerSize.width - t + this._layerSize.height - e - 2) - n)
            },
            _positionForOrthoAt: function(t, e) {
                var i = 0
                  , n = 0
                  , r = Math.floor(t) + Math.floor(e) * this._layerSize.width
                  , s = this._tiles[r];
                if (s) {
                    var a = (s & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0
                      , o = this._texGrids[a].tileset.tileOffset;
                    i = o.x,
                    n = o.y
                }
                return cc.v2(t * this._mapTileSize.width + i, (this._layerSize.height - e - 1) * this._mapTileSize.height - n)
            },
            _positionForHexAt: function(t, e) {
                var i, n = this._mapTileSize.width, r = this._mapTileSize.height, s = this._layerSize.height, a = Math.floor(t) + Math.floor(e) * this._layerSize.width, o = this._tiles[a];
                i = this._texGrids[o] ? this._texGrids[o].tileset.tileOffset : {
                    x: 0,
                    y: 0
                };
                var l = this._staggerIndex === cc.TiledMap.StaggerIndex.STAGGERINDEX_ODD ? 1 : -1
                  , h = 0
                  , c = 0
                  , u = 0
                  , _ = 0;
                switch (this._staggerAxis) {
                case cc.TiledMap.StaggerAxis.STAGGERAXIS_Y:
                    u = 0,
                    e % 2 == 1 && (u = n / 2 * l),
                    h = t * n + u + i.x,
                    c = (s - e - 1) * (r - (r - this._hexSideLength) / 2) - i.y;
                    break;
                case cc.TiledMap.StaggerAxis.STAGGERAXIS_X:
                    _ = 0,
                    t % 2 == 1 && (_ = r / 2 * -l),
                    h = t * (n - (n - this._hexSideLength) / 2) + i.x,
                    c = (s - e - 1) * r + _ - i.y
                }
                return cc.v2(h, c)
            },
            setTilesGIDAt: function(t, e, i, n) {
                if (t && 0 !== t.length && !(n <= 0)) {
                    i < 0 && (i = 0),
                    e < 0 && (e = 0);
                    for (var r = 0, s = e + n, a = i; ; a++)
                        for (var o = e; o < s; o++) {
                            if (r >= t.length)
                                return;
                            this._updateTileForGID(t[r], o, a),
                            r++
                        }
                }
            },
            setTileGIDAt: function(t, e, i, n) {
                if (void 0 === e)
                    throw new Error("cc.TiledLayer.setTileGIDAt(): pos should be non-null");
                var r;
                void 0 === n && e instanceof cc.Vec2 ? (r = e,
                n = i) : (u.x = e,
                u.y = i,
                r = u);
                var s = t & cc.TiledMap.TileFlag.FLIPPED_MASK;
                if (r.x = Math.floor(r.x),
                r.y = Math.floor(r.y),
                this._isInvalidPosition(r))
                    throw new Error("cc.TiledLayer.setTileGIDAt(): invalid position");
                this._tiles && this._tilesets && 0 != this._tilesets.length ? 0 !== s && s < this._tilesets[0].firstGid ? cc.logID(7239, t) : (n = n || 0,
                this._updateTileForGID((t | n) >>> 0, r.x, r.y)) : cc.logID(7238)
            },
            _updateTileForGID: function(t, e, i) {
                var n = 0 | e + i * this._layerSize.width;
                if (!(n >= this._tiles.length) && t !== this._tiles[n]) {
                    var r = (t & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0
                      , s = this._texGrids[r]
                      , a = s && s.texId;
                    s ? (this._tiles[n] = t,
                    this._updateVertex(e, i),
                    this._buildMaterial(a)) : this._tiles[n] = 0,
                    this._cullingDirty = !0
                }
            },
            getTiles: function() {
                return this._tiles
            },
            getTileGIDAt: function(t, e) {
                if (void 0 === t)
                    throw new Error("cc.TiledLayer.getTileGIDAt(): pos should be non-null");
                var i = t;
                if (void 0 === e && (i = t.x,
                e = t.y),
                this._isInvalidPosition(i, e))
                    throw new Error("cc.TiledLayer.getTileGIDAt(): invalid position");
                if (!this._tiles)
                    return cc.logID(7237),
                    null;
                var n = Math.floor(i) + Math.floor(e) * this._layerSize.width;
                return (this._tiles[n] & cc.TiledMap.TileFlag.FLIPPED_MASK) >>> 0
            },
            getTileFlagsAt: function(t, e) {
                if (!t)
                    throw new Error("TiledLayer.getTileFlagsAt: pos should be non-null");
                if (void 0 !== e && (t = cc.v2(t, e)),
                this._isInvalidPosition(t))
                    throw new Error("TiledLayer.getTileFlagsAt: invalid position");
                if (!this._tiles)
                    return cc.logID(7240),
                    null;
                var i = Math.floor(t.x) + Math.floor(t.y) * this._layerSize.width;
                return (this._tiles[i] & cc.TiledMap.TileFlag.FLIPPED_ALL) >>> 0
            },
            _setCullingDirty: function(t) {
                this._cullingDirty = t
            },
            _isCullingDirty: function() {
                return this._cullingDirty
            },
            _updateViewPort: function(t, e, i, n) {
                if (this._viewPort.width !== i || this._viewPort.height !== n || this._viewPort.x !== t || this._viewPort.y !== e) {
                    this._viewPort.x = t,
                    this._viewPort.y = e,
                    this._viewPort.width = i,
                    this._viewPort.height = n;
                    var r = 1;
                    this._layerOrientation === cc.TiledMap.Orientation.ISO && (r = 2);
                    var s = this._viewPort.x - this._offset.x + this._leftDownToCenterX
                      , a = this._viewPort.y - this._offset.y + this._leftDownToCenterY
                      , o = s - this._leftOffset
                      , l = a - this._downOffset
                      , h = s + i + this._rightOffset
                      , c = a + n + this._topOffset
                      , u = this._cullingRect.leftDown
                      , f = this._cullingRect.rightTop;
                    o < 0 && (o = 0),
                    l < 0 && (l = 0),
                    this._positionToRowCol(o, l, _),
                    _.row -= r,
                    _.col -= r,
                    _.row = _.row > 0 ? _.row : 0,
                    _.col = _.col > 0 ? _.col : 0,
                    _.row === u.row && _.col === u.col || (u.row = _.row,
                    u.col = _.col,
                    this._cullingDirty = !0),
                    h < 0 || c < 0 ? (_.row = -1,
                    _.col = -1) : (this._positionToRowCol(h, c, _),
                    _.row++,
                    _.col++),
                    _.row > this._rightTop.row && (_.row = this._rightTop.row),
                    _.col > this._rightTop.col && (_.col = this._rightTop.col),
                    _.row === f.row && _.col === f.col || (f.row = _.row,
                    f.col = _.col,
                    this._cullingDirty = !0)
                }
            },
            _positionToRowCol: function(t, e, i) {
                var n = cc.TiledMap
                  , r = n.Orientation
                  , s = n.StaggerAxis
                  , a = this._mapTileSize.width
                  , o = this._mapTileSize.height
                  , l = .5 * a
                  , h = .5 * o
                  , c = 0
                  , u = 0
                  , _ = 0
                  , f = 0
                  , d = this._staggerAxis;
                switch (this._layerSize.width,
                this._layerOrientation) {
                case r.ORTHO:
                    u = Math.floor(t / a),
                    c = Math.floor(e / o);
                    break;
                case r.ISO:
                    u = Math.floor(t / l),
                    c = Math.floor(e / h);
                    break;
                case r.HEX:
                    d === s.STAGGERAXIS_Y ? (_ = (c = Math.floor(e / (o - this._diffY1))) % 2 == 1 ? l * this._odd_even : 0,
                    u = Math.floor((t - _) / a)) : (f = (u = Math.floor(t / (a - this._diffX1))) % 2 == 1 ? h * -this._odd_even : 0,
                    c = Math.floor((e - f) / o))
                }
                return i.row = c,
                i.col = u,
                i
            },
            _updateCulling: function() {
                if (this._enableCulling) {
                    this.node._updateWorldMatrix(),
                    n.Mat4.invert(l, this.node._worldMatrix);
                    var t = cc.visibleRect
                      , e = cc.Camera.findCamera(this.node);
                    e && (h.x = 0,
                    h.y = 0,
                    c.x = h.x + t.width,
                    c.y = h.y + t.height,
                    e.getScreenToWorldPoint(h, h),
                    e.getScreenToWorldPoint(c, c),
                    n.Vec2.transformMat4(h, h, l),
                    n.Vec2.transformMat4(c, c, l),
                    this._updateViewPort(h.x, h.y, c.x - h.x, c.y - h.y))
                }
            },
            getLayerOrientation: function() {
                return this._layerOrientation
            },
            getProperties: function() {
                return this._properties
            },
            _updateVertex: function(t, e) {
                var i = cc.TiledMap
                  , n = i.TileFlag.FLIPPED_MASK
                  , r = i.StaggerAxis
                  , s = i.Orientation
                  , a = this._vertices
                  , o = this._layerOrientation
                  , l = this._tiles;
                if (l) {
                    var h, c, u, _, f, d, p, m = this._rightTop, y = this._mapTileSize.width, v = this._mapTileSize.height, g = .5 * y, A = .5 * v, x = this._layerSize.height, b = this._layerSize.width, C = this._texGrids;
                    o === s.HEX && (_ = this._staggerAxis,
                    f = this._diffX1,
                    d = this._diffY1,
                    p = this._odd_even);
                    var T, S, w, E, M = 0, D = 0, B = 0, I = 0, P = e * b + t;
                    if (h = C[S = (l[P] & n) >>> 0]) {
                        switch (this._animations[S] && (this._hasAniGrid = this._hasAniGrid || !0),
                        o) {
                        case s.ORTHO:
                            c = (M = t) * y,
                            u = (D = x - e - 1) * v;
                            break;
                        case s.ISO:
                            c = g * (M = x + t - e - 1),
                            u = A * (D = x + b - t - e - 2);
                            break;
                        case s.HEX:
                            c = t * (y - f) + (_ === r.STAGGERAXIS_Y && e % 2 == 1 ? g * p : 0),
                            u = (x - e - 1) * (v - d) + (_ === r.STAGGERAXIS_X && t % 2 == 1 ? A * -p : 0),
                            M = t,
                            D = x - e - 1
                        }
                        var R = a[D] = a[D] || {
                            minCol: 0,
                            maxCol: 0
                        }
                          , O = R[M] = R[M] || {};
                        R.minCol > M && (R.minCol = M),
                        R.maxCol < M && (R.maxCol = M),
                        m.row < D && (m.row = D),
                        m.col < M && (m.col = M),
                        T = h.tileset.tileOffset,
                        c += this._offset.x + T.x,
                        u += this._offset.y - T.y,
                        B = (B = -T.y + h.tileset._tileSize.height - v) < 0 ? 0 : B,
                        w = T.y < 0 ? 0 : T.y,
                        E = -T.x < 0 ? 0 : -T.x,
                        I = (I = T.x + h.tileset._tileSize.width - y) < 0 ? 0 : I,
                        this._rightOffset < E && (this._rightOffset = E),
                        this._leftOffset < I && (this._leftOffset = I),
                        this._topOffset < w && (this._topOffset = w),
                        this._downOffset < B && (this._downOffset = B),
                        O.left = c,
                        O.bottom = u,
                        O.index = P,
                        this._cullingDirty = !0
                    }
                }
            },
            _updateVertices: function() {
                if (this._vertices.length = 0,
                this._tiles) {
                    var t = this._rightTop;
                    t.row = -1,
                    t.col = -1;
                    var e = this._layerSize.height
                      , i = this._layerSize.width;
                    this._topOffset = 0,
                    this._downOffset = 0,
                    this._leftOffset = 0,
                    this._rightOffset = 0,
                    this._hasAniGrid = !1;
                    for (var n = 0; n < e; ++n)
                        for (var r = 0; r < i; ++r)
                            this._updateVertex(r, n);
                    this._verticesDirty = !1
                }
            },
            getTiledTileAt: function(t, e, i) {
                if (this._isInvalidPosition(t, e))
                    throw new Error("TiledLayer.getTiledTileAt: invalid position");
                if (!this._tiles)
                    return cc.logID(7236),
                    null;
                var n = Math.floor(t) + Math.floor(e) * this._layerSize.width
                  , r = this._tiledTiles[n];
                if (!r && i) {
                    var s = new cc.Node;
                    return (r = s.addComponent(cc.TiledTile))._x = t,
                    r._y = e,
                    r._layer = this,
                    r._updateInfo(),
                    s.parent = this.node,
                    r
                }
                return r
            },
            setTiledTileAt: function(t, e, i) {
                if (this._isInvalidPosition(t, e))
                    throw new Error("TiledLayer.setTiledTileAt: invalid position");
                if (!this._tiles)
                    return cc.logID(7236),
                    null;
                var n = Math.floor(t) + Math.floor(e) * this._layerSize.width;
                return this._tiledTiles[n] = i,
                this._cullingDirty = !0,
                this._hasTiledNodeGrid = !!i || this._tiledTiles.some((function(t) {
                    return !!t
                }
                )),
                i
            },
            getTexture: function(t) {
                return t = t || 0,
                this._textures && t >= 0 && this._textures.length > t ? this._textures[t] : null
            },
            getTextures: function() {
                return this._textures
            },
            setTexture: function(t) {
                this.setTextures([t])
            },
            setTextures: function(t) {
                this._textures = t,
                this._activateMaterial()
            },
            getLayerSize: function() {
                return this._layerSize
            },
            getMapTileSize: function() {
                return this._mapTileSize
            },
            getTileSet: function(t) {
                return t = t || 0,
                this._tilesets && t >= 0 && this._tilesets.length > t ? this._tilesets[t] : null
            },
            getTileSets: function() {
                return this._tilesets
            },
            setTileSet: function(t) {
                this.setTileSets([t])
            },
            setTileSets: function(t) {
                this._tilesets = t;
                for (var e = this._textures = [], i = this._texGrids = [], n = 0; n < t.length; n++) {
                    var r = t[n];
                    r && (e[n] = r.sourceImage)
                }
                cc.TiledMap.loadAllTextures(e, function() {
                    for (var e = 0, n = t.length; e < n; ++e) {
                        var r = t[e];
                        r && cc.TiledMap.fillTextureGrids(r, i, e)
                    }
                    this._prepareToRender()
                }
                .bind(this))
            },
            _traverseAllGrid: function() {
                var t = this._tiles
                  , e = this._texGrids
                  , i = this._tilesetIndexArr
                  , n = this._tilesetIndexToArrIndex = {}
                  , r = cc.TiledMap.TileFlag.FLIPPED_MASK;
                i.length = 0;
                for (var s = 0; s < t.length; s++) {
                    var a = t[s];
                    if (0 !== a) {
                        var o = e[a = (a & r) >>> 0];
                        if (o) {
                            var l = o.texId;
                            void 0 === n[l] && (n[l] = i.length,
                            i.push(l))
                        } else
                            cc.error("CCTiledLayer:_traverseAllGrid grid is null, gid is:", a)
                    }
                }
            },
            _init: function(t, e, i, n, r) {
                this._cullingDirty = !0,
                this._layerInfo = t,
                this._mapInfo = e;
                var s = t._layerSize;
                this._layerName = t.name,
                this._tiles = t._tiles,
                this._properties = t.properties,
                this._layerSize = s,
                this._minGID = t._minGID,
                this._maxGID = t._maxGID,
                this._opacity = t._opacity,
                this._renderOrder = e.renderOrder,
                this._staggerAxis = e.getStaggerAxis(),
                this._staggerIndex = e.getStaggerIndex(),
                this._hexSideLength = e.getHexSideLength(),
                this._animations = e.getTileAnimations(),
                this._tilesets = i,
                this._textures = n,
                this._texGrids = r,
                this._layerOrientation = e.orientation,
                this._mapTileSize = e.getTileSize();
                var a = this._mapTileSize.width
                  , o = this._mapTileSize.height
                  , l = this._layerSize.width
                  , h = this._layerSize.height;
                if (this._layerOrientation === cc.TiledMap.Orientation.HEX) {
                    var c = cc.TiledMap
                      , u = c.StaggerAxis
                      , _ = c.StaggerIndex
                      , f = 0
                      , d = 0;
                    this._odd_even = this._staggerIndex === _.STAGGERINDEX_ODD ? 1 : -1,
                    this._staggerAxis === u.STAGGERAXIS_X ? (this._diffX1 = (a - this._hexSideLength) / 2,
                    this._diffY1 = 0,
                    d = o * (h + .5),
                    f = (a + this._hexSideLength) * Math.floor(l / 2) + a * (l % 2)) : (this._diffX1 = 0,
                    this._diffY1 = (o - this._hexSideLength) / 2,
                    f = a * (l + .5),
                    d = (o + this._hexSideLength) * Math.floor(h / 2) + o * (h % 2)),
                    this.node.setContentSize(f, d)
                } else if (this._layerOrientation === cc.TiledMap.Orientation.ISO) {
                    var p = l + h;
                    this.node.setContentSize(.5 * a * p, .5 * o * p)
                } else
                    this.node.setContentSize(l * a, h * o);
                this._offset = cc.v2(t.offset.x, -t.offset.y),
                this._useAutomaticVertexZ = !1,
                this._vertexZvalue = 0,
                this._syncAnchorPoint(),
                this._prepareToRender()
            },
            _prepareToRender: function() {
                this._updateVertices(),
                this._traverseAllGrid(),
                this._updateAllUserNode(),
                this._activateMaterial()
            },
            _buildMaterial: function(t) {
                var e = this._texIdToMatIndex;
                if (void 0 !== e[t])
                    return null;
                var i = this._tilesetIndexArr
                  , n = this._tilesetIndexToArrIndex
                  , s = n[t];
                void 0 === s && (n[t] = s = i.length,
                i.push(t));
                var o = this._textures[t]
                  , l = this._materials[s];
                return l || (l = a.getBuiltinMaterial("2d-sprite")),
                (l = r.default.create(l, this)).define("CC_USE_MODEL", !0),
                l.setProperty("texture", o),
                this._materials[s] = l,
                e[t] = s,
                l
            },
            _activateMaterial: function() {
                var t = this._tilesetIndexArr;
                if (0 !== t.length) {
                    for (var e = t.length, i = 0; i < e; i++)
                        this._buildMaterial(t[i]);
                    this._materials.length = e,
                    this.markForRender(!0)
                } else
                    this.disableRender()
            }
        });
        cc.TiledLayer = e.exports = d
    }
    ), {
        "../core/assets/material/CCMaterial": 80,
        "../core/assets/material/material-variant": 87,
        "../core/components/CCRenderComponent": 115,
        "../core/renderer/render-flow": 225,
        "../core/value-types": 282
    }],
    341: [(function(t, e) {
        "use strict";
        t("./CCTMXXMLParser"),
        t("./CCTiledMapAsset"),
        t("./CCTiledLayer"),
        t("./CCTiledTile"),
        t("./CCTiledObjectGroup");
        var i = cc.Enum({
            ORTHO: 0,
            HEX: 1,
            ISO: 2
        })
          , n = cc.Enum({
            NONE: 0,
            MAP: 1,
            LAYER: 2,
            OBJECTGROUP: 3,
            OBJECT: 4,
            TILE: 5
        })
          , r = cc.Enum({
            HORIZONTAL: 2147483648,
            VERTICAL: 1073741824,
            DIAGONAL: 536870912,
            FLIPPED_ALL: 4026531840,
            FLIPPED_MASK: 268435455
        })
          , s = cc.Enum({
            STAGGERAXIS_X: 0,
            STAGGERAXIS_Y: 1
        })
          , a = cc.Enum({
            STAGGERINDEX_ODD: 0,
            STAGGERINDEX_EVEN: 1
        })
          , o = cc.Enum({
            RightDown: 0,
            RightUp: 1,
            LeftDown: 2,
            LeftUp: 3
        })
          , l = cc.Enum({
            RECT: 0,
            ELLIPSE: 1,
            POLYGON: 2,
            POLYLINE: 3,
            IMAGE: 4,
            TEXT: 5
        })
          , h = cc.Class({
            name: "cc.TiledMap",
            extends: cc.Component,
            editor: !1,
            ctor: function() {
                this._texGrids = [],
                this._textures = [],
                this._tilesets = [],
                this._animations = [],
                this._imageLayers = [],
                this._layers = [],
                this._groups = [],
                this._images = [],
                this._properties = [],
                this._tileProperties = [],
                this._mapSize = cc.size(0, 0),
                this._tileSize = cc.size(0, 0)
            },
            statics: {
                Orientation: i,
                Property: n,
                TileFlag: r,
                StaggerAxis: s,
                StaggerIndex: a,
                TMXObjectType: l,
                RenderOrder: o
            },
            properties: {
                _tmxFile: {
                    default: null,
                    type: cc.TiledMapAsset
                },
                tmxAsset: {
                    get: function() {
                        return this._tmxFile
                    },
                    set: function(t) {
                        this._tmxFile !== t && (this._tmxFile = t,
                        this._applyFile())
                    },
                    type: cc.TiledMapAsset
                }
            },
            getMapSize: function() {
                return this._mapSize
            },
            getTileSize: function() {
                return this._tileSize
            },
            getMapOrientation: function() {
                return this._mapOrientation
            },
            getObjectGroups: function() {
                return this._groups
            },
            getObjectGroup: function(t) {
                for (var e = this._groups, i = 0, n = e.length; i < n; i++) {
                    var r = e[i];
                    if (r && r.getGroupName() === t)
                        return r
                }
                return null
            },
            enableCulling: function(t) {
                for (var e = this._layers, i = 0; i < e.length; ++i)
                    e[i].enableCulling(t)
            },
            getProperties: function() {
                return this._properties
            },
            getLayers: function() {
                return this._layers
            },
            getLayer: function(t) {
                for (var e = this._layers, i = 0, n = e.length; i < n; i++) {
                    var r = e[i];
                    if (r && r.getLayerName() === t)
                        return r
                }
                return null
            },
            _changeLayer: function(t, e) {
                for (var i = this._layers, n = 0, r = i.length; n < r; n++) {
                    var s = i[n];
                    if (s && s.getLayerName() === t)
                        return void (i[n] = e)
                }
            },
            getProperty: function(t) {
                return this._properties[t.toString()]
            },
            getPropertiesForGID: function(t) {
                return this._tileProperties[t]
            },
            __preload: function() {
                this._tmxFile && this._applyFile()
            },
            onEnable: function() {
                this.node.on(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
            },
            onDisable: function() {
                this.node.off(cc.Node.EventType.ANCHOR_CHANGED, this._syncAnchorPoint, this)
            },
            _applyFile: function() {
                var t = this._tmxFile;
                if (t) {
                    for (var e = t.textures, i = t.textureNames, n = t.textureSizes, r = {}, s = {}, a = 0; a < e.length; ++a) {
                        var o = i[a];
                        r[o] = e[a],
                        s[o] = n[a]
                    }
                    var l = {};
                    e = t.imageLayerTextures,
                    i = t.imageLayerTextureNames;
                    for (var h = 0; h < e.length; ++h)
                        l[i[h]] = e[h];
                    for (var c = t.tsxFileNames, u = t.tsxFiles, _ = {}, f = 0; f < c.length; ++f)
                        c[f].length > 0 && (_[c[f]] = u[f].text);
                    var d = new cc.TMXMapInfo(t.tmxXmlStr,_,r,s,l)
                      , p = d.getTilesets();
                    p && 0 !== p.length || cc.logID(7241),
                    this._buildWithMapInfo(d)
                } else
                    this._releaseMapInfo()
            },
            _releaseMapInfo: function() {
                for (var t = this._layers, e = 0, i = t.length; e < i; e++)
                    t[e].node.removeFromParent(!0),
                    t[e].node.destroy();
                t.length = 0;
                for (var n = this._groups, r = 0, s = n.length; r < s; r++)
                    n[r].node.removeFromParent(!0),
                    n[r].node.destroy();
                n.length = 0;
                for (var a = this._images, o = 0, l = a.length; o < l; o++)
                    a[o].removeFromParent(!0),
                    a[o].destroy();
                a.length = 0
            },
            _syncAnchorPoint: function() {
                var t, e, i = this.node.getAnchorPoint(), n = this.node.width * i.x, r = this.node.height * (1 - i.y);
                for (t = 0,
                e = this._layers.length; t < e; t++)
                    this._layers[t].node.setAnchorPoint(i);
                for (t = 0,
                e = this._groups.length; t < e; t++) {
                    var s = this._groups[t]
                      , a = s.node;
                    a.anchorX = .5,
                    a.anchorY = .5,
                    a.x = s._offset.x - n + a.width * a.anchorX,
                    a.y = s._offset.y + r - a.height * a.anchorY
                }
                for (t = 0,
                e = this._images.length; t < e; t++) {
                    var o = this._images[t];
                    o.anchorX = .5,
                    o.anchorY = .5,
                    o.x = o._offset.x - n + o.width * o.anchorX,
                    o.y = o._offset.y + r - o.height * o.anchorY
                }
            },
            _fillAniGrids: function(t, e) {
                for (var i in e) {
                    var n = e[i];
                    if (n)
                        for (var r = n.frames, s = 0; s < r.length; s++) {
                            var a = r[s];
                            a.grid = t[a.tileid]
                        }
                }
            },
            _buildLayerAndGroup: function() {
                var t = this._tilesets
                  , e = this._texGrids
                  , i = this._animations;
                e.length = 0;
                for (var n = 0, r = t.length; n < r; ++n) {
                    var s = t[n];
                    s && cc.TiledMap.fillTextureGrids(s, e, n)
                }
                this._fillAniGrids(e, i);
                for (var a = this._layers, o = this._groups, l = this._images, h = {}, c = 0, u = a.length; c < u; c++)
                    h[a[c].node._name] = !0;
                for (var _ = 0, f = o.length; _ < f; _++)
                    h[o[_].node._name] = !0;
                for (var d = 0, p = l.length; d < p; d++)
                    h[l[d]._name] = !0;
                a = this._layers = [],
                o = this._groups = [],
                l = this._images = [];
                var m = this._mapInfo
                  , y = this.node
                  , v = m.getAllChildren()
                  , g = this._textures
                  , A = 0
                  , x = 0;
                if (v && v.length > 0)
                    for (var b = 0, C = v.length; b < C; b++) {
                        var T = v[b]
                          , S = T.name
                          , w = this.node.getChildByName(S);
                        if (h[S] = !1,
                        w || ((w = new cc.Node).name = S,
                        y.addChild(w)),
                        w.setSiblingIndex(b),
                        w.active = T.visible,
                        T instanceof cc.TMXLayerInfo) {
                            var E = w.getComponent(cc.TiledLayer);
                            E || (E = w.addComponent(cc.TiledLayer)),
                            E._init(T, m, t, g, e),
                            T.ownTiles = !1,
                            a.push(E)
                        } else if (T instanceof cc.TMXObjectGroupInfo) {
                            var M = w.getComponent(cc.TiledObjectGroup);
                            M || (M = w.addComponent(cc.TiledObjectGroup)),
                            M._init(T, m, e),
                            o.push(M)
                        } else if (T instanceof cc.TMXImageLayerInfo) {
                            var D = T.sourceImage;
                            w.opacity = T.opacity,
                            w.layerInfo = T,
                            w._offset = cc.v2(T.offset.x, -T.offset.y);
                            var B = w.getComponent(cc.Sprite);
                            B || (B = w.addComponent(cc.Sprite));
                            var I = B.spriteFrame || new cc.SpriteFrame;
                            I.setTexture(D),
                            B.spriteFrame = I,
                            w.width = D.width,
                            w.height = D.height,
                            l.push(w)
                        }
                        A = Math.max(A, w.width),
                        x = Math.max(x, w.height)
                    }
                for (var P = y.children, R = 0, O = P.length; R < O; R++) {
                    var L = P[R];
                    h[L._name] && L.destroy()
                }
                this.node.width = A,
                this.node.height = x,
                this._syncAnchorPoint()
            },
            _buildWithMapInfo: function(t) {
                this._mapInfo = t,
                this._mapSize = t.getMapSize(),
                this._tileSize = t.getTileSize(),
                this._mapOrientation = t.orientation,
                this._properties = t.properties,
                this._tileProperties = t.getTileProperties(),
                this._imageLayers = t.getImageLayers(),
                this._animations = t.getTileAnimations(),
                this._tilesets = t.getTilesets();
                var e = this._tilesets;
                this._textures.length = 0;
                for (var i = [], n = 0, r = e.length; n < r; ++n) {
                    var s = e[n];
                    s && s.sourceImage && (this._textures[n] = s.sourceImage,
                    i.push(s.sourceImage))
                }
                for (var a = 0; a < this._imageLayers.length; a++) {
                    var o = this._imageLayers[a];
                    o && o.sourceImage && i.push(o.sourceImage)
                }
                cc.TiledMap.loadAllTextures(i, function() {
                    this._buildLayerAndGroup()
                }
                .bind(this))
            },
            update: function(t) {
                var e = this._animations
                  , i = this._texGrids;
                for (var n in e) {
                    var r = e[n]
                      , s = r.frames
                      , a = s[r.frameIdx];
                    r.dt += t,
                    a.duration < r.dt && (r.dt = 0,
                    r.frameIdx++,
                    r.frameIdx >= s.length && (r.frameIdx = 0),
                    a = s[r.frameIdx]),
                    i[n] = a.grid
                }
            }
        });
        cc.TiledMap = e.exports = h,
        cc.TiledMap.loadAllTextures = function(t, e) {
            var i = t.length;
            if (0 !== i)
                for (var n = 0, r = function() {
                    ++n >= i && e()
                }, s = 0; s < i; s++) {
                    var a = t[s];
                    a.loaded ? r() : a.once("load", (function() {
                        r()
                    }
                    ))
                }
            else
                e()
        }
        ,
        cc.TiledMap.fillTextureGrids = function(t, e, i) {
            var n = t.sourceImage;
            t.imageSize.width && t.imageSize.height || (t.imageSize.width = n.width,
            t.imageSize.height = n.height);
            var r = t._tileSize.width
              , s = t._tileSize.height
              , a = n.width
              , o = n.height
              , l = t.spacing
              , h = t.margin
              , c = Math.floor((a - 2 * h + l) / (r + l))
              , u = Math.floor((o - 2 * h + l) / (s + l)) * c
              , _ = t.firstGid
              , f = null
              , d = !!e[_]
              , p = cc.macro.FIX_ARTIFACTS_BY_STRECHING_TEXEL_TMX ? .5 : 0;
            u <= 0 && (u = 1);
            for (var m = t.firstGid + u; _ < m && (d && !e[_] && (d = !1),
            d || !e[_]); ++_)
                f = {
                    texId: i,
                    tileset: t,
                    x: 0,
                    y: 0,
                    width: r,
                    height: s,
                    t: 0,
                    l: 0,
                    r: 0,
                    b: 0,
                    gid: _
                },
                t.rectForGID(_, f),
                f.x += p,
                f.y += p,
                f.width -= 2 * p,
                f.height -= 2 * p,
                f.t = f.y / o,
                f.l = f.x / a,
                f.r = (f.x + f.width) / a,
                f.b = (f.y + f.height) / o,
                e[_] = f
        }
        ,
        cc.js.obsolete(cc.TiledMap.prototype, "cc.TiledMap.tmxFile", "tmxAsset", !0),
        cc.js.get(cc.TiledMap.prototype, "mapLoaded", (function() {
            return cc.errorID(7203),
            []
        }
        ), !1)
    }
    ), {
        "./CCTMXXMLParser": 339,
        "./CCTiledLayer": 340,
        "./CCTiledMapAsset": 342,
        "./CCTiledObjectGroup": 344,
        "./CCTiledTile": 345
    }],
    342: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.TiledMapAsset",
            extends: cc.Asset,
            properties: {
                tmxXmlStr: "",
                textures: {
                    default: [],
                    type: [cc.Texture2D]
                },
                textureNames: [cc.String],
                textureSizes: {
                    default: [],
                    type: [cc.Size]
                },
                imageLayerTextures: {
                    default: [],
                    type: [cc.Texture2D]
                },
                imageLayerTextureNames: [cc.String],
                tsxFiles: [cc.TextAsset],
                tsxFileNames: [cc.String]
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            createNode: !1
        });
        cc.TiledMapAsset = i,
        e.exports = i
    }
    ), {}],
    343: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../renderer/core/input-assembler")) && i.__esModule ? i : {
            default: i
        }, r = cc.Class({
            name: "cc.TiledMapRenderDataList",
            ctor: function() {
                this._dataList = [],
                this._offset = 0
            },
            _pushRenderData: function() {
                var t = {};
                t.ia = new n.default,
                t.nodesRenderList = [],
                this._dataList.push(t)
            },
            popRenderData: function(t) {
                this._offset >= this._dataList.length && this._pushRenderData();
                var e = this._dataList[this._offset];
                e.nodesRenderList.length = 0;
                var i = e.ia;
                return i._vertexBuffer = t._vb,
                i._indexBuffer = t._ib,
                i._start = t.indiceOffset,
                i._count = 0,
                this._offset++,
                e
            },
            pushNodesList: function(t, e) {
                t.nodesRenderList.push(e)
            },
            reset: function() {
                this._offset = 0
            }
        });
        cc.TiledMapRenderDataList = e.exports = r
    }
    ), {
        "../renderer/core/input-assembler": 305
    }],
    344: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.TiledObjectGroup",
            extends: cc.Component,
            getPositionOffset: function() {
                return this._positionOffset
            },
            getProperties: function() {
                this._properties
            },
            getGroupName: function() {
                return this._groupName
            },
            getProperty: function(t) {
                return this._properties[t.toString()]
            },
            getObject: function(t) {
                for (var e = 0, i = this._objects.length; e < i; e++) {
                    var n = this._objects[e];
                    if (n && n.name === t)
                        return n
                }
                return null
            },
            getObjects: function() {
                return this._objects
            },
            _init: function(t, e, i) {
                var n = cc.TiledMap
                  , r = n.TMXObjectType
                  , s = n.Orientation
                  , a = n.StaggerAxis
                  , o = n.TileFlag
                  , l = o.FLIPPED_MASK
                  , h = o.HORIZONTAL
                  , c = o.VERTICAL;
                this._groupName = t.name,
                this._positionOffset = t.offset,
                this._mapInfo = e,
                this._properties = t.getProperties(),
                this._offset = cc.v2(t.offset.x, -t.offset.y),
                this._opacity = t._opacity;
                var u = e._mapSize
                  , _ = e._tileSize
                  , f = 0
                  , d = 0;
                if (e.orientation === s.HEX)
                    e.getStaggerAxis() === a.STAGGERAXIS_X ? (d = _.height * (u.height + .5),
                    f = (_.width + e.getHexSideLength()) * Math.floor(u.width / 2) + _.width * (u.width % 2)) : (f = _.width * (u.width + .5),
                    d = (_.height + e.getHexSideLength()) * Math.floor(u.height / 2) + _.height * (u.height % 2));
                else if (e.orientation === s.ISO) {
                    var p = u.width + u.height;
                    f = .5 * _.width * p,
                    d = .5 * _.height * p
                } else
                    f = u.width * _.width,
                    d = u.height * _.height;
                this.node.setContentSize(f, d);
                for (var m = f * this.node.anchorX, y = d * (1 - this.node.anchorY), v = t._objects, g = {}, A = 0, x = v.length; A < x; A++) {
                    var b = v[A]
                      , C = b.type;
                    b.offset = cc.v2(b.x, b.y);
                    var T = b.points || b.polylinePoints;
                    if (T)
                        for (var S = 0; S < T.length; S++)
                            T[S].y *= -1;
                    if (s.ISO !== e.orientation)
                        b.y = d - b.y;
                    else {
                        var w = b.x / _.height
                          , E = b.y / _.height;
                        b.x = .5 * _.width * (u.height + w - E),
                        b.y = .5 * _.height * (u.width + u.height - w - E)
                    }
                    if (C === r.TEXT) {
                        var M = "text" + b.id;
                        g[M] = !0;
                        var D = this.node.getChildByName(M);
                        D || (D = new cc.Node),
                        D.active = b.visible,
                        D.anchorX = 0,
                        D.anchorY = 1,
                        D.angle = -b.rotation,
                        D.x = b.x - m,
                        D.y = b.y - y,
                        D.name = M,
                        D.parent = this.node,
                        D.color = b.color,
                        D.opacity = this._opacity,
                        D.setSiblingIndex(A);
                        var B = D.getComponent(cc.Label);
                        B || (B = D.addComponent(cc.Label)),
                        B.overflow = cc.Label.Overflow.SHRINK,
                        B.lineHeight = b.height,
                        B.string = b.text,
                        B.horizontalAlign = b.halign,
                        B.verticalAlign = b.valign,
                        B.fontSize = b.pixelsize,
                        D.width = b.width,
                        D.height = b.height
                    }
                    if (C === r.IMAGE) {
                        var I = b.gid
                          , P = i[(I & l) >>> 0];
                        if (!P)
                            continue;
                        var R = P.tileset
                          , O = "img" + b.id;
                        g[O] = !0;
                        var L = this.node.getChildByName(O)
                          , F = b.width || P.width
                          , V = b.height || P.height
                          , N = R.tileOffset.x
                          , k = R.tileOffset.y;
                        L instanceof cc.PrivateNode && (L.removeFromParent(),
                        L.destroy(),
                        L = null),
                        L || (L = new cc.Node),
                        s.ISO == e.orientation ? (L.anchorX = .5 + N / F,
                        L.anchorY = k / V) : (L.anchorX = N / F,
                        L.anchorY = k / V),
                        L.active = b.visible,
                        L.angle = -b.rotation,
                        L.x = b.x - m,
                        L.y = b.y - y,
                        L.name = O,
                        L.parent = this.node,
                        L.opacity = this._opacity,
                        L.setSiblingIndex(A);
                        var G = L.getComponent(cc.Sprite);
                        G || (G = L.addComponent(cc.Sprite));
                        var U = G.spriteFrame;
                        U || (U = new cc.SpriteFrame),
                        (I & h) >>> 0 ? U.setFlipX(!0) : U.setFlipX(!1),
                        (I & c) >>> 0 ? U.setFlipY(!0) : U.setFlipY(!1),
                        U.setTexture(P.tileset.sourceImage, cc.rect(P)),
                        G.spriteFrame = U,
                        G.setVertsDirty(),
                        L.width = F,
                        L.height = V
                    }
                }
                this._objects = v;
                for (var z = this.node.children, H = /^(?:img|text)\d+$/, W = 0, j = z.length; W < j; W++) {
                    var X = z[W]
                      , Y = X._name;
                    H.test(Y) && !g[Y] && X.destroy()
                }
            }
        });
        cc.TiledObjectGroup = e.exports = i
    }
    ), {}],
    345: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.TiledTile",
            extends: cc.Component,
            editor: !1,
            ctor: function() {
                this._layer = null
            },
            properties: {
                _x: 0,
                _y: 0,
                x: {
                    get: function() {
                        return this._x
                    },
                    set: function(t) {
                        t !== this._x && (this._layer && this._layer._isInvalidPosition(t, this._y) ? cc.warn("Invalid x, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.width) : (this._resetTile(),
                        this._x = t,
                        this._updateInfo()))
                    },
                    type: cc.Integer
                },
                y: {
                    get: function() {
                        return this._y
                    },
                    set: function(t) {
                        t !== this._y && (this._layer && this._layer._isInvalidPosition(this._x, t) ? cc.warn("Invalid y, the valid value is between [%s] ~ [%s]", 0, this._layer._layerSize.height) : (this._resetTile(),
                        this._y = t,
                        this._updateInfo()))
                    },
                    type: cc.Integer
                },
                gid: {
                    get: function() {
                        return this._layer ? this._layer.getTileGIDAt(this._x, this._y) : 0
                    },
                    set: function(t) {
                        this._layer && this._layer.setTileGIDAt(t, this._x, this._y)
                    },
                    type: cc.Integer
                }
            },
            onEnable: function() {
                var t = this.node.parent;
                this._layer = t.getComponent(cc.TiledLayer),
                this._resetTile(),
                this._updateInfo()
            },
            onDisable: function() {
                this._resetTile()
            },
            _resetTile: function() {
                this._layer && this._layer.getTiledTileAt(this._x, this._y) === this && this._layer.setTiledTileAt(this._x, this._y, null)
            },
            _updateInfo: function() {
                if (this._layer) {
                    var t = this._x
                      , e = this._y;
                    this._layer.getTiledTileAt(t, e) ? cc.warn("There is already a TiledTile at [%s, %s]", t, e) : (this.node.setPosition(this._layer.getPositionAt(t, e)),
                    this._layer.setTiledTileAt(t, e, this))
                }
            }
        });
        cc.TiledTile = e.exports = i
    }
    ), {}],
    346: [(function(t) {
        "use strict";
        t("./CCTiledMap"),
        t("./CCTiledMapRenderDataList"),
        t("./tiledmap-buffer"),
        t("./tmx-layer-assembler")
    }
    ), {
        "./CCTiledMap": 341,
        "./CCTiledMapRenderDataList": 343,
        "./tiledmap-buffer": 347,
        "./tmx-layer-assembler": 348
    }],
    347: [(function(t, e) {
        "use strict";
        var i = cc.Class({
            name: "cc.TiledMapBuffer",
            extends: t("../core/renderer/webgl/quad-buffer"),
            _updateOffset: function() {
                var t = this._offsetInfo;
                t.vertexOffset = this.vertexOffset,
                t.indiceOffset = this.indiceOffset,
                t.byteOffset = this.byteOffset
            },
            adjust: function(t, e) {
                this.vertexOffset += t,
                this.indiceOffset += e,
                this.indiceStart = this.indiceOffset,
                this.byteOffset = this.byteOffset + t * this._vertexBytes,
                this._dirty = !0
            }
        });
        cc.TiledMapBuffer = e.exports = i
    }
    ), {
        "../core/renderer/webgl/quad-buffer": 253
    }],
    348: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../core/renderer/assembler")) && n.__esModule ? n : {
            default: n
        }, s = t("../core/value-types");
        function a(t, e) {
            return (a = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var o = t("./CCTiledLayer")
          , l = t("./CCTiledMap")
          , h = l.TileFlag
          , c = h.FLIPPED_MASK
          , u = t("../core/renderer/")
          , _ = t("../core/renderer/webgl/vertex-format").vfmtPosUvColor
          , f = parseInt(10922.5)
          , d = l.RenderOrder
          , p = t("../core/renderer/render-flow")
          , m = cc.mat4()
          , y = cc.v3()
          , v = {
            row: 0,
            col: 0
        }
          , g = {
            x: 0,
            y: 0
        }
          , A = {
            x: 0,
            y: 0
        }
          , x = {
            x: 0,
            y: 0
        }
          , b = {
            x: 0,
            y: 0
        }
          , C = null
          , T = null
          , S = 0
          , w = 0
          , E = 0
          , M = 0
          , D = null
          , B = null
          , I = null
          , P = null
          , R = null
          , O = null
          , L = null
          , F = null;
        function V(t) {
            t._updateLocalMatrix(),
            s.Mat4.mul(t._worldMatrix, D, t._matrix),
            t._renderFlag &= ~(p.FLAG_TRANSFORM | p.FLAG_BREAK_FLOW),
            p.visitRootNode(t),
            t._renderFlag |= p.FLAG_BREAK_FLOW
        }
        function N() {
            0 !== T._count && (B.material = C.material,
            B.node = O.node,
            B._flushIA(C.ia),
            S >= f ? (P.uploadData(),
            P.switchBuffer(),
            L = P._vData,
            F = P._uintVData,
            C = I.popRenderData(P),
            T = C.ia,
            w = 0,
            S = 0) : (C = I.popRenderData(P),
            T = C.ia),
            C.material = R)
        }
        function k(t, e) {
            var i = O._getNodesByRowCol(t, e);
            if (i && 0 != i.count) {
                var n = i.list
                  , r = 0
                  , s = 0;
                for (N(),
                B.worldMatDirty++; r < i.count; ) {
                    var a = n[s];
                    s++,
                    a && (V(a.node),
                    r !== s && (n[r] = a,
                    a._index = r),
                    r++)
                }
                n.length = r,
                B.worldMatDirty--,
                I.pushNodesList(C, n),
                B._flush(),
                B.node = O.node
            }
        }
        function G(t, e) {
            g.x = t.l,
            g.y = t.t,
            A.x = t.r,
            A.y = t.t,
            x.x = t.l,
            x.y = t.b,
            b.x = t.r,
            b.y = t.b;
            var i = null;
            (e & h.DIAGONAL) >>> 0 && (i = A,
            A = x,
            x = i),
            (e & h.HORIZONTAL) >>> 0 && (i = g,
            g = A,
            A = i,
            i = x,
            x = b,
            b = i),
            (e & h.VERTICAL) >>> 0 && (i = g,
            g = x,
            x = i,
            i = A,
            A = b,
            b = i)
        }
        var U = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            a(e, i);
            var r = n.prototype;
            return r.updateRenderData = function(t) {
                t._renderDataList || (t._buffer = new cc.TiledMapBuffer(u._handle,_),
                t._renderDataList = new cc.TiledMapRenderDataList)
            }
            ,
            r.fillBuffers = function(t, e) {
                if (0 !== t._vertices.length) {
                    t._updateCulling();
                    var i = t.node;
                    if (E = t._leftDownToCenterX,
                    M = t._leftDownToCenterY,
                    D = i._worldMatrix,
                    B = e,
                    O = t,
                    I = t._renderDataList,
                    P = t._buffer,
                    t._isCullingDirty() || t._isUserNodeDirty() || t._hasAnimation() || t._hasTiledNode()) {
                        var n, r;
                        if (P.reset(),
                        t._enableCulling) {
                            var s = t._cullingRect;
                            n = s.leftDown,
                            r = s.rightTop
                        } else
                            n = v,
                            r = t._rightTop;
                        var a = (r.row - n.row + 1) * (r.col - n.col + 1);
                        switch (a > f && (a = f),
                        P.request(4 * a, 6 * a),
                        t._renderOrder) {
                        case d.RightDown:
                            this.traverseGrids(n, r, -1, 1);
                            break;
                        case d.LeftDown:
                            this.traverseGrids(n, r, -1, -1);
                            break;
                        case d.RightUp:
                            this.traverseGrids(n, r, 1, 1);
                            break;
                        case d.LeftUp:
                            this.traverseGrids(n, r, 1, -1)
                        }
                        t._setCullingDirty(!1),
                        t._setUserNodeDirty(!1)
                    } else
                        for (var o = null, l = null, h = null, c = 0; c < I._offset; c++) {
                            if ((l = (o = I._dataList[c]).nodesRenderList).length > 0) {
                                e.worldMatDirty++;
                                for (var u = 0; u < l.length; u++)
                                    if (h = l[u])
                                        for (var _ = 0; _ < h.length; _++) {
                                            var p = h[_];
                                            p && V(p.node)
                                        }
                                e.worldMatDirty--,
                                e._flush()
                            }
                            o.ia._count > 0 && (e.material = o.material,
                            e.node = i,
                            e._flushIA(o.ia))
                        }
                    C = null,
                    T = null,
                    D = null,
                    B = null,
                    I = null,
                    P = null,
                    R = null,
                    O = null,
                    L = null,
                    F = null
                }
            }
            ,
            r.traverseGrids = function(t, e, i, n) {
                if (I.reset(),
                !(e.row < 0 || e.col < 0)) {
                    C = I.popRenderData(P),
                    T = C.ia,
                    L = P._vData,
                    F = P._uintVData,
                    S = 0,
                    w = 0,
                    R = null;
                    var r = O.node
                      , s = (r.parent ? r.parent._opacity / 255 : 1) * r._opacity;
                    r._color._fastSetA(s);
                    var a, o, l, h, u, _, d, p, m = r._color._val, y = O._tiledTiles, v = O._texGrids, D = O._tiles, V = O._texIdToMatIndex, U = O._materials, z = O._vertices, H = null, W = 0, j = 0, X = 0, Y = 0, q = 0, J = null, Z = -1, K = 0, Q = !0;
                    for (-1 == i ? (h = e.row,
                    u = t.row) : (h = t.row,
                    u = e.row); (u - h) * i >= 0; h += i)
                        for (a = z[h],
                        Q = 0 == (K = O._getNodesCountByRow(h)) && null != a,
                        1 == n ? (o = Q && t.col < a.minCol ? a.minCol : t.col,
                        l = Q && e.col > a.maxCol ? a.maxCol : e.col) : (o = Q && e.col > a.maxCol ? a.maxCol : e.col,
                        l = Q && t.col < a.minCol ? a.minCol : t.col); (l - o) * n >= 0; o += n)
                            (_ = a && a[o]) ? (H = v[((W = D[_.index]) & c) >>> 0]) && (Z !== H.texId && (-1 !== Z && N(),
                            p = V[Z = H.texId],
                            R = U[p],
                            C.material = R),
                            R && (j = _.left - E,
                            X = _.bottom - M,
                            Y = j + (d = H.tileset._tileSize).width,
                            q = X + d.height,
                            (J = y[_.index]) ? J.node.active && (J.node._color._fastSetA(J.node._opacity * s / 255),
                            this.fillByTiledNode(J.node, L, F, j, Y, q, X)) : (L[w] = j,
                            L[w + 1] = q,
                            F[w + 4] = m,
                            L[w + 5] = j,
                            L[w + 6] = X,
                            F[w + 9] = m,
                            L[w + 10] = Y,
                            L[w + 11] = q,
                            F[w + 14] = m,
                            L[w + 15] = Y,
                            L[w + 16] = X,
                            F[w + 19] = m),
                            G(H, W),
                            L[w + 2] = g.x,
                            L[w + 3] = g.y,
                            L[w + 7] = x.x,
                            L[w + 8] = x.y,
                            L[w + 12] = A.x,
                            L[w + 13] = A.y,
                            L[w + 17] = b.x,
                            L[w + 18] = b.y,
                            w += 20,
                            P.adjust(4, 6),
                            T._count += 6,
                            S++,
                            K > 0 && k(h, o),
                            S >= f && N())) : K > 0 && k(h, o);
                    P.uploadData(),
                    T._count > 0 && (B.material = C.material,
                    B.node = O.node,
                    B._flushIA(C.ia))
                }
            }
            ,
            r.fillByTiledNode = function(t, e, i, n, r, a, o) {
                t._updateLocalMatrix(),
                s.Mat4.copy(m, t._matrix),
                s.Vec3.set(y, -(n + E), -(o + M), 0),
                s.Mat4.transform(m, m, y);
                var l = m.m
                  , h = l[0]
                  , c = l[1]
                  , u = l[4]
                  , _ = l[5]
                  , f = l[12]
                  , d = l[13]
                  , p = t._color._val;
                e[w] = n * h + a * u + f,
                e[w + 1] = n * c + a * _ + d,
                i[w + 4] = p,
                e[w + 5] = n * h + o * u + f,
                e[w + 6] = n * c + o * _ + d,
                i[w + 9] = p,
                e[w + 10] = r * h + a * u + f,
                e[w + 11] = r * c + a * _ + d,
                i[w + 14] = p,
                e[w + 15] = r * h + o * u + f,
                e[w + 16] = r * c + o * _ + d,
                i[w + 19] = p
            }
            ,
            n
        }
        )(r.default);
        i.default = U,
        r.default.register(o, U),
        e.exports = i.default
    }
    ), {
        "../core/renderer/": 224,
        "../core/renderer/assembler": 221,
        "../core/renderer/render-flow": 225,
        "../core/renderer/webgl/vertex-format": 256,
        "../core/value-types": 282,
        "./CCTiledLayer": 340,
        "./CCTiledMap": 341
    }],
    349: [(function(t, e) {
        "use strict";
        var i = t("./video-player-impl")
          , n = i.EventType
          , r = cc.Enum({
            REMOTE: 0,
            LOCAL: 1
        })
          , s = cc.Class({
            name: "cc.VideoPlayer",
            extends: cc.Component,
            editor: !1,
            properties: {
                _resourceType: r.REMOTE,
                resourceType: {
                    tooltip: !1,
                    type: r,
                    set: function(t) {
                        this._resourceType = t,
                        this._updateVideoSource()
                    },
                    get: function() {
                        return this._resourceType
                    }
                },
                _remoteURL: "",
                remoteURL: {
                    tooltip: !1,
                    type: cc.String,
                    set: function(t) {
                        this._remoteURL = t,
                        this._updateVideoSource()
                    },
                    get: function() {
                        return this._remoteURL
                    }
                },
                _clip: {
                    default: null,
                    type: cc.Asset
                },
                clip: {
                    tooltip: !1,
                    get: function() {
                        return this._clip
                    },
                    set: function(t) {
                        this._clip = t,
                        this._updateVideoSource()
                    },
                    type: cc.Asset
                },
                currentTime: {
                    tooltip: !1,
                    type: cc.Float,
                    set: function(t) {
                        this._impl && this._impl.seekTo(t)
                    },
                    get: function() {
                        return this._impl ? this._currentStatus === n.NONE || this._currentStatus === n.STOPPED || this._currentStatus === n.META_LOADED || this._currentStatus === n.READY_TO_PLAY ? 0 : this._currentStatus === n.COMPLETED ? this._impl.duration() : this._impl.currentTime() : -1
                    }
                },
                _volume: 1,
                volume: {
                    get: function() {
                        return this._volume
                    },
                    set: function(t) {
                        this._volume = t,
                        this.isPlaying() && !this._mute && this._syncVolume()
                    },
                    range: [0, 1],
                    type: cc.Float,
                    tooltip: !1
                },
                _mute: !1,
                mute: {
                    get: function() {
                        return this._mute
                    },
                    set: function(t) {
                        this._mute = t,
                        this._syncVolume()
                    },
                    tooltip: !1
                },
                keepAspectRatio: {
                    tooltip: !1,
                    default: !0,
                    type: cc.Boolean,
                    notify: function() {
                        this._impl && this._impl.setKeepAspectRatioEnabled(this.keepAspectRatio)
                    }
                },
                _isFullscreen: {
                    default: !1,
                    formerlySerializedAs: "_N$isFullscreen"
                },
                isFullscreen: {
                    get: function() {
                        return this._isFullscreen = this._impl && this._impl.isFullScreenEnabled(),
                        this._isFullscreen
                    },
                    set: function(t) {
                        this._isFullscreen = t,
                        this._impl && this._impl.setFullScreenEnabled(t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                _stayOnBottom: !1,
                stayOnBottom: {
                    get: function() {
                        return this._stayOnBottom
                    },
                    set: function(t) {
                        this._stayOnBottom = t,
                        this._impl && this._impl.setStayOnBottom(t)
                    },
                    animatable: !1,
                    tooltip: !1
                },
                videoPlayerEvent: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            statics: {
                EventType: n,
                ResourceType: r,
                Impl: i
            },
            ctor: function() {
                this._impl = new i,
                this._currentStatus = n.NONE
            },
            _syncVolume: function() {
                var t = this._impl;
                if (t) {
                    var e = this._mute ? 0 : this._volume;
                    t.setVolume(e)
                }
            },
            _updateVideoSource: function() {
                var t = "";
                this.resourceType === r.REMOTE ? t = this.remoteURL : this._clip && (t = this._clip.nativeUrl),
                this._impl.setURL(t, this._mute || 0 === this._volume),
                this._impl.setKeepAspectRatioEnabled(this.keepAspectRatio)
            },
            onLoad: function() {
                var t = this._impl;
                t && (t.createDomElementIfNeeded(this._mute || 0 === this._volume),
                t.setStayOnBottom(this._stayOnBottom),
                this._updateVideoSource(),
                t.seekTo(this.currentTime),
                t.setFullScreenEnabled(this._isFullscreen),
                this.pause(),
                t.setEventListener(n.PLAYING, this.onPlaying.bind(this)),
                t.setEventListener(n.PAUSED, this.onPasued.bind(this)),
                t.setEventListener(n.STOPPED, this.onStopped.bind(this)),
                t.setEventListener(n.COMPLETED, this.onCompleted.bind(this)),
                t.setEventListener(n.META_LOADED, this.onMetaLoaded.bind(this)),
                t.setEventListener(n.CLICKED, this.onClicked.bind(this)),
                t.setEventListener(n.READY_TO_PLAY, this.onReadyToPlay.bind(this)))
            },
            onRestore: function() {
                this._impl || (this._impl = new i)
            },
            onEnable: function() {
                this._impl && this._impl.enable()
            },
            onDisable: function() {
                this._impl && this._impl.disable()
            },
            onDestroy: function() {
                this._impl && (this._impl.destroy(),
                this._impl = null)
            },
            update: function() {
                this._impl && this._impl.updateMatrix(this.node)
            },
            onReadyToPlay: function() {
                this._currentStatus = n.READY_TO_PLAY,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.READY_TO_PLAY),
                this.node.emit("ready-to-play", this)
            },
            onMetaLoaded: function() {
                this._currentStatus = n.META_LOADED,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.META_LOADED),
                this.node.emit("meta-loaded", this)
            },
            onClicked: function() {
                this._currentStatus = n.CLICKED,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.CLICKED),
                this.node.emit("clicked", this)
            },
            onPlaying: function() {
                this._currentStatus = n.PLAYING,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.PLAYING),
                this.node.emit("playing", this)
            },
            onPasued: function() {
                this._currentStatus = n.PAUSED,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.PAUSED),
                this.node.emit("paused", this)
            },
            onStopped: function() {
                this._currentStatus = n.STOPPED,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.STOPPED),
                this.node.emit("stopped", this)
            },
            onCompleted: function() {
                this._currentStatus = n.COMPLETED,
                cc.Component.EventHandler.emitEvents(this.videoPlayerEvent, this, n.COMPLETED),
                this.node.emit("completed", this)
            },
            play: function() {
                this._impl && (this._syncVolume(),
                this._impl.play())
            },
            resume: function() {
                this._impl && (this._syncVolume(),
                this._impl.resume())
            },
            pause: function() {
                this._impl && this._impl.pause()
            },
            stop: function() {
                this._impl && this._impl.stop()
            },
            getDuration: function() {
                return this._impl ? this._impl.duration() : -1
            },
            isPlaying: function() {
                return !!this._impl && this._impl.isPlaying()
            }
        });
        cc.VideoPlayer = e.exports = s
    }
    ), {
        "./video-player-impl": 350
    }],
    350: [(function(t, e) {
        "use strict";
        var i = t("../core/platform/utils")
          , n = t("../core/platform/CCSys")
          , r = t("../core/platform/CCMacro")
          , s = 1
          , a = 4
          , o = cc.mat4()
          , l = cc.Class({
            name: "VideoPlayerImpl",
            ctor: function() {
                this._EventList = {},
                this._video = null,
                this._url = "",
                this._waitingFullscreen = !1,
                this._fullScreenEnabled = !1,
                this._stayOnBottom = !1,
                this._loadedmeta = !1,
                this._loaded = !1,
                this._visible = !1,
                this._playing = !1,
                this._ignorePause = !1,
                this._forceUpdate = !1,
                this._m00 = 0,
                this._m01 = 0,
                this._m04 = 0,
                this._m05 = 0,
                this._m12 = 0,
                this._m13 = 0,
                this._w = 0,
                this._h = 0,
                this.__eventListeners = {}
            },
            _bindEvent: function() {
                var t = this._video
                  , e = this
                  , i = this.__eventListeners;
                i.loadedmetadata = function() {
                    e._loadedmeta = !0,
                    e._forceUpdate = !0,
                    e._waitingFullscreen && (e._waitingFullscreen = !1,
                    e._toggleFullscreen(!0)),
                    e._dispatchEvent(l.EventType.META_LOADED)
                }
                ,
                i.ended = function() {
                    e._video === t && (e._playing = !1,
                    e._dispatchEvent(l.EventType.COMPLETED))
                }
                ,
                i.play = function() {
                    e._video === t && (e._playing = !0,
                    e._updateVisibility(),
                    e._dispatchEvent(l.EventType.PLAYING))
                }
                ,
                i.pause = function() {
                    e._video === t && (e._playing = !1,
                    e._ignorePause || e._dispatchEvent(l.EventType.PAUSED))
                }
                ,
                i.click = function() {
                    e._dispatchEvent(l.EventType.CLICKED)
                }
                ,
                t.addEventListener("loadedmetadata", i.loadedmetadata),
                t.addEventListener("ended", i.ended),
                t.addEventListener("play", i.play),
                t.addEventListener("pause", i.pause),
                t.addEventListener("click", i.click),
                i.onCanPlay = function() {
                    if (!e._loaded && !e._playing) {
                        var t = e._video;
                        t.readyState !== a && t.readyState !== s || (t.currentTime = 0,
                        e._loaded = !0,
                        e._forceUpdate = !0,
                        e._dispatchEvent(l.EventType.READY_TO_PLAY),
                        e._updateVisibility())
                    }
                }
                ,
                t.addEventListener("canplay", i.onCanPlay),
                t.addEventListener("canplaythrough", i.onCanPlay),
                t.addEventListener("suspend", i.onCanPlay)
            },
            _updateVisibility: function() {
                var t = this._video;
                t && (this._visible ? t.style.visibility = "visible" : (t.style.visibility = "hidden",
                t.pause(),
                this._playing = !1))
            },
            _updateSize: function(t, e) {
                var i = this._video;
                i && (i.style.width = t + "px",
                i.style.height = e + "px")
            },
            _createDom: function(t) {
                var e = document.createElement("video");
                e.style.position = "absolute",
                e.style.bottom = "0px",
                e.style.left = "0px",
                e.style["z-index"] = this._stayOnBottom ? r.MIN_ZINDEX : 0,
                e.className = "cocosVideo",
                e.setAttribute("preload", "auto"),
                e.setAttribute("webkit-playsinline", ""),
                e.setAttribute("x5-playsinline", ""),
                e.setAttribute("playsinline", ""),
                t && e.setAttribute("muted", ""),
                this._video = e,
                cc.game.container.appendChild(e)
            },
            createDomElementIfNeeded: function(t) {
                this._video || this._createDom(t)
            },
            removeDom: function() {
                var t = this._video;
                if (t) {
                    i.contains(cc.game.container, t) && cc.game.container.removeChild(t);
                    var e = this.__eventListeners;
                    t.removeEventListener("loadedmetadata", e.loadedmetadata),
                    t.removeEventListener("ended", e.ended),
                    t.removeEventListener("play", e.play),
                    t.removeEventListener("pause", e.pause),
                    t.removeEventListener("click", e.click),
                    t.removeEventListener("canplay", e.onCanPlay),
                    t.removeEventListener("canplaythrough", e.onCanPlay),
                    t.removeEventListener("suspend", e.onCanPlay),
                    e.loadedmetadata = null,
                    e.ended = null,
                    e.play = null,
                    e.pause = null,
                    e.click = null,
                    e.onCanPlay = null
                }
                this._video = null,
                this._url = ""
            },
            setURL: function(t, e) {
                var i, n;
                if (this._url !== t) {
                    this.removeDom(),
                    this._url = t,
                    this.createDomElementIfNeeded(e),
                    this._bindEvent();
                    var r = this._video;
                    r.style.visibility = "hidden",
                    this._loaded = !1,
                    this._playing = !1,
                    this._loadedmeta = !1,
                    (i = document.createElement("source")).src = t,
                    r.appendChild(i),
                    n = cc.path.extname(t);
                    for (var s = l._polyfill, a = 0; a < s.canPlayType.length; a++)
                        n !== s.canPlayType[a] && ((i = document.createElement("source")).src = t.replace(n, s.canPlayType[a]),
                        r.appendChild(i))
                }
            },
            getURL: function() {
                return this._url
            },
            play: function() {
                var t = this._video;
                t && this._visible && !this._playing && t.play()
            },
            pause: function() {
                var t = this._video;
                this._playing && t && t.pause()
            },
            resume: function() {
                this.play()
            },
            stop: function() {
                var t = this._video;
                t && this._visible && (this._ignorePause = !0,
                t.currentTime = 0,
                t.pause(),
                setTimeout(function() {
                    this._dispatchEvent(l.EventType.STOPPED),
                    this._ignorePause = !1
                }
                .bind(this), 0))
            },
            setVolume: function(t) {
                var e = this._video;
                e && (e.volume = t)
            },
            seekTo: function(t) {
                var e = this._video;
                e && (this._loaded ? e.currentTime = t : e.addEventListener(l._polyfill.event, (function i() {
                    e.currentTime = t,
                    e.removeEventListener(l._polyfill.event, i)
                }
                )))
            },
            isPlaying: function() {
                return this._playing
            },
            duration: function() {
                var t = this._video
                  , e = -1;
                return t ? ((e = t.duration) <= 0 && cc.logID(7702),
                e) : e
            },
            currentTime: function() {
                var t = this._video;
                return t ? t.currentTime : -1
            },
            setKeepAspectRatioEnabled: function() {
                cc.logID(7700)
            },
            isKeepAspectRatioEnabled: function() {
                return !0
            },
            _toggleFullscreen: function(t) {
                var e = this
                  , i = this._video;
                i && (t ? (n.browserType === n.BROWSER_TYPE_IE && (i.style.transform = ""),
                cc.screen.requestFullScreen(i, (function() {
                    var t = n.browserType === n.BROWSER_TYPE_IE ? document.msFullscreenElement : document.fullscreenElement;
                    e._fullScreenEnabled = t === i
                }
                ), (function() {
                    e._fullScreenEnabled = !1
                }
                ))) : cc.screen.fullScreen() && cc.screen.exitFullScreen(i))
            },
            setStayOnBottom: function(t) {
                this._stayOnBottom = t,
                this._video && (this._video.style["z-index"] = t ? r.MIN_ZINDEX : 0)
            },
            setFullScreenEnabled: function(t) {
                !this._loadedmeta && t ? this._waitingFullscreen = !0 : this._toggleFullscreen(t)
            },
            isFullScreenEnabled: function() {
                return this._fullScreenEnabled
            },
            setEventListener: function(t, e) {
                this._EventList[t] = e
            },
            removeEventListener: function(t) {
                this._EventList[t] = null
            },
            _dispatchEvent: function(t) {
                var e = this._EventList[t];
                e && e.call(this, this, this._video.src)
            },
            onPlayEvent: function() {
                this._EventList[l.EventType.PLAYING].call(this, this, this._video.src)
            },
            enable: function() {
                var t = l.elements;
                -1 === t.indexOf(this) && t.push(this),
                this.setVisible(!0)
            },
            disable: function() {
                var t = l.elements
                  , e = t.indexOf(this);
                -1 !== e && t.splice(e, 1),
                this.setVisible(!1)
            },
            destroy: function() {
                this.disable(),
                this.removeDom()
            },
            setVisible: function(t) {
                this._visible !== t && (this._visible = !!t,
                this._updateVisibility())
            },
            updateMatrix: function(t) {
                if (this._video && this._visible && !this._fullScreenEnabled) {
                    t.getWorldMatrix(o);
                    var e = cc.Camera._findRendererCamera(t);
                    e && e.worldMatrixToScreen(o, o, cc.game.canvas.width, cc.game.canvas.height);
                    var i = o.m;
                    if (this._forceUpdate || this._m00 !== i[0] || this._m01 !== i[1] || this._m04 !== i[4] || this._m05 !== i[5] || this._m12 !== i[12] || this._m13 !== i[13] || this._w !== t._contentSize.width || this._h !== t._contentSize.height) {
                        this._m00 = i[0],
                        this._m01 = i[1],
                        this._m04 = i[4],
                        this._m05 = i[5],
                        this._m12 = i[12],
                        this._m13 = i[13],
                        this._w = t._contentSize.width,
                        this._h = t._contentSize.height;
                        var r, s, a = cc.view._devicePixelRatio, h = 1 / a, c = 1 / a, u = cc.game.container, _ = i[0] * h, f = i[1], d = i[4], p = i[5] * c, m = u && u.style.paddingLeft ? parseInt(u.style.paddingLeft) : 0, y = u && u.style.paddingBottom ? parseInt(u.style.paddingBottom) : 0;
                        l._polyfill.zoomInvalid ? (this._updateSize(this._w * _, this._h * p),
                        _ = 1,
                        p = 1,
                        r = this._w * h,
                        s = this._h * c) : (r = this._w * h,
                        s = this._h * c,
                        this._updateSize(this._w, this._h));
                        var v = r * i[0] * t._anchorPoint.x
                          , g = s * i[5] * t._anchorPoint.y
                          , A = "matrix(" + _ + "," + -f + "," + -d + "," + p + "," + (i[12] * h - v + m) + "," + -(i[13] * c - g + y) + ")";
                        this._video.style.transform = A,
                        this._video.style["-webkit-transform"] = A,
                        this._video.style["transform-origin"] = "0px 100% 0px",
                        this._video.style["-webkit-transform-origin"] = "0px 100% 0px",
                        n.browserType !== n.BROWSER_TYPE_IE && (this._forceUpdate = !1)
                    }
                }
            }
        });
        l.EventType = {
            NONE: -1,
            PLAYING: 0,
            PAUSED: 1,
            STOPPED: 2,
            COMPLETED: 3,
            META_LOADED: 4,
            CLICKED: 5,
            READY_TO_PLAY: 6
        },
        l.elements = [],
        l.pauseElements = [],
        cc.game.on(cc.game.EVENT_HIDE, (function() {
            for (var t, e = l.elements, i = 0; i < e.length; i++)
                (t = e[i]).isPlaying() && (t.pause(),
                l.pauseElements.push(t))
        }
        )),
        cc.game.on(cc.game.EVENT_SHOW, (function() {
            for (var t = l.pauseElements, e = t.pop(); e; )
                e.play(),
                e = t.pop()
        }
        )),
        l._polyfill = {
            devicePixelRatio: !1,
            event: "canplay",
            canPlayType: []
        };
        var h = document.createElement("video");
        h.canPlayType && (h.canPlayType("video/ogg") && (l._polyfill.canPlayType.push(".ogg"),
        l._polyfill.canPlayType.push(".ogv")),
        h.canPlayType("video/mp4") && l._polyfill.canPlayType.push(".mp4"),
        h.canPlayType("video/webm") && l._polyfill.canPlayType.push(".webm")),
        n.OS_ANDROID !== n.os || n.browserType !== n.BROWSER_TYPE_SOUGOU && n.browserType !== n.BROWSER_TYPE_360 || (l._polyfill.zoomInvalid = !0);
        var c = document.createElement("style");
        c.innerHTML = ".cocosVideo:-moz-full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:full-screen{transform:matrix(1,0,0,1,0,0) !important;}.cocosVideo:-webkit-full-screen{transform:matrix(1,0,0,1,0,0) !important;}",
        document.head.appendChild(c),
        e.exports = l
    }
    ), {
        "../core/platform/CCMacro": 198,
        "../core/platform/CCSys": 202,
        "../core/platform/utils": 217
    }],
    351: [(function(t, e) {
        "use strict";
        var i = t("./webview-impl")
          , n = i.EventType;
        function r() {}
        var s = cc.Class({
            name: "cc.WebView",
            extends: cc.Component,
            editor: !1,
            properties: {
                _url: "",
                url: {
                    type: cc.String,
                    tooltip: !1,
                    get: function() {
                        return this._url
                    },
                    set: function(t) {
                        this._url = t;
                        var e = this._impl;
                        e && e.loadURL(t)
                    }
                },
                webviewEvents: {
                    default: [],
                    type: cc.Component.EventHandler
                }
            },
            statics: {
                EventType: n,
                Impl: i
            },
            ctor: function() {
                this._impl = new s.Impl
            },
            onRestore: function() {
                this._impl || (this._impl = new s.Impl)
            },
            onEnable: function() {
                var t = this._impl;
                t.createDomElementIfNeeded(this.node.width, this.node.height),
                t.setEventListener(n.LOADED, this._onWebViewLoaded.bind(this)),
                t.setEventListener(n.LOADING, this._onWebViewLoading.bind(this)),
                t.setEventListener(n.ERROR, this._onWebViewLoadError.bind(this)),
                t.loadURL(this._url),
                t.setVisible(!0)
            },
            onDisable: function() {
                var t = this._impl;
                t.setVisible(!1),
                t.setEventListener(n.LOADED, r),
                t.setEventListener(n.LOADING, r),
                t.setEventListener(n.ERROR, r)
            },
            onDestroy: function() {
                this._impl && (this._impl.destroy(),
                this._impl = null)
            },
            update: function() {
                this._impl && this._impl.updateMatrix(this.node)
            },
            _onWebViewLoaded: function() {
                cc.Component.EventHandler.emitEvents(this.webviewEvents, this, n.LOADED),
                this.node.emit("loaded", this)
            },
            _onWebViewLoading: function() {
                return cc.Component.EventHandler.emitEvents(this.webviewEvents, this, n.LOADING),
                this.node.emit("loading", this),
                !0
            },
            _onWebViewLoadError: function() {
                cc.Component.EventHandler.emitEvents(this.webviewEvents, this, n.ERROR),
                this.node.emit("error", this)
            },
            setJavascriptInterfaceScheme: function(t) {
                this._impl && this._impl.setJavascriptInterfaceScheme(t)
            },
            setOnJSCallback: function(t) {
                this._impl && this._impl.setOnJSCallback(t)
            },
            evaluateJS: function(t) {
                this._impl && this._impl.evaluateJS(t)
            }
        });
        cc.WebView = e.exports = s
    }
    ), {
        "./webview-impl": 352
    }],
    352: [(function(t, e) {
        "use strict";
        var i = t("../core/platform/utils")
          , n = t("../core/platform/CCSys")
          , r = cc.mat4()
          , s = cc.Class({
            name: "WebViewImpl",
            ctor: function() {
                this._EventList = {},
                this._visible = !1,
                this._parent = null,
                this._div = null,
                this._iframe = null,
                this._listener = null,
                this._forceUpdate = !1,
                this._m00 = 0,
                this._m01 = 0,
                this._m04 = 0,
                this._m05 = 0,
                this._m12 = 0,
                this._m13 = 0,
                this._w = 0,
                this._h = 0,
                this.__eventListeners = {}
            },
            _updateVisibility: function() {
                if (this._div) {
                    var t = this._div;
                    this._visible ? t.style.visibility = "visible" : t.style.visibility = "hidden"
                }
            },
            _updateSize: function(t, e) {
                var i = this._div;
                i && (i.style.width = t + "px",
                i.style.height = e + "px")
            },
            _initEvent: function() {
                var t = this._iframe;
                if (t) {
                    var e = this.__eventListeners
                      , i = this;
                    e.load = function() {
                        i._forceUpdate = !0,
                        i._dispatchEvent(s.EventType.LOADED)
                    }
                    ,
                    e.error = function() {
                        i._dispatchEvent(s.EventType.ERROR)
                    }
                    ,
                    t.addEventListener("load", e.load),
                    t.addEventListener("error", e.error)
                }
            },
            _initStyle: function() {
                if (this._div) {
                    var t = this._div;
                    t.style.position = "absolute",
                    t.style.bottom = "0px",
                    t.style.left = "0px"
                }
            },
            _setOpacity: function(t) {
                var e = this._iframe;
                e && e.style && (e.style.opacity = t / 255)
            },
            _createDom: function(t, e) {
                s._polyfill.enableDiv ? (this._div = document.createElement("div"),
                this._div.style["-webkit-overflow"] = "auto",
                this._div.style["-webkit-overflow-scrolling"] = "touch",
                this._iframe = document.createElement("iframe"),
                this._div.appendChild(this._iframe),
                this._iframe.style.width = "100%",
                this._iframe.style.height = "100%") : this._div = this._iframe = document.createElement("iframe"),
                s._polyfill.enableBG && (this._div.style.background = "#FFF"),
                this._div.style.height = e + "px",
                this._div.style.width = t + "px",
                this._div.style.overflow = "scroll",
                this._iframe.style.border = "none",
                cc.game.container.appendChild(this._div),
                this._updateVisibility()
            },
            _createNativeControl: function(t, e) {
                this._createDom(t, e),
                this._initStyle(),
                this._initEvent()
            },
            createDomElementIfNeeded: function(t, e) {
                this._div ? this._updateSize(t, e) : this._createNativeControl(t, e)
            },
            removeDom: function() {
                var t = this._div;
                t && (i.contains(cc.game.container, t) && cc.game.container.removeChild(t),
                this._div = null);
                var e = this._iframe;
                if (e) {
                    var n = this.__eventListeners;
                    e.removeEventListener("load", n.load),
                    e.removeEventListener("error", n.error),
                    n.load = null,
                    n.error = null,
                    this._iframe = null
                }
            },
            setOnJSCallback: function() {},
            setJavascriptInterfaceScheme: function() {},
            loadData: function() {},
            loadHTMLString: function() {},
            loadURL: function(t) {
                var e = this._iframe;
                if (e) {
                    e.src = t;
                    var i = this;
                    e.addEventListener("load", (function t() {
                        i._loaded = !0,
                        i._updateVisibility(),
                        e.removeEventListener("load", t)
                    }
                    )),
                    this._dispatchEvent(s.EventType.LOADING)
                }
            },
            stopLoading: function() {
                cc.logID(7800)
            },
            reload: function() {
                var t = this._iframe;
                if (t) {
                    var e = t.contentWindow;
                    e && e.location && e.location.reload()
                }
            },
            canGoBack: function() {
                return cc.logID(7801),
                !0
            },
            canGoForward: function() {
                return cc.logID(7802),
                !0
            },
            goBack: function() {
                try {
                    if (s._polyfill.closeHistory)
                        return cc.logID(7803);
                    var t = this._iframe;
                    if (t) {
                        var e = t.contentWindow;
                        e && e.location && e.history.back.call(e)
                    }
                } catch (i) {
                    cc.log(i)
                }
            },
            goForward: function() {
                try {
                    if (s._polyfill.closeHistory)
                        return cc.logID(7804);
                    var t = this._iframe;
                    if (t) {
                        var e = t.contentWindow;
                        e && e.location && e.history.forward.call(e)
                    }
                } catch (i) {
                    cc.log(i)
                }
            },
            evaluateJS: function(t) {
                var e = this._iframe;
                if (e) {
                    var i = e.contentWindow;
                    try {
                        i.eval(t),
                        this._dispatchEvent(s.EventType.JS_EVALUATED)
                    } catch (n) {
                        console.error(n)
                    }
                }
            },
            setScalesPageToFit: function() {
                cc.logID(7805)
            },
            setEventListener: function(t, e) {
                this._EventList[t] = e
            },
            removeEventListener: function(t) {
                this._EventList[t] = null
            },
            _dispatchEvent: function(t) {
                var e = this._EventList[t];
                e && e.call(this, this, this._iframe.src)
            },
            _createRenderCmd: function() {
                return new s.RenderCmd(this)
            },
            destroy: function() {
                this.removeDom()
            },
            setVisible: function(t) {
                this._visible !== t && (this._visible = !!t,
                this._updateVisibility())
            },
            updateMatrix: function(t) {
                if (this._div && this._visible) {
                    t.getWorldMatrix(r);
                    var e = cc.Camera._findRendererCamera(t);
                    e && e.worldMatrixToScreen(r, r, cc.game.canvas.width, cc.game.canvas.height);
                    var i = r.m;
                    if (this._forceUpdate || this._m00 !== i[0] || this._m01 !== i[1] || this._m04 !== i[4] || this._m05 !== i[5] || this._m12 !== i[12] || this._m13 !== i[13] || this._w !== t._contentSize.width || this._h !== t._contentSize.height) {
                        this._m00 = i[0],
                        this._m01 = i[1],
                        this._m04 = i[4],
                        this._m05 = i[5],
                        this._m12 = i[12],
                        this._m13 = i[13],
                        this._w = t._contentSize.width,
                        this._h = t._contentSize.height;
                        var n = cc.view._devicePixelRatio
                          , s = 1 / n
                          , a = 1 / n
                          , o = cc.game.container
                          , l = i[0] * s
                          , h = i[1]
                          , c = i[4]
                          , u = i[5] * a
                          , _ = o && o.style.paddingLeft ? parseInt(o.style.paddingLeft) : 0
                          , f = o && o.style.paddingBottom ? parseInt(o.style.paddingBottom) : 0;
                        this._updateSize(this._w, this._h);
                        var d = this._w * s
                          , p = this._h * a
                          , m = d * i[0] * t._anchorPoint.x
                          , y = p * i[5] * t._anchorPoint.y
                          , v = "matrix(" + l + "," + -h + "," + -c + "," + u + "," + (i[12] * s - m + _) + "," + -(i[13] * a - y + f) + ")";
                        this._div.style.transform = v,
                        this._div.style["-webkit-transform"] = v,
                        this._div.style["transform-origin"] = "0px 100% 0px",
                        this._div.style["-webkit-transform-origin"] = "0px 100% 0px",
                        this._setOpacity(t.opacity),
                        this._forceUpdate = !1
                    }
                }
            }
        });
        s.EventType = {
            LOADING: 0,
            LOADED: 1,
            ERROR: 2,
            JS_EVALUATED: 3
        };
        var a = s._polyfill = {
            devicePixelRatio: !1,
            enableDiv: !1
        };
        n.os === n.OS_IOS && (a.enableDiv = !0),
        n.isMobile ? n.browserType === n.BROWSER_TYPE_FIREFOX && (a.enableBG = !0) : n.browserType === n.BROWSER_TYPE_IE && (a.closeHistory = !0),
        e.exports = s
    }
    ), {
        "../core/platform/CCSys": 202,
        "../core/platform/utils": 217
    }],
    353: [(function(t) {
        "use strict";
        t("./cocos2d/core"),
        t("./cocos2d/animation"),
        t("./cocos2d/particle"),
        t("./cocos2d/tilemap"),
        t("./cocos2d/videoplayer/CCVideoPlayer"),
        t("./cocos2d/webview/CCWebView"),
        t("./cocos2d/core/components/CCStudioComponent"),
        t("./extensions/ccpool/CCNodePool"),
        t("./cocos2d/actions"),
        t("./extensions/spine"),
        t("./extensions/dragonbones"),
        t("./cocos2d/deprecated")
    }
    ), {
        "./cocos2d/actions": 7,
        "./cocos2d/animation": 16,
        "./cocos2d/core": 160,
        "./cocos2d/core/components/CCStudioComponent": 121,
        "./cocos2d/deprecated": 294,
        "./cocos2d/particle": 300,
        "./cocos2d/particle/CCParticleAsset": 297,
        "./cocos2d/tilemap": 346,
        "./cocos2d/tilemap/CCTiledMapAsset": 342,
        "./cocos2d/videoplayer/CCVideoPlayer": 349,
        "./cocos2d/webview/CCWebView": 351,
        "./extensions/ccpool/CCNodePool": 354,
        "./extensions/dragonbones": 364,
        "./extensions/spine": 369
    }],
    354: [(function(t, e) {
        "use strict";
        cc.NodePool = function(t) {
            this.poolHandlerComp = t,
            this._pool = []
        }
        ,
        cc.NodePool.prototype = {
            constructor: cc.NodePool,
            size: function() {
                return this._pool.length
            },
            clear: function() {
                for (var t = this._pool.length, e = 0; e < t; ++e)
                    this._pool[e].destroy();
                this._pool.length = 0
            },
            put: function(t) {
                if (t && -1 === this._pool.indexOf(t)) {
                    t.removeFromParent(!1);
                    var e = this.poolHandlerComp ? t.getComponent(this.poolHandlerComp) : null;
                    e && e.unuse && e.unuse(),
                    this._pool.push(t)
                }
            },
            get: function() {
                var t = this._pool.length - 1;
                if (t < 0)
                    return null;
                var e = this._pool[t];
                this._pool.length = t;
                var i = this.poolHandlerComp ? e.getComponent(this.poolHandlerComp) : null;
                return i && i.reuse && i.reuse.apply(i, arguments),
                e
            }
        },
        e.exports = cc.NodePool
    }
    ), {}],
    355: [(function(t, e) {
        "use strict";
        var i, n, r = [], s = [], a = 0, o = 0, l = 0, h = null, c = null, u = 0, _ = 0, f = 0, d = 0, p = null, m = cc.Class({
            ctor: function() {
                this._privateMode = !1,
                this._inited = !1,
                this._invalid = !0,
                this._enableCacheAttachedInfo = !1,
                this.frames = [],
                this.totalTime = 0,
                this.isCompleted = !1,
                this._frameIdx = -1,
                this._armatureInfo = null,
                this._animationName = null,
                this._tempSegments = null,
                this._tempColors = null,
                this._tempBoneInfos = null
            },
            init: function(t, e) {
                this._inited = !0,
                this._armatureInfo = t,
                this._animationName = e
            },
            clear: function() {
                this._inited = !1;
                for (var t = 0, e = this.frames.length; t < e; t++)
                    this.frames[t].segments.length = 0;
                this.invalidAllFrame()
            },
            begin: function() {
                if (this._invalid) {
                    var t = this._armatureInfo
                      , e = t.curAnimationCache;
                    e && e != this && (this._privateMode ? e.invalidAllFrame() : e.updateToFrame()),
                    t.armature.animation.play(this._animationName, 1),
                    t.curAnimationCache = this,
                    this._invalid = !1,
                    this._frameIdx = -1,
                    this.totalTime = 0,
                    this.isCompleted = !1
                }
            },
            end: function() {
                this._needToUpdate() || (this._armatureInfo.curAnimationCache = null,
                this.frames.length = this._frameIdx + 1,
                this.isCompleted = !0)
            },
            _needToUpdate: function(t) {
                return !this._armatureInfo.armature.animation.isCompleted && this.totalTime < 30 && (null == t || this._frameIdx < t)
            },
            updateToFrame: function(t) {
                if (this._inited && (this.begin(),
                this._needToUpdate(t))) {
                    var e = this._armatureInfo.armature;
                    do {
                        e.advanceTime(1 / 60),
                        this._frameIdx++,
                        this._updateFrame(e, this._frameIdx),
                        this.totalTime += 1 / 60
                    } while (this._needToUpdate(t));this.end()
                }
            },
            isInited: function() {
                return this._inited
            },
            isInvalid: function() {
                return this._invalid
            },
            invalidAllFrame: function() {
                this.isCompleted = !1,
                this._invalid = !0
            },
            updateAllFrame: function() {
                this.invalidAllFrame(),
                this.updateToFrame()
            },
            enableCacheAttachedInfo: function() {
                this._enableCacheAttachedInfo || (this._enableCacheAttachedInfo = !0,
                this.invalidAllFrame())
            },
            _updateFrame: function(t, e) {
                l = 0,
                a = 0,
                o = 0,
                h = null,
                c = null,
                u = 0,
                _ = 0,
                f = 0,
                d = 0,
                p = null,
                this.frames[e] = this.frames[e] || {
                    segments: [],
                    colors: [],
                    boneInfos: [],
                    vertices: null,
                    uintVert: null,
                    indices: null
                };
                var i = this.frames[e]
                  , n = this._tempSegments = i.segments
                  , m = this._tempColors = i.colors
                  , y = this._tempBoneInfos = i.boneInfos;
                this._traverseArmature(t, 1),
                d > 0 && (m[d - 1].vfOffset = l),
                m.length = d,
                y.length = a;
                var v = f - 1;
                if (v >= 0)
                    if (_ > 0) {
                        var g = n[v];
                        g.indexCount = _,
                        g.vfCount = 5 * u,
                        g.vertexCount = u,
                        n.length = f
                    } else
                        n.length = f - 1;
                if (0 !== n.length) {
                    var A = i.vertices
                      , x = i.uintVert;
                    (!A || A.length < l) && (A = i.vertices = new Float32Array(l),
                    x = i.uintVert = new Uint32Array(A.buffer));
                    for (var b = 0, C = 0; b < l; )
                        A[b++] = r[C++],
                        A[b++] = r[C++],
                        A[b++] = r[C++],
                        A[b++] = r[C++],
                        x[b++] = r[C++];
                    var T = i.indices;
                    (!T || T.length < o) && (T = i.indices = new Uint16Array(o));
                    for (var S = 0; S < o; S++)
                        T[S] = s[S];
                    i.vertices = A,
                    i.uintVert = x,
                    i.indices = T
                }
            },
            _traverseArmature: function(t, e) {
                var m, y, v, g, A, x, b, C, T, S = this._tempColors, w = this._tempSegments, E = this._tempBoneInfos, M = r, D = s, B = t._slots, I = t._bones;
                if (this._enableCacheAttachedInfo)
                    for (var P = 0, R = I.length; P < R; P++,
                    a++) {
                        var O = I[P]
                          , L = E[a];
                        L || (L = E[a] = {
                            globalTransformMatrix: new dragonBones.Matrix
                        });
                        var F = O.globalTransformMatrix;
                        L.globalTransformMatrix.copyFrom(F)
                    }
                for (var V = 0, N = B.length; V < N; V++)
                    if ((v = B[V])._visible && v._displayData)
                        if (v.updateWorldMatrix(),
                        A = v._color,
                        v.childArmature)
                            this._traverseArmature(v.childArmature, e * A.a / 255);
                        else if (b = v.getTexture()) {
                            h === b.nativeUrl && c === v._blendMode || (h = b.nativeUrl,
                            c = v._blendMode,
                            (C = f - 1) >= 0 && (_ > 0 ? ((T = w[C]).indexCount = _,
                            T.vertexCount = u,
                            T.vfCount = 5 * u) : f--),
                            w[f] = {
                                tex: b,
                                blendMode: v._blendMode,
                                indexCount: 0,
                                vertexCount: 0,
                                vfCount: 0
                            },
                            f++,
                            _ = 0,
                            u = 0),
                            x = (A.a * e << 24 >>> 0) + (A.b << 16) + (A.g << 8) + A.r,
                            p !== x && (p = x,
                            d > 0 && (S[d - 1].vfOffset = l),
                            S[d++] = {
                                r: A.r,
                                g: A.g,
                                b: A.b,
                                a: A.a * e,
                                vfOffset: 0
                            }),
                            m = v._localVertices,
                            y = v._indices,
                            g = v._worldMatrix.m;
                            for (var k = 0, G = m.length; k < G; )
                                i = m[k++],
                                n = m[k++],
                                M[l++] = i * g[0] + n * g[4] + g[12],
                                M[l++] = i * g[1] + n * g[5] + g[13],
                                M[l++] = m[k++],
                                M[l++] = m[k++],
                                M[l++] = x;
                            for (var U = 0, z = y.length; U < z; U++)
                                D[o++] = u + y[U];
                            _ += y.length,
                            u += m.length / 4
                        }
            }
        }), y = cc.Class({
            ctor: function() {
                this._privateMode = !1,
                this._animationPool = {},
                this._armatureCache = {}
            },
            enablePrivateMode: function() {
                this._privateMode = !0
            },
            dispose: function() {
                for (var t in this._armatureCache) {
                    var e = this._armatureCache[t];
                    if (e) {
                        var i = e.armature;
                        i && i.dispose()
                    }
                }
                this._armatureCache = null,
                this._animationPool = null
            },
            _removeArmature: function(t) {
                var e = this._armatureCache[t]
                  , i = e.animationsCache;
                for (var n in i) {
                    var r = i[n];
                    r && (this._animationPool[t + "#" + n] = r,
                    r.clear())
                }
                var s = e.armature;
                s && s.dispose(),
                delete this._armatureCache[t]
            },
            resetArmature: function(t) {
                for (var e in this._armatureCache)
                    -1 != e.indexOf(t) && this._removeArmature(e)
            },
            getArmatureCache: function(t, e, i) {
                var n, r = this._armatureCache[e];
                if (r)
                    n = r.armature;
                else {
                    var s = dragonBones.CCFactory.getInstance().buildArmatureDisplay(t, e, "", i);
                    if (!s || !s._armature)
                        return;
                    if (n = s._armature,
                    !y.canCache(n))
                        return void n.dispose();
                    this._armatureCache[e] = {
                        armature: n,
                        animationsCache: {},
                        curAnimationCache: null
                    }
                }
                return n
            },
            getAnimationCache: function(t, e) {
                var i = this._armatureCache[t];
                return i ? i.animationsCache[e] : null
            },
            initAnimationCache: function(t, e) {
                if (!e)
                    return null;
                var i = this._armatureCache[t]
                  , n = i && i.armature;
                if (!n)
                    return null;
                if (!n.animation.hasAnimation(e))
                    return null;
                var r = i.animationsCache
                  , s = r[e];
                if (!s) {
                    var a = t + "#" + e;
                    (s = this._animationPool[a]) ? delete this._animationPool[a] : (s = new m)._privateMode = this._privateMode,
                    s.init(i, e),
                    r[e] = s
                }
                return s
            },
            invalidAnimationCache: function(t) {
                var e = this._armatureCache[t];
                if (!e || !e.armature)
                    return null;
                var i = e.animationsCache;
                for (var n in i)
                    i[n].invalidAllFrame()
            },
            updateAnimationCache: function(t, e) {
                if (e) {
                    var i = this.initAnimationCache(t, e);
                    if (!i)
                        return;
                    i.updateAllFrame()
                } else {
                    var n = this._armatureCache[t];
                    if (!n || !n.armature)
                        return null;
                    var r = n.animationsCache;
                    for (var s in r)
                        r[s].updateAllFrame()
                }
            }
        });
        y.FrameTime = 1 / 60,
        y.sharedCache = new y,
        y.canCache = function(t) {
            for (var e = t._slots, i = 0, n = e.length; i < n; i++)
                if (e[i].childArmature)
                    return !1;
            return !0
        }
        ,
        e.exports = y
    }
    ), {}],
    356: [(function(t, e) {
        "use strict";
        var i = t("../../cocos2d/core/components/CCRenderComponent")
          , n = t("../../cocos2d/core/event/event-target")
          , r = t("../../cocos2d/core/graphics/graphics")
          , s = t("../../cocos2d/core/renderer/render-flow").FLAG_POST_RENDER
          , a = t("./ArmatureCache")
          , o = t("./AttachUtil")
          , l = cc.Enum({
            default: -1
        })
          , h = cc.Enum({
            "<None>": 0
        })
          , c = (cc.Enum({
            REALTIME: 0
        }),
        cc.Enum({
            REALTIME: 0,
            SHARED_CACHE: 1,
            PRIVATE_CACHE: 2
        }))
          , u = cc.Class({
            name: "dragonBones.ArmatureDisplay",
            extends: i,
            editor: !1,
            statics: {
                AnimationCacheMode: c
            },
            properties: {
                _factory: {
                    default: null,
                    type: dragonBones.CCFactory,
                    serializable: !1
                },
                dragonAsset: {
                    default: null,
                    type: dragonBones.DragonBonesAsset,
                    notify: function() {
                        this._refresh()
                    },
                    tooltip: !1
                },
                dragonAtlasAsset: {
                    default: null,
                    type: dragonBones.DragonBonesAtlasAsset,
                    notify: function() {
                        this._parseDragonAtlasAsset(),
                        this._refresh()
                    },
                    tooltip: !1
                },
                _armatureName: "",
                armatureName: {
                    get: function() {
                        return this._armatureName
                    },
                    set: function(t) {
                        this._armatureName = t;
                        var e = this.getAnimationNames(this._armatureName);
                        (!this.animationName || e.indexOf(this.animationName) < 0) && (this.animationName = ""),
                        this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature),
                        this._refresh(),
                        this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature)
                    },
                    visible: !1
                },
                _animationName: "",
                animationName: {
                    get: function() {
                        return this._animationName
                    },
                    set: function(t) {
                        this._animationName = t
                    },
                    visible: !1
                },
                _defaultArmatureIndex: {
                    default: 0,
                    notify: function() {
                        var t = "";
                        if (this.dragonAsset) {
                            var e;
                            if (this.dragonAsset && (e = this.dragonAsset.getArmatureEnum()),
                            !e)
                                return cc.errorID(7400, this.name);
                            t = e[this._defaultArmatureIndex]
                        }
                        void 0 !== t ? this.armatureName = t : cc.errorID(7401, this.name)
                    },
                    type: l,
                    visible: !0,
                    editorOnly: !0,
                    animatable: !1,
                    displayName: "Armature",
                    tooltip: !1
                },
                _animationIndex: {
                    default: 0,
                    notify: function() {
                        var t;
                        if (0 !== this._animationIndex) {
                            if (this.dragonAsset && (t = this.dragonAsset.getAnimsEnum(this.armatureName)),
                            t) {
                                var e = t[this._animationIndex];
                                void 0 !== e ? this.playAnimation(e, this.playTimes) : cc.errorID(7402, this.name)
                            }
                        } else
                            this.animationName = ""
                    },
                    type: h,
                    visible: !0,
                    editorOnly: !0,
                    animatable: !1,
                    displayName: "Animation",
                    tooltip: !1
                },
                _preCacheMode: -1,
                _cacheMode: c.REALTIME,
                _defaultCacheMode: {
                    default: 0,
                    type: c,
                    notify: function() {
                        if (this._defaultCacheMode !== c.REALTIME && this._armature && !a.canCache(this._armature))
                            return this._defaultCacheMode = c.REALTIME,
                            void cc.warn("Animation cache mode doesn't support skeletal nesting");
                        this.setAnimationCacheMode(this._defaultCacheMode)
                    },
                    editorOnly: !0,
                    visible: !0,
                    animatable: !1,
                    displayName: "Animation Cache Mode",
                    tooltip: !1
                },
                timeScale: {
                    default: 1,
                    notify: function() {
                        this._armature && !this.isAnimationCached() && (this._armature.animation.timeScale = this.timeScale)
                    },
                    tooltip: !1
                },
                playTimes: {
                    default: -1,
                    tooltip: !1
                },
                premultipliedAlpha: {
                    default: !1,
                    tooltip: !1
                },
                debugBones: {
                    default: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    },
                    tooltip: !1
                },
                enableBatch: {
                    default: !1,
                    notify: function() {
                        this._updateBatch()
                    },
                    tooltip: !1
                },
                _armatureKey: "",
                _accTime: 0,
                _playCount: 0,
                _frameCache: null,
                _curFrame: null,
                _playing: !1,
                _armatureCache: null
            },
            ctor: function() {
                this._eventTarget = new n,
                this._materialCache = {},
                this._inited = !1,
                this.attachUtil = new o,
                this._factory = dragonBones.CCFactory.getInstance()
            },
            onLoad: function() {
                for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    0 === (n._name && n._name.search("CHILD_ARMATURE-")) && n.destroy()
                }
            },
            _updateBatch: function() {
                var t = this.getMaterial(0);
                t && t.define("CC_USE_MODEL", !this.enableBatch),
                this._materialCache = {}
            },
            _updateMaterial: function() {
                var t = this.getMaterial(0);
                if (t) {
                    t.define("CC_USE_MODEL", !this.enableBatch),
                    t.define("USE_TEXTURE", !0);
                    var e = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA
                      , i = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;
                    t.setBlend(!0, cc.gfx.BLEND_FUNC_ADD, e, e, cc.gfx.BLEND_FUNC_ADD, i, i)
                }
                this._materialCache = {}
            },
            disableRender: function() {
                this._super(),
                this.node._renderFlag &= ~s
            },
            markForRender: function(t) {
                this._super(t),
                t ? this.node._renderFlag |= s : this.node._renderFlag &= ~s
            },
            _validateRender: function() {
                var t = this.dragonAtlasAsset && this.dragonAtlasAsset.texture;
                t && t.loaded ? this._super() : this.disableRender()
            },
            __preload: function() {
                this._init()
            },
            _init: function() {
                if (!this._inited) {
                    this._inited = !0,
                    this._resetAssembler(),
                    this._activateMaterial(),
                    this._parseDragonAtlasAsset(),
                    this._refresh();
                    for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n && "DEBUG_DRAW_NODE" === n._name && n.destroy()
                    }
                    this._updateDebugDraw()
                }
            },
            getArmatureKey: function() {
                return this._armatureKey
            },
            setAnimationCacheMode: function(t) {
                this._preCacheMode !== t && (this._cacheMode = t,
                this._buildArmature(),
                this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature))
            },
            isAnimationCached: function() {
                return this._cacheMode !== c.REALTIME
            },
            onEnable: function() {
                this._super(),
                this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.add(this._armature)
            },
            onDisable: function() {
                this._super(),
                this._armature && !this.isAnimationCached() && this._factory._dragonBones.clock.remove(this._armature)
            },
            _emitCacheCompleteEvent: function() {
                this._eventTarget.emit(dragonBones.EventObject.LOOP_COMPLETE),
                this._eventTarget.emit(dragonBones.EventObject.COMPLETE)
            },
            update: function(t) {
                if (this.isAnimationCached() && this._frameCache) {
                    var e = this._frameCache;
                    if (e.isInited()) {
                        var i = e.frames;
                        if (this._playing) {
                            var n = a.FrameTime;
                            0 == this._accTime && 0 == this._playCount && this._eventTarget.emit(dragonBones.EventObject.START);
                            var r = dragonBones.timeScale;
                            this._accTime += t * this.timeScale * r;
                            var s = Math.floor(this._accTime / n);
                            if (e.isCompleted || e.updateToFrame(s),
                            e.isCompleted && s >= i.length) {
                                if (this._playCount++,
                                this.playTimes > 0 && this._playCount >= this.playTimes)
                                    return this._curFrame = i[i.length - 1],
                                    this._accTime = 0,
                                    this._playing = !1,
                                    this._playCount = 0,
                                    void this._emitCacheCompleteEvent();
                                this._accTime = 0,
                                s = 0,
                                this._emitCacheCompleteEvent()
                            }
                            this._curFrame = i[s]
                        } else
                            e.isInvalid() && (e.updateToFrame(),
                            this._curFrame = i[i.length - 1])
                    }
                }
            },
            onDestroy: function() {
                this._super(),
                this._inited = !1,
                this._cacheMode === c.PRIVATE_CACHE ? (this._armatureCache.dispose(),
                this._armatureCache = null,
                this._armature = null) : this._cacheMode === c.SHARED_CACHE ? (this._armatureCache = null,
                this._armature = null) : this._armature && (this._armature.dispose(),
                this._armature = null)
            },
            _updateDebugDraw: function() {
                if (this.debugBones) {
                    if (!this._debugDraw) {
                        var t = new cc.PrivateNode;
                        t.name = "DEBUG_DRAW_NODE";
                        var e = t.addComponent(r);
                        e.lineWidth = 1,
                        e.strokeColor = cc.color(255, 0, 0, 255),
                        this._debugDraw = e
                    }
                    this._debugDraw.node.parent = this.node
                } else
                    this._debugDraw && (this._debugDraw.node.parent = null)
            },
            _buildArmature: function() {
                if (this.dragonAsset && this.dragonAtlasAsset && this.armatureName) {
                    this._armature && (this._preCacheMode === c.PRIVATE_CACHE ? this._armatureCache.dispose() : this._preCacheMode === c.REALTIME && this._armature.dispose(),
                    this._armatureCache = null,
                    this._armature = null,
                    this._displayProxy = null,
                    this._frameCache = null,
                    this._curFrame = null,
                    this._playing = !1,
                    this._preCacheMode = null),
                    this._cacheMode === c.SHARED_CACHE ? this._armatureCache = a.sharedCache : this._cacheMode === c.PRIVATE_CACHE && (this._armatureCache = new a,
                    this._armatureCache.enablePrivateMode());
                    var t = this.dragonAtlasAsset._uuid;
                    if (this._armatureKey = this.dragonAsset.init(this._factory, t),
                    this.isAnimationCached() && (this._armature = this._armatureCache.getArmatureCache(this.armatureName, this._armatureKey, t),
                    this._armature || (this._cacheMode = c.REALTIME)),
                    this._preCacheMode = this._cacheMode,
                    this._cacheMode === c.REALTIME) {
                        if (this._displayProxy = this._factory.buildArmatureDisplay(this.armatureName, this._armatureKey, "", t),
                        !this._displayProxy)
                            return;
                        this._displayProxy._ccNode = this.node,
                        this._displayProxy.setEventTarget(this._eventTarget),
                        this._armature = this._displayProxy._armature,
                        this._armature.animation.timeScale = this.timeScale
                    }
                    if (this._cacheMode !== c.REALTIME && this.debugBones && cc.warn("Debug bones is invalid in cached mode"),
                    this._armature) {
                        var e = this._armature.armatureData.aabb;
                        this.node.setContentSize(e.width, e.height)
                    }
                    this._updateBatch(),
                    this.attachUtil.init(this),
                    this.attachUtil._associateAttachedNode(),
                    this.animationName && this.playAnimation(this.animationName, this.playTimes),
                    this.markForRender(!0)
                }
            },
            _parseDragonAtlasAsset: function() {
                this.dragonAtlasAsset && this.dragonAtlasAsset.init(this._factory)
            },
            _refresh: function() {
                this._buildArmature()
            },
            _updateCacheModeEnum: !1,
            _updateAnimEnum: !1,
            _updateArmatureEnum: !1,
            playAnimation: function(t, e) {
                if (this.playTimes = void 0 === e ? -1 : e,
                this.animationName = t,
                this.isAnimationCached()) {
                    var i = this._armatureCache.getAnimationCache(this._armatureKey, t);
                    i || (i = this._armatureCache.initAnimationCache(this._armatureKey, t)),
                    i && (this._accTime = 0,
                    this._playCount = 0,
                    this._frameCache = i,
                    this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo(),
                    this._frameCache.updateToFrame(0),
                    this._playing = !0,
                    this._curFrame = this._frameCache.frames[0])
                } else if (this._armature)
                    return this._armature.animation.play(t, this.playTimes)
            },
            updateAnimationCache: function(t) {
                this.isAnimationCached() && this._armatureCache.updateAnimationCache(this._armatureKey, t)
            },
            invalidAnimationCache: function() {
                this.isAnimationCached() && this._armatureCache.invalidAnimationCache(this._armatureKey)
            },
            getArmatureNames: function() {
                var t = this._factory.getDragonBonesData(this._armatureKey);
                return t && t.armatureNames || []
            },
            getAnimationNames: function(t) {
                var e = []
                  , i = this._factory.getDragonBonesData(this._armatureKey);
                if (i) {
                    var n = i.getArmature(t);
                    if (n)
                        for (var r in n.animations)
                            n.animations.hasOwnProperty(r) && e.push(r)
                }
                return e
            },
            on: function(t, e, i) {
                this.addEventListener(t, e, i)
            },
            off: function(t, e, i) {
                this.removeEventListener(t, e, i)
            },
            once: function(t, e, i) {
                this._eventTarget.once(t, e, i)
            },
            addEventListener: function(t, e, i) {
                this._eventTarget.on(t, e, i)
            },
            removeEventListener: function(t, e, i) {
                this._eventTarget.off(t, e, i)
            },
            buildArmature: function(t, e) {
                return this._factory.createArmatureNode(this, t, e)
            },
            armature: function() {
                return this._armature
            }
        });
        e.exports = dragonBones.ArmatureDisplay = u
    }
    ), {
        "../../cocos2d/core/components/CCRenderComponent": 115,
        "../../cocos2d/core/event/event-target": 140,
        "../../cocos2d/core/graphics/graphics": 156,
        "../../cocos2d/core/renderer/render-flow": 225,
        "./ArmatureCache": 355,
        "./AttachUtil": 357
    }],
    357: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../cocos2d/core/value-types/mat4")) && i.__esModule ? i : {
            default: i
        }, r = t("../../cocos2d/core/renderer/render-flow").FLAG_TRANSFORM, s = function() {}, a = function(t) {
            Object.defineProperty(t, "_worldMatDirty", {
                get: function() {
                    return !0
                },
                set: function() {}
            }),
            t._calculWorldMatrix = s,
            t._mulMat = s
        }, o = new n.default, l = cc.Class({
            name: "dragonBones.AttachUtil",
            ctor: function() {
                this._inited = !1,
                this._armature = null,
                this._armatureNode = null,
                this._armatureDisplay = null,
                this._attachedRootNode = null,
                this._attachedNodeArray = [],
                this._boneIndexToNode = {}
            },
            init: function(t) {
                this._inited = !0,
                this._armature = t._armature,
                this._armatureNode = t.node,
                this._armatureDisplay = t
            },
            reset: function() {
                this._inited = !1,
                this._armature = null,
                this._armatureNode = null,
                this._armatureDisplay = null
            },
            _prepareAttachNode: function() {
                if (this._armature) {
                    var t = this._armatureNode.getChildByName("ATTACHED_NODE_TREE");
                    return t && t.isValid || (t = new cc.Node("ATTACHED_NODE_TREE"),
                    a(t),
                    this._armatureNode.addChild(t)),
                    this._armatureDisplay.isAnimationCached() && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo(),
                    this._attachedRootNode = t,
                    t
                }
            },
            _buildBoneAttachedNode: function(t, e) {
                var i = "ATTACHED_NODE:" + t.name
                  , n = new cc.Node(i);
                return this._buildBoneRelation(n, t, e),
                n
            },
            _buildBoneRelation: function(t, e, i) {
                a(t),
                t._bone = e,
                t._boneIndex = i,
                this._attachedNodeArray.push(t),
                this._boneIndexToNode[i] = t
            },
            getAttachedRootNode: function() {
                return this._attachedRootNode
            },
            getAttachedNodes: function(t) {
                var e = this._attachedNodeArray
                  , i = [];
                if (!this._inited)
                    return i;
                for (var n = 0, r = e.length; n < r; n++) {
                    var s = e[n];
                    s && s.isValid && s.name === "ATTACHED_NODE:" + t && i.push(s)
                }
                return i
            },
            _rebuildNodeArray: function() {
                for (var t = this._boneIndexToNode = {}, e = this._attachedNodeArray, i = this._attachedNodeArray = [], n = 0, r = e.length; n < r; n++) {
                    var s = e[n];
                    s && s.isValid && !s._toRemove && (i.push(s),
                    t[s._boneIndex] = s)
                }
            },
            _sortNodeArray: function() {
                this._attachedNodeArray.sort((function(t, e) {
                    return t._boneIndex < e._boneIndex ? -1 : 1
                }
                ))
            },
            _getNodeByBoneIndex: function(t) {
                var e = this._boneIndexToNode[t];
                return e && e.isValid ? e : null
            },
            destroyAttachedNodes: function(t) {
                if (this._inited) {
                    for (var e = this._attachedNodeArray, i = function t(e) {
                        for (var i = e.children, n = 0, r = i.length; n < r; n++) {
                            var s = i[n];
                            s && t(s)
                        }
                        e._toRemove = !0
                    }, n = 0, r = e.length; n < r; n++) {
                        var s = e[n];
                        s && s.isValid && s.name.split("ATTACHED_NODE:")[1] === t && (i(s),
                        s.removeFromParent(!0),
                        s.destroy(),
                        e[n] = null)
                    }
                    this._rebuildNodeArray()
                }
            },
            generateAttachedNodes: function(t) {
                var e = [];
                if (!this._inited)
                    return e;
                var i = this._prepareAttachNode();
                if (!i)
                    return e;
                var n = 0
                  , r = []
                  , s = function(e) {
                    if (e) {
                        for (var i, a = e.getBones(), o = 0, l = a.length; o < l; o++)
                            (i = a[o])._boneIndex = n++,
                            t === i.name && r.push(i);
                        for (var h, c = e.getSlots(), u = 0, _ = c.length; u < _; u++)
                            (h = c[u]).childArmature && s(h.childArmature)
                    }
                }
                .bind(this);
                s(this._armature);
                for (var a = function(t) {
                    if (t) {
                        var e = this._getNodeByBoneIndex(t._boneIndex);
                        if (e)
                            return e;
                        e = this._buildBoneAttachedNode(t, t._boneIndex);
                        var n = null;
                        t.armature.parent && (n = t.armature.parent.parent);
                        var r = a(t.parent || n) || i;
                        return e.parent = r,
                        t.parent ? e._rootNode = r._rootNode : e._rootNode = r,
                        e
                    }
                }
                .bind(this), o = 0, l = r.length; o < l; o++) {
                    var h = a(r[o]);
                    h && e.push(h)
                }
                return this._sortNodeArray(),
                e
            },
            destroyAllAttachedNodes: function() {
                if (this._attachedRootNode = null,
                this._attachedNodeArray.length = 0,
                this._boneIndexToNode = {},
                this._inited) {
                    var t = this._armatureNode.getChildByName("ATTACHED_NODE_TREE");
                    t && (t.removeFromParent(!0),
                    t.destroy(),
                    t = null)
                }
            },
            generateAllAttachedNodes: function() {
                if (this._inited) {
                    this._boneIndexToNode = {},
                    this._attachedNodeArray.length = 0;
                    var t = this._prepareAttachNode();
                    if (t) {
                        var e = 0
                          , i = function(n) {
                            if (n) {
                                var r = t;
                                n.parent && (r = n.parent.parent._attachedNode);
                                for (var s, a = n.getBones(), o = 0, l = a.length; o < l; o++) {
                                    var h = e++;
                                    (s = a[o])._attachedNode = null;
                                    var c = null;
                                    if (c = s.parent ? s.parent._attachedNode : r) {
                                        var u = c.getChildByName("ATTACHED_NODE:" + s.name);
                                        u && u.isValid ? this._buildBoneRelation(u, s, h) : (u = this._buildBoneAttachedNode(s, h),
                                        c.addChild(u)),
                                        u._rootNode = r,
                                        s._attachedNode = u
                                    }
                                }
                                for (var _, f = n.getSlots(), d = 0, p = f.length; d < p; d++)
                                    (_ = f[d]).childArmature && i(_.childArmature)
                            }
                        }
                        .bind(this);
                        return i(this._armature),
                        t
                    }
                }
            },
            _hasAttachedNode: function() {
                return !!this._inited && !!this._armatureNode.getChildByName("ATTACHED_NODE_TREE")
            },
            _associateAttachedNode: function() {
                if (this._inited) {
                    var t = this._armatureNode.getChildByName("ATTACHED_NODE_TREE");
                    if (t && t.isValid) {
                        this._attachedRootNode = t,
                        this._boneIndexToNode = {},
                        this._attachedNodeArray.length = 0;
                        var e = this._armature;
                        if (e) {
                            a(t),
                            this._armatureDisplay.isAnimationCached() && this._armatureDisplay._frameCache && this._armatureDisplay._frameCache.enableCacheAttachedInfo();
                            var i = 0
                              , n = function(e) {
                                if (e) {
                                    var r = t;
                                    e.parent && (r = e.parent.parent._attachedNode);
                                    for (var s, a = e.getBones(), o = 0, l = a.length; o < l; o++) {
                                        var h = i++;
                                        (s = a[o])._attachedNode = null;
                                        var c = null;
                                        if (c = s.parent ? s.parent._attachedNode : r) {
                                            var u = c.getChildByName("ATTACHED_NODE:" + s.name);
                                            u && u.isValid && (this._buildBoneRelation(u, s, h),
                                            u._rootNode = r,
                                            s._attachedNode = u)
                                        }
                                    }
                                    for (var _, f = e.getSlots(), d = 0, p = f.length; d < p; d++)
                                        (_ = f[d]).childArmature && n(_.childArmature)
                                }
                            }
                            .bind(this);
                            n(e)
                        }
                    }
                }
            },
            _syncAttachedNode: function() {
                if (this._inited) {
                    var t = this._attachedRootNode
                      , e = this._attachedNodeArray;
                    if (!t || !t.isValid)
                        return this._attachedRootNode = null,
                        void (e.length = 0);
                    var i = this._armatureNode._worldMatrix;
                    n.default.copy(t._worldMatrix, i),
                    t._renderFlag &= ~r;
                    var s = null
                      , a = this._armatureDisplay.isAnimationCached();
                    if (!a || (s = this._armatureDisplay._curFrame && this._armatureDisplay._curFrame.boneInfos)) {
                        for (var l, h, c, u, _ = this._armatureNode._mulMat, f = !1, d = 0, p = e.length; d < p; d++) {
                            var m = e[d];
                            if (m && m.isValid) {
                                var y = a ? s[m._boneIndex] : m._bone;
                                y && !y._isInPool ? (l = m._worldMatrix,
                                h = m._rootNode._worldMatrix,
                                c = y.globalTransformMatrix,
                                u = void 0,
                                (u = o.m)[0] = c.a,
                                u[1] = c.b,
                                u[4] = -c.c,
                                u[5] = -c.d,
                                u[12] = c.tx,
                                u[13] = c.ty,
                                _(l, h, o),
                                m._renderFlag &= ~r) : (m.removeFromParent(!0),
                                m.destroy(),
                                e[d] = null,
                                f = !0)
                            } else
                                e[d] = null,
                                f = !0
                        }
                        f && this._rebuildNodeArray()
                    }
                }
            }
        });
        e.exports = dragonBones.AttachUtil = l
    }
    ), {
        "../../cocos2d/core/renderer/render-flow": 225,
        "../../cocos2d/core/value-types/mat4": 284
    }],
    358: [(function(t) {
        "use strict";
        var e = t("../../cocos2d/core/event/event-target");
        dragonBones.CCArmatureDisplay = cc.Class({
            name: "dragonBones.CCArmatureDisplay",
            properties: {
                node: {
                    get: function() {
                        return this
                    }
                }
            },
            ctor: function() {
                this._eventTarget = new e
            },
            setEventTarget: function(t) {
                this._eventTarget = t
            },
            getRootDisplay: function() {
                var t, e = this._armature._parent;
                if (!e)
                    return this;
                for (; e; )
                    t = e,
                    e = e._armature._parent;
                return t._armature.getDisplay()
            },
            convertToRootSpace: function(t) {
                var e = this._armature._parent;
                if (!e)
                    return t;
                e.updateWorldMatrix();
                var i = e._worldMatrix.m
                  , n = cc.v2(0, 0);
                return n.x = t.x * i[0] + t.y * i[4] + i[12],
                n.y = t.x * i[1] + t.y * i[5] + i[13],
                n
            },
            convertToWorldSpace: function(t) {
                var e = this.convertToRootSpace(t);
                return this.getRootNode().convertToWorldSpaceAR(e)
            },
            getRootNode: function() {
                var t = this.getRootDisplay();
                return t && t._ccNode
            },
            dbInit: function(t) {
                this._armature = t
            },
            dbClear: function() {
                this._armature = null
            },
            dbUpdate: function() {},
            advanceTimeBySelf: function(t) {
                this.shouldAdvanced = !!t
            },
            hasDBEventListener: function(t) {
                return this._eventTarget.hasEventListener(t)
            },
            addDBEventListener: function(t, e, i) {
                this._eventTarget.on(t, e, i)
            },
            removeDBEventListener: function(t, e, i) {
                this._eventTarget.off(t, e, i)
            },
            dispatchDBEvent: function(t, e) {
                this._eventTarget.emit(t, e)
            }
        })
    }
    ), {
        "../../cocos2d/core/event/event-target": 140
    }],
    359: [(function() {
        "use strict";
        var t = dragonBones.BaseObject
          , e = dragonBones.BaseFactory
          , i = dragonBones.CCFactory = cc.Class({
            name: "dragonBones.CCFactory",
            extends: e,
            statics: {
                _factory: null,
                getInstance: function() {
                    return i._factory || (i._factory = new i),
                    i._factory
                }
            },
            ctor: function() {
                var t = new dragonBones.CCArmatureDisplay;
                this._dragonBones = new dragonBones.DragonBones(t),
                cc.director._scheduler && (cc.game.on(cc.game.EVENT_RESTART, this.initUpdate, this),
                this.initUpdate())
            },
            initUpdate: function() {
                cc.director._scheduler.enableForTarget(this),
                cc.director._scheduler.scheduleUpdate(this, cc.Scheduler.PRIORITY_SYSTEM, !1)
            },
            update: function(t) {
                this._dragonBones.advanceTime(t)
            },
            getDragonBonesDataByRawData: function(t) {
                return (t instanceof ArrayBuffer ? e._binaryParser : this._dataParser).parseDragonBonesData(t, 1)
            },
            buildArmatureDisplay: function(t, e, i, n) {
                var r = this.buildArmature(t, e, i, n);
                return r && r._display
            },
            createArmatureNode: function(t, e, i) {
                var n = (i = i || new cc.Node).getComponent(dragonBones.ArmatureDisplay);
                return n || (n = i.addComponent(dragonBones.ArmatureDisplay)),
                i.name = e,
                n._armatureName = e,
                n._N$dragonAsset = t.dragonAsset,
                n._N$dragonAtlasAsset = t.dragonAtlasAsset,
                n._init(),
                n
            },
            _buildTextureAtlasData: function(e, i) {
                return e ? e.renderTexture = i : e = t.borrowObject(dragonBones.CCTextureAtlasData),
                e
            },
            _sortSlots: function() {
                for (var t = this._slots, e = [], i = 0, n = t.length; i < n; i++) {
                    for (var r = t[i], s = r._zOrder, a = !1, o = e.length - 1; o >= 0; o--)
                        if (s >= e[o]._zOrder) {
                            e.splice(o + 1, 0, r),
                            a = !0;
                            break
                        }
                    a || e.splice(0, 0, r)
                }
                this._slots = e
            },
            _buildArmature: function(e) {
                var i = t.borrowObject(dragonBones.Armature);
                i._skinData = e.skin,
                i._animation = t.borrowObject(dragonBones.Animation),
                i._animation._armature = i,
                i._animation.animations = e.armature.animations,
                i._isChildArmature = !1;
                var n = new dragonBones.CCArmatureDisplay;
                return i.init(e.armature, n, n, this._dragonBones),
                i
            },
            _buildSlot: function(e, i, n) {
                var r = t.borrowObject(dragonBones.CCSlot)
                  , s = r;
                return r.init(i, n, s, s),
                r
            },
            getDragonBonesDataByUUID: function(t) {
                for (var e in this._dragonBonesDataMap)
                    if (-1 != e.indexOf(t))
                        return this._dragonBonesDataMap[e];
                return null
            },
            removeDragonBonesDataByUUID: function(t, e) {
                for (var i in void 0 === e && (e = !0),
                this._dragonBonesDataMap)
                    -1 !== i.indexOf(t) && (e && this._dragonBones.bufferObject(this._dragonBonesDataMap[i]),
                    delete this._dragonBonesDataMap[i])
            }
        })
    }
    ), {}],
    360: [(function(t) {
        "use strict";
        var e, i = (e = t("../../cocos2d/core/value-types/mat4")) && e.__esModule ? e : {
            default: e
        }, n = dragonBones.BinaryOffset, r = dragonBones.BoneType;
        dragonBones.CCSlot = cc.Class({
            name: "dragonBones.CCSlot",
            extends: dragonBones.Slot,
            ctor: function() {
                this._localVertices = [],
                this._indices = [],
                this._matrix = cc.mat4(),
                this._worldMatrix = cc.mat4(),
                this._worldMatrixDirty = !0,
                this._visible = !1,
                this._color = cc.color()
            },
            _onClear: function() {
                this._super(),
                this._localVertices.length = 0,
                this._indices.length = 0,
                i.default.identity(this._matrix),
                i.default.identity(this._worldMatrix),
                this._worldMatrixDirty = !0,
                this._color = cc.color(),
                this._visible = !1
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCSlot]"
                }
            },
            _onUpdateDisplay: function() {},
            _initDisplay: function() {},
            _addDisplay: function() {
                this._visible = !0
            },
            _replaceDisplay: function() {},
            _removeDisplay: function() {
                this._visible = !1
            },
            _disposeDisplay: function() {},
            _updateVisible: function() {
                this._visible = this.parent._visible
            },
            _updateZOrder: function() {},
            _updateBlendMode: function() {
                if (this._childArmature)
                    for (var t = this._childArmature.getSlots(), e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n._blendMode = this._blendMode,
                        n._updateBlendMode()
                    }
            },
            _updateColor: function() {
                var t = this._color;
                t.r = 255 * this._colorTransform.redMultiplier,
                t.g = 255 * this._colorTransform.greenMultiplier,
                t.b = 255 * this._colorTransform.blueMultiplier,
                t.a = 255 * this._colorTransform.alphaMultiplier
            },
            getTexture: function() {
                return this._textureData && this._textureData.spriteFrame && this._textureData.spriteFrame.getTexture()
            },
            _updateFrame: function() {
                this._indices.length = 0;
                var t = this._indices
                  , e = this._localVertices
                  , i = 0
                  , r = 0
                  , s = this._textureData;
                if (this._display && !(this._displayIndex < 0) && s && s.spriteFrame) {
                    var a = s.spriteFrame.getTexture()
                      , o = a.width
                      , l = a.height
                      , h = s.region
                      , c = null !== this._deformVertices && this._display === this._meshDisplay ? this._deformVertices.verticesData : null;
                    if (c) {
                        var u = c.data
                          , _ = u.intArray
                          , f = u.floatArray
                          , d = _[c.offset + n.MeshVertexCount]
                          , p = _[c.offset + n.MeshTriangleCount]
                          , m = _[c.offset + n.MeshFloatOffset];
                        m < 0 && (m += 65536);
                        for (var y = m + 2 * d, v = this._armature._armatureData.scale, g = 0, A = 2 * d; g < A; g += 2)
                            e[r++] = f[m + g] * v,
                            e[r++] = -f[m + g + 1] * v,
                            c.rotated ? (e[r++] = (h.x + (1 - f[y + g]) * h.width) / o,
                            e[r++] = (h.y + f[y + g + 1] * h.height) / l) : (e[r++] = (h.x + f[y + g] * h.width) / o,
                            e[r++] = (h.y + f[y + g + 1] * h.height) / l);
                        for (var x = 0; x < 3 * p; ++x)
                            t[i++] = _[c.offset + n.MeshVertexIndices + x];
                        e.length = r,
                        t.length = i,
                        c.weight && this._identityTransform()
                    } else {
                        var b = h.x / o
                          , C = (h.y + h.height) / l
                          , T = (h.x + h.width) / o
                          , S = h.y / l;
                        e[r++] = 0,
                        e[r++] = 0,
                        e[r++] = b,
                        e[r++] = C,
                        e[r++] = h.width,
                        e[r++] = 0,
                        e[r++] = T,
                        e[r++] = C,
                        e[r++] = 0,
                        e[r++] = h.height,
                        e[r++] = b,
                        e[r++] = S,
                        e[r++] = h.width,
                        e[r++] = h.height,
                        e[r++] = T,
                        e[r++] = S,
                        t[0] = 0,
                        t[1] = 1,
                        t[2] = 2,
                        t[3] = 1,
                        t[4] = 3,
                        t[5] = 2,
                        e.length = r,
                        t.length = 6
                    }
                    this._visibleDirty = !0,
                    this._blendModeDirty = !0,
                    this._colorDirty = !0
                }
            },
            _updateMesh: function() {
                var t = this._armature._armatureData.scale
                  , e = this._deformVertices.vertices
                  , i = this._deformVertices.bones
                  , s = this._deformVertices.verticesData
                  , a = s.weight
                  , o = e.length > 0 && s.inheritDeform
                  , l = this._localVertices;
                if (a) {
                    var h = s.data
                      , c = h.intArray
                      , u = h.floatArray
                      , _ = c[s.offset + n.MeshVertexCount]
                      , f = c[a.offset + n.WeigthFloatOffset];
                    f < 0 && (f += 65536);
                    for (var d = 0, p = a.offset + n.WeigthBoneIndices + i.length, m = f, y = 0, v = 0; d < _; d++,
                    v += 4) {
                        for (var g = c[p++], A = 0, x = 0, b = 0; b < g; ++b) {
                            var C = i[c[p++]];
                            if (null !== C) {
                                var T = C.globalTransformMatrix
                                  , S = u[m++]
                                  , w = u[m++] * t
                                  , E = u[m++] * t;
                                o && (w += e[y++],
                                E += e[y++]),
                                A += (T.a * w + T.c * E + T.tx) * S,
                                x += (T.b * w + T.d * E + T.ty) * S
                            }
                        }
                        l[v] = A,
                        l[v + 1] = -x
                    }
                } else if (o) {
                    var M = this._parent._boneData.type !== r.Bone
                      , D = s.data
                      , B = D.intArray
                      , I = D.floatArray
                      , P = B[s.offset + n.MeshVertexCount]
                      , R = B[s.offset + n.MeshFloatOffset];
                    R < 0 && (R += 65536);
                    for (var O = 0, L = P, F = 0; O < L; O++,
                    F += 4) {
                        var V = I[R + 2 * O] * t + e[2 * O]
                          , N = I[R + 2 * O + 1] * t + e[2 * O + 1];
                        if (M) {
                            var k = this._parent._getGlobalTransformMatrix(V, N);
                            l[F] = k.a * V + k.c * N + k.tx,
                            l[F + 1] = -k.b * V + k.d * N + k.ty
                        } else
                            l[F] = V,
                            l[F + 1] = -N
                    }
                }
                a && this._identityTransform()
            },
            _identityTransform: function() {
                var t = this._matrix.m;
                t[0] = 1,
                t[1] = 0,
                t[4] = -0,
                t[5] = -1,
                t[12] = 0,
                t[13] = 0,
                this._worldMatrixDirty = !0
            },
            _updateTransform: function() {
                var t = this._matrix.m;
                t[0] = this.globalTransformMatrix.a,
                t[1] = this.globalTransformMatrix.b,
                t[4] = -this.globalTransformMatrix.c,
                t[5] = -this.globalTransformMatrix.d,
                this._childArmature ? (t[12] = this.globalTransformMatrix.tx,
                t[13] = this.globalTransformMatrix.ty) : (t[12] = this.globalTransformMatrix.tx - (this.globalTransformMatrix.a * this._pivotX - this.globalTransformMatrix.c * this._pivotY),
                t[13] = this.globalTransformMatrix.ty - (this.globalTransformMatrix.b * this._pivotX - this.globalTransformMatrix.d * this._pivotY)),
                this._worldMatrixDirty = !0
            },
            updateWorldMatrix: function() {
                if (this._armature) {
                    var t = this._armature._parent;
                    if (t && t.updateWorldMatrix(),
                    this._worldMatrixDirty) {
                        this.calculWorldMatrix();
                        var e = this.childArmature;
                        if (!e)
                            return;
                        for (var i = e.getSlots(), n = 0, r = i.length; n < r; n++) {
                            var s = i[n];
                            s && (s._worldMatrixDirty = !0)
                        }
                    }
                }
            },
            _mulMat: function(t, e, i) {
                var n = e.m
                  , r = i.m
                  , s = t.m
                  , a = n[0]
                  , o = n[1]
                  , l = n[4]
                  , h = n[5]
                  , c = n[12]
                  , u = n[13]
                  , _ = r[0]
                  , f = r[1]
                  , d = r[4]
                  , p = r[5]
                  , m = r[12]
                  , y = r[13];
                0 !== o || 0 !== l ? (s[0] = _ * a + f * l,
                s[1] = _ * o + f * h,
                s[4] = d * a + p * l,
                s[5] = d * o + p * h,
                s[12] = a * m + l * y + c,
                s[13] = o * m + h * y + u) : (s[0] = _ * a,
                s[1] = f * h,
                s[4] = d * a,
                s[5] = p * h,
                s[12] = a * m + c,
                s[13] = h * y + u)
            },
            calculWorldMatrix: function() {
                var t = this._armature._parent;
                t ? this._mulMat(this._worldMatrix, t._worldMatrix, this._matrix) : i.default.copy(this._worldMatrix, this._matrix),
                this._worldMatrixDirty = !1
            }
        })
    }
    ), {
        "../../cocos2d/core/value-types/mat4": 284
    }],
    361: [(function() {
        "use strict";
        dragonBones.CCTextureAtlasData = cc.Class({
            extends: dragonBones.TextureAtlasData,
            name: "dragonBones.CCTextureAtlasData",
            properties: {
                _renderTexture: {
                    default: null,
                    serializable: !1
                },
                renderTexture: {
                    get: function() {
                        return this._renderTexture
                    },
                    set: function(t) {
                        if (this._renderTexture = t,
                        t)
                            for (var e in this.textures) {
                                var i = this.textures[e];
                                if (!i.spriteFrame) {
                                    var n;
                                    n = i.rotated ? cc.rect(i.region.x, i.region.y, i.region.height, i.region.width) : cc.rect(i.region.x, i.region.y, i.region.width, i.region.height);
                                    var r = cc.v2(0, 0)
                                      , s = cc.size(n.width, n.height);
                                    i.spriteFrame = new cc.SpriteFrame,
                                    i.spriteFrame.setTexture(t, n, !1, r, s)
                                }
                            }
                        else
                            for (var a in this.textures)
                                this.textures[a].spriteFrame = null
                    }
                }
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCTextureAtlasData]"
                }
            },
            _onClear: function() {
                dragonBones.TextureAtlasData.prototype._onClear.call(this),
                this.renderTexture = null
            },
            createTexture: function() {
                return dragonBones.BaseObject.borrowObject(dragonBones.CCTextureData)
            }
        }),
        dragonBones.CCTextureData = cc.Class({
            extends: dragonBones.TextureData,
            name: "dragonBones.CCTextureData",
            properties: {
                spriteFrame: {
                    default: null,
                    serializable: !1
                }
            },
            statics: {
                toString: function() {
                    return "[class dragonBones.CCTextureData]"
                }
            },
            _onClear: function() {
                dragonBones.TextureData.prototype._onClear.call(this),
                this.spriteFrame = null
            }
        })
    }
    ), {}],
    362: [(function(t, e) {
        "use strict";
        var i = t("./ArmatureCache").sharedCache
          , n = cc.Class({
            name: "dragonBones.DragonBonesAsset",
            extends: cc.Asset,
            ctor: function() {
                this.reset()
            },
            properties: {
                _dragonBonesJson: "",
                dragonBonesJson: {
                    get: function() {
                        return this._dragonBonesJson
                    },
                    set: function(t) {
                        this._dragonBonesJson = t,
                        this._dragonBonesJsonData = JSON.parse(t),
                        this.reset()
                    }
                },
                _nativeAsset: {
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = t.buffer || t,
                        this.reset()
                    },
                    override: !0
                }
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            createNode: !1,
            reset: function() {
                this._clear()
            },
            init: function(t, e) {
                this._factory = t,
                !this._dragonBonesJsonData && this.dragonBonesJson && (this._dragonBonesJsonData = JSON.parse(this.dragonBonesJson));
                var i;
                if (i = this._dragonBonesJsonData ? this._dragonBonesJsonData : this._nativeAsset,
                !this._uuid) {
                    var n = this._factory.getDragonBonesDataByRawData(i);
                    n ? this._uuid = n.name : cc.warn("dragonbones name is empty")
                }
                var r = this._uuid + "#" + e;
                return this._factory.getDragonBonesData(r) ? r : (this._factory.parseDragonBonesData(i, r),
                r)
            },
            getArmatureEnum: !1,
            getAnimsEnum: !1,
            _clear: function() {
                this._factory && (i.resetArmature(this._uuid),
                this._factory.removeDragonBonesDataByUUID(this._uuid, !0))
            },
            destroy: function() {
                this._clear(),
                this._super()
            }
        });
        dragonBones.DragonBonesAsset = e.exports = n
    }
    ), {
        "./ArmatureCache": 355
    }],
    363: [(function(t, e) {
        "use strict";
        var i = t("./ArmatureCache").sharedCache
          , n = cc.Class({
            name: "dragonBones.DragonBonesAtlasAsset",
            extends: cc.Asset,
            ctor: function() {
                this._clear()
            },
            properties: {
                _atlasJson: "",
                atlasJson: {
                    get: function() {
                        return this._atlasJson
                    },
                    set: function(t) {
                        this._atlasJson = t,
                        this._atlasJsonData = JSON.parse(this.atlasJson),
                        this._clear()
                    }
                },
                _texture: {
                    default: null,
                    type: cc.Texture2D,
                    formerlySerializedAs: "texture"
                },
                texture: {
                    get: function() {
                        return this._texture
                    },
                    set: function(t) {
                        this._texture = t,
                        this._clear()
                    }
                },
                _textureAtlasData: null
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            createNode: !1,
            init: function(t) {
                this._factory = t,
                this._atlasJsonData || (this._atlasJsonData = JSON.parse(this.atlasJson));
                var e = this._atlasJsonData;
                this._uuid = this._uuid || e.name,
                this._textureAtlasData ? t.addTextureAtlasData(this._textureAtlasData, this._uuid) : this._textureAtlasData = t.parseTextureAtlasData(e, this.texture, this._uuid)
            },
            _clear: function() {
                this._factory && (i.resetArmature(this._uuid),
                this._factory.removeTextureAtlasData(this._uuid, !0),
                this._factory.removeDragonBonesDataByUUID(this._uuid, !0)),
                this._textureAtlasData = null
            },
            destroy: function() {
                this._clear(),
                this._super()
            }
        });
        dragonBones.DragonBonesAtlasAsset = e.exports = n
    }
    ), {
        "./ArmatureCache": 355
    }],
    364: [(function(t) {
        "use strict";
        var e = "undefined" == typeof window ? global : window;
        e.dragonBones = t("./lib/dragonBones"),
        void 0 !== e.dragonBones && (dragonBones._timeScale = 1,
        Object.defineProperty(dragonBones, "timeScale", {
            get: function() {
                return this._timeScale
            },
            set: function(t) {
                this._timeScale = t,
                this.CCFactory.getInstance()._dragonBones.clock.timeScale = t
            },
            configurable: !0
        }),
        dragonBones.DisplayType = {
            Image: 0,
            Armature: 1,
            Mesh: 2
        },
        dragonBones.ArmatureType = {
            Armature: 0,
            MovieClip: 1,
            Stage: 2
        },
        dragonBones.ExtensionType = {
            FFD: 0,
            AdjustColor: 10,
            BevelFilter: 11,
            BlurFilter: 12,
            DropShadowFilter: 13,
            GlowFilter: 14,
            GradientBevelFilter: 15,
            GradientGlowFilter: 16
        },
        dragonBones.EventType = {
            Frame: 0,
            Sound: 1
        },
        dragonBones.ActionType = {
            Play: 0,
            Stop: 1,
            GotoAndPlay: 2,
            GotoAndStop: 3,
            FadeIn: 4,
            FadeOut: 5
        },
        dragonBones.AnimationFadeOutMode = {
            None: 0,
            SameLayer: 1,
            SameGroup: 2,
            SameLayerAndGroup: 3,
            All: 4
        },
        dragonBones.BinaryOffset = {
            WeigthBoneCount: 0,
            WeigthFloatOffset: 1,
            WeigthBoneIndices: 2,
            MeshVertexCount: 0,
            MeshTriangleCount: 1,
            MeshFloatOffset: 2,
            MeshWeightOffset: 3,
            MeshVertexIndices: 4,
            TimelineScale: 0,
            TimelineOffset: 1,
            TimelineKeyFrameCount: 2,
            TimelineFrameValueCount: 3,
            TimelineFrameValueOffset: 4,
            TimelineFrameOffset: 5,
            FramePosition: 0,
            FrameTweenType: 1,
            FrameTweenEasingOrCurveSampleCount: 2,
            FrameCurveSamples: 3,
            DeformMeshOffset: 0,
            DeformCount: 1,
            DeformValueCount: 2,
            DeformValueOffset: 3,
            DeformFloatOffset: 4
        },
        dragonBones.BoneType = {
            Bone: 0,
            Surface: 1
        },
        t("./CCFactory"),
        t("./CCSlot"),
        t("./CCTextureData"),
        t("./CCArmatureDisplay"),
        t("./ArmatureCache"),
        t("./DragonBonesAsset"),
        t("./DragonBonesAtlasAsset"),
        t("./ArmatureDisplay"),
        t("./webgl-assembler"))
    }
    ), {
        "./ArmatureCache": 355,
        "./ArmatureDisplay": 356,
        "./CCArmatureDisplay": 358,
        "./CCFactory": 359,
        "./CCSlot": 360,
        "./CCTextureData": 361,
        "./DragonBonesAsset": 362,
        "./DragonBonesAtlasAsset": 363,
        "./lib/dragonBones": 365,
        "./webgl-assembler": 366
    }],
    365: [(function(t, e) {
        "use strict";
        var i, n, r, s = Object.setPrototypeOf || Array;
        r || (r = {}),
        (function(t) {
            var e = (function() {
                function e(i) {
                    this._clock = new t.WorldClock,
                    this._events = [],
                    this._objects = [],
                    this._eventManager = null,
                    this._eventManager = i,
                    console.info("DragonBones: " + e.VERSION + "\nWebsite: http://dragonbones.com/\nSource and Demo: https://github.com/DragonBones/")
                }
                return e.prototype.advanceTime = function(e) {
                    if (this._objects.length > 0) {
                        for (var i = 0, n = this._objects; i < n.length; i++)
                            n[i].returnToPool();
                        this._objects.length = 0
                    }
                    if (this._clock.advanceTime(e),
                    this._events.length > 0) {
                        for (var r = 0; r < this._events.length; ++r) {
                            var s = this._events[r]
                              , a = s.armature;
                            null !== a._armatureData && (a.eventDispatcher.dispatchDBEvent(s.type, s),
                            s.type === t.EventObject.SOUND_EVENT && this._eventManager.dispatchDBEvent(s.type, s)),
                            this.bufferObject(s)
                        }
                        this._events.length = 0
                    }
                }
                ,
                e.prototype.bufferEvent = function(t) {
                    this._events.indexOf(t) < 0 && this._events.push(t)
                }
                ,
                e.prototype.bufferObject = function(t) {
                    this._objects.indexOf(t) < 0 && this._objects.push(t)
                }
                ,
                Object.defineProperty(e.prototype, "clock", {
                    get: function() {
                        return this._clock
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(e.prototype, "eventManager", {
                    get: function() {
                        return this._eventManager
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                e.VERSION = "5.6.300",
                e.yDown = !1,
                e.debug = !1,
                e.debugDraw = !1,
                e.webAssembly = !1,
                e
            }
            )();
            t.DragonBones = e
        }
        )(r || (r = {})),
        console.warn || (console.warn = function() {}
        ),
        console.assert || (console.assert = function() {}
        ),
        Date.now || (Date.now = function() {
            return (new Date).getTime()
        }
        ),
        s = function(t, e) {
            function i() {
                this.constructor = t
            }
            for (var n in e)
                e.hasOwnProperty(n) && (t[n] = e[n]);
            i.prototype = e.prototype,
            t.prototype = new i
        }
        ,
        (function(t) {
            var e = (function() {
                function t() {
                    this.hashCode = t._hashCode++,
                    this._isInPool = !1
                }
                return t._returnObject = function(e) {
                    var i = String(e.constructor)
                      , n = i in t._maxCountMap ? t._maxCountMap[i] : t._defaultMaxCount
                      , r = t._poolsMap[i] = t._poolsMap[i] || [];
                    r.length < n && (e._isInPool ? console.warn("The object is already in the pool.") : (e._isInPool = !0,
                    r.push(e)))
                }
                ,
                t.toString = function() {
                    throw new Error
                }
                ,
                t.setMaxCount = function(e, i) {
                    if ((i < 0 || i != i) && (i = 0),
                    null !== e)
                        null !== (r = (n = String(e))in t._poolsMap ? t._poolsMap[n] : null) && r.length > i && (r.length = i),
                        t._maxCountMap[n] = i;
                    else
                        for (var n in t._defaultMaxCount = i,
                        t._poolsMap) {
                            var r;
                            (r = t._poolsMap[n]).length > i && (r.length = i),
                            n in t._maxCountMap && (t._maxCountMap[n] = i)
                        }
                }
                ,
                t.clearPool = function(e) {
                    if (void 0 === e && (e = null),
                    null !== e) {
                        var i = String(e);
                        null !== (r = i in t._poolsMap ? t._poolsMap[i] : null) && r.length > 0 && (r.length = 0)
                    } else
                        for (var n in t._poolsMap) {
                            var r;
                            (r = t._poolsMap[n]).length = 0
                        }
                }
                ,
                t.borrowObject = function(e) {
                    var i = String(e)
                      , n = i in t._poolsMap ? t._poolsMap[i] : null;
                    if (null !== n && n.length > 0) {
                        var r = n.pop();
                        return r._isInPool = !1,
                        r
                    }
                    var s = new e;
                    return s._onClear(),
                    s
                }
                ,
                t.prototype.returnToPool = function() {
                    this._onClear(),
                    t._returnObject(this)
                }
                ,
                t._hashCode = 0,
                t._defaultMaxCount = 3e3,
                t._maxCountMap = {},
                t._poolsMap = {},
                t
            }
            )();
            t.BaseObject = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s) {
                    void 0 === t && (t = 1),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    void 0 === n && (n = 1),
                    void 0 === r && (r = 0),
                    void 0 === s && (s = 0),
                    this.a = t,
                    this.b = e,
                    this.c = i,
                    this.d = n,
                    this.tx = r,
                    this.ty = s
                }
                return t.prototype.toString = function() {
                    return "[object dragonBones.Matrix] a:" + this.a + " b:" + this.b + " c:" + this.c + " d:" + this.d + " tx:" + this.tx + " ty:" + this.ty
                }
                ,
                t.prototype.copyFrom = function(t) {
                    return this.a = t.a,
                    this.b = t.b,
                    this.c = t.c,
                    this.d = t.d,
                    this.tx = t.tx,
                    this.ty = t.ty,
                    this
                }
                ,
                t.prototype.copyFromArray = function(t, e) {
                    return void 0 === e && (e = 0),
                    this.a = t[e],
                    this.b = t[e + 1],
                    this.c = t[e + 2],
                    this.d = t[e + 3],
                    this.tx = t[e + 4],
                    this.ty = t[e + 5],
                    this
                }
                ,
                t.prototype.identity = function() {
                    return this.a = this.d = 1,
                    this.b = this.c = 0,
                    this.tx = this.ty = 0,
                    this
                }
                ,
                t.prototype.concat = function(t) {
                    var e = this.a * t.a
                      , i = 0
                      , n = 0
                      , r = this.d * t.d
                      , s = this.tx * t.a + t.tx
                      , a = this.ty * t.d + t.ty;
                    return 0 === this.b && 0 === this.c || (e += this.b * t.c,
                    i += this.b * t.d,
                    n += this.c * t.a,
                    r += this.c * t.b),
                    0 === t.b && 0 === t.c || (i += this.a * t.b,
                    n += this.d * t.c,
                    s += this.ty * t.c,
                    a += this.tx * t.b),
                    this.a = e,
                    this.b = i,
                    this.c = n,
                    this.d = r,
                    this.tx = s,
                    this.ty = a,
                    this
                }
                ,
                t.prototype.invert = function() {
                    var t = this.a
                      , e = this.b
                      , i = this.c
                      , n = this.d
                      , r = this.tx
                      , s = this.ty;
                    if (0 === e && 0 === i)
                        return this.b = this.c = 0,
                        0 === t || 0 === n ? this.a = this.b = this.tx = this.ty = 0 : (t = this.a = 1 / t,
                        n = this.d = 1 / n,
                        this.tx = -t * r,
                        this.ty = -n * s),
                        this;
                    var a = t * n - e * i;
                    if (0 === a)
                        return this.a = this.d = 1,
                        this.b = this.c = 0,
                        this.tx = this.ty = 0,
                        this;
                    a = 1 / a;
                    var o = this.a = n * a;
                    return e = this.b = -e * a,
                    i = this.c = -i * a,
                    n = this.d = t * a,
                    this.tx = -(o * r + i * s),
                    this.ty = -(e * r + n * s),
                    this
                }
                ,
                t.prototype.transformPoint = function(t, e, i, n) {
                    void 0 === n && (n = !1),
                    i.x = this.a * t + this.c * e,
                    i.y = this.b * t + this.d * e,
                    n || (i.x += this.tx,
                    i.y += this.ty)
                }
                ,
                t.prototype.transformRectangle = function(t, e) {
                    void 0 === e && (e = !1);
                    var i = this.a
                      , n = this.b
                      , r = this.c
                      , s = this.d
                      , a = e ? 0 : this.tx
                      , o = e ? 0 : this.ty
                      , l = t.x
                      , h = t.y
                      , c = l + t.width
                      , u = h + t.height
                      , _ = i * l + r * h + a
                      , f = n * l + s * h + o
                      , d = i * c + r * h + a
                      , p = n * c + s * h + o
                      , m = i * c + r * u + a
                      , y = n * c + s * u + o
                      , v = i * l + r * u + a
                      , g = n * l + s * u + o
                      , A = 0;
                    _ > d && (A = _,
                    _ = d,
                    d = A),
                    m > v && (A = m,
                    m = v,
                    v = A),
                    t.x = Math.floor(_ < m ? _ : m),
                    t.width = Math.ceil((d > v ? d : v) - t.x),
                    f > p && (A = f,
                    f = p,
                    p = A),
                    y > g && (A = y,
                    y = g,
                    g = A),
                    t.y = Math.floor(f < y ? f : y),
                    t.height = Math.ceil((p > g ? p : g) - t.y)
                }
                ,
                t
            }
            )();
            t.Matrix = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    void 0 === n && (n = 0),
                    void 0 === r && (r = 1),
                    void 0 === s && (s = 1),
                    this.x = t,
                    this.y = e,
                    this.skew = i,
                    this.rotation = n,
                    this.scaleX = r,
                    this.scaleY = s
                }
                return t.normalizeRadian = function(t) {
                    return (t = (t + Math.PI) % (2 * Math.PI)) + (t > 0 ? -Math.PI : Math.PI)
                }
                ,
                t.prototype.toString = function() {
                    return "[object dragonBones.Transform] x:" + this.x + " y:" + this.y + " skewX:" + 180 * this.skew / Math.PI + " skewY:" + 180 * this.rotation / Math.PI + " scaleX:" + this.scaleX + " scaleY:" + this.scaleY
                }
                ,
                t.prototype.copyFrom = function(t) {
                    return this.x = t.x,
                    this.y = t.y,
                    this.skew = t.skew,
                    this.rotation = t.rotation,
                    this.scaleX = t.scaleX,
                    this.scaleY = t.scaleY,
                    this
                }
                ,
                t.prototype.identity = function() {
                    return this.x = this.y = 0,
                    this.skew = this.rotation = 0,
                    this.scaleX = this.scaleY = 1,
                    this
                }
                ,
                t.prototype.add = function(t) {
                    return this.x += t.x,
                    this.y += t.y,
                    this.skew += t.skew,
                    this.rotation += t.rotation,
                    this.scaleX *= t.scaleX,
                    this.scaleY *= t.scaleY,
                    this
                }
                ,
                t.prototype.minus = function(t) {
                    return this.x -= t.x,
                    this.y -= t.y,
                    this.skew -= t.skew,
                    this.rotation -= t.rotation,
                    this.scaleX /= t.scaleX,
                    this.scaleY /= t.scaleY,
                    this
                }
                ,
                t.prototype.fromMatrix = function(e) {
                    var i = this.scaleX
                      , n = this.scaleY
                      , r = t.PI_Q;
                    this.x = e.tx,
                    this.y = e.ty,
                    this.rotation = Math.atan(e.b / e.a);
                    var s = Math.atan(-e.c / e.d);
                    return this.scaleX = this.rotation > -r && this.rotation < r ? e.a / Math.cos(this.rotation) : e.b / Math.sin(this.rotation),
                    this.scaleY = s > -r && s < r ? e.d / Math.cos(s) : -e.c / Math.sin(s),
                    i >= 0 && this.scaleX < 0 && (this.scaleX = -this.scaleX,
                    this.rotation = this.rotation - Math.PI),
                    n >= 0 && this.scaleY < 0 && (this.scaleY = -this.scaleY,
                    s -= Math.PI),
                    this.skew = s - this.rotation,
                    this
                }
                ,
                t.prototype.toMatrix = function(t) {
                    return 0 === this.rotation ? (t.a = 1,
                    t.b = 0) : (t.a = Math.cos(this.rotation),
                    t.b = Math.sin(this.rotation)),
                    0 === this.skew ? (t.c = -t.b,
                    t.d = t.a) : (t.c = -Math.sin(this.skew + this.rotation),
                    t.d = Math.cos(this.skew + this.rotation)),
                    1 !== this.scaleX && (t.a *= this.scaleX,
                    t.b *= this.scaleX),
                    1 !== this.scaleY && (t.c *= this.scaleY,
                    t.d *= this.scaleY),
                    t.tx = this.x,
                    t.ty = this.y,
                    this
                }
                ,
                t.PI = Math.PI,
                t.PI_D = 2 * Math.PI,
                t.PI_H = Math.PI / 2,
                t.PI_Q = Math.PI / 4,
                t.RAD_DEG = 180 / Math.PI,
                t.DEG_RAD = Math.PI / 180,
                t
            }
            )();
            t.Transform = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t, e, i, n, r, s, a, o) {
                    void 0 === t && (t = 1),
                    void 0 === e && (e = 1),
                    void 0 === i && (i = 1),
                    void 0 === n && (n = 1),
                    void 0 === r && (r = 0),
                    void 0 === s && (s = 0),
                    void 0 === a && (a = 0),
                    void 0 === o && (o = 0),
                    this.alphaMultiplier = t,
                    this.redMultiplier = e,
                    this.greenMultiplier = i,
                    this.blueMultiplier = n,
                    this.alphaOffset = r,
                    this.redOffset = s,
                    this.greenOffset = a,
                    this.blueOffset = o
                }
                return t.prototype.copyFrom = function(t) {
                    this.alphaMultiplier = t.alphaMultiplier,
                    this.redMultiplier = t.redMultiplier,
                    this.greenMultiplier = t.greenMultiplier,
                    this.blueMultiplier = t.blueMultiplier,
                    this.alphaOffset = t.alphaOffset,
                    this.redOffset = t.redOffset,
                    this.greenOffset = t.greenOffset,
                    this.blueOffset = t.blueOffset
                }
                ,
                t.prototype.identity = function() {
                    this.alphaMultiplier = this.redMultiplier = this.greenMultiplier = this.blueMultiplier = 1,
                    this.alphaOffset = this.redOffset = this.greenOffset = this.blueOffset = 0
                }
                ,
                t
            }
            )();
            t.ColorTransform = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t, e) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    this.x = t,
                    this.y = e
                }
                return t.prototype.copyFrom = function(t) {
                    this.x = t.x,
                    this.y = t.y
                }
                ,
                t.prototype.clear = function() {
                    this.x = this.y = 0
                }
                ,
                t
            }
            )();
            t.Point = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t, e, i, n) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    void 0 === n && (n = 0),
                    this.x = t,
                    this.y = e,
                    this.width = i,
                    this.height = n
                }
                return t.prototype.copyFrom = function(t) {
                    this.x = t.x,
                    this.y = t.y,
                    this.width = t.width,
                    this.height = t.height
                }
                ,
                t.prototype.clear = function() {
                    this.x = this.y = 0,
                    this.width = this.height = 0
                }
                ,
                t
            }
            )();
            t.Rectangle = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.ints = [],
                    e.floats = [],
                    e.strings = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.UserData]"
                }
                ,
                e.prototype._onClear = function() {
                    this.ints.length = 0,
                    this.floats.length = 0,
                    this.strings.length = 0
                }
                ,
                e.prototype.addInt = function(t) {
                    this.ints.push(t)
                }
                ,
                e.prototype.addFloat = function(t) {
                    this.floats.push(t)
                }
                ,
                e.prototype.addString = function(t) {
                    this.strings.push(t)
                }
                ,
                e.prototype.getInt = function(t) {
                    return void 0 === t && (t = 0),
                    t >= 0 && t < this.ints.length ? this.ints[t] : 0
                }
                ,
                e.prototype.getFloat = function(t) {
                    return void 0 === t && (t = 0),
                    t >= 0 && t < this.floats.length ? this.floats[t] : 0
                }
                ,
                e.prototype.getString = function(t) {
                    return void 0 === t && (t = 0),
                    t >= 0 && t < this.strings.length ? this.strings[t] : ""
                }
                ,
                e
            }
            )(t.BaseObject);
            t.UserData = e;
            var i = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.data = null,
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.ActionData]"
                }
                ,
                e.prototype._onClear = function() {
                    null !== this.data && this.data.returnToPool(),
                    this.type = 0,
                    this.name = "",
                    this.bone = null,
                    this.slot = null,
                    this.data = null
                }
                ,
                e
            }
            )(t.BaseObject);
            t.ActionData = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.frameIndices = [],
                    e.cachedFrames = [],
                    e.armatureNames = [],
                    e.armatures = {},
                    e.userData = null,
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.DragonBonesData]"
                }
                ,
                e.prototype._onClear = function() {
                    for (var t in this.armatures)
                        this.armatures[t].returnToPool(),
                        delete this.armatures[t];
                    null !== this.userData && this.userData.returnToPool(),
                    this.autoSearch = !1,
                    this.frameRate = 0,
                    this.version = "",
                    this.name = "",
                    this.stage = null,
                    this.frameIndices.length = 0,
                    this.cachedFrames.length = 0,
                    this.armatureNames.length = 0,
                    this.binary = null,
                    this.intArray = null,
                    this.floatArray = null,
                    this.frameIntArray = null,
                    this.frameFloatArray = null,
                    this.frameArray = null,
                    this.timelineArray = null,
                    this.userData = null
                }
                ,
                e.prototype.addArmature = function(t) {
                    t.name in this.armatures ? console.warn("Same armature: " + t.name) : (t.parent = this,
                    this.armatures[t.name] = t,
                    this.armatureNames.push(t.name))
                }
                ,
                e.prototype.getArmature = function(t) {
                    return t in this.armatures ? this.armatures[t] : null
                }
                ,
                e.prototype.dispose = function() {
                    console.warn("\u5df2\u5e9f\u5f03"),
                    this.returnToPool()
                }
                ,
                e
            }
            )(t.BaseObject);
            t.DragonBonesData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.aabb = new t.Rectangle,
                    i.animationNames = [],
                    i.sortedBones = [],
                    i.sortedSlots = [],
                    i.defaultActions = [],
                    i.actions = [],
                    i.bones = {},
                    i.slots = {},
                    i.constraints = {},
                    i.skins = {},
                    i.animations = {},
                    i.canvas = null,
                    i.userData = null,
                    i
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.ArmatureData]"
                }
                ,
                i.prototype._onClear = function() {
                    for (var t = 0, e = this.defaultActions; t < e.length; t++)
                        e[t].returnToPool();
                    for (var i = 0, n = this.actions; i < n.length; i++)
                        n[i].returnToPool();
                    for (var r in this.bones)
                        this.bones[r].returnToPool(),
                        delete this.bones[r];
                    for (var r in this.slots)
                        this.slots[r].returnToPool(),
                        delete this.slots[r];
                    for (var r in this.constraints)
                        this.constraints[r].returnToPool(),
                        delete this.constraints[r];
                    for (var r in this.skins)
                        this.skins[r].returnToPool(),
                        delete this.skins[r];
                    for (var r in this.animations)
                        this.animations[r].returnToPool(),
                        delete this.animations[r];
                    null !== this.canvas && this.canvas.returnToPool(),
                    null !== this.userData && this.userData.returnToPool(),
                    this.type = 0,
                    this.frameRate = 0,
                    this.cacheFrameRate = 0,
                    this.scale = 1,
                    this.name = "",
                    this.aabb.clear(),
                    this.animationNames.length = 0,
                    this.sortedBones.length = 0,
                    this.sortedSlots.length = 0,
                    this.defaultActions.length = 0,
                    this.actions.length = 0,
                    this.defaultSkin = null,
                    this.defaultAnimation = null,
                    this.canvas = null,
                    this.userData = null,
                    this.parent = null
                }
                ,
                i.prototype.sortBones = function() {
                    var t = this.sortedBones.length;
                    if (!(t <= 0)) {
                        var e = this.sortedBones.concat()
                          , i = 0
                          , n = 0;
                        for (this.sortedBones.length = 0; n < t; ) {
                            var r = e[i++];
                            if (i >= t && (i = 0),
                            !(this.sortedBones.indexOf(r) >= 0)) {
                                var s = !1;
                                for (var a in this.constraints) {
                                    var o = this.constraints[a];
                                    if (o.root === r && this.sortedBones.indexOf(o.target) < 0) {
                                        s = !0;
                                        break
                                    }
                                }
                                s || null !== r.parent && this.sortedBones.indexOf(r.parent) < 0 || (this.sortedBones.push(r),
                                n++)
                            }
                        }
                    }
                }
                ,
                i.prototype.cacheFrames = function(t) {
                    if (!(this.cacheFrameRate > 0))
                        for (var e in this.cacheFrameRate = t,
                        this.animations)
                            this.animations[e].cacheFrames(this.cacheFrameRate)
                }
                ,
                i.prototype.setCacheFrame = function(t, e) {
                    var i = this.parent.cachedFrames
                      , n = i.length;
                    return i.length += 10,
                    i[n] = t.a,
                    i[n + 1] = t.b,
                    i[n + 2] = t.c,
                    i[n + 3] = t.d,
                    i[n + 4] = t.tx,
                    i[n + 5] = t.ty,
                    i[n + 6] = e.rotation,
                    i[n + 7] = e.skew,
                    i[n + 8] = e.scaleX,
                    i[n + 9] = e.scaleY,
                    n
                }
                ,
                i.prototype.getCacheFrame = function(t, e, i) {
                    var n = this.parent.cachedFrames;
                    t.a = n[i],
                    t.b = n[i + 1],
                    t.c = n[i + 2],
                    t.d = n[i + 3],
                    t.tx = n[i + 4],
                    t.ty = n[i + 5],
                    e.rotation = n[i + 6],
                    e.skew = n[i + 7],
                    e.scaleX = n[i + 8],
                    e.scaleY = n[i + 9],
                    e.x = t.tx,
                    e.y = t.ty
                }
                ,
                i.prototype.addBone = function(t) {
                    t.name in this.bones ? console.warn("Same bone: " + t.name) : (this.bones[t.name] = t,
                    this.sortedBones.push(t))
                }
                ,
                i.prototype.addSlot = function(t) {
                    t.name in this.slots ? console.warn("Same slot: " + t.name) : (this.slots[t.name] = t,
                    this.sortedSlots.push(t))
                }
                ,
                i.prototype.addConstraint = function(t) {
                    t.name in this.constraints ? console.warn("Same constraint: " + t.name) : this.constraints[t.name] = t
                }
                ,
                i.prototype.addSkin = function(t) {
                    t.name in this.skins ? console.warn("Same skin: " + t.name) : (t.parent = this,
                    this.skins[t.name] = t,
                    null === this.defaultSkin && (this.defaultSkin = t),
                    "default" === t.name && (this.defaultSkin = t))
                }
                ,
                i.prototype.addAnimation = function(t) {
                    t.name in this.animations ? console.warn("Same animation: " + t.name) : (t.parent = this,
                    this.animations[t.name] = t,
                    this.animationNames.push(t.name),
                    null === this.defaultAnimation && (this.defaultAnimation = t))
                }
                ,
                i.prototype.addAction = function(t, e) {
                    e ? this.defaultActions.push(t) : this.actions.push(t)
                }
                ,
                i.prototype.getBone = function(t) {
                    return t in this.bones ? this.bones[t] : null
                }
                ,
                i.prototype.getSlot = function(t) {
                    return t in this.slots ? this.slots[t] : null
                }
                ,
                i.prototype.getConstraint = function(t) {
                    return t in this.constraints ? this.constraints[t] : null
                }
                ,
                i.prototype.getSkin = function(t) {
                    return t in this.skins ? this.skins[t] : null
                }
                ,
                i.prototype.getMesh = function(t, e, i) {
                    var n = this.getSkin(t);
                    return null === n ? null : n.getDisplay(e, i)
                }
                ,
                i.prototype.getAnimation = function(t) {
                    return t in this.animations ? this.animations[t] : null
                }
                ,
                i
            }
            )(t.BaseObject);
            t.ArmatureData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.transform = new t.Transform,
                    i.userData = null,
                    i
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.BoneData]"
                }
                ,
                i.prototype._onClear = function() {
                    null !== this.userData && this.userData.returnToPool(),
                    this.inheritTranslation = !1,
                    this.inheritRotation = !1,
                    this.inheritScale = !1,
                    this.inheritReflection = !1,
                    this.type = 0,
                    this.length = 0,
                    this.name = "",
                    this.transform.identity(),
                    this.userData = null,
                    this.parent = null
                }
                ,
                i
            }
            )(t.BaseObject);
            t.BoneData = i;
            var n = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.SurfaceData]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 1,
                    this.segmentX = 0,
                    this.segmentY = 0,
                    this.vertices.length = 0
                }
                ,
                e
            }
            )(i);
            t.SurfaceData = n;
            var r = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t.color = null,
                    t.userData = null,
                    t
                }
                return s(i, e),
                i.createColor = function() {
                    return new t.ColorTransform
                }
                ,
                i.toString = function() {
                    return "[class dragonBones.SlotData]"
                }
                ,
                i.prototype._onClear = function() {
                    null !== this.userData && this.userData.returnToPool(),
                    this.blendMode = 0,
                    this.displayIndex = 0,
                    this.zOrder = 0,
                    this.name = "",
                    this.color = null,
                    this.userData = null,
                    this.parent = null
                }
                ,
                i.DEFAULT_COLOR = new t.ColorTransform,
                i
            }
            )(t.BaseObject);
            t.SlotData = r
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    this.order = 0,
                    this.name = "",
                    this.type = 0,
                    this.target = null,
                    this.root = null,
                    this.bone = null
                }
                ,
                e
            }
            )(t.BaseObject);
            t.ConstraintData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.IKConstraintData]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.scaleEnabled = !1,
                    this.bendPositive = !1,
                    this.weight = 1
                }
                ,
                e
            }
            )(e);
            t.IKConstraintData = i;
            var n = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.bones = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.PathConstraintData]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.pathSlot = null,
                    this.pathDisplayData = null,
                    this.bones.length = 0,
                    this.positionMode = 0,
                    this.spacingMode = 1,
                    this.rotateMode = 1,
                    this.position = 0,
                    this.spacing = 0,
                    this.rotateOffset = 0,
                    this.rotateMix = 0,
                    this.translateMix = 0
                }
                ,
                e.prototype.AddBone = function(t) {
                    this.bones.push(t)
                }
                ,
                e
            }
            )(e);
            t.PathConstraintData = n
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.CanvasData]"
                }
                ,
                e.prototype._onClear = function() {
                    this.hasBackground = !1,
                    this.color = 0,
                    this.x = 0,
                    this.y = 0,
                    this.width = 0,
                    this.height = 0
                }
                ,
                e
            }
            )(t.BaseObject);
            t.CanvasData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.displays = {},
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.SkinData]"
                }
                ,
                e.prototype._onClear = function() {
                    for (var t in this.displays) {
                        for (var e = 0, i = this.displays[t]; e < i.length; e++) {
                            var n = i[e];
                            null !== n && n.returnToPool()
                        }
                        delete this.displays[t]
                    }
                    this.name = "",
                    this.parent = null
                }
                ,
                e.prototype.addDisplay = function(t, e) {
                    t in this.displays || (this.displays[t] = []),
                    null !== e && (e.parent = this),
                    this.displays[t].push(e)
                }
                ,
                e.prototype.getDisplay = function(t, e) {
                    var i = this.getDisplays(t);
                    if (null !== i)
                        for (var n = 0, r = i; n < r.length; n++) {
                            var s = r[n];
                            if (null !== s && s.name === e)
                                return s
                        }
                    return null
                }
                ,
                e.prototype.getDisplays = function(t) {
                    return t in this.displays ? this.displays[t] : null
                }
                ,
                e
            }
            )(t.BaseObject);
            t.SkinData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t() {
                    this.weight = null
                }
                return t.prototype.clear = function() {
                    this.isShared || null === this.weight || this.weight.returnToPool(),
                    this.isShared = !1,
                    this.inheritDeform = !1,
                    this.offset = 0,
                    this.data = null,
                    this.weight = null
                }
                ,
                t.prototype.shareFrom = function(t) {
                    this.isShared = !0,
                    this.offset = t.offset,
                    this.weight = t.weight
                }
                ,
                t
            }
            )();
            t.VerticesData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.transform = new t.Transform,
                    i
                }
                return s(i, e),
                i.prototype._onClear = function() {
                    this.name = "",
                    this.path = "",
                    this.transform.identity(),
                    this.parent = null
                }
                ,
                i
            }
            )(t.BaseObject);
            t.DisplayData = i;
            var n = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.pivot = new t.Point,
                    i
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.ImageDisplayData]"
                }
                ,
                i.prototype._onClear = function() {
                    e.prototype._onClear.call(this),
                    this.type = 0,
                    this.pivot.clear(),
                    this.texture = null
                }
                ,
                i
            }
            )(i);
            t.ImageDisplayData = n;
            var r = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.actions = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.ArmatureDisplayData]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this);
                    for (var e = 0, i = this.actions; e < i.length; e++)
                        i[e].returnToPool();
                    this.type = 1,
                    this.inheritAnimation = !1,
                    this.actions.length = 0,
                    this.armature = null
                }
                ,
                e.prototype.addAction = function(t) {
                    this.actions.push(t)
                }
                ,
                e
            }
            )(i);
            t.ArmatureDisplayData = r;
            var a = (function(t) {
                function i() {
                    var i = null !== t && t.apply(this, arguments) || this;
                    return i.vertices = new e,
                    i
                }
                return s(i, t),
                i.toString = function() {
                    return "[class dragonBones.MeshDisplayData]"
                }
                ,
                i.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 2,
                    this.vertices.clear(),
                    this.texture = null
                }
                ,
                i
            }
            )(i);
            t.MeshDisplayData = a;
            var o = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.boundingBox = null,
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.BoundingBoxDisplayData]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    null !== this.boundingBox && this.boundingBox.returnToPool(),
                    this.type = 3,
                    this.boundingBox = null
                }
                ,
                e
            }
            )(i);
            t.BoundingBoxDisplayData = o;
            var l = (function(t) {
                function i() {
                    var i = null !== t && t.apply(this, arguments) || this;
                    return i.vertices = new e,
                    i.curveLengths = [],
                    i
                }
                return s(i, t),
                i.toString = function() {
                    return "[class dragonBones.PathDisplayData]"
                }
                ,
                i.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 4,
                    this.closed = !1,
                    this.constantSpeed = !1,
                    this.vertices.clear(),
                    this.curveLengths.length = 0
                }
                ,
                i
            }
            )(i);
            t.PathDisplayData = l;
            var h = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.bones = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.WeightData]"
                }
                ,
                e.prototype._onClear = function() {
                    this.count = 0,
                    this.offset = 0,
                    this.bones.length = 0
                }
                ,
                e.prototype.addBone = function(t) {
                    this.bones.push(t)
                }
                ,
                e
            }
            )(t.BaseObject);
            t.WeightData = h
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    this.color = 0,
                    this.width = 0,
                    this.height = 0
                }
                ,
                e
            }
            )(t.BaseObject);
            t.BoundingBoxData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.RectangleBoundingBoxData]"
                }
                ,
                e._computeOutCode = function(t, e, i, n, r, s) {
                    var a = 0;
                    return t < i ? a |= 1 : t > r && (a |= 2),
                    e < n ? a |= 4 : e > s && (a |= 8),
                    a
                }
                ,
                e.rectangleIntersectsSegment = function(t, i, n, r, s, a, o, l, h, c, u) {
                    void 0 === h && (h = null),
                    void 0 === c && (c = null),
                    void 0 === u && (u = null);
                    var _ = t > s && t < o && i > a && i < l
                      , f = n > s && n < o && r > a && r < l;
                    if (_ && f)
                        return -1;
                    for (var d = 0, p = e._computeOutCode(t, i, s, a, o, l), m = e._computeOutCode(n, r, s, a, o, l); ; ) {
                        if (0 == (p | m)) {
                            d = 2;
                            break
                        }
                        if (0 != (p & m))
                            break;
                        var y = 0
                          , v = 0
                          , g = 0
                          , A = 0 !== p ? p : m;
                        0 != (4 & A) ? (y = t + (n - t) * (a - i) / (r - i),
                        v = a,
                        null !== u && (g = .5 * -Math.PI)) : 0 != (8 & A) ? (y = t + (n - t) * (l - i) / (r - i),
                        v = l,
                        null !== u && (g = .5 * Math.PI)) : 0 != (2 & A) ? (v = i + (r - i) * (o - t) / (n - t),
                        y = o,
                        null !== u && (g = 0)) : 0 != (1 & A) && (v = i + (r - i) * (s - t) / (n - t),
                        y = s,
                        null !== u && (g = Math.PI)),
                        A === p ? (t = y,
                        i = v,
                        p = e._computeOutCode(t, i, s, a, o, l),
                        null !== u && (u.x = g)) : (n = y,
                        r = v,
                        m = e._computeOutCode(n, r, s, a, o, l),
                        null !== u && (u.y = g))
                    }
                    return d && (_ ? (d = 2,
                    null !== h && (h.x = n,
                    h.y = r),
                    null !== c && (c.x = n,
                    c.y = n),
                    null !== u && (u.x = u.y + Math.PI)) : f ? (d = 1,
                    null !== h && (h.x = t,
                    h.y = i),
                    null !== c && (c.x = t,
                    c.y = i),
                    null !== u && (u.y = u.x + Math.PI)) : (d = 3,
                    null !== h && (h.x = t,
                    h.y = i),
                    null !== c && (c.x = n,
                    c.y = r))),
                    d
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 0
                }
                ,
                e.prototype.containsPoint = function(t, e) {
                    var i = .5 * this.width;
                    if (t >= -i && t <= i) {
                        var n = .5 * this.height;
                        if (e >= -n && e <= n)
                            return !0
                    }
                    return !1
                }
                ,
                e.prototype.intersectsSegment = function(t, i, n, r, s, a, o) {
                    void 0 === s && (s = null),
                    void 0 === a && (a = null),
                    void 0 === o && (o = null);
                    var l = .5 * this.width
                      , h = .5 * this.height;
                    return e.rectangleIntersectsSegment(t, i, n, r, -l, -h, l, h, s, a, o)
                }
                ,
                e
            }
            )(e);
            t.RectangleBoundingBoxData = i;
            var n = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.EllipseData]"
                }
                ,
                e.ellipseIntersectsSegment = function(t, e, i, n, r, s, a, o, l, h, c) {
                    void 0 === l && (l = null),
                    void 0 === h && (h = null),
                    void 0 === c && (c = null);
                    var u = a / o
                      , _ = u * u
                      , f = i - t
                      , d = (n *= u) - (e *= u)
                      , p = Math.sqrt(f * f + d * d)
                      , m = f / p
                      , y = d / p
                      , v = (r - t) * m + (s - e) * y
                      , g = a * a
                      , A = g - (t * t + e * e) + v * v
                      , x = 0;
                    if (A >= 0) {
                        var b = Math.sqrt(A)
                          , C = v - b
                          , T = v + b
                          , S = C < 0 ? -1 : C <= p ? 0 : 1
                          , w = T < 0 ? -1 : T <= p ? 0 : 1
                          , E = S * w;
                        if (E < 0)
                            return -1;
                        0 === E && (-1 === S ? (x = 2,
                        i = t + T * m,
                        n = (e + T * y) / u,
                        null !== l && (l.x = i,
                        l.y = n),
                        null !== h && (h.x = i,
                        h.y = n),
                        null !== c && (c.x = Math.atan2(n / g * _, i / g),
                        c.y = c.x + Math.PI)) : 1 === w ? (x = 1,
                        t += C * m,
                        e = (e + C * y) / u,
                        null !== l && (l.x = t,
                        l.y = e),
                        null !== h && (h.x = t,
                        h.y = e),
                        null !== c && (c.x = Math.atan2(e / g * _, t / g),
                        c.y = c.x + Math.PI)) : (x = 3,
                        null !== l && (l.x = t + C * m,
                        l.y = (e + C * y) / u,
                        null !== c && (c.x = Math.atan2(l.y / g * _, l.x / g))),
                        null !== h && (h.x = t + T * m,
                        h.y = (e + T * y) / u,
                        null !== c && (c.y = Math.atan2(h.y / g * _, h.x / g)))))
                    }
                    return x
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 1
                }
                ,
                e.prototype.containsPoint = function(t, e) {
                    var i = .5 * this.width;
                    if (t >= -i && t <= i) {
                        var n = .5 * this.height;
                        if (e >= -n && e <= n)
                            return e *= i / n,
                            Math.sqrt(t * t + e * e) <= i
                    }
                    return !1
                }
                ,
                e.prototype.intersectsSegment = function(t, i, n, r, s, a, o) {
                    return void 0 === s && (s = null),
                    void 0 === a && (a = null),
                    void 0 === o && (o = null),
                    e.ellipseIntersectsSegment(t, i, n, r, 0, 0, .5 * this.width, .5 * this.height, s, a, o)
                }
                ,
                e
            }
            )(e);
            t.EllipseBoundingBoxData = n;
            var r = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.PolygonBoundingBoxData]"
                }
                ,
                e.polygonIntersectsSegment = function(t, e, i, n, r, s, a, o) {
                    void 0 === s && (s = null),
                    void 0 === a && (a = null),
                    void 0 === o && (o = null),
                    t === i && (t = i + 1e-6),
                    e === n && (e = n + 1e-6);
                    for (var l = r.length, h = t - i, c = e - n, u = t * n - e * i, _ = 0, f = r[l - 2], d = r[l - 1], p = 0, m = 0, y = 0, v = 0, g = 0, A = 0, x = 0; x < l; x += 2) {
                        var b = r[x]
                          , C = r[x + 1];
                        f === b && (f = b + 1e-4),
                        d === C && (d = C + 1e-4);
                        var T = f - b
                          , S = d - C
                          , w = f * C - d * b
                          , E = h * S - c * T
                          , M = (u * T - h * w) / E;
                        if ((M >= f && M <= b || M >= b && M <= f) && (0 === h || M >= t && M <= i || M >= i && M <= t)) {
                            var D = (u * S - c * w) / E;
                            if ((D >= d && D <= C || D >= C && D <= d) && (0 === c || D >= e && D <= n || D >= n && D <= e)) {
                                if (null === a) {
                                    y = M,
                                    v = D,
                                    g = M,
                                    A = D,
                                    _++,
                                    null !== o && (o.x = Math.atan2(C - d, b - f) - .5 * Math.PI,
                                    o.y = o.x);
                                    break
                                }
                                var B = M - t;
                                B < 0 && (B = -B),
                                0 === _ ? (p = B,
                                m = B,
                                y = M,
                                v = D,
                                g = M,
                                A = D,
                                null !== o && (o.x = Math.atan2(C - d, b - f) - .5 * Math.PI,
                                o.y = o.x)) : (B < p && (p = B,
                                y = M,
                                v = D,
                                null !== o && (o.x = Math.atan2(C - d, b - f) - .5 * Math.PI)),
                                B > m && (m = B,
                                g = M,
                                A = D,
                                null !== o && (o.y = Math.atan2(C - d, b - f) - .5 * Math.PI))),
                                _++
                            }
                        }
                        f = b,
                        d = C
                    }
                    return 1 === _ ? (null !== s && (s.x = y,
                    s.y = v),
                    null !== a && (a.x = y,
                    a.y = v),
                    null !== o && (o.y = o.x + Math.PI)) : _ > 1 && (_++,
                    null !== s && (s.x = y,
                    s.y = v),
                    null !== a && (a.x = g,
                    a.y = A)),
                    _
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.type = 2,
                    this.x = 0,
                    this.y = 0,
                    this.vertices.length = 0
                }
                ,
                e.prototype.containsPoint = function(t, e) {
                    var i = !1;
                    if (t >= this.x && t <= this.width && e >= this.y && e <= this.height)
                        for (var n = 0, r = this.vertices.length, s = r - 2; n < r; n += 2) {
                            var a = this.vertices[s + 1]
                              , o = this.vertices[n + 1];
                            if (o < e && a >= e || a < e && o >= e) {
                                var l = this.vertices[s]
                                  , h = this.vertices[n];
                                (e - o) * (l - h) / (a - o) + h < t && (i = !i)
                            }
                            s = n
                        }
                    return i
                }
                ,
                e.prototype.intersectsSegment = function(t, n, r, s, a, o, l) {
                    void 0 === a && (a = null),
                    void 0 === o && (o = null),
                    void 0 === l && (l = null);
                    var h = 0;
                    return 0 !== i.rectangleIntersectsSegment(t, n, r, s, this.x, this.y, this.x + this.width, this.y + this.height, null, null, null) && (h = e.polygonIntersectsSegment(t, n, r, s, this.vertices, a, o, l)),
                    h
                }
                ,
                e
            }
            )(e);
            t.PolygonBoundingBoxData = r
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.cachedFrames = [],
                    e.boneTimelines = {},
                    e.surfaceTimelines = {},
                    e.slotTimelines = {},
                    e.constraintTimelines = {},
                    e.animationTimelines = {},
                    e.boneCachedFrameIndices = {},
                    e.slotCachedFrameIndices = {},
                    e.actionTimeline = null,
                    e.zOrderTimeline = null,
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.AnimationData]"
                }
                ,
                e.prototype._onClear = function() {
                    for (var t in this.boneTimelines) {
                        for (var e = 0, i = this.boneTimelines[t]; e < i.length; e++)
                            i[e].returnToPool();
                        delete this.boneTimelines[t]
                    }
                    for (var t in this.surfaceTimelines) {
                        for (var n = 0, r = this.surfaceTimelines[t]; n < r.length; n++)
                            r[n].returnToPool();
                        delete this.surfaceTimelines[t]
                    }
                    for (var t in this.slotTimelines) {
                        for (var s = 0, a = this.slotTimelines[t]; s < a.length; s++)
                            a[s].returnToPool();
                        delete this.slotTimelines[t]
                    }
                    for (var t in this.constraintTimelines) {
                        for (var o = 0, l = this.constraintTimelines[t]; o < l.length; o++)
                            l[o].returnToPool();
                        delete this.constraintTimelines[t]
                    }
                    for (var t in this.animationTimelines) {
                        for (var h = 0, c = this.animationTimelines[t]; h < c.length; h++)
                            c[h].returnToPool();
                        delete this.animationTimelines[t]
                    }
                    for (var t in this.boneCachedFrameIndices)
                        delete this.boneCachedFrameIndices[t];
                    for (var t in this.slotCachedFrameIndices)
                        delete this.slotCachedFrameIndices[t];
                    null !== this.actionTimeline && this.actionTimeline.returnToPool(),
                    null !== this.zOrderTimeline && this.zOrderTimeline.returnToPool(),
                    this.frameIntOffset = 0,
                    this.frameFloatOffset = 0,
                    this.frameOffset = 0,
                    this.frameCount = 0,
                    this.playTimes = 0,
                    this.duration = 0,
                    this.scale = 1,
                    this.fadeInTime = 0,
                    this.cacheFrameRate = 0,
                    this.name = "",
                    this.cachedFrames.length = 0,
                    this.actionTimeline = null,
                    this.zOrderTimeline = null,
                    this.parent = null
                }
                ,
                e.prototype.cacheFrames = function(t) {
                    if (!(this.cacheFrameRate > 0)) {
                        this.cacheFrameRate = Math.max(Math.ceil(t * this.scale), 1);
                        var e = Math.ceil(this.cacheFrameRate * this.duration) + 1;
                        this.cachedFrames.length = e;
                        for (var i = 0, n = this.cacheFrames.length; i < n; ++i)
                            this.cachedFrames[i] = !1;
                        for (var r = 0, s = this.parent.sortedBones; r < s.length; r++) {
                            var a = s[r];
                            for (i = 0,
                            n = (h = new Array(e)).length; i < n; ++i)
                                h[i] = -1;
                            this.boneCachedFrameIndices[a.name] = h
                        }
                        for (var o = 0, l = this.parent.sortedSlots; o < l.length; o++) {
                            var h, c = l[o];
                            for (i = 0,
                            n = (h = new Array(e)).length; i < n; ++i)
                                h[i] = -1;
                            this.slotCachedFrameIndices[c.name] = h
                        }
                    }
                }
                ,
                e.prototype.addBoneTimeline = function(t, e) {
                    var i = t.name in this.boneTimelines ? this.boneTimelines[t.name] : this.boneTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }
                ,
                e.prototype.addSurfaceTimeline = function(t, e) {
                    var i = t.name in this.surfaceTimelines ? this.surfaceTimelines[t.name] : this.surfaceTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }
                ,
                e.prototype.addSlotTimeline = function(t, e) {
                    var i = t.name in this.slotTimelines ? this.slotTimelines[t.name] : this.slotTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }
                ,
                e.prototype.addConstraintTimeline = function(t, e) {
                    var i = t.name in this.constraintTimelines ? this.constraintTimelines[t.name] : this.constraintTimelines[t.name] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }
                ,
                e.prototype.addAnimationTimeline = function(t, e) {
                    var i = t in this.animationTimelines ? this.animationTimelines[t] : this.animationTimelines[t] = [];
                    i.indexOf(e) < 0 && i.push(e)
                }
                ,
                e.prototype.getBoneTimelines = function(t) {
                    return t in this.boneTimelines ? this.boneTimelines[t] : null
                }
                ,
                e.prototype.getSurfaceTimelines = function(t) {
                    return t in this.surfaceTimelines ? this.surfaceTimelines[t] : null
                }
                ,
                e.prototype.getSlotTimelines = function(t) {
                    return t in this.slotTimelines ? this.slotTimelines[t] : null
                }
                ,
                e.prototype.getConstraintTimelines = function(t) {
                    return t in this.constraintTimelines ? this.constraintTimelines[t] : null
                }
                ,
                e.prototype.getAnimationTimelines = function(t) {
                    return t in this.animationTimelines ? this.animationTimelines[t] : null
                }
                ,
                e.prototype.getBoneCachedFrameIndices = function(t) {
                    return t in this.boneCachedFrameIndices ? this.boneCachedFrameIndices[t] : null
                }
                ,
                e.prototype.getSlotCachedFrameIndices = function(t) {
                    return t in this.slotCachedFrameIndices ? this.slotCachedFrameIndices[t] : null
                }
                ,
                e
            }
            )(t.BaseObject);
            t.AnimationData = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.TimelineData]"
                }
                ,
                e.prototype._onClear = function() {
                    this.type = 10,
                    this.offset = 0,
                    this.frameIndicesOffset = -1
                }
                ,
                e
            }
            )(t.BaseObject);
            t.TimelineData = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.boneMask = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.AnimationConfig]"
                }
                ,
                e.prototype._onClear = function() {
                    this.pauseFadeOut = !0,
                    this.fadeOutMode = 4,
                    this.fadeOutTweenType = 1,
                    this.fadeOutTime = -1,
                    this.actionEnabled = !0,
                    this.additiveBlending = !1,
                    this.displayControl = !0,
                    this.pauseFadeIn = !0,
                    this.resetToPose = !0,
                    this.fadeInTweenType = 1,
                    this.playTimes = -1,
                    this.layer = 0,
                    this.position = 0,
                    this.duration = -1,
                    this.timeScale = -100,
                    this.weight = 1,
                    this.fadeInTime = -1,
                    this.autoFadeOutTime = -1,
                    this.name = "",
                    this.animation = "",
                    this.group = "",
                    this.boneMask.length = 0
                }
                ,
                e.prototype.clear = function() {
                    this._onClear()
                }
                ,
                e.prototype.copyFrom = function(t) {
                    this.pauseFadeOut = t.pauseFadeOut,
                    this.fadeOutMode = t.fadeOutMode,
                    this.autoFadeOutTime = t.autoFadeOutTime,
                    this.fadeOutTweenType = t.fadeOutTweenType,
                    this.actionEnabled = t.actionEnabled,
                    this.additiveBlending = t.additiveBlending,
                    this.displayControl = t.displayControl,
                    this.pauseFadeIn = t.pauseFadeIn,
                    this.resetToPose = t.resetToPose,
                    this.playTimes = t.playTimes,
                    this.layer = t.layer,
                    this.position = t.position,
                    this.duration = t.duration,
                    this.timeScale = t.timeScale,
                    this.fadeInTime = t.fadeInTime,
                    this.fadeOutTime = t.fadeOutTime,
                    this.fadeInTweenType = t.fadeInTweenType,
                    this.weight = t.weight,
                    this.name = t.name,
                    this.animation = t.animation,
                    this.group = t.group,
                    this.boneMask.length = t.boneMask.length;
                    for (var e = 0, i = this.boneMask.length; e < i; ++e)
                        this.boneMask[e] = t.boneMask[e]
                }
                ,
                e.prototype.containsBoneMask = function(t) {
                    return 0 === this.boneMask.length || this.boneMask.indexOf(t) >= 0
                }
                ,
                e.prototype.addBoneMask = function(t, e, i) {
                    void 0 === i && (i = !0);
                    var n = t.getBone(e);
                    if (null !== n && (this.boneMask.indexOf(e) < 0 && this.boneMask.push(e),
                    i))
                        for (var r = 0, s = t.getBones(); r < s.length; r++) {
                            var a = s[r];
                            this.boneMask.indexOf(a.name) < 0 && n.contains(a) && this.boneMask.push(a.name)
                        }
                }
                ,
                e.prototype.removeBoneMask = function(t, e, i) {
                    void 0 === i && (i = !0);
                    var n = this.boneMask.indexOf(e);
                    if (n >= 0 && this.boneMask.splice(n, 1),
                    i) {
                        var r = t.getBone(e);
                        if (null !== r)
                            if (this.boneMask.length > 0)
                                for (var s = 0, a = t.getBones(); s < a.length; s++) {
                                    var o = a[s]
                                      , l = this.boneMask.indexOf(o.name);
                                    l >= 0 && r.contains(o) && this.boneMask.splice(l, 1)
                                }
                            else
                                for (var h = 0, c = t.getBones(); h < c.length; h++)
                                    (o = c[h]) !== r && (r.contains(o) || this.boneMask.push(o.name))
                    }
                }
                ,
                e
            }
            )(t.BaseObject);
            t.AnimationConfig = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.textures = {},
                    e
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    for (var t in this.textures)
                        this.textures[t].returnToPool(),
                        delete this.textures[t];
                    this.autoSearch = !1,
                    this.width = 0,
                    this.height = 0,
                    this.scale = 1,
                    this.name = "",
                    this.imagePath = ""
                }
                ,
                e.prototype.copyFrom = function(t) {
                    for (var e in this.autoSearch = t.autoSearch,
                    this.scale = t.scale,
                    this.width = t.width,
                    this.height = t.height,
                    this.name = t.name,
                    this.imagePath = t.imagePath,
                    this.textures)
                        this.textures[e].returnToPool(),
                        delete this.textures[e];
                    for (var e in t.textures) {
                        var i = this.createTexture();
                        i.copyFrom(t.textures[e]),
                        this.textures[e] = i
                    }
                }
                ,
                e.prototype.addTexture = function(t) {
                    t.name in this.textures ? console.warn("Same texture: " + t.name) : (t.parent = this,
                    this.textures[t.name] = t)
                }
                ,
                e.prototype.getTexture = function(t) {
                    return t in this.textures ? this.textures[t] : null
                }
                ,
                e
            }
            )(t.BaseObject);
            t.TextureAtlasData = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.region = new t.Rectangle,
                    i.frame = null,
                    i
                }
                return s(i, e),
                i.createRectangle = function() {
                    return new t.Rectangle
                }
                ,
                i.prototype._onClear = function() {
                    this.rotated = !1,
                    this.name = "",
                    this.region.clear(),
                    this.parent = null,
                    this.frame = null
                }
                ,
                i.prototype.copyFrom = function(t) {
                    this.rotated = t.rotated,
                    this.name = t.name,
                    this.region.copyFrom(t.region),
                    this.parent = t.parent,
                    null === this.frame && null !== t.frame ? this.frame = i.createRectangle() : null !== this.frame && null === t.frame && (this.frame = null),
                    null !== this.frame && null !== t.frame && this.frame.copyFrom(t.frame)
                }
                ,
                i
            }
            )(t.BaseObject);
            t.TextureData = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.vertices = [],
                    e.bones = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.DeformVertices]"
                }
                ,
                e.prototype._onClear = function() {
                    this.verticesDirty = !1,
                    this.vertices.length = 0,
                    this.bones.length = 0,
                    this.verticesData = null
                }
                ,
                e.prototype.init = function(t, e) {
                    if (this.verticesData = t,
                    null !== this.verticesData) {
                        var i;
                        i = null !== this.verticesData.weight ? 2 * this.verticesData.weight.count : 2 * this.verticesData.data.intArray[this.verticesData.offset + 0],
                        this.verticesDirty = !0,
                        this.vertices.length = i,
                        this.bones.length = 0;
                        for (var n = 0, r = this.vertices.length; n < r; ++n)
                            this.vertices[n] = 0;
                        if (null !== this.verticesData.weight)
                            for (n = 0,
                            r = this.verticesData.weight.bones.length; n < r; ++n) {
                                var s = e.getBone(this.verticesData.weight.bones[n].name);
                                this.bones.push(s)
                            }
                    } else
                        this.verticesDirty = !1,
                        this.vertices.length = 0,
                        this.bones.length = 0,
                        this.verticesData = null
                }
                ,
                e.prototype.isBonesUpdate = function() {
                    for (var t = 0, e = this.bones; t < e.length; t++) {
                        var i = e[t];
                        if (null !== i && i._childrenTransformDirty)
                            return !0
                    }
                    return !1
                }
                ,
                e
            }
            )(t.BaseObject);
            t.DeformVertices = e
        }
        )(r || (r = {})),
        n = (function(t) {
            function e() {
                var e = null !== t && t.apply(this, arguments) || this;
                return e._bones = [],
                e._slots = [],
                e._constraints = [],
                e._actions = [],
                e._animation = null,
                e._proxy = null,
                e._replaceTextureAtlasData = null,
                e._clock = null,
                e
            }
            return s(e, t),
            e.toString = function() {
                return "[class dragonBones.Armature]"
            }
            ,
            e._onSortSlots = function(t, e) {
                return t._zOrder > e._zOrder ? 1 : -1
            }
            ,
            e.prototype._onClear = function() {
                null !== this._clock && this._clock.remove(this);
                for (var t = 0, e = this._bones; t < e.length; t++)
                    e[t].returnToPool();
                for (var i = 0, n = this._slots; i < n.length; i++)
                    n[i].returnToPool();
                for (var r = 0, s = this._constraints; r < s.length; r++)
                    s[r].returnToPool();
                for (var a = 0, o = this._actions; a < o.length; a++)
                    o[a].returnToPool();
                null !== this._animation && this._animation.returnToPool(),
                null !== this._proxy && this._proxy.dbClear(),
                null !== this._replaceTextureAtlasData && this._replaceTextureAtlasData.returnToPool(),
                this.inheritAnimation = !0,
                this.userData = null,
                this._lockUpdate = !1,
                this._slotsDirty = !0,
                this._zOrderDirty = !1,
                this._flipX = !1,
                this._flipY = !1,
                this._cacheFrameIndex = -1,
                this._bones.length = 0,
                this._slots.length = 0,
                this._constraints.length = 0,
                this._actions.length = 0,
                this._armatureData = null,
                this._animation = null,
                this._proxy = null,
                this._display = null,
                this._replaceTextureAtlasData = null,
                this._replacedTexture = null,
                this._dragonBones = null,
                this._clock = null,
                this._parent = null
            }
            ,
            e.prototype._sortZOrder = function(t, e) {
                var i = this._armatureData.sortedSlots
                  , n = null === t;
                if (this._zOrderDirty || !n) {
                    for (var r = 0, s = i.length; r < s; ++r) {
                        var a = n ? r : t[e + r];
                        if (!(a < 0 || a >= s)) {
                            var o = i[a]
                              , l = this.getSlot(o.name);
                            null !== l && l._setZorder(r)
                        }
                    }
                    this._slotsDirty = !0,
                    this._zOrderDirty = !n
                }
            }
            ,
            e.prototype._addBone = function(t) {
                this._bones.indexOf(t) < 0 && this._bones.push(t)
            }
            ,
            e.prototype._addSlot = function(t) {
                this._slots.indexOf(t) < 0 && this._slots.push(t)
            }
            ,
            e.prototype._addConstraint = function(t) {
                this._constraints.indexOf(t) < 0 && this._constraints.push(t)
            }
            ,
            e.prototype._bufferAction = function(t, e) {
                this._actions.indexOf(t) < 0 && (e ? this._actions.push(t) : this._actions.unshift(t))
            }
            ,
            e.prototype.dispose = function() {
                null !== this._armatureData && (this._lockUpdate = !0,
                this._dragonBones.bufferObject(this))
            }
            ,
            e.prototype.init = function(t, e, n, r) {
                null === this._armatureData && (this._armatureData = t,
                this._animation = i.BaseObject.borrowObject(i.Animation),
                this._proxy = e,
                this._display = n,
                this._dragonBones = r,
                this._proxy.dbInit(this),
                this._animation.init(this),
                this._animation.animations = this._armatureData.animations)
            }
            ,
            e.prototype.advanceTime = function(t) {
                if (!this._lockUpdate)
                    if (null !== this._armatureData)
                        if (null !== this._armatureData.parent) {
                            var i = this._cacheFrameIndex;
                            if (this._animation.advanceTime(t),
                            this._slotsDirty && (this._slotsDirty = !1,
                            this._slots.sort(e._onSortSlots)),
                            this._cacheFrameIndex < 0 || this._cacheFrameIndex !== i) {
                                var n = 0
                                  , r = 0;
                                for (n = 0,
                                r = this._bones.length; n < r; ++n)
                                    this._bones[n].update(this._cacheFrameIndex);
                                for (n = 0,
                                r = this._slots.length; n < r; ++n)
                                    this._slots[n].update(this._cacheFrameIndex)
                            }
                            if (this._actions.length > 0) {
                                this._lockUpdate = !0;
                                for (var s = 0, a = this._actions; s < a.length; s++) {
                                    var o = a[s]
                                      , l = o.actionData;
                                    if (null !== l && 0 === l.type)
                                        if (null !== o.slot)
                                            null !== (u = o.slot.childArmature) && u.animation.fadeIn(l.name);
                                        else if (null !== o.bone)
                                            for (var h = 0, c = this.getSlots(); h < c.length; h++) {
                                                var u, _ = c[h];
                                                _.parent === o.bone && null !== (u = _.childArmature) && u.animation.fadeIn(l.name)
                                            }
                                        else
                                            this._animation.fadeIn(l.name);
                                    o.returnToPool()
                                }
                                this._actions.length = 0,
                                this._lockUpdate = !1
                            }
                            this._proxy.dbUpdate()
                        } else
                            console.warn("The armature data has been disposed.\nPlease make sure dispose armature before call factory.clear().");
                    else
                        console.warn("The armature has been disposed.")
            }
            ,
            e.prototype.invalidUpdate = function(t, e) {
                if (void 0 === t && (t = null),
                void 0 === e && (e = !1),
                null !== t && t.length > 0) {
                    if (null !== (a = this.getBone(t)) && (a.invalidUpdate(),
                    e))
                        for (var i = 0, n = this._slots; i < n.length; i++)
                            (h = n[i]).parent === a && h.invalidUpdate()
                } else {
                    for (var r = 0, s = this._bones; r < s.length; r++) {
                        var a;
                        (a = s[r]).invalidUpdate()
                    }
                    if (e)
                        for (var o = 0, l = this._slots; o < l.length; o++) {
                            var h;
                            (h = l[o]).invalidUpdate()
                        }
                }
            }
            ,
            e.prototype.containsPoint = function(t, e) {
                for (var i = 0, n = this._slots; i < n.length; i++) {
                    var r = n[i];
                    if (r.containsPoint(t, e))
                        return r
                }
                return null
            }
            ,
            e.prototype.intersectsSegment = function(t, e, i, n, r, s, a) {
                void 0 === r && (r = null),
                void 0 === s && (s = null),
                void 0 === a && (a = null);
                for (var o = t === i, l = 0, h = 0, c = 0, u = 0, _ = 0, f = 0, d = 0, p = 0, m = null, y = null, v = 0, g = this._slots; v < g.length; v++) {
                    var A = g[v];
                    if (A.intersectsSegment(t, e, i, n, r, s, a) > 0) {
                        if (null === r && null === s) {
                            m = A;
                            break
                        }
                        var x;
                        null !== r && ((x = o ? r.y - e : r.x - t) < 0 && (x = -x),
                        (null === m || x < l) && (l = x,
                        c = r.x,
                        u = r.y,
                        m = A,
                        a && (d = a.x))),
                        null !== s && ((x = s.x - t) < 0 && (x = -x),
                        (null === y || x > h) && (h = x,
                        _ = s.x,
                        f = s.y,
                        y = A,
                        null !== a && (p = a.y)))
                    }
                }
                return null !== m && null !== r && (r.x = c,
                r.y = u,
                null !== a && (a.x = d)),
                null !== y && null !== s && (s.x = _,
                s.y = f,
                null !== a && (a.y = p)),
                m
            }
            ,
            e.prototype.getBone = function(t) {
                for (var e = 0, i = this._bones; e < i.length; e++) {
                    var n = i[e];
                    if (n.name === t)
                        return n
                }
                return null
            }
            ,
            e.prototype.getBoneByDisplay = function(t) {
                var e = this.getSlotByDisplay(t);
                return null !== e ? e.parent : null
            }
            ,
            e.prototype.getSlot = function(t) {
                for (var e = 0, i = this._slots; e < i.length; e++) {
                    var n = i[e];
                    if (n.name === t)
                        return n
                }
                return null
            }
            ,
            e.prototype.getSlotByDisplay = function(t) {
                if (null !== t)
                    for (var e = 0, i = this._slots; e < i.length; e++) {
                        var n = i[e];
                        if (n.display === t)
                            return n
                    }
                return null
            }
            ,
            e.prototype.getBones = function() {
                return this._bones
            }
            ,
            e.prototype.getSlots = function() {
                return this._slots
            }
            ,
            Object.defineProperty(e.prototype, "flipX", {
                get: function() {
                    return this._flipX
                },
                set: function(t) {
                    this._flipX !== t && (this._flipX = t,
                    this.invalidUpdate())
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "flipY", {
                get: function() {
                    return this._flipY
                },
                set: function(t) {
                    this._flipY !== t && (this._flipY = t,
                    this.invalidUpdate())
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "cacheFrameRate", {
                get: function() {
                    return this._armatureData.cacheFrameRate
                },
                set: function(t) {
                    if (this._armatureData.cacheFrameRate !== t) {
                        this._armatureData.cacheFrames(t);
                        for (var e = 0, i = this._slots; e < i.length; e++) {
                            var n = i[e].childArmature;
                            null !== n && (n.cacheFrameRate = t)
                        }
                    }
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "name", {
                get: function() {
                    return this._armatureData.name
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "armatureData", {
                get: function() {
                    return this._armatureData
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "animation", {
                get: function() {
                    return this._animation
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "proxy", {
                get: function() {
                    return this._proxy
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "eventDispatcher", {
                get: function() {
                    return this._proxy
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "display", {
                get: function() {
                    return this._display
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "replacedTexture", {
                get: function() {
                    return this._replacedTexture
                },
                set: function(t) {
                    if (this._replacedTexture !== t) {
                        null !== this._replaceTextureAtlasData && (this._replaceTextureAtlasData.returnToPool(),
                        this._replaceTextureAtlasData = null),
                        this._replacedTexture = t;
                        for (var e = 0, i = this._slots; e < i.length; e++) {
                            var n = i[e];
                            n.invalidUpdate(),
                            n.update(-1)
                        }
                    }
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "clock", {
                get: function() {
                    return this._clock
                },
                set: function(t) {
                    if (this._clock !== t) {
                        null !== this._clock && this._clock.remove(this),
                        this._clock = t,
                        this._clock && this._clock.add(this);
                        for (var e = 0, i = this._slots; e < i.length; e++) {
                            var n = i[e].childArmature;
                            null !== n && (n.clock = this._clock)
                        }
                    }
                },
                enumerable: !0,
                configurable: !0
            }),
            Object.defineProperty(e.prototype, "parent", {
                get: function() {
                    return this._parent
                },
                enumerable: !0,
                configurable: !0
            }),
            e.prototype.replaceTexture = function(t) {
                this.replacedTexture = t
            }
            ,
            e.prototype.hasEventListener = function(t) {
                return this._proxy.hasDBEventListener(t)
            }
            ,
            e.prototype.addEventListener = function(t, e, i) {
                this._proxy.addDBEventListener(t, e, i)
            }
            ,
            e.prototype.removeEventListener = function(t, e, i) {
                this._proxy.removeDBEventListener(t, e, i)
            }
            ,
            e.prototype.enableAnimationCache = function(t) {
                console.warn("Deprecated."),
                this.cacheFrameRate = t
            }
            ,
            e.prototype.getDisplay = function() {
                return this._display
            }
            ,
            e
        }
        )((i = r || (r = {})).BaseObject),
        i.Armature = n,
        (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.globalTransformMatrix = new t.Matrix,
                    i.global = new t.Transform,
                    i.offset = new t.Transform,
                    i
                }
                return s(i, e),
                i.prototype._onClear = function() {
                    this.globalTransformMatrix.identity(),
                    this.global.identity(),
                    this.offset.identity(),
                    this.origin = null,
                    this.userData = null,
                    this._globalDirty = !1,
                    this._armature = null
                }
                ,
                i.prototype.updateGlobalTransform = function() {
                    this._globalDirty && (this._globalDirty = !1,
                    this.global.fromMatrix(this.globalTransformMatrix))
                }
                ,
                Object.defineProperty(i.prototype, "armature", {
                    get: function() {
                        return this._armature
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i._helpMatrix = new t.Matrix,
                i._helpTransform = new t.Transform,
                i._helpPoint = new t.Point,
                i
            }
            )(t.BaseObject);
            t.TransformObject = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.animationPose = new t.Transform,
                    i._blendState = new t.BlendState,
                    i
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.Bone]"
                }
                ,
                i.prototype._onClear = function() {
                    e.prototype._onClear.call(this),
                    this.offsetMode = 1,
                    this.animationPose.identity(),
                    this._transformDirty = !1,
                    this._childrenTransformDirty = !1,
                    this._localDirty = !0,
                    this._hasConstraint = !1,
                    this._visible = !0,
                    this._cachedFrameIndex = -1,
                    this._blendState.clear(),
                    this._boneData = null,
                    this._parent = null,
                    this._cachedFrameIndices = null
                }
                ,
                i.prototype._updateGlobalTransformMatrix = function(e) {
                    var i = this._boneData
                      , n = this.global
                      , r = this.globalTransformMatrix
                      , s = this.origin
                      , a = this.offset
                      , o = this.animationPose
                      , l = this._parent
                      , h = this._armature.flipX
                      , c = this._armature.flipY === t.DragonBones.yDown
                      , u = null !== l
                      , _ = 0;
                    if (1 === this.offsetMode ? null !== s ? (n.x = s.x + a.x + o.x,
                    n.scaleX = s.scaleX * a.scaleX * o.scaleX,
                    n.scaleY = s.scaleY * a.scaleY * o.scaleY,
                    t.DragonBones.yDown ? (n.y = s.y + a.y + o.y,
                    n.skew = s.skew + a.skew + o.skew,
                    n.rotation = s.rotation + a.rotation + o.rotation) : (n.y = s.y - a.y + o.y,
                    n.skew = s.skew - a.skew + o.skew,
                    n.rotation = s.rotation - a.rotation + o.rotation)) : (n.copyFrom(a),
                    t.DragonBones.yDown || (n.y = -n.y,
                    n.skew = -n.skew,
                    n.rotation = -n.rotation),
                    n.add(o)) : 0 === this.offsetMode ? null !== s ? n.copyFrom(s).add(o) : n.copyFrom(o) : (u = !1,
                    n.copyFrom(a),
                    t.DragonBones.yDown || (n.y = -n.y,
                    n.skew = -n.skew,
                    n.rotation = -n.rotation)),
                    u) {
                        var f = 0 === l._boneData.type ? l.globalTransformMatrix : l._getGlobalTransformMatrix(n.x, n.y);
                        if (i.inheritScale)
                            i.inheritRotation || (l.updateGlobalTransform(),
                            _ = h && c ? n.rotation - (l.global.rotation + Math.PI) : h ? n.rotation + l.global.rotation + Math.PI : c ? n.rotation + l.global.rotation : n.rotation - l.global.rotation,
                            n.rotation = _),
                            n.toMatrix(r),
                            r.concat(f),
                            i.inheritTranslation ? (n.x = r.tx,
                            n.y = r.ty) : (r.tx = n.x,
                            r.ty = n.y),
                            e ? n.fromMatrix(r) : this._globalDirty = !0;
                        else {
                            if (i.inheritTranslation) {
                                var d = n.x
                                  , p = n.y;
                                n.x = f.a * d + f.c * p + f.tx,
                                n.y = f.b * d + f.d * p + f.ty
                            } else
                                h && (n.x = -n.x),
                                c && (n.y = -n.y);
                            i.inheritRotation ? (l.updateGlobalTransform(),
                            _ = l.global.scaleX < 0 ? n.rotation + l.global.rotation + Math.PI : n.rotation + l.global.rotation,
                            f.a * f.d - f.b * f.c < 0 && (_ -= 2 * n.rotation,
                            (h !== c || i.inheritReflection) && (n.skew += Math.PI),
                            t.DragonBones.yDown || (n.skew = -n.skew)),
                            n.rotation = _) : (h || c) && (h && c ? _ = n.rotation + Math.PI : (_ = h ? Math.PI - n.rotation : -n.rotation,
                            n.skew += Math.PI),
                            n.rotation = _),
                            n.toMatrix(r)
                        }
                    } else
                        (h || c) && (h && (n.x = -n.x),
                        c && (n.y = -n.y),
                        h && c ? _ = n.rotation + Math.PI : (_ = h ? Math.PI - n.rotation : -n.rotation,
                        n.skew += Math.PI),
                        n.rotation = _),
                        n.toMatrix(r)
                }
                ,
                i.prototype.init = function(t, e) {
                    null === this._boneData && (this._boneData = t,
                    this._armature = e,
                    null !== this._boneData.parent && (this._parent = this._armature.getBone(this._boneData.parent.name)),
                    this._armature._addBone(this),
                    this.origin = this._boneData.transform)
                }
                ,
                i.prototype.update = function(t) {
                    if (this._blendState.dirty = !1,
                    t >= 0 && null !== this._cachedFrameIndices) {
                        var e = this._cachedFrameIndices[t];
                        if (e >= 0 && this._cachedFrameIndex === e)
                            this._transformDirty = !1;
                        else if (e >= 0)
                            this._transformDirty = !0,
                            this._cachedFrameIndex = e;
                        else {
                            if (this._hasConstraint)
                                for (var i = 0, n = this._armature._constraints; i < n.length; i++)
                                    (a = n[i])._root === this && a.update();
                            this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty ? (this._transformDirty = !0,
                            this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1,
                            this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0,
                            this._cachedFrameIndex = -1)
                        }
                    } else {
                        if (this._hasConstraint)
                            for (var r = 0, s = this._armature._constraints; r < s.length; r++) {
                                var a;
                                (a = s[r])._root === this && a.update()
                            }
                        (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && (t = -1,
                        this._transformDirty = !0,
                        this._cachedFrameIndex = -1)
                    }
                    if (this._transformDirty)
                        if (this._transformDirty = !1,
                        this._childrenTransformDirty = !0,
                        this._cachedFrameIndex < 0) {
                            var o = t >= 0;
                            this._localDirty && this._updateGlobalTransformMatrix(o),
                            o && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                        } else
                            this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                    else
                        this._childrenTransformDirty && (this._childrenTransformDirty = !1);
                    this._localDirty = !0
                }
                ,
                i.prototype.updateByConstraint = function() {
                    this._localDirty && (this._localDirty = !1,
                    (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && this._updateGlobalTransformMatrix(!0),
                    this._transformDirty = !0)
                }
                ,
                i.prototype.invalidUpdate = function() {
                    this._transformDirty = !0
                }
                ,
                i.prototype.contains = function(t) {
                    if (t === this)
                        return !1;
                    for (var e = t; e !== this && null !== e; )
                        e = e.parent;
                    return e === this
                }
                ,
                Object.defineProperty(i.prototype, "boneData", {
                    get: function() {
                        return this._boneData
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "visible", {
                    get: function() {
                        return this._visible
                    },
                    set: function(t) {
                        if (this._visible !== t) {
                            this._visible = t;
                            for (var e = 0, i = this._armature.getSlots(); e < i.length; e++) {
                                var n = i[e];
                                n.parent === this && n._updateVisible()
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._boneData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "parent", {
                    get: function() {
                        return this._parent
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i.prototype.getBones = function() {
                    console.warn("Deprecated.");
                    for (var t = new Array, e = 0, i = this._armature.getBones(); e < i.length; e++) {
                        var n = i[e];
                        n.parent === this && t.push(n)
                    }
                    return t
                }
                ,
                i.prototype.getSlots = function() {
                    console.warn("Deprecated.");
                    for (var t = new Array, e = 0, i = this._armature.getSlots(); e < i.length; e++) {
                        var n = i[e];
                        n.parent === this && t.push(n)
                    }
                    return t
                }
                ,
                Object.defineProperty(i.prototype, "slot", {
                    get: function() {
                        console.warn("Deprecated.");
                        for (var t = 0, e = this._armature.getSlots(); t < e.length; t++) {
                            var i = e[t];
                            if (i.parent === this)
                                return i
                        }
                        return null
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i
            }
            )(t.TransformObject);
            t.Bone = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._vertices = [],
                    e._deformVertices = [],
                    e._hullCache = [],
                    e._matrixCahce = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.Surface]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this._dX = 0,
                    this._dY = 0,
                    this._k = 0,
                    this._kX = 0,
                    this._kY = 0,
                    this._vertices.length = 0,
                    this._deformVertices.length = 0,
                    this._matrixCahce.length = 0,
                    this._hullCache.length = 0
                }
                ,
                e.prototype._getAffineTransform = function(t, e, i, n, r, s, a, o, l, h, c, u, _) {
                    var f = a - r
                      , d = o - s
                      , p = l - r
                      , m = h - s;
                    c.rotation = Math.atan2(d, f),
                    c.skew = Math.atan2(m, p) - .5 * Math.PI - c.rotation,
                    _ && (c.rotation += Math.PI),
                    c.scaleX = Math.sqrt(f * f + d * d) / i,
                    c.scaleY = Math.sqrt(p * p + m * m) / n,
                    c.toMatrix(u),
                    c.x = u.tx = r - (u.a * t + u.c * e),
                    c.y = u.ty = s - (u.b * t + u.d * e)
                }
                ,
                e.prototype._updateVertices = function() {
                    var t = this._boneData.vertices
                      , e = this._vertices
                      , i = this._deformVertices;
                    if (null !== this._parent)
                        if (1 === this._parent._boneData.type)
                            for (var n = 0, r = t.length; n < r; n += 2) {
                                var s = t[n] + i[n]
                                  , a = t[n + 1] + i[n]
                                  , o = this._parent._getGlobalTransformMatrix(s, a);
                                e[n] = o.a * s + o.c * a + o.tx,
                                e[n + 1] = o.b * s + o.d * a + o.ty
                            }
                        else {
                            var l = this._parent.globalTransformMatrix;
                            for (n = 0,
                            r = t.length; n < r; n += 2)
                                s = t[n] + i[n],
                                a = t[n + 1] + i[n + 1],
                                e[n] = l.a * s + l.c * a + l.tx,
                                e[n + 1] = l.b * s + l.d * a + l.ty
                        }
                    else
                        for (n = 0,
                        r = t.length; n < r; n += 2)
                            e[n] = t[n] + i[n],
                            e[n + 1] = t[n + 1] + i[n + 1]
                }
                ,
                e.prototype._updateGlobalTransformMatrix = function() {
                    var t = 2 * this._boneData.segmentX
                      , e = this._vertices.length - 2
                      , i = this._vertices[0]
                      , n = this._vertices[1]
                      , r = this._vertices[t]
                      , s = this._vertices[t + 1]
                      , a = this._vertices[e]
                      , o = this._vertices[e + 1]
                      , l = this._vertices[e - t]
                      , h = this._vertices[e - t + 1]
                      , c = i + .5 * (a - i)
                      , u = n + .5 * (o - n)
                      , _ = c + .5 * (r + .5 * (l - r) - c)
                      , f = u + .5 * (s + .5 * (h - s) - u)
                      , d = r + .5 * (a - r)
                      , p = s + .5 * (o - s)
                      , m = l + .5 * (a - l)
                      , y = h + .5 * (o - h);
                    this._globalDirty = !1,
                    this._getAffineTransform(0, 0, 200, 200, _, f, d, p, m, y, this.global, this.globalTransformMatrix, !1)
                }
                ,
                e.prototype._getGlobalTransformMatrix = function(t, i) {
                    var n = 1e3;
                    if (t < -n || n < t || i < -n || n < i)
                        return this.globalTransformMatrix;
                    var r = !1
                      , s = 200
                      , a = this._boneData
                      , o = a.segmentX
                      , l = a.segmentY
                      , h = 2 * a.segmentX
                      , c = this._dX
                      , u = this._dY
                      , _ = Math.floor((t + s) / c)
                      , f = Math.floor((i + s) / u)
                      , d = 0
                      , p = _ * c - s
                      , m = f * u - s
                      , y = this._matrixCahce
                      , v = e._helpMatrix;
                    if (t < -s) {
                        if (i < -s || i >= s)
                            return this.globalTransformMatrix;
                        if (d = 7 * (2 * (o * (l + 1) + 2 * o + l + f) + ((r = i > this._kX * (t + s) + m) ? 1 : 0)),
                        this._matrixCahce[d] > 0)
                            v.copyFromArray(y, d + 1);
                        else {
                            var g = f * (h + 2)
                              , A = this._hullCache[4]
                              , x = this._hullCache[5]
                              , b = this._hullCache[2] - (l - f) * A
                              , C = this._hullCache[3] - (l - f) * x
                              , T = this._vertices;
                            r ? this._getAffineTransform(-s, m + u, 800, u, T[g + h + 2], T[g + h + 3], b + A, C + x, T[g], T[g + 1], e._helpTransform, v, !0) : this._getAffineTransform(-n, m, 800, u, b, C, T[g], T[g + 1], b + A, C + x, e._helpTransform, v, !1),
                            y[d] = 1,
                            y[d + 1] = v.a,
                            y[d + 2] = v.b,
                            y[d + 3] = v.c,
                            y[d + 4] = v.d,
                            y[d + 5] = v.tx,
                            y[d + 6] = v.ty
                        }
                    } else if (t >= s) {
                        if (i < -s || i >= s)
                            return this.globalTransformMatrix;
                        d = 7 * (2 * (o * (l + 1) + o + f) + ((r = i > this._kX * (t - n) + m) ? 1 : 0)),
                        this._matrixCahce[d] > 0 ? v.copyFromArray(y, d + 1) : (g = (f + 1) * (h + 2) - 2,
                        A = this._hullCache[4],
                        x = this._hullCache[5],
                        b = this._hullCache[0] + f * A,
                        C = this._hullCache[1] + f * x,
                        T = this._vertices,
                        r ? this._getAffineTransform(n, m + u, 800, u, b + A, C + x, T[g + h + 2], T[g + h + 3], b, C, e._helpTransform, v, !0) : this._getAffineTransform(s, m, 800, u, T[g], T[g + 1], b, C, T[g + h + 2], T[g + h + 3], e._helpTransform, v, !1),
                        y[d] = 1,
                        y[d + 1] = v.a,
                        y[d + 2] = v.b,
                        y[d + 3] = v.c,
                        y[d + 4] = v.d,
                        y[d + 5] = v.tx,
                        y[d + 6] = v.ty)
                    } else if (i < -s) {
                        if (t < -s || t >= s)
                            return this.globalTransformMatrix;
                        d = 7 * (o * (l + 1) + 2 * _ + ((r = i > this._kY * (t - p - c) - n) ? 1 : 0)),
                        this._matrixCahce[d] > 0 ? v.copyFromArray(y, d + 1) : (g = 2 * _,
                        A = this._hullCache[10],
                        x = this._hullCache[11],
                        b = this._hullCache[8] + _ * A,
                        C = this._hullCache[9] + _ * x,
                        T = this._vertices,
                        r ? this._getAffineTransform(p + c, -s, c, 800, T[g + 2], T[g + 3], T[g], T[g + 1], b + A, C + x, e._helpTransform, v, !0) : this._getAffineTransform(p, -n, c, 800, b, C, b + A, C + x, T[g], T[g + 1], e._helpTransform, v, !1),
                        y[d] = 1,
                        y[d + 1] = v.a,
                        y[d + 2] = v.b,
                        y[d + 3] = v.c,
                        y[d + 4] = v.d,
                        y[d + 5] = v.tx,
                        y[d + 6] = v.ty)
                    } else if (i >= s) {
                        if (t < -s || t >= s)
                            return this.globalTransformMatrix;
                        d = 7 * (2 * (o * (l + 1) + o + l + f) + ((r = i > this._kY * (t - p - c) + s) ? 1 : 0)),
                        this._matrixCahce[d] > 0 ? v.copyFromArray(y, d + 1) : (g = l * (h + 2) + 2 * _,
                        A = this._hullCache[10],
                        x = this._hullCache[11],
                        b = this._hullCache[6] - (o - _) * A,
                        C = this._hullCache[7] - (o - _) * x,
                        T = this._vertices,
                        r ? this._getAffineTransform(p + c, n, c, 800, b + A, C + x, b, C, T[g + 2], T[g + 3], e._helpTransform, v, !0) : this._getAffineTransform(p, s, c, 800, T[g], T[g + 1], T[g + 2], T[g + 3], b, C, e._helpTransform, v, !1),
                        y[d] = 1,
                        y[d + 1] = v.a,
                        y[d + 2] = v.b,
                        y[d + 3] = v.c,
                        y[d + 4] = v.d,
                        y[d + 5] = v.tx,
                        y[d + 6] = v.ty)
                    } else
                        d = 7 * (2 * (o * f + _) + ((r = i > this._k * (t - p - c) + m) ? 1 : 0)),
                        this._matrixCahce[d] > 0 ? v.copyFromArray(y, d + 1) : (g = 2 * _ + f * (h + 2),
                        T = this._vertices,
                        r ? this._getAffineTransform(p + c, m + u, c, u, T[g + h + 4], T[g + h + 5], T[g + h + 2], T[g + h + 3], T[g + 2], T[g + 3], e._helpTransform, v, !0) : this._getAffineTransform(p, m, c, u, T[g], T[g + 1], T[g + 2], T[g + 3], T[g + h + 2], T[g + h + 3], e._helpTransform, v, !1),
                        y[d] = 1,
                        y[d + 1] = v.a,
                        y[d + 2] = v.b,
                        y[d + 3] = v.c,
                        y[d + 4] = v.d,
                        y[d + 5] = v.tx,
                        y[d + 6] = v.ty);
                    return v
                }
                ,
                e.prototype.init = function(e, i) {
                    if (null === this._boneData) {
                        t.prototype.init.call(this, e, i);
                        var n = e.segmentX
                          , r = e.segmentY
                          , s = e.vertices.length;
                        this._dX = 400 / n,
                        this._dY = 400 / r,
                        this._k = -this._dY / this._dX,
                        this._kX = -this._dY / 800,
                        this._kY = -800 / this._dX,
                        this._vertices.length = s,
                        this._deformVertices.length = s,
                        this._matrixCahce.length = 14 * (n * r + 2 * n + 2 * r),
                        this._hullCache.length = 10;
                        for (var a = 0; a < s; ++a)
                            this._deformVertices[a] = 0
                    }
                }
                ,
                e.prototype.update = function(t) {
                    if (this._blendState.dirty = !1,
                    t >= 0 && null !== this._cachedFrameIndices) {
                        var i = this._cachedFrameIndices[t];
                        if (i >= 0 && this._cachedFrameIndex === i)
                            this._transformDirty = !1;
                        else if (i >= 0)
                            this._transformDirty = !0,
                            this._cachedFrameIndex = i;
                        else {
                            if (this._hasConstraint)
                                for (var n = 0, r = this._armature._constraints; n < r.length; n++)
                                    (o = r[n])._root === this && o.update();
                            this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty ? (this._transformDirty = !0,
                            this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1,
                            this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0,
                            this._cachedFrameIndex = -1)
                        }
                    } else {
                        if (this._hasConstraint)
                            for (var s = 0, a = this._armature._constraints; s < a.length; s++) {
                                var o;
                                (o = a[s])._root === this && o.update()
                            }
                        (this._transformDirty || null !== this._parent && this._parent._childrenTransformDirty) && (t = -1,
                        this._transformDirty = !0,
                        this._cachedFrameIndex = -1)
                    }
                    if (this._transformDirty) {
                        this._transformDirty = !1,
                        this._childrenTransformDirty = !0;
                        for (var l = 0, h = this._matrixCahce.length; l < h; l += 7)
                            this._matrixCahce[l] = -1;
                        if (this._updateVertices(),
                        this._cachedFrameIndex < 0) {
                            var c = t >= 0;
                            this._localDirty && this._updateGlobalTransformMatrix(c),
                            c && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                        } else
                            this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                        var u = 2 * this.global.x
                          , _ = 2 * this.global.y
                          , f = e._helpPoint;
                        this.globalTransformMatrix.transformPoint(1e3, -200, f),
                        this._hullCache[0] = f.x,
                        this._hullCache[1] = f.y,
                        this._hullCache[2] = u - f.x,
                        this._hullCache[3] = _ - f.y,
                        this.globalTransformMatrix.transformPoint(0, this._dY, f, !0),
                        this._hullCache[4] = f.x,
                        this._hullCache[5] = f.y,
                        this.globalTransformMatrix.transformPoint(200, 1e3, f),
                        this._hullCache[6] = f.x,
                        this._hullCache[7] = f.y,
                        this._hullCache[8] = u - f.x,
                        this._hullCache[9] = _ - f.y,
                        this.globalTransformMatrix.transformPoint(this._dX, 0, f, !0),
                        this._hullCache[10] = f.x,
                        this._hullCache[11] = f.y
                    } else
                        this._childrenTransformDirty && (this._childrenTransformDirty = !1);
                    this._localDirty = !0
                }
                ,
                e
            }
            )(t.Bone);
            t.Surface = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i._localMatrix = new t.Matrix,
                    i._colorTransform = new t.ColorTransform,
                    i._displayDatas = [],
                    i._displayList = [],
                    i._deformVertices = null,
                    i._rawDisplay = null,
                    i._meshDisplay = null,
                    i
                }
                return s(i, e),
                i.prototype._onClear = function() {
                    e.prototype._onClear.call(this);
                    for (var i = [], n = 0, r = this._displayList; n < r.length; n++)
                        null !== (o = r[n]) && o !== this._rawDisplay && o !== this._meshDisplay && i.indexOf(o) < 0 && i.push(o);
                    for (var s = 0, a = i; s < a.length; s++) {
                        var o;
                        (o = a[s])instanceof t.Armature ? o.dispose() : this._disposeDisplay(o, !0)
                    }
                    null !== this._deformVertices && this._deformVertices.returnToPool(),
                    null !== this._meshDisplay && this._meshDisplay !== this._rawDisplay && this._disposeDisplay(this._meshDisplay, !1),
                    null !== this._rawDisplay && this._disposeDisplay(this._rawDisplay, !1),
                    this.displayController = null,
                    this._displayDirty = !1,
                    this._zOrderDirty = !1,
                    this._blendModeDirty = !1,
                    this._colorDirty = !1,
                    this._transformDirty = !1,
                    this._visible = !0,
                    this._blendMode = 0,
                    this._displayIndex = -1,
                    this._animationDisplayIndex = -1,
                    this._zOrder = 0,
                    this._cachedFrameIndex = -1,
                    this._pivotX = 0,
                    this._pivotY = 0,
                    this._localMatrix.identity(),
                    this._colorTransform.identity(),
                    this._displayList.length = 0,
                    this._displayDatas.length = 0,
                    this._slotData = null,
                    this._rawDisplayDatas = null,
                    this._displayData = null,
                    this._boundingBoxData = null,
                    this._textureData = null,
                    this._deformVertices = null,
                    this._rawDisplay = null,
                    this._meshDisplay = null,
                    this._display = null,
                    this._childArmature = null,
                    this._parent = null,
                    this._cachedFrameIndices = null
                }
                ,
                i.prototype._getDefaultRawDisplayData = function(t) {
                    var e = this._armature._armatureData.defaultSkin;
                    if (null !== e) {
                        var i = e.getDisplays(this._slotData.name);
                        if (null !== i)
                            return t < i.length ? i[t] : null
                    }
                    return null
                }
                ,
                i.prototype._updateDisplayData = function() {
                    var e = this._displayData
                      , n = null !== this._deformVertices ? this._deformVertices.verticesData : null
                      , r = this._textureData
                      , s = null
                      , a = null;
                    if (this._displayData = null,
                    this._boundingBoxData = null,
                    this._textureData = null,
                    this._displayIndex >= 0 && (null !== this._rawDisplayDatas && (s = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null),
                    null === s && (s = this._getDefaultRawDisplayData(this._displayIndex)),
                    this._displayIndex < this._displayDatas.length && (this._displayData = this._displayDatas[this._displayIndex])),
                    null !== this._displayData && (2 === this._displayData.type ? a = this._displayData.vertices : 4 === this._displayData.type ? a = this._displayData.vertices : null !== s && (2 === s.type ? a = s.vertices : 4 === s.type && (a = s.vertices)),
                    3 === this._displayData.type ? this._boundingBoxData = this._displayData.boundingBox : null !== s && 3 === s.type && (this._boundingBoxData = s.boundingBox),
                    0 === this._displayData.type ? this._textureData = this._displayData.texture : 2 === this._displayData.type && (this._textureData = this._displayData.texture)),
                    this._displayData !== e || a !== n || this._textureData !== r) {
                        if (null === a && null !== this._textureData) {
                            var o = this._displayData
                              , l = this._textureData.parent.scale * this._armature._armatureData.scale
                              , h = this._textureData.frame;
                            this._pivotX = o.pivot.x,
                            this._pivotY = o.pivot.y;
                            var c = null !== h ? h : this._textureData.region
                              , u = c.width
                              , _ = c.height;
                            this._textureData.rotated && null === h && (u = c.height,
                            _ = c.width),
                            this._pivotX *= u * l,
                            this._pivotY *= _ * l,
                            null !== h && (this._pivotX += h.x * l,
                            this._pivotY += h.y * l),
                            null !== this._displayData && null !== s && this._displayData !== s && (s.transform.toMatrix(i._helpMatrix),
                            i._helpMatrix.invert(),
                            i._helpMatrix.transformPoint(0, 0, i._helpPoint),
                            this._pivotX -= i._helpPoint.x,
                            this._pivotY -= i._helpPoint.y,
                            this._displayData.transform.toMatrix(i._helpMatrix),
                            i._helpMatrix.invert(),
                            i._helpMatrix.transformPoint(0, 0, i._helpPoint),
                            this._pivotX += i._helpPoint.x,
                            this._pivotY += i._helpPoint.y),
                            t.DragonBones.yDown || (this._pivotY = (this._textureData.rotated ? this._textureData.region.width : this._textureData.region.height) * l - this._pivotY)
                        } else
                            this._pivotX = 0,
                            this._pivotY = 0;
                        null !== s ? this.origin = s.transform : null !== this._displayData ? this.origin = this._displayData.transform : this.origin = null,
                        a !== n ? (null === this._deformVertices && (this._deformVertices = t.BaseObject.borrowObject(t.DeformVertices)),
                        this._deformVertices.init(a, this._armature)) : null !== this._deformVertices && this._textureData !== r && (this._deformVertices.verticesDirty = !0),
                        this._displayDirty = !0,
                        this._transformDirty = !0
                    }
                }
                ,
                i.prototype._updateDisplay = function() {
                    var e = null !== this._display ? this._display : this._rawDisplay
                      , i = this._childArmature;
                    this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? (this._display = this._displayList[this._displayIndex],
                    null !== this._display && this._display instanceof t.Armature ? (this._childArmature = this._display,
                    this._display = this._childArmature.display) : this._childArmature = null) : (this._display = null,
                    this._childArmature = null);
                    var n = null !== this._display ? this._display : this._rawDisplay;
                    if (n !== e && (this._onUpdateDisplay(),
                    this._replaceDisplay(e),
                    this._transformDirty = !0,
                    this._visibleDirty = !0,
                    this._blendModeDirty = !0,
                    this._colorDirty = !0),
                    n !== this._rawDisplay && n !== this._meshDisplay || this._updateFrame(),
                    this._childArmature !== i && (null !== i && (i._parent = null,
                    i.clock = null,
                    i.inheritAnimation && i.animation.reset()),
                    null !== this._childArmature && (this._childArmature._parent = this,
                    this._childArmature.clock = this._armature.clock,
                    this._childArmature.inheritAnimation))) {
                        if (0 === this._childArmature.cacheFrameRate) {
                            var r = this._armature.cacheFrameRate;
                            0 !== r && (this._childArmature.cacheFrameRate = r)
                        }
                        var s = null;
                        if (null !== this._displayData && 1 === this._displayData.type)
                            s = this._displayData.actions;
                        else if (this._displayIndex >= 0 && null !== this._rawDisplayDatas) {
                            var a = this._displayIndex < this._rawDisplayDatas.length ? this._rawDisplayDatas[this._displayIndex] : null;
                            null === a && (a = this._getDefaultRawDisplayData(this._displayIndex)),
                            null !== a && 1 === a.type && (s = a.actions)
                        }
                        if (null !== s && s.length > 0)
                            for (var o = 0, l = s; o < l.length; o++) {
                                var h = l[o]
                                  , c = t.BaseObject.borrowObject(t.EventObject);
                                t.EventObject.actionDataToInstance(h, c, this._armature),
                                c.slot = this,
                                this._armature._bufferAction(c, !1)
                            }
                        else
                            this._childArmature.animation.play()
                    }
                }
                ,
                i.prototype._updateGlobalTransformMatrix = function(t) {
                    var e = 0 === this._parent._boneData.type ? this._parent.globalTransformMatrix : this._parent._getGlobalTransformMatrix(this.global.x, this.global.y);
                    this.globalTransformMatrix.copyFrom(this._localMatrix),
                    this.globalTransformMatrix.concat(e),
                    t ? this.global.fromMatrix(this.globalTransformMatrix) : this._globalDirty = !0
                }
                ,
                i.prototype._setDisplayIndex = function(t, e) {
                    if (void 0 === e && (e = !1),
                    e) {
                        if (this._animationDisplayIndex === t)
                            return !1;
                        this._animationDisplayIndex = t
                    }
                    return this._displayIndex !== t && (this._displayIndex = t,
                    this._displayDirty = !0,
                    this._updateDisplayData(),
                    this._displayDirty)
                }
                ,
                i.prototype._setZorder = function(t) {
                    return this._zOrder,
                    this._zOrder = t,
                    this._zOrderDirty = !0,
                    this._zOrderDirty
                }
                ,
                i.prototype._setColor = function(t) {
                    return this._colorTransform.copyFrom(t),
                    this._colorDirty = !0,
                    this._colorDirty
                }
                ,
                i.prototype._setDisplayList = function(e) {
                    if (null !== e && e.length > 0) {
                        this._displayList.length !== e.length && (this._displayList.length = e.length);
                        for (var i = 0, n = e.length; i < n; ++i) {
                            var r = e[i];
                            null !== r && r !== this._rawDisplay && r !== this._meshDisplay && !(r instanceof t.Armature) && this._displayList.indexOf(r) < 0 && this._initDisplay(r, !0),
                            this._displayList[i] = r
                        }
                    } else
                        this._displayList.length > 0 && (this._displayList.length = 0);
                    return this._displayIndex >= 0 && this._displayIndex < this._displayList.length ? this._displayDirty = this._display !== this._displayList[this._displayIndex] : this._displayDirty = null !== this._display,
                    this._updateDisplayData(),
                    this._displayDirty
                }
                ,
                i.prototype.init = function(t, e, i, n) {
                    if (null === this._slotData) {
                        this._slotData = t,
                        this._isFromCache = !1,
                        this._visibleDirty = !0,
                        this._blendModeDirty = !0,
                        this._colorDirty = !0,
                        this._blendMode = this._slotData.blendMode,
                        this._zOrder = this._slotData.zOrder,
                        this._colorTransform.copyFrom(this._slotData.color),
                        this._rawDisplay = i,
                        this._meshDisplay = n,
                        this._armature = e;
                        var r = this._armature.getBone(this._slotData.parent.name);
                        null !== r && (this._parent = r),
                        this._armature._addSlot(this),
                        this._initDisplay(this._rawDisplay, !1),
                        this._rawDisplay !== this._meshDisplay && this._initDisplay(this._meshDisplay, !1),
                        this._onUpdateDisplay(),
                        this._addDisplay()
                    }
                }
                ,
                i.prototype.update = function(t) {
                    if (this._isFromCache = !1,
                    this._displayDirty && (this._displayDirty = !1,
                    this._updateDisplay(),
                    this._transformDirty && (null !== this.origin ? this.global.copyFrom(this.origin).add(this.offset).toMatrix(this._localMatrix) : this.global.copyFrom(this.offset).toMatrix(this._localMatrix))),
                    this._zOrderDirty && (this._zOrderDirty = !1,
                    this._updateZOrder()),
                    t >= 0 && null !== this._cachedFrameIndices) {
                        var e = this._cachedFrameIndices[t];
                        e >= 0 && this._cachedFrameIndex === e ? this._transformDirty = !1 : e >= 0 ? (this._transformDirty = !0,
                        this._cachedFrameIndex = e) : this._transformDirty || this._parent._childrenTransformDirty ? (this._transformDirty = !0,
                        this._cachedFrameIndex = -1) : this._cachedFrameIndex >= 0 ? (this._transformDirty = !1,
                        this._cachedFrameIndices[t] = this._cachedFrameIndex) : (this._transformDirty = !0,
                        this._cachedFrameIndex = -1)
                    } else
                        (this._transformDirty || this._parent._childrenTransformDirty) && (t = -1,
                        this._transformDirty = !0,
                        this._cachedFrameIndex = -1);
                    if (null !== this._display) {
                        if (this._visibleDirty && (this._visibleDirty = !1,
                        this._updateVisible()),
                        this._blendModeDirty && (this._blendModeDirty = !1,
                        this._updateBlendMode()),
                        this._colorDirty && (this._colorDirty = !1,
                        this._updateColor()),
                        null !== this._deformVertices && null !== this._deformVertices.verticesData && this._display === this._meshDisplay) {
                            var i = null !== this._deformVertices.verticesData.weight
                              , n = 0 !== this._parent._boneData.type;
                            if ((this._deformVertices.verticesDirty || i && this._deformVertices.isBonesUpdate() || n && this._parent._childrenTransformDirty) && (this._deformVertices.verticesDirty = !1,
                            this._updateMesh()),
                            i || n)
                                return
                        }
                        if (this._transformDirty) {
                            if (this._transformDirty = !1,
                            this._cachedFrameIndex < 0) {
                                var r = t >= 0;
                                this._updateGlobalTransformMatrix(r),
                                r && null !== this._cachedFrameIndices && (this._cachedFrameIndex = this._cachedFrameIndices[t] = this._armature._armatureData.setCacheFrame(this.globalTransformMatrix, this.global))
                            } else
                                this._isFromCache = !0,
                                this._armature._armatureData.getCacheFrame(this.globalTransformMatrix, this.global, this._cachedFrameIndex);
                            this._updateTransform()
                        }
                    }
                }
                ,
                i.prototype.updateTransformAndMatrix = function() {
                    this._transformDirty && (this._transformDirty = !1,
                    this._updateGlobalTransformMatrix(!1))
                }
                ,
                i.prototype.replaceDisplayData = function(t, e) {
                    if (void 0 === e && (e = -1),
                    e < 0 && (e = this._displayIndex < 0 ? 0 : this._displayIndex),
                    this._displayDatas.length <= e) {
                        this._displayDatas.length = e + 1;
                        for (var i = 0, n = this._displayDatas.length; i < n; ++i)
                            this._displayDatas[i] || (this._displayDatas[i] = null)
                    }
                    this._displayDatas[e] = t
                }
                ,
                i.prototype.containsPoint = function(t, e) {
                    return null !== this._boundingBoxData && (this.updateTransformAndMatrix(),
                    i._helpMatrix.copyFrom(this.globalTransformMatrix),
                    i._helpMatrix.invert(),
                    i._helpMatrix.transformPoint(t, e, i._helpPoint),
                    this._boundingBoxData.containsPoint(i._helpPoint.x, i._helpPoint.y))
                }
                ,
                i.prototype.intersectsSegment = function(t, e, n, r, s, a, o) {
                    if (void 0 === s && (s = null),
                    void 0 === a && (a = null),
                    void 0 === o && (o = null),
                    null === this._boundingBoxData)
                        return 0;
                    this.updateTransformAndMatrix(),
                    i._helpMatrix.copyFrom(this.globalTransformMatrix),
                    i._helpMatrix.invert(),
                    i._helpMatrix.transformPoint(t, e, i._helpPoint),
                    t = i._helpPoint.x,
                    e = i._helpPoint.y,
                    i._helpMatrix.transformPoint(n, r, i._helpPoint),
                    n = i._helpPoint.x,
                    r = i._helpPoint.y;
                    var l = this._boundingBoxData.intersectsSegment(t, e, n, r, s, a, o);
                    return l > 0 && (1 === l || 2 === l ? null !== s ? (this.globalTransformMatrix.transformPoint(s.x, s.y, s),
                    null !== a && (a.x = s.x,
                    a.y = s.y)) : null !== a && this.globalTransformMatrix.transformPoint(a.x, a.y, a) : (null !== s && this.globalTransformMatrix.transformPoint(s.x, s.y, s),
                    null !== a && this.globalTransformMatrix.transformPoint(a.x, a.y, a)),
                    null !== o && (this.globalTransformMatrix.transformPoint(Math.cos(o.x), Math.sin(o.x), i._helpPoint, !0),
                    o.x = Math.atan2(i._helpPoint.y, i._helpPoint.x),
                    this.globalTransformMatrix.transformPoint(Math.cos(o.y), Math.sin(o.y), i._helpPoint, !0),
                    o.y = Math.atan2(i._helpPoint.y, i._helpPoint.x))),
                    l
                }
                ,
                i.prototype.invalidUpdate = function() {
                    this._displayDirty = !0,
                    this._transformDirty = !0
                }
                ,
                Object.defineProperty(i.prototype, "visible", {
                    get: function() {
                        return this._visible
                    },
                    set: function(t) {
                        this._visible !== t && (this._visible = t,
                        this._updateVisible())
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "displayIndex", {
                    get: function() {
                        return this._displayIndex
                    },
                    set: function(t) {
                        this._setDisplayIndex(t) && this.update(-1)
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._slotData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "displayList", {
                    get: function() {
                        return this._displayList.concat()
                    },
                    set: function(e) {
                        var i = this._displayList.concat()
                          , n = new Array;
                        this._setDisplayList(e) && this.update(-1);
                        for (var r = 0, s = i; r < s.length; r++)
                            null !== (l = s[r]) && l !== this._rawDisplay && l !== this._meshDisplay && this._displayList.indexOf(l) < 0 && n.indexOf(l) < 0 && n.push(l);
                        for (var a = 0, o = n; a < o.length; a++) {
                            var l;
                            (l = o[a])instanceof t.Armature || this._disposeDisplay(l, !0)
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "slotData", {
                    get: function() {
                        return this._slotData
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "rawDisplayDatas", {
                    get: function() {
                        return this._rawDisplayDatas
                    },
                    set: function(t) {
                        if (this._rawDisplayDatas !== t)
                            if (this._displayDirty = !0,
                            this._rawDisplayDatas = t,
                            null !== this._rawDisplayDatas) {
                                this._displayDatas.length = this._rawDisplayDatas.length;
                                for (var e = 0, i = this._displayDatas.length; e < i; ++e) {
                                    var n = this._rawDisplayDatas[e];
                                    null === n && (n = this._getDefaultRawDisplayData(e)),
                                    this._displayDatas[e] = n
                                }
                            } else
                                this._displayDatas.length = 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "displayData", {
                    get: function() {
                        return this._displayData
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "boundingBoxData", {
                    get: function() {
                        return this._boundingBoxData
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "rawDisplay", {
                    get: function() {
                        return this._rawDisplay
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "meshDisplay", {
                    get: function() {
                        return this._meshDisplay
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "display", {
                    get: function() {
                        return this._display
                    },
                    set: function(t) {
                        if (this._display !== t) {
                            var e = this._displayList.length;
                            if (this._displayIndex < 0 && 0 === e && (this._displayIndex = 0),
                            !(this._displayIndex < 0)) {
                                var i = this.displayList;
                                e <= this._displayIndex && (i.length = this._displayIndex + 1),
                                i[this._displayIndex] = t,
                                this.displayList = i
                            }
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "childArmature", {
                    get: function() {
                        return this._childArmature
                    },
                    set: function(t) {
                        this._childArmature !== t && (this.display = t)
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "parent", {
                    get: function() {
                        return this._parent
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i.prototype.getDisplay = function() {
                    return this._display
                }
                ,
                i.prototype.setDisplay = function(t) {
                    this.display = t
                }
                ,
                i
            }
            )(t.TransformObject);
            t.Slot = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.prototype._onClear = function() {
                    this._armature = null,
                    this._target = null,
                    this._root = null,
                    this._bone = null
                }
                ,
                Object.defineProperty(i.prototype, "name", {
                    get: function() {
                        return this._constraintData.name
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i._helpMatrix = new t.Matrix,
                i._helpTransform = new t.Transform,
                i._helpPoint = new t.Point,
                i
            }
            )(t.BaseObject);
            t.Constraint = e;
            var i = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.IKConstraint]"
                }
                ,
                i.prototype._onClear = function() {
                    e.prototype._onClear.call(this),
                    this._scaleEnabled = !1,
                    this._bendPositive = !1,
                    this._weight = 1,
                    this._constraintData = null
                }
                ,
                i.prototype._computeA = function() {
                    var e = this._target.global
                      , i = this._root.global
                      , n = this._root.globalTransformMatrix
                      , r = Math.atan2(e.y - i.y, e.x - i.x);
                    i.scaleX < 0 && (r += Math.PI),
                    i.rotation += t.Transform.normalizeRadian(r - i.rotation) * this._weight,
                    i.toMatrix(n)
                }
                ,
                i.prototype._computeB = function() {
                    var e = this._bone._boneData.length
                      , i = this._root
                      , n = this._target.global
                      , r = i.global
                      , s = this._bone.global
                      , a = this._bone.globalTransformMatrix
                      , o = a.a * e
                      , l = a.b * e
                      , h = o * o + l * l
                      , c = Math.sqrt(h)
                      , u = s.x - r.x
                      , _ = s.y - r.y
                      , f = u * u + _ * _
                      , d = Math.sqrt(f)
                      , p = s.rotation
                      , m = r.rotation
                      , y = Math.atan2(_, u)
                      , v = (u = n.x - r.x) * u + (_ = n.y - r.y) * _
                      , g = Math.sqrt(v)
                      , A = 0;
                    if (c + d <= g || g + c <= d || g + d <= c)
                        A = Math.atan2(n.y - r.y, n.x - r.x),
                        c + d <= g || d < c && (A += Math.PI);
                    else {
                        var x = (f - h + v) / (2 * v)
                          , b = Math.sqrt(f - x * x * v) / g
                          , C = r.x + u * x
                          , T = r.y + _ * x
                          , S = -_ * b
                          , w = u * b
                          , E = !1
                          , M = i.parent;
                        if (null !== M) {
                            var D = M.globalTransformMatrix;
                            E = D.a * D.d - D.b * D.c < 0
                        }
                        E !== this._bendPositive ? (s.x = C - S,
                        s.y = T - w) : (s.x = C + S,
                        s.y = T + w),
                        A = Math.atan2(s.y - r.y, s.x - r.x)
                    }
                    var B = t.Transform.normalizeRadian(A - y);
                    r.rotation = m + B * this._weight,
                    r.toMatrix(i.globalTransformMatrix);
                    var I = y + B * this._weight;
                    s.x = r.x + Math.cos(I) * d,
                    s.y = r.y + Math.sin(I) * d;
                    var P = Math.atan2(n.y - s.y, n.x - s.x);
                    s.scaleX < 0 && (P += Math.PI),
                    s.rotation = r.rotation + p - m + t.Transform.normalizeRadian(P - B - p) * this._weight,
                    s.toMatrix(a)
                }
                ,
                i.prototype.init = function(t, e) {
                    if (null === this._constraintData) {
                        this._constraintData = t,
                        this._armature = e,
                        this._target = this._armature.getBone(this._constraintData.target.name),
                        this._root = this._armature.getBone(this._constraintData.root.name),
                        this._bone = null !== this._constraintData.bone ? this._armature.getBone(this._constraintData.bone.name) : null;
                        var i = this._constraintData;
                        this._scaleEnabled = i.scaleEnabled,
                        this._bendPositive = i.bendPositive,
                        this._weight = i.weight,
                        this._root._hasConstraint = !0
                    }
                }
                ,
                i.prototype.update = function() {
                    this._root.updateByConstraint(),
                    null !== this._bone ? (this._bone.updateByConstraint(),
                    this._computeB()) : this._computeA()
                }
                ,
                i.prototype.invalidUpdate = function() {
                    this._root.invalidUpdate(),
                    null !== this._bone && this._bone.invalidUpdate()
                }
                ,
                i
            }
            )(e);
            t.IKConstraint = i;
            var n = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._bones = [],
                    t._spaces = [],
                    t._positions = [],
                    t._curves = [],
                    t._boneLengths = [],
                    t._pathGlobalVertices = [],
                    t._segments = [10],
                    t
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.PathConstraint]"
                }
                ,
                i.prototype._onClear = function() {
                    e.prototype._onClear.call(this),
                    this.dirty = !1,
                    this.pathOffset = 0,
                    this.position = 0,
                    this.spacing = 0,
                    this.rotateOffset = 0,
                    this.rotateMix = 1,
                    this.translateMix = 1,
                    this._pathSlot = null,
                    this._bones.length = 0,
                    this._spaces.length = 0,
                    this._positions.length = 0,
                    this._curves.length = 0,
                    this._boneLengths.length = 0,
                    this._pathGlobalVertices.length = 0
                }
                ,
                i.prototype._updatePathVertices = function(t) {
                    var e = this._armature
                      , i = e.armatureData.parent
                      , n = e.armatureData.scale
                      , r = i.intArray
                      , s = i.floatArray
                      , a = t.offset
                      , o = r[a + 0]
                      , l = r[a + 2];
                    this._pathGlobalVertices.length = 2 * o;
                    var h = t.weight;
                    if (null !== h)
                        for (var c = this._pathSlot._deformVertices.bones, u = h.bones.length, _ = h.offset, f = r[_ + 1], d = _ + 2 + u, p = (T = 0,
                        0); T < o; T++) {
                            for (var m = 0, y = 0, v = 0, g = r[d++]; v < g; v++) {
                                var A = c[r[d++]];
                                if (null !== A) {
                                    A.updateByConstraint(),
                                    C = A.globalTransformMatrix;
                                    var x = s[f++];
                                    w = s[f++] * n,
                                    E = s[f++] * n,
                                    m += (C.a * w + C.c * E + C.tx) * x,
                                    y += (C.b * w + C.d * E + C.ty) * x
                                }
                            }
                            this._pathGlobalVertices[p++] = m,
                            this._pathGlobalVertices[p++] = y
                        }
                    else {
                        var b = this._pathSlot.parent;
                        b.updateByConstraint();
                        for (var C = b.globalTransformMatrix, T = 0, S = l; T < o; T += 2) {
                            var w = s[S++] * n
                              , E = s[S++] * n
                              , M = C.a * w + C.c * E + C.tx
                              , D = C.b * w + C.d * E + C.ty;
                            this._pathGlobalVertices[T] = M,
                            this._pathGlobalVertices[T + 1] = D
                        }
                    }
                }
                ,
                i.prototype._computeVertices = function(t, e, i, n) {
                    for (var r = i, s = t; r < e; r += 2)
                        n[r] = this._pathGlobalVertices[s++],
                        n[r + 1] = this._pathGlobalVertices[s++]
                }
                ,
                i.prototype._computeBezierCurve = function(t, e, i, n, r) {
                    var s = this._armature.armatureData.parent.intArray[t.vertices.offset + 0]
                      , a = this._positions
                      , o = this._spaces
                      , l = t.closed
                      , h = Array()
                      , c = 2 * s
                      , u = c / 6
                      , _ = -1
                      , f = this.position;
                    a.length = 3 * e + 2;
                    var d = 0;
                    if (t.constantSpeed) {
                        l ? (c += 2,
                        h.length = s,
                        this._computeVertices(2, c - 4, 0, h),
                        this._computeVertices(0, 2, c - 4, h),
                        h[c - 2] = h[0],
                        h[c - 1] = h[1]) : (u--,
                        c -= 4,
                        h.length = c,
                        this._computeVertices(2, c, 0, h));
                        var p = new Array(u);
                        d = 0;
                        for (var m, y, v, g, A, x, b, C, T = h[0], S = h[1], w = 0, E = 0, M = 0, D = 0, B = 0, I = 0, P = (z = 0,
                        2); z < u; z++,
                        P += 6)
                            w = h[P],
                            E = h[P + 1],
                            M = h[P + 2],
                            D = h[P + 3],
                            A = 2 * (m = .1875 * (T - 2 * w + M)) + (v = .09375 * (3 * (w - M) - T + (B = h[P + 4]))),
                            x = 2 * (y = .1875 * (S - 2 * E + D)) + (g = .09375 * (3 * (E - D) - S + (I = h[P + 5]))),
                            b = .75 * (w - T) + m + .16666667 * v,
                            C = .75 * (E - S) + y + .16666667 * g,
                            d += Math.sqrt(b * b + C * C),
                            b += A,
                            C += x,
                            A += v,
                            x += g,
                            d += Math.sqrt(b * b + C * C),
                            b += A,
                            C += x,
                            d += Math.sqrt(b * b + C * C),
                            b += A + v,
                            C += x + g,
                            d += Math.sqrt(b * b + C * C),
                            p[z] = d,
                            T = B,
                            S = I;
                        if (n && (f *= d),
                        r)
                            for (z = 0; z < e; z++)
                                o[z] *= d;
                        for (var R = this._segments, O = 0, L = (z = 0,
                        H = 0,
                        W = 0,
                        0); z < e; z++,
                        H += 3) {
                            var F = f += o[z];
                            if (l)
                                (F %= d) < 0 && (F += d),
                                W = 0;
                            else {
                                if (F < 0)
                                    continue;
                                if (F > d)
                                    continue
                            }
                            for (; ; W++) {
                                var V = p[W];
                                if (!(F > V)) {
                                    0 === W ? F /= V : F = (F - (G = p[W - 1])) / (V - G);
                                    break
                                }
                            }
                            if (W !== _) {
                                _ = W;
                                var N = 6 * W;
                                for (T = h[N],
                                S = h[N + 1],
                                w = h[N + 2],
                                E = h[N + 3],
                                M = h[N + 4],
                                D = h[N + 5],
                                A = 2 * (m = .03 * (T - 2 * w + M)) + (v = .006 * (3 * (w - M) - T + (B = h[N + 6]))),
                                x = 2 * (y = .03 * (S - 2 * E + D)) + (g = .006 * (3 * (E - D) - S + (I = h[N + 7]))),
                                b = .3 * (w - T) + m + .16666667 * v,
                                C = .3 * (E - S) + y + .16666667 * g,
                                O = Math.sqrt(b * b + C * C),
                                R[0] = O,
                                N = 1; N < 8; N++)
                                    b += A,
                                    C += x,
                                    A += v,
                                    x += g,
                                    O += Math.sqrt(b * b + C * C),
                                    R[N] = O;
                                b += A,
                                C += x,
                                O += Math.sqrt(b * b + C * C),
                                R[8] = O,
                                b += A + v,
                                C += x + g,
                                O += Math.sqrt(b * b + C * C),
                                R[9] = O,
                                L = 0
                            }
                            for (F *= O; ; L++) {
                                var k = R[L];
                                if (!(F > k)) {
                                    var G;
                                    0 === L ? F /= k : F = L + (F - (G = R[L - 1])) / (k - G);
                                    break
                                }
                            }
                            this.addCurvePosition(.1 * F, T, S, w, E, M, D, B, I, a, H, i)
                        }
                    } else {
                        var U = t.curveLengths;
                        if (d = U[u -= l ? 1 : 2],
                        n && (f *= d),
                        r)
                            for (var z = 0; z < e; z++)
                                o[z] *= d;
                        h.length = 8;
                        z = 0;
                        for (var H = 0, W = 0; z < e; z++,
                        H += 3) {
                            if (f += o[z],
                            l)
                                (f %= d) < 0 && (f += d),
                                W = 0;
                            else {
                                if (f < 0)
                                    continue;
                                if (f > d)
                                    continue
                            }
                            for (var j = 0; ; W++) {
                                var X = U[W];
                                if (!(f > X)) {
                                    if (0 === W)
                                        j = f / X;
                                    else {
                                        var Y = U[W - 1];
                                        j = (f - Y) / (X - Y)
                                    }
                                    break
                                }
                            }
                            W !== _ && (_ = W,
                            l && W === u ? (this._computeVertices(c - 4, 4, 0, h),
                            this._computeVertices(0, 4, 4, h)) : this._computeVertices(6 * W + 2, 8, 0, h)),
                            this.addCurvePosition(j, h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], a, H, i)
                        }
                    }
                }
                ,
                i.prototype.addCurvePosition = function(t, e, i, n, r, s, a, o, l, h, c, u) {
                    if (0 === t)
                        return h[c] = e,
                        h[c + 1] = i,
                        void (h[c + 2] = 0);
                    if (1 === t)
                        return h[c] = o,
                        h[c + 1] = l,
                        void (h[c + 2] = 0);
                    var _ = 1 - t
                      , f = _ * _
                      , d = t * t
                      , p = f * _
                      , m = f * t * 3
                      , y = _ * d * 3
                      , v = t * d
                      , g = p * e + m * n + y * s + v * o
                      , A = p * i + m * r + y * a + v * l;
                    h[c] = g,
                    h[c + 1] = A,
                    h[c + 2] = u ? Math.atan2(A - (p * i + m * r + y * a), g - (p * e + m * n + y * s)) : 0
                }
                ,
                i.prototype.init = function(t, e) {
                    this._constraintData = t,
                    this._armature = e;
                    var i = t;
                    this.pathOffset = i.pathDisplayData.vertices.offset,
                    this.position = i.position,
                    this.spacing = i.spacing,
                    this.rotateOffset = i.rotateOffset,
                    this.rotateMix = i.rotateMix,
                    this.translateMix = i.translateMix,
                    this._root = this._armature.getBone(i.root.name),
                    this._target = this._armature.getBone(i.target.name),
                    this._pathSlot = this._armature.getSlot(i.pathSlot.name);
                    for (var n = 0, r = i.bones.length; n < r; n++) {
                        var s = this._armature.getBone(i.bones[n].name);
                        null !== s && this._bones.push(s)
                    }
                    2 === i.rotateMode && (this._boneLengths.length = this._bones.length),
                    this._root._hasConstraint = !0
                }
                ,
                i.prototype.update = function() {
                    var e = this._pathSlot;
                    if (null !== e._deformVertices && null !== e._deformVertices.verticesData && e._deformVertices.verticesData.offset === this.pathOffset) {
                        var i = this._constraintData
                          , n = e._displayData
                          , r = !1
                          , s = e._deformVertices;
                        if (this._root._childrenTransformDirty ? (this._updatePathVertices(n.vertices),
                        r = !0) : null !== s && (s.verticesDirty || s.isBonesUpdate()) && (this._updatePathVertices(n.vertices),
                        s.verticesDirty = !1,
                        r = !0),
                        r || this.dirty) {
                            var a = i.positionMode
                              , o = i.spacingMode
                              , l = i.rotateMode
                              , h = this._bones
                              , c = 0 === o
                              , u = 2 === l
                              , _ = 0 === l
                              , f = h.length
                              , d = _ ? f : f + 1
                              , p = this.spacing
                              , m = this._spaces;
                            if (m.length = d,
                            u || c) {
                                m[0] = 0;
                                for (var y = 0, v = d - 1; y < v; y++) {
                                    (I = h[y]).updateByConstraint();
                                    var g = I._boneData.length
                                      , A = g * (P = I.globalTransformMatrix).a
                                      , x = g * P.b
                                      , b = Math.sqrt(A * A + x * x);
                                    u && (this._boneLengths[y] = b),
                                    m[y + 1] = (g + p) * b / g
                                }
                            } else
                                for (y = 0; y < d; y++)
                                    m[y] = p;
                            this._computeBezierCurve(n, d, _, 1 === a, 2 === o);
                            var C, T = this._positions, S = this.rotateOffset, w = T[0], E = T[1];
                            0 === S ? C = 1 === l : (C = !1,
                            null !== (I = e.parent) && (S *= (P = I.globalTransformMatrix).a * P.d - P.b * P.c > 0 ? t.Transform.DEG_RAD : -t.Transform.DEG_RAD));
                            for (var M = this.rotateMix, D = this.translateMix, B = (y = 0,
                            3); y < f; y++,
                            B += 3) {
                                var I, P;
                                (I = h[y]).updateByConstraint(),
                                (P = I.globalTransformMatrix).tx += (w - P.tx) * D,
                                P.ty += (E - P.ty) * D;
                                var R = (A = T[B]) - w
                                  , O = (x = T[B + 1]) - E;
                                if (u) {
                                    var L = this._boneLengths[y]
                                      , F = (Math.sqrt(R * R + O * O) / L - 1) * M + 1;
                                    P.a *= F,
                                    P.b *= F
                                }
                                if (w = A,
                                E = x,
                                M > 0) {
                                    var V = P.a
                                      , N = P.b
                                      , k = P.c
                                      , G = P.d
                                      , U = void 0
                                      , z = void 0
                                      , H = void 0;
                                    if (U = _ ? T[B - 1] : Math.atan2(O, R),
                                    U -= Math.atan2(N, V),
                                    C) {
                                        z = Math.cos(U),
                                        H = Math.sin(U);
                                        var W = I._boneData.length;
                                        w += (W * (z * V - H * N) - R) * M,
                                        E += (W * (H * V + z * N) - O) * M
                                    } else
                                        U += S;
                                    U > t.Transform.PI ? U -= t.Transform.PI_D : U < -t.Transform.PI && (U += t.Transform.PI_D),
                                    U *= M,
                                    z = Math.cos(U),
                                    H = Math.sin(U),
                                    P.a = z * V - H * N,
                                    P.b = H * V + z * N,
                                    P.c = z * k - H * G,
                                    P.d = H * k + z * G
                                }
                                I.global.fromMatrix(P)
                            }
                            this.dirty = !1
                        }
                    }
                }
                ,
                i.prototype.invalidUpdate = function() {}
                ,
                i
            }
            )(e);
            t.PathConstraint = n
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t) {
                    void 0 === t && (t = 0),
                    this.time = 0,
                    this.timeScale = 1,
                    this._systemTime = 0,
                    this._animatebles = [],
                    this._clock = null,
                    this.time = t,
                    this._systemTime = .001 * (new Date).getTime()
                }
                return t.prototype.advanceTime = function(t) {
                    t != t && (t = 0);
                    var e = .001 * Date.now();
                    if (t < 0 && (t = e - this._systemTime),
                    this._systemTime = e,
                    1 !== this.timeScale && (t *= this.timeScale),
                    0 !== t) {
                        t < 0 ? this.time -= t : this.time += t;
                        for (var i = 0, n = 0, r = this._animatebles.length; i < r; ++i) {
                            var s = this._animatebles[i];
                            null !== s ? (n > 0 && (this._animatebles[i - n] = s,
                            this._animatebles[i] = null),
                            s.advanceTime(t)) : n++
                        }
                        if (n > 0) {
                            for (r = this._animatebles.length; i < r; ++i) {
                                var a = this._animatebles[i];
                                null !== a ? this._animatebles[i - n] = a : n++
                            }
                            this._animatebles.length -= n
                        }
                    }
                }
                ,
                t.prototype.contains = function(t) {
                    if (t === this)
                        return !1;
                    for (var e = t; e !== this && null !== e; )
                        e = e.clock;
                    return e === this
                }
                ,
                t.prototype.add = function(t) {
                    this._animatebles.indexOf(t) < 0 && (this._animatebles.push(t),
                    t.clock = this)
                }
                ,
                t.prototype.remove = function(t) {
                    var e = this._animatebles.indexOf(t);
                    e >= 0 && (this._animatebles[e] = null,
                    t.clock = null)
                }
                ,
                t.prototype.clear = function() {
                    for (var t = 0, e = this._animatebles; t < e.length; t++) {
                        var i = e[t];
                        null !== i && (i.clock = null)
                    }
                }
                ,
                Object.defineProperty(t.prototype, "clock", {
                    get: function() {
                        return this._clock
                    },
                    set: function(t) {
                        this._clock !== t && (null !== this._clock && this._clock.remove(this),
                        this._clock = t,
                        null !== this._clock && this._clock.add(this))
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                t.clock = new t,
                t
            }
            )();
            t.WorldClock = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._animationNames = [],
                    t._animationStates = [],
                    t._animations = {},
                    t._animationConfig = null,
                    t
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.Animation]"
                }
                ,
                i.prototype._onClear = function() {
                    for (var t = 0, e = this._animationStates; t < e.length; t++)
                        e[t].returnToPool();
                    for (var i in this._animations)
                        delete this._animations[i];
                    null !== this._animationConfig && this._animationConfig.returnToPool(),
                    this.timeScale = 1,
                    this._lockUpdate = !1,
                    this._animationDirty = !1,
                    this._inheritTimeScale = 1,
                    this._animationNames.length = 0,
                    this._animationStates.length = 0,
                    this._armature = null,
                    this._animationConfig = null,
                    this._lastAnimationState = null
                }
                ,
                i.prototype._fadeOut = function(t) {
                    switch (t.fadeOutMode) {
                    case 1:
                        for (var e = 0, i = this._animationStates; e < i.length; e++)
                            null === (h = i[e])._parent && h.layer === t.layer && h.fadeOut(t.fadeOutTime, t.pauseFadeOut);
                        break;
                    case 2:
                        for (var n = 0, r = this._animationStates; n < r.length; n++)
                            null === (h = r[n])._parent && h.group === t.group && h.fadeOut(t.fadeOutTime, t.pauseFadeOut);
                        break;
                    case 3:
                        for (var s = 0, a = this._animationStates; s < a.length; s++)
                            null === (h = a[s])._parent && h.layer === t.layer && h.group === t.group && h.fadeOut(t.fadeOutTime, t.pauseFadeOut);
                        break;
                    case 4:
                        for (var o = 0, l = this._animationStates; o < l.length; o++) {
                            var h;
                            null === (h = l[o])._parent && h.fadeOut(t.fadeOutTime, t.pauseFadeOut)
                        }
                    }
                }
                ,
                i.prototype.init = function(e) {
                    null === this._armature && (this._armature = e,
                    this._animationConfig = t.BaseObject.borrowObject(t.AnimationConfig))
                }
                ,
                i.prototype.advanceTime = function(t) {
                    t < 0 && (t = -t),
                    this._armature.inheritAnimation && null !== this._armature._parent ? this._inheritTimeScale = this._armature._parent._armature.animation._inheritTimeScale * this.timeScale : this._inheritTimeScale = this.timeScale,
                    1 !== this._inheritTimeScale && (t *= this._inheritTimeScale);
                    var e = this._animationStates.length;
                    if (1 === e)
                        if ((d = this._animationStates[0])._fadeState > 0 && d._subFadeState > 0)
                            this._armature._dragonBones.bufferObject(d),
                            this._animationStates.length = 0,
                            this._lastAnimationState = null;
                        else {
                            var i = d._animationData
                              , n = i.cacheFrameRate;
                            if (this._animationDirty && n > 0) {
                                this._animationDirty = !1;
                                for (var r = 0, s = this._armature.getBones(); r < s.length; r++) {
                                    var a = s[r];
                                    a._cachedFrameIndices = i.getBoneCachedFrameIndices(a.name)
                                }
                                for (var o = 0, l = this._armature.getSlots(); o < l.length; o++) {
                                    var h = l[o]
                                      , c = h.rawDisplayDatas;
                                    if (null !== c && c.length > 0) {
                                        var u = c[0];
                                        if (null !== u && u.parent === this._armature.armatureData.defaultSkin) {
                                            h._cachedFrameIndices = i.getSlotCachedFrameIndices(h.name);
                                            continue
                                        }
                                    }
                                    h._cachedFrameIndices = null
                                }
                            }
                            d.advanceTime(t, n)
                        }
                    else if (e > 1) {
                        for (var _ = 0, f = 0; _ < e; ++_) {
                            var d;
                            (d = this._animationStates[_])._fadeState > 0 && d._subFadeState > 0 ? (f++,
                            this._armature._dragonBones.bufferObject(d),
                            this._animationDirty = !0,
                            this._lastAnimationState === d && (this._lastAnimationState = null)) : (f > 0 && (this._animationStates[_ - f] = d),
                            d.advanceTime(t, 0)),
                            _ === e - 1 && f > 0 && (this._animationStates.length -= f,
                            null === this._lastAnimationState && this._animationStates.length > 0 && (this._lastAnimationState = this._animationStates[this._animationStates.length - 1]))
                        }
                        this._armature._cacheFrameIndex = -1
                    } else
                        this._armature._cacheFrameIndex = -1
                }
                ,
                i.prototype.reset = function() {
                    for (var t = 0, e = this._animationStates; t < e.length; t++)
                        e[t].returnToPool();
                    this._animationDirty = !1,
                    this._animationConfig.clear(),
                    this._animationStates.length = 0,
                    this._lastAnimationState = null
                }
                ,
                i.prototype.stop = function(t) {
                    if (void 0 === t && (t = null),
                    null !== t)
                        null !== (n = this.getState(t)) && n.stop();
                    else
                        for (var e = 0, i = this._animationStates; e < i.length; e++) {
                            var n;
                            (n = i[e]).stop()
                        }
                }
                ,
                i.prototype.playConfig = function(e) {
                    var i = e.animation;
                    if (!(i in this._animations))
                        return console.warn("Non-existent animation.\n", "DragonBones name: " + this._armature.armatureData.parent.name, "Armature name: " + this._armature.name, "Animation name: " + i),
                        null;
                    var n = this._animations[i];
                    if (5 === e.fadeOutMode)
                        for (var r = 0, s = this._animationStates; r < s.length; r++) {
                            var a = s[r];
                            if (a._animationData === n)
                                return a
                        }
                    0 === this._animationStates.length ? e.fadeInTime = 0 : e.fadeInTime < 0 && (e.fadeInTime = n.fadeInTime),
                    e.fadeOutTime < 0 && (e.fadeOutTime = e.fadeInTime),
                    e.timeScale <= -100 && (e.timeScale = 1 / n.scale),
                    n.frameCount > 1 ? (e.position < 0 ? (e.position %= n.duration,
                    e.position = n.duration - e.position) : e.position === n.duration ? e.position -= 1e-6 : e.position > n.duration && (e.position %= n.duration),
                    e.duration > 0 && e.position + e.duration > n.duration && (e.duration = n.duration - e.position),
                    e.playTimes < 0 && (e.playTimes = n.playTimes)) : (e.playTimes = 1,
                    e.position = 0,
                    e.duration > 0 && (e.duration = 0)),
                    0 === e.duration && (e.duration = -1),
                    this._fadeOut(e);
                    var o = t.BaseObject.borrowObject(t.AnimationState);
                    if (o.init(this._armature, n, e),
                    this._animationDirty = !0,
                    this._armature._cacheFrameIndex = -1,
                    this._animationStates.length > 0) {
                        for (var l = !1, h = 0, c = this._animationStates.length; h < c; ++h) {
                            if (o.layer > this._animationStates[h].layer) {
                                l = !0,
                                this._animationStates.splice(h, 0, o);
                                break
                            }
                            if (h !== c - 1 && o.layer > this._animationStates[h + 1].layer) {
                                l = !0,
                                this._animationStates.splice(h + 1, 0, o);
                                break
                            }
                        }
                        l || this._animationStates.push(o)
                    } else
                        this._animationStates.push(o);
                    for (var u = 0, _ = this._armature.getSlots(); u < _.length; u++) {
                        var f = _[u].childArmature;
                        null !== f && f.inheritAnimation && f.animation.hasAnimation(i) && null === f.animation.getState(i) && f.animation.fadeIn(i)
                    }
                    var d = !1;
                    for (var p in n.animationTimelines) {
                        this._lockUpdate || (d = !0,
                        this._lockUpdate = !0);
                        var m = this.fadeIn(p, e.fadeInTime, 1, o.layer, null, 0);
                        null !== m && (m.resetToPose = !1,
                        m._parent = o,
                        m.stop())
                    }
                    return d && (this._lockUpdate = !1),
                    this._lockUpdate || (e.fadeInTime <= 0 && this._armature.advanceTime(0),
                    this._lastAnimationState = o),
                    o
                }
                ,
                i.prototype.play = function(t, e) {
                    if (void 0 === t && (t = null),
                    void 0 === e && (e = -1),
                    this._animationConfig.clear(),
                    this._animationConfig.resetToPose = !0,
                    this._animationConfig.playTimes = e,
                    this._animationConfig.fadeInTime = 0,
                    this._animationConfig.animation = null !== t ? t : "",
                    null !== t && t.length > 0)
                        this.playConfig(this._animationConfig);
                    else if (null === this._lastAnimationState) {
                        var i = this._armature.armatureData.defaultAnimation;
                        null !== i && (this._animationConfig.animation = i.name,
                        this.playConfig(this._animationConfig))
                    } else
                        this._lastAnimationState.isPlaying || this._lastAnimationState.isCompleted ? (this._animationConfig.animation = this._lastAnimationState.name,
                        this.playConfig(this._animationConfig)) : this._lastAnimationState.play();
                    return this._lastAnimationState
                }
                ,
                i.prototype.fadeIn = function(t, e, i, n, r, s) {
                    return void 0 === e && (e = -1),
                    void 0 === i && (i = -1),
                    void 0 === n && (n = 0),
                    void 0 === r && (r = null),
                    void 0 === s && (s = 3),
                    this._animationConfig.clear(),
                    this._animationConfig.fadeOutMode = s,
                    this._animationConfig.playTimes = i,
                    this._animationConfig.layer = n,
                    this._animationConfig.fadeInTime = e,
                    this._animationConfig.animation = t,
                    this._animationConfig.group = null !== r ? r : "",
                    this.playConfig(this._animationConfig)
                }
                ,
                i.prototype.gotoAndPlayByTime = function(t, e, i) {
                    return void 0 === e && (e = 0),
                    void 0 === i && (i = -1),
                    this._animationConfig.clear(),
                    this._animationConfig.resetToPose = !0,
                    this._animationConfig.playTimes = i,
                    this._animationConfig.position = e,
                    this._animationConfig.fadeInTime = 0,
                    this._animationConfig.animation = t,
                    this.playConfig(this._animationConfig)
                }
                ,
                i.prototype.gotoAndPlayByFrame = function(t, e, i) {
                    void 0 === e && (e = 0),
                    void 0 === i && (i = -1),
                    this._animationConfig.clear(),
                    this._animationConfig.resetToPose = !0,
                    this._animationConfig.playTimes = i,
                    this._animationConfig.fadeInTime = 0,
                    this._animationConfig.animation = t;
                    var n = t in this._animations ? this._animations[t] : null;
                    return null !== n && (this._animationConfig.position = n.duration * e / n.frameCount),
                    this.playConfig(this._animationConfig)
                }
                ,
                i.prototype.gotoAndPlayByProgress = function(t, e, i) {
                    void 0 === e && (e = 0),
                    void 0 === i && (i = -1),
                    this._animationConfig.clear(),
                    this._animationConfig.resetToPose = !0,
                    this._animationConfig.playTimes = i,
                    this._animationConfig.fadeInTime = 0,
                    this._animationConfig.animation = t;
                    var n = t in this._animations ? this._animations[t] : null;
                    return null !== n && (this._animationConfig.position = n.duration * (e > 0 ? e : 0)),
                    this.playConfig(this._animationConfig)
                }
                ,
                i.prototype.gotoAndStopByTime = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByTime(t, e, 1);
                    return null !== i && i.stop(),
                    i
                }
                ,
                i.prototype.gotoAndStopByFrame = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByFrame(t, e, 1);
                    return null !== i && i.stop(),
                    i
                }
                ,
                i.prototype.gotoAndStopByProgress = function(t, e) {
                    void 0 === e && (e = 0);
                    var i = this.gotoAndPlayByProgress(t, e, 1);
                    return null !== i && i.stop(),
                    i
                }
                ,
                i.prototype.getState = function(t) {
                    for (var e = this._animationStates.length; e--; ) {
                        var i = this._animationStates[e];
                        if (i.name === t)
                            return i
                    }
                    return null
                }
                ,
                i.prototype.hasAnimation = function(t) {
                    return t in this._animations
                }
                ,
                i.prototype.getStates = function() {
                    return this._animationStates
                }
                ,
                Object.defineProperty(i.prototype, "isPlaying", {
                    get: function() {
                        for (var t = 0, e = this._animationStates; t < e.length; t++)
                            if (e[t].isPlaying)
                                return !0;
                        return !1
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "isCompleted", {
                    get: function() {
                        for (var t = 0, e = this._animationStates; t < e.length; t++)
                            if (!e[t].isCompleted)
                                return !1;
                        return this._animationStates.length > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "lastAnimationName", {
                    get: function() {
                        return null !== this._lastAnimationState ? this._lastAnimationState.name : ""
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "animationNames", {
                    get: function() {
                        return this._animationNames
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "animations", {
                    get: function() {
                        return this._animations
                    },
                    set: function(t) {
                        if (this._animations !== t) {
                            for (var e in this._animationNames.length = 0,
                            this._animations)
                                delete this._animations[e];
                            for (var e in t)
                                this._animationNames.push(e),
                                this._animations[e] = t[e]
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "animationConfig", {
                    get: function() {
                        return this._animationConfig.clear(),
                        this._animationConfig
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "lastAnimationState", {
                    get: function() {
                        return this._lastAnimationState
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i.prototype.gotoAndPlay = function(t, e, i, n, r, s, a, o, l) {
                    void 0 === e && (e = -1),
                    void 0 === i && (i = -1),
                    void 0 === n && (n = -1),
                    void 0 === r && (r = 0),
                    void 0 === s && (s = null),
                    void 0 === a && (a = 3),
                    void 0 === o && (o = !0),
                    void 0 === l && (l = !0),
                    console.warn("Deprecated."),
                    this._animationConfig.clear(),
                    this._animationConfig.resetToPose = !0,
                    this._animationConfig.fadeOutMode = a,
                    this._animationConfig.playTimes = n,
                    this._animationConfig.layer = r,
                    this._animationConfig.fadeInTime = e,
                    this._animationConfig.animation = t,
                    this._animationConfig.group = null !== s ? s : "";
                    var h = this._animations[t];
                    return h && i > 0 && (this._animationConfig.timeScale = h.duration / i),
                    this.playConfig(this._animationConfig)
                }
                ,
                i.prototype.gotoAndStop = function(t, e) {
                    return void 0 === e && (e = 0),
                    console.warn("Deprecated."),
                    this.gotoAndStopByTime(t, e)
                }
                ,
                Object.defineProperty(i.prototype, "animationList", {
                    get: function() {
                        return console.warn("Deprecated."),
                        this._animationNames
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(i.prototype, "animationDataList", {
                    get: function() {
                        console.warn("Deprecated.");
                        for (var t = [], e = 0, i = this._animationNames.length; e < i; ++e)
                            t.push(this._animations[this._animationNames[e]]);
                        return t
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                i
            }
            )(t.BaseObject);
            t.Animation = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function r() {
                    var t = null !== e && e.apply(this, arguments) || this;
                    return t._blendState = new n,
                    t._boneMask = [],
                    t._boneTimelines = [],
                    t._surfaceTimelines = [],
                    t._slotTimelines = [],
                    t._constraintTimelines = [],
                    t._animationTimelines = [],
                    t._poseTimelines = [],
                    t._bonePoses = {},
                    t._actionTimeline = null,
                    t._zOrderTimeline = null,
                    t._parent = null,
                    t
                }
                return s(r, e),
                r.toString = function() {
                    return "[class dragonBones.AnimationState]"
                }
                ,
                r.prototype._onClear = function() {
                    for (var t = 0, e = this._boneTimelines; t < e.length; t++)
                        e[t].returnToPool();
                    for (var i = 0, n = this._surfaceTimelines; i < n.length; i++)
                        n[i].returnToPool();
                    for (var r = 0, s = this._slotTimelines; r < s.length; r++)
                        s[r].returnToPool();
                    for (var a = 0, o = this._constraintTimelines; a < o.length; a++)
                        o[a].returnToPool();
                    for (var l = 0, h = this._animationTimelines; l < h.length; l++)
                        h[l].returnToPool();
                    for (var c in this._bonePoses)
                        this._bonePoses[c].returnToPool(),
                        delete this._bonePoses[c];
                    null !== this._actionTimeline && this._actionTimeline.returnToPool(),
                    null !== this._zOrderTimeline && this._zOrderTimeline.returnToPool(),
                    this.actionEnabled = !1,
                    this.additiveBlending = !1,
                    this.displayControl = !1,
                    this.resetToPose = !1,
                    this.playTimes = 1,
                    this.layer = 0,
                    this.timeScale = 1,
                    this.weight = 1,
                    this.autoFadeOutTime = 0,
                    this.fadeTotalTime = 0,
                    this.name = "",
                    this.group = "",
                    this._timelineDirty = 2,
                    this._playheadState = 0,
                    this._fadeState = -1,
                    this._subFadeState = -1,
                    this._position = 0,
                    this._duration = 0,
                    this._fadeTime = 0,
                    this._time = 0,
                    this._fadeProgress = 0,
                    this._weightResult = 0,
                    this._blendState.clear(),
                    this._boneMask.length = 0,
                    this._boneTimelines.length = 0,
                    this._surfaceTimelines.length = 0,
                    this._slotTimelines.length = 0,
                    this._constraintTimelines.length = 0,
                    this._animationTimelines.length = 0,
                    this._poseTimelines.length = 0,
                    this._animationData = null,
                    this._armature = null,
                    this._actionTimeline = null,
                    this._zOrderTimeline = null,
                    this._parent = null
                }
                ,
                r.prototype._updateTimelines = function() {
                    for (var e = 0, i = this._armature._constraints; e < i.length; e++) {
                        var n = i[e];
                        if (null !== (l = this._animationData.getConstraintTimelines(n.name)))
                            for (var r = 0, s = l; r < s.length; r++)
                                switch ((_ = s[r]).type) {
                                case 30:
                                    (f = t.BaseObject.borrowObject(t.IKConstraintTimelineState)).constraint = n,
                                    f.init(this._armature, this, _),
                                    this._constraintTimelines.push(f)
                                }
                        else
                            this.resetToPose && ((f = t.BaseObject.borrowObject(t.IKConstraintTimelineState)).constraint = n,
                            f.init(this._armature, this, null),
                            this._constraintTimelines.push(f),
                            this._poseTimelines.push(f))
                    }
                    for (var a = 0, o = this._armature.animation.getStates(); a < o.length; a++) {
                        var l, h = o[a];
                        if (h._parent === this && null !== (l = this._animationData.getAnimationTimelines(h.name)))
                            for (var c = 0, u = l; c < u.length; c++) {
                                var _;
                                switch ((_ = u[c]).type) {
                                case 40:
                                    var f;
                                    (f = t.BaseObject.borrowObject(t.AnimationTimelineState)).animationState = h,
                                    f.init(this._armature, this, _),
                                    this._animationTimelines.push(f)
                                }
                            }
                    }
                }
                ,
                r.prototype._updateBoneAndSlotTimelines = function() {
                    for (var e = {}, n = 0, r = this._boneTimelines; n < r.length; n++)
                        (l = (v = r[n]).bone.name)in e || (e[l] = []),
                        e[l].push(v);
                    for (var s = 0, a = this._armature.getBones(); s < a.length; s++) {
                        var o = a[s]
                          , l = o.name;
                        if (this.containsBoneMask(l))
                            if (l in e)
                                delete e[l];
                            else if (0 === o._boneData.type) {
                                var h = this._animationData.getBoneTimelines(l)
                                  , c = l in this._bonePoses ? this._bonePoses[l] : this._bonePoses[l] = t.BaseObject.borrowObject(i);
                                if (null !== h)
                                    for (var u = 0, _ = h; u < _.length; u++)
                                        switch ((I = _[u]).type) {
                                        case 10:
                                            (v = t.BaseObject.borrowObject(t.BoneAllTimelineState)).bone = o,
                                            v.bonePose = c,
                                            v.init(this._armature, this, I),
                                            this._boneTimelines.push(v);
                                            break;
                                        case 11:
                                            (v = t.BaseObject.borrowObject(t.BoneTranslateTimelineState)).bone = o,
                                            v.bonePose = c,
                                            v.init(this._armature, this, I),
                                            this._boneTimelines.push(v);
                                            break;
                                        case 12:
                                            (v = t.BaseObject.borrowObject(t.BoneRotateTimelineState)).bone = o,
                                            v.bonePose = c,
                                            v.init(this._armature, this, I),
                                            this._boneTimelines.push(v);
                                            break;
                                        case 13:
                                            (v = t.BaseObject.borrowObject(t.BoneScaleTimelineState)).bone = o,
                                            v.bonePose = c,
                                            v.init(this._armature, this, I),
                                            this._boneTimelines.push(v)
                                        }
                                else
                                    this.resetToPose && ((v = t.BaseObject.borrowObject(t.BoneAllTimelineState)).bone = o,
                                    v.bonePose = c,
                                    v.init(this._armature, this, null),
                                    this._boneTimelines.push(v),
                                    this._poseTimelines.push(v))
                            } else if (1 === o._boneData.type)
                                if (null !== (h = this._animationData.getSurfaceTimelines(l)))
                                    for (var f = 0, d = h; f < d.length; f++)
                                        switch ((I = d[f]).type) {
                                        case 50:
                                            (v = t.BaseObject.borrowObject(t.SurfaceTimelineState)).surface = o,
                                            v.init(this._armature, this, I),
                                            this._surfaceTimelines.push(v)
                                        }
                                else
                                    this.resetToPose && ((v = t.BaseObject.borrowObject(t.SurfaceTimelineState)).surface = o,
                                    v.init(this._armature, this, null),
                                    this._surfaceTimelines.push(v),
                                    this._poseTimelines.push(v))
                    }
                    for (var p in e)
                        for (var m = 0, y = e[p]; m < y.length; m++) {
                            var v = y[m];
                            this._boneTimelines.splice(this._boneTimelines.indexOf(v), 1),
                            v.returnToPool()
                        }
                    for (var g = {}, A = [], x = 0, b = this._slotTimelines; x < b.length; x++)
                        (l = (v = b[x]).slot.name)in g || (g[l] = []),
                        g[l].push(v);
                    for (var C = 0, T = this._armature.getSlots(); C < T.length; C++) {
                        var S = T[C]
                          , w = S.parent.name;
                        if (this.containsBoneMask(w))
                            if (l = S.name,
                            h = this._animationData.getSlotTimelines(l),
                            l in g)
                                delete g[l];
                            else {
                                var E = !1
                                  , M = !1;
                                if (A.length = 0,
                                null !== h)
                                    for (var D = 0, B = h; D < B.length; D++) {
                                        var I;
                                        switch ((I = B[D]).type) {
                                        case 20:
                                            (v = t.BaseObject.borrowObject(t.SlotDislayTimelineState)).slot = S,
                                            v.init(this._armature, this, I),
                                            this._slotTimelines.push(v),
                                            E = !0;
                                            break;
                                        case 21:
                                            (v = t.BaseObject.borrowObject(t.SlotColorTimelineState)).slot = S,
                                            v.init(this._armature, this, I),
                                            this._slotTimelines.push(v),
                                            M = !0;
                                            break;
                                        case 22:
                                            (v = t.BaseObject.borrowObject(t.DeformTimelineState)).slot = S,
                                            v.init(this._armature, this, I),
                                            this._slotTimelines.push(v),
                                            A.push(v.vertexOffset)
                                        }
                                    }
                                if (this.resetToPose && (E || ((v = t.BaseObject.borrowObject(t.SlotDislayTimelineState)).slot = S,
                                v.init(this._armature, this, null),
                                this._slotTimelines.push(v),
                                this._poseTimelines.push(v)),
                                M || ((v = t.BaseObject.borrowObject(t.SlotColorTimelineState)).slot = S,
                                v.init(this._armature, this, null),
                                this._slotTimelines.push(v),
                                this._poseTimelines.push(v)),
                                null !== S.rawDisplayDatas))
                                    for (var P = 0, R = S.rawDisplayDatas; P < R.length; P++) {
                                        var O = R[P];
                                        if (null !== O && 2 === O.type) {
                                            var L = O.vertices.offset;
                                            A.indexOf(L) < 0 && ((v = t.BaseObject.borrowObject(t.DeformTimelineState)).vertexOffset = L,
                                            v.slot = S,
                                            v.init(this._armature, this, null),
                                            this._slotTimelines.push(v),
                                            this._poseTimelines.push(v))
                                        }
                                    }
                            }
                    }
                    for (var p in g)
                        for (var F = 0, V = g[p]; F < V.length; F++)
                            v = V[F],
                            this._slotTimelines.splice(this._slotTimelines.indexOf(v), 1),
                            v.returnToPool()
                }
                ,
                r.prototype._advanceFadeTime = function(e) {
                    var i, n = this._fadeState > 0;
                    if (this._subFadeState < 0) {
                        this._subFadeState = 0;
                        var r = n ? t.EventObject.FADE_OUT : t.EventObject.FADE_IN;
                        this._armature.eventDispatcher.hasDBEventListener(r) && ((i = t.BaseObject.borrowObject(t.EventObject)).type = r,
                        i.armature = this._armature,
                        i.animationState = this,
                        this._armature._dragonBones.bufferEvent(i))
                    }
                    (e < 0 && (e = -e),
                    this._fadeTime += e,
                    this._fadeTime >= this.fadeTotalTime ? (this._subFadeState = 1,
                    this._fadeProgress = n ? 0 : 1) : this._fadeTime > 0 ? this._fadeProgress = n ? 1 - this._fadeTime / this.fadeTotalTime : this._fadeTime / this.fadeTotalTime : this._fadeProgress = n ? 1 : 0,
                    this._subFadeState > 0) && (n || (this._playheadState |= 1,
                    this._fadeState = 0),
                    r = n ? t.EventObject.FADE_OUT_COMPLETE : t.EventObject.FADE_IN_COMPLETE,
                    this._armature.eventDispatcher.hasDBEventListener(r) && ((i = t.BaseObject.borrowObject(t.EventObject)).type = r,
                    i.armature = this._armature,
                    i.animationState = this,
                    this._armature._dragonBones.bufferEvent(i)))
                }
                ,
                r.prototype.init = function(e, i, n) {
                    if (null === this._armature) {
                        if (this._armature = e,
                        this._animationData = i,
                        this.resetToPose = n.resetToPose,
                        this.additiveBlending = n.additiveBlending,
                        this.displayControl = n.displayControl,
                        this.actionEnabled = n.actionEnabled,
                        this.layer = n.layer,
                        this.playTimes = n.playTimes,
                        this.timeScale = n.timeScale,
                        this.fadeTotalTime = n.fadeInTime,
                        this.autoFadeOutTime = n.autoFadeOutTime,
                        this.weight = n.weight,
                        this.name = n.name.length > 0 ? n.name : n.animation,
                        this.group = n.group,
                        n.pauseFadeIn ? this._playheadState = 2 : this._playheadState = 3,
                        n.duration < 0 ? (this._position = 0,
                        this._duration = this._animationData.duration,
                        0 !== n.position ? this.timeScale >= 0 ? this._time = n.position : this._time = n.position - this._duration : this._time = 0) : (this._position = n.position,
                        this._duration = n.duration,
                        this._time = 0),
                        this.timeScale < 0 && 0 === this._time && (this._time = -1e-6),
                        this.fadeTotalTime <= 0 && (this._fadeProgress = .999999),
                        n.boneMask.length > 0) {
                            this._boneMask.length = n.boneMask.length;
                            for (var r = 0, s = this._boneMask.length; r < s; ++r)
                                this._boneMask[r] = n.boneMask[r]
                        }
                        this._actionTimeline = t.BaseObject.borrowObject(t.ActionTimelineState),
                        this._actionTimeline.init(this._armature, this, this._animationData.actionTimeline),
                        this._actionTimeline.currentTime = this._time,
                        this._actionTimeline.currentTime < 0 && (this._actionTimeline.currentTime = this._duration - this._actionTimeline.currentTime),
                        null !== this._animationData.zOrderTimeline && (this._zOrderTimeline = t.BaseObject.borrowObject(t.ZOrderTimelineState),
                        this._zOrderTimeline.init(this._armature, this, this._animationData.zOrderTimeline))
                    }
                }
                ,
                r.prototype.advanceTime = function(e, i) {
                    if (this._blendState.dirty = !1,
                    0 === this._fadeState && 0 === this._subFadeState || this._advanceFadeTime(e),
                    3 === this._playheadState && (1 !== this.timeScale && (e *= this.timeScale),
                    this._time += e),
                    0 !== this._timelineDirty && (2 === this._timelineDirty && this._updateTimelines(),
                    this._timelineDirty = 0,
                    this._updateBoneAndSlotTimelines()),
                    0 !== this.weight) {
                        var n = 0 === this._fadeState && i > 0
                          , r = !0
                          , s = !0
                          , a = this._time;
                        if (this._weightResult = this.weight * this._fadeProgress,
                        null !== this._parent && (this._weightResult *= this._parent._weightResult / this._parent._fadeProgress),
                        this._actionTimeline.playState <= 0 && this._actionTimeline.update(a),
                        n) {
                            var o = 2 * i;
                            this._actionTimeline.currentTime = Math.floor(this._actionTimeline.currentTime * o) / o
                        }
                        if (null !== this._zOrderTimeline && this._zOrderTimeline.playState <= 0 && this._zOrderTimeline.update(a),
                        n) {
                            var l = Math.floor(this._actionTimeline.currentTime * i);
                            this._armature._cacheFrameIndex === l ? (r = !1,
                            s = !1) : (this._armature._cacheFrameIndex = l,
                            this._animationData.cachedFrames[l] ? s = !1 : this._animationData.cachedFrames[l] = !0)
                        }
                        if (r) {
                            if (s)
                                for (var h = 0, c = this._boneTimelines.length; h < c; ++h)
                                    (p = this._boneTimelines[h]).playState <= 0 && p.update(a),
                                    (h === c - 1 || p.bone !== this._boneTimelines[h + 1].bone) && 0 !== (u = p.bone._blendState.update(this._weightResult, this.layer)) && p.blend(u);
                            for (h = 0,
                            c = this._surfaceTimelines.length; h < c; ++h) {
                                var u = (p = this._surfaceTimelines[h]).surface._blendState.update(this._weightResult, this.layer);
                                p.playState <= 0 && p.update(a),
                                0 !== u && p.blend(u)
                            }
                            if (this.displayControl)
                                for (h = 0,
                                c = this._slotTimelines.length; h < c; ++h) {
                                    var _ = (p = this._slotTimelines[h]).slot.displayController;
                                    null !== _ && _ !== this.name && _ !== this.group || p.playState <= 0 && p.update(a)
                                }
                            for (h = 0,
                            c = this._constraintTimelines.length; h < c; ++h)
                                (p = this._constraintTimelines[h]).playState <= 0 && p.update(a);
                            for (h = 0,
                            c = this._animationTimelines.length; h < c; ++h)
                                u = (p = this._animationTimelines[h]).animationState._blendState.update(this._weightResult, this.layer),
                                p.playState <= 0 && p.update(a),
                                0 !== u && p.blend(u)
                        }
                        if (0 === this._fadeState) {
                            if (this._subFadeState > 0 && (this._subFadeState = 0,
                            this._poseTimelines.length > 0)) {
                                for (var f = 0, d = this._poseTimelines; f < d.length; f++) {
                                    var p;
                                    (p = d[f])instanceof t.BoneTimelineState ? this._boneTimelines.splice(this._boneTimelines.indexOf(p), 1) : p instanceof t.SurfaceTimelineState ? this._surfaceTimelines.splice(this._surfaceTimelines.indexOf(p), 1) : p instanceof t.SlotTimelineState ? this._slotTimelines.splice(this._slotTimelines.indexOf(p), 1) : p instanceof t.ConstraintTimelineState && this._constraintTimelines.splice(this._constraintTimelines.indexOf(p), 1),
                                    p.returnToPool()
                                }
                                this._poseTimelines.length = 0
                            }
                            this._actionTimeline.playState > 0 && this.autoFadeOutTime >= 0 && this.fadeOut(this.autoFadeOutTime)
                        }
                    }
                }
                ,
                r.prototype.play = function() {
                    this._playheadState = 3
                }
                ,
                r.prototype.stop = function() {
                    this._playheadState &= 1
                }
                ,
                r.prototype.fadeOut = function(t, e) {
                    if (void 0 === e && (e = !0),
                    t < 0 && (t = 0),
                    e && (this._playheadState &= 2),
                    this._fadeState > 0) {
                        if (t > this.fadeTotalTime - this._fadeTime)
                            return
                    } else {
                        this._fadeState = 1,
                        this._subFadeState = -1,
                        (t <= 0 || this._fadeProgress <= 0) && (this._fadeProgress = 1e-6);
                        for (var i = 0, n = this._boneTimelines; i < n.length; i++)
                            (_ = n[i]).fadeOut();
                        for (var r = 0, s = this._surfaceTimelines; r < s.length; r++)
                            (_ = s[r]).fadeOut();
                        for (var a = 0, o = this._slotTimelines; a < o.length; a++)
                            (_ = o[a]).fadeOut();
                        for (var l = 0, h = this._constraintTimelines; l < h.length; l++)
                            (_ = h[l]).fadeOut();
                        for (var c = 0, u = this._animationTimelines; c < u.length; c++) {
                            var _;
                            (_ = u[c]).animationState.fadeOut(t, e),
                            _.fadeOut()
                        }
                    }
                    this.displayControl = !1,
                    this.fadeTotalTime = this._fadeProgress > 1e-6 ? t / this._fadeProgress : 0,
                    this._fadeTime = this.fadeTotalTime * (1 - this._fadeProgress)
                }
                ,
                r.prototype.containsBoneMask = function(t) {
                    return 0 === this._boneMask.length || this._boneMask.indexOf(t) >= 0
                }
                ,
                r.prototype.addBoneMask = function(t, e) {
                    void 0 === e && (e = !0);
                    var i = this._armature.getBone(t);
                    if (null !== i) {
                        if (this._boneMask.indexOf(t) < 0 && this._boneMask.push(t),
                        e)
                            for (var n = 0, r = this._armature.getBones(); n < r.length; n++) {
                                var s = r[n];
                                this._boneMask.indexOf(s.name) < 0 && i.contains(s) && this._boneMask.push(s.name)
                            }
                        this._timelineDirty = 1
                    }
                }
                ,
                r.prototype.removeBoneMask = function(t, e) {
                    void 0 === e && (e = !0);
                    var i = this._boneMask.indexOf(t);
                    if (i >= 0 && this._boneMask.splice(i, 1),
                    e) {
                        var n = this._armature.getBone(t);
                        if (null !== n) {
                            var r = this._armature.getBones();
                            if (this._boneMask.length > 0)
                                for (var s = 0, a = r; s < a.length; s++) {
                                    var o = a[s]
                                      , l = this._boneMask.indexOf(o.name);
                                    l >= 0 && n.contains(o) && this._boneMask.splice(l, 1)
                                }
                            else
                                for (var h = 0, c = r; h < c.length; h++)
                                    (o = c[h]) !== n && (n.contains(o) || this._boneMask.push(o.name))
                        }
                    }
                    this._timelineDirty = 1
                }
                ,
                r.prototype.removeAllBoneMask = function() {
                    this._boneMask.length = 0,
                    this._timelineDirty = 1
                }
                ,
                Object.defineProperty(r.prototype, "isFadeIn", {
                    get: function() {
                        return this._fadeState < 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "isFadeOut", {
                    get: function() {
                        return this._fadeState > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "isFadeComplete", {
                    get: function() {
                        return 0 === this._fadeState
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "isPlaying", {
                    get: function() {
                        return 0 != (2 & this._playheadState) && this._actionTimeline.playState <= 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "isCompleted", {
                    get: function() {
                        return this._actionTimeline.playState > 0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "currentPlayTimes", {
                    get: function() {
                        return this._actionTimeline.currentPlayTimes
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "totalTime", {
                    get: function() {
                        return this._duration
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "currentTime", {
                    get: function() {
                        return this._actionTimeline.currentTime
                    },
                    set: function(t) {
                        var e = this._actionTimeline.currentPlayTimes - (this._actionTimeline.playState > 0 ? 1 : 0);
                        if ((t < 0 || this._duration < t) && (t = t % this._duration + e * this._duration) < 0 && (t += this._duration),
                        this.playTimes > 0 && e === this.playTimes - 1 && t === this._duration && (t = this._duration - 1e-6),
                        this._time !== t) {
                            this._time = t,
                            this._actionTimeline.setCurrentTime(this._time),
                            null !== this._zOrderTimeline && (this._zOrderTimeline.playState = -1);
                            for (var i = 0, n = this._boneTimelines; i < n.length; i++)
                                n[i].playState = -1;
                            for (var r = 0, s = this._slotTimelines; r < s.length; r++)
                                s[r].playState = -1
                        }
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(r.prototype, "animationData", {
                    get: function() {
                        return this._animationData
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                r
            }
            )(t.BaseObject);
            t.AnimationState = e;
            var i = (function(e) {
                function i() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i.current = new t.Transform,
                    i.delta = new t.Transform,
                    i.result = new t.Transform,
                    i
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.BonePose]"
                }
                ,
                i.prototype._onClear = function() {
                    this.current.identity(),
                    this.delta.identity(),
                    this.result.identity()
                }
                ,
                i
            }
            )(t.BaseObject);
            t.BonePose = i;
            var n = (function() {
                function t() {}
                return t.prototype.update = function(t, e) {
                    if (this.dirty) {
                        if (!(this.leftWeight > 0))
                            return 0;
                        if (this.layer !== e) {
                            if (this.layerWeight >= this.leftWeight)
                                return this.leftWeight = 0,
                                0;
                            this.layer = e,
                            this.leftWeight -= this.layerWeight,
                            this.layerWeight = 0
                        }
                        return t *= this.leftWeight,
                        this.layerWeight += t,
                        this.blendWeight = t,
                        2
                    }
                    return this.dirty = !0,
                    this.layer = e,
                    this.layerWeight = t,
                    this.leftWeight = 1,
                    this.blendWeight = t,
                    1
                }
                ,
                t.prototype.clear = function() {
                    this.dirty = !1,
                    this.layer = 0,
                    this.leftWeight = 0,
                    this.layerWeight = 0,
                    this.blendWeight = 0
                }
                ,
                t
            }
            )();
            t.BlendState = n
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    this.playState = -1,
                    this.currentPlayTimes = -1,
                    this.currentTime = -1,
                    this._tweenState = 0,
                    this._frameRate = 0,
                    this._frameValueOffset = 0,
                    this._frameCount = 0,
                    this._frameOffset = 0,
                    this._frameIndex = -1,
                    this._frameRateR = 0,
                    this._position = 0,
                    this._duration = 0,
                    this._timeScale = 1,
                    this._timeOffset = 0,
                    this._dragonBonesData = null,
                    this._animationData = null,
                    this._timelineData = null,
                    this._armature = null,
                    this._animationState = null,
                    this._actionTimeline = null,
                    this._frameArray = null,
                    this._frameIntArray = null,
                    this._frameFloatArray = null,
                    this._timelineArray = null,
                    this._frameIndices = null
                }
                ,
                e.prototype._setCurrentTime = function(t) {
                    var e = this.playState
                      , i = this.currentPlayTimes
                      , n = this.currentTime;
                    if (null !== this._actionTimeline && this._frameCount <= 1)
                        this.playState = this._actionTimeline.playState >= 0 ? 1 : -1,
                        this.currentPlayTimes = 1,
                        this.currentTime = this._actionTimeline.currentTime;
                    else if (null === this._actionTimeline || 1 !== this._timeScale || 0 !== this._timeOffset) {
                        var r = this._animationState.playTimes
                          , s = r * this._duration;
                        t *= this._timeScale,
                        0 !== this._timeOffset && (t += this._timeOffset * this._animationData.duration),
                        r > 0 && (t >= s || t <= -s) ? (this.playState <= 0 && 3 === this._animationState._playheadState && (this.playState = 1),
                        this.currentPlayTimes = r,
                        this.currentTime = t < 0 ? 0 : this._duration + 1e-6) : (0 !== this.playState && 3 === this._animationState._playheadState && (this.playState = 0),
                        t < 0 ? (t = -t,
                        this.currentPlayTimes = Math.floor(t / this._duration),
                        this.currentTime = this._duration - t % this._duration) : (this.currentPlayTimes = Math.floor(t / this._duration),
                        this.currentTime = t % this._duration)),
                        this.currentTime += this._position
                    } else
                        this.playState = this._actionTimeline.playState,
                        this.currentPlayTimes = this._actionTimeline.currentPlayTimes,
                        this.currentTime = this._actionTimeline.currentTime;
                    return (this.currentPlayTimes !== i || this.currentTime !== n) && ((e < 0 && this.playState !== e || this.playState <= 0 && this.currentPlayTimes !== i) && (this._frameIndex = -1),
                    !0)
                }
                ,
                e.prototype.init = function(t, e, i) {
                    this._armature = t,
                    this._animationState = e,
                    this._timelineData = i,
                    this._actionTimeline = this._animationState._actionTimeline,
                    this === this._actionTimeline && (this._actionTimeline = null),
                    this._animationData = this._animationState._animationData,
                    this._frameRate = this._animationData.parent.frameRate,
                    this._frameRateR = 1 / this._frameRate,
                    this._position = this._animationState._position,
                    this._duration = this._animationState._duration,
                    this._dragonBonesData = this._animationData.parent.parent,
                    null !== this._timelineData && (this._frameIntArray = this._dragonBonesData.frameIntArray,
                    this._frameFloatArray = this._dragonBonesData.frameFloatArray,
                    this._frameArray = this._dragonBonesData.frameArray,
                    this._timelineArray = this._dragonBonesData.timelineArray,
                    this._frameIndices = this._dragonBonesData.frameIndices,
                    this._frameCount = this._timelineArray[this._timelineData.offset + 2],
                    this._frameValueOffset = this._timelineArray[this._timelineData.offset + 4],
                    this._timeScale = 100 / this._timelineArray[this._timelineData.offset + 0],
                    this._timeOffset = .01 * this._timelineArray[this._timelineData.offset + 1])
                }
                ,
                e.prototype.fadeOut = function() {}
                ,
                e.prototype.update = function(t) {
                    if (this._setCurrentTime(t)) {
                        if (this._frameCount > 1) {
                            var e = Math.floor(this.currentTime * this._frameRate)
                              , i = this._frameIndices[this._timelineData.frameIndicesOffset + e];
                            this._frameIndex !== i && (this._frameIndex = i,
                            this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex],
                            this._onArriveAtFrame())
                        } else
                            this._frameIndex < 0 && (this._frameIndex = 0,
                            null !== this._timelineData && (this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5]),
                            this._onArriveAtFrame());
                        0 !== this._tweenState && this._onUpdateFrame()
                    }
                }
                ,
                e
            }
            )(t.BaseObject);
            t.TimelineState = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e._getEasingValue = function(t, e, i) {
                    var n = e;
                    switch (t) {
                    case 3:
                        n = Math.pow(e, 2);
                        break;
                    case 4:
                        n = 1 - Math.pow(1 - e, 2);
                        break;
                    case 5:
                        n = .5 * (1 - Math.cos(e * Math.PI))
                    }
                    return (n - e) * i + e
                }
                ,
                e._getEasingCurveValue = function(t, e, i, n) {
                    if (t <= 0)
                        return 0;
                    if (t >= 1)
                        return 1;
                    var r = i + 1
                      , s = Math.floor(t * r)
                      , a = 0 === s ? 0 : e[n + s - 1];
                    return 1e-4 * (a + ((s === r - 1 ? 1e4 : e[n + s]) - a) * (t * r - s))
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this._tweenType = 0,
                    this._curveCount = 0,
                    this._framePosition = 0,
                    this._frameDurationR = 0,
                    this._tweenProgress = 0,
                    this._tweenEasing = 0
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (this._frameCount > 1 && (this._frameIndex !== this._frameCount - 1 || 0 === this._animationState.playTimes || this._animationState.currentPlayTimes < this._animationState.playTimes - 1))
                        if (this._tweenType = this._frameArray[this._frameOffset + 1],
                        this._tweenState = 0 === this._tweenType ? 1 : 2,
                        2 === this._tweenType ? this._curveCount = this._frameArray[this._frameOffset + 2] : 0 !== this._tweenType && 1 !== this._tweenType && (this._tweenEasing = .01 * this._frameArray[this._frameOffset + 2]),
                        this._framePosition = this._frameArray[this._frameOffset] * this._frameRateR,
                        this._frameIndex === this._frameCount - 1)
                            this._frameDurationR = 1 / (this._animationData.duration - this._framePosition);
                        else {
                            var t = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + this._frameIndex + 1]
                              , e = this._frameArray[t] * this._frameRateR - this._framePosition;
                            this._frameDurationR = e > 0 ? 1 / e : 0
                        }
                    else
                        this._tweenState = 1
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    2 === this._tweenState ? (this._tweenProgress = (this.currentTime - this._framePosition) * this._frameDurationR,
                    2 === this._tweenType ? this._tweenProgress = e._getEasingCurveValue(this._tweenProgress, this._frameArray, this._curveCount, this._frameOffset + 3) : 1 !== this._tweenType && (this._tweenProgress = e._getEasingValue(this._tweenType, this._tweenProgress, this._tweenEasing))) : this._tweenProgress = 0
                }
                ,
                e
            }
            )(e);
            t.TweenTimelineState = i;
            var n = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.bone = null,
                    this.bonePose = null
                }
                ,
                e.prototype.blend = function(t) {
                    var e = this.bone._blendState.blendWeight
                      , i = this.bone.animationPose
                      , n = this.bonePose.result;
                    2 === t ? (i.x += n.x * e,
                    i.y += n.y * e,
                    i.rotation += n.rotation * e,
                    i.skew += n.skew * e,
                    i.scaleX += (n.scaleX - 1) * e,
                    i.scaleY += (n.scaleY - 1) * e) : 1 !== e ? (i.x = n.x * e,
                    i.y = n.y * e,
                    i.rotation = n.rotation * e,
                    i.skew = n.skew * e,
                    i.scaleX = (n.scaleX - 1) * e + 1,
                    i.scaleY = (n.scaleY - 1) * e + 1) : (i.x = n.x,
                    i.y = n.y,
                    i.rotation = n.rotation,
                    i.skew = n.skew,
                    i.scaleX = n.scaleX,
                    i.scaleY = n.scaleY),
                    0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.bone._transformDirty = !0)
                }
                ,
                e
            }
            )(i);
            t.BoneTimelineState = n;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.slot = null
                }
                ,
                e
            }
            )(i);
            t.SlotTimelineState = r;
            var a = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.constraint = null
                }
                ,
                e
            }
            )(i);
            t.ConstraintTimelineState = a
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.ActionTimelineState]"
                }
                ,
                i.prototype._onCrossFrame = function(e) {
                    var i = this._armature.eventDispatcher;
                    if (this._animationState.actionEnabled)
                        for (var n = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5 + e], r = this._frameArray[n + 1], s = this._animationData.parent.actions, a = 0; a < r; ++a) {
                            var o = s[this._frameArray[n + 2 + a]];
                            if (0 === o.type)
                                (l = t.BaseObject.borrowObject(t.EventObject)).time = this._frameArray[n] / this._frameRate,
                                l.animationState = this._animationState,
                                t.EventObject.actionDataToInstance(o, l, this._armature),
                                this._armature._bufferAction(l, !0);
                            else {
                                var l, h = 10 === o.type ? t.EventObject.FRAME_EVENT : t.EventObject.SOUND_EVENT;
                                (11 === o.type || i.hasDBEventListener(h)) && ((l = t.BaseObject.borrowObject(t.EventObject)).time = this._frameArray[n] / this._frameRate,
                                l.animationState = this._animationState,
                                t.EventObject.actionDataToInstance(o, l, this._armature),
                                this._armature._dragonBones.bufferEvent(l))
                            }
                        }
                }
                ,
                i.prototype._onArriveAtFrame = function() {}
                ,
                i.prototype._onUpdateFrame = function() {}
                ,
                i.prototype.update = function(e) {
                    var i = this.playState
                      , n = this.currentPlayTimes
                      , r = this.currentTime;
                    if (this._setCurrentTime(e)) {
                        var s = this._armature.eventDispatcher;
                        if (i < 0) {
                            if (this.playState === i)
                                return;
                            if (this._animationState.displayControl && this._animationState.resetToPose && this._armature._sortZOrder(null, 0),
                            n = this.currentPlayTimes,
                            s.hasDBEventListener(t.EventObject.START)) {
                                var a = t.BaseObject.borrowObject(t.EventObject);
                                a.type = t.EventObject.START,
                                a.armature = this._armature,
                                a.animationState = this._animationState,
                                this._armature._dragonBones.bufferEvent(a)
                            }
                        }
                        var o = this._animationState.timeScale < 0
                          , l = null
                          , h = null;
                        if (this.currentPlayTimes !== n && (s.hasDBEventListener(t.EventObject.LOOP_COMPLETE) && ((l = t.BaseObject.borrowObject(t.EventObject)).type = t.EventObject.LOOP_COMPLETE,
                        l.armature = this._armature,
                        l.animationState = this._animationState),
                        this.playState > 0 && s.hasDBEventListener(t.EventObject.COMPLETE) && ((h = t.BaseObject.borrowObject(t.EventObject)).type = t.EventObject.COMPLETE,
                        h.armature = this._armature,
                        h.animationState = this._animationState)),
                        this._frameCount > 1) {
                            var c = this._timelineData
                              , u = Math.floor(this.currentTime * this._frameRate)
                              , _ = this._frameIndices[c.frameIndicesOffset + u];
                            if (this._frameIndex !== _) {
                                var f = this._frameIndex;
                                if (this._frameIndex = _,
                                null !== this._timelineArray)
                                    if (this._frameOffset = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + this._frameIndex],
                                    o) {
                                        if (f < 0) {
                                            var d = Math.floor(r * this._frameRate);
                                            f = this._frameIndices[c.frameIndicesOffset + d],
                                            this.currentPlayTimes === n && f === _ && (f = -1)
                                        }
                                        for (; f >= 0; ) {
                                            var p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f]
                                              , m = this._frameArray[p] / this._frameRate;
                                            if (this._position <= m && m <= this._position + this._duration && this._onCrossFrame(f),
                                            null !== l && 0 === f && (this._armature._dragonBones.bufferEvent(l),
                                            l = null),
                                            f > 0 ? f-- : f = this._frameCount - 1,
                                            f === _)
                                                break
                                        }
                                    } else
                                        for (f < 0 && (d = Math.floor(r * this._frameRate),
                                        f = this._frameIndices[c.frameIndicesOffset + d],
                                        p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f],
                                        m = this._frameArray[p] / this._frameRate,
                                        this.currentPlayTimes === n && (r <= m ? f > 0 ? f-- : f = this._frameCount - 1 : f === _ && (f = -1))); f >= 0 && (f < this._frameCount - 1 ? f++ : f = 0,
                                        p = this._animationData.frameOffset + this._timelineArray[c.offset + 5 + f],
                                        m = this._frameArray[p] / this._frameRate,
                                        this._position <= m && m <= this._position + this._duration && this._onCrossFrame(f),
                                        null !== l && 0 === f && (this._armature._dragonBones.bufferEvent(l),
                                        l = null),
                                        f !== _); )
                                            ;
                            }
                        } else
                            this._frameIndex < 0 && (this._frameIndex = 0,
                            null !== this._timelineData) && (this._frameOffset = this._animationData.frameOffset + this._timelineArray[this._timelineData.offset + 5],
                            m = this._frameArray[this._frameOffset] / this._frameRate,
                            this.currentPlayTimes === n ? r <= m && this._onCrossFrame(this._frameIndex) : this._position <= m && (o || null === l || (this._armature._dragonBones.bufferEvent(l),
                            l = null),
                            this._onCrossFrame(this._frameIndex)));
                        null !== l && this._armature._dragonBones.bufferEvent(l),
                        null !== h && this._armature._dragonBones.bufferEvent(h)
                    }
                }
                ,
                i.prototype.setCurrentTime = function(t) {
                    this._setCurrentTime(t),
                    this._frameIndex = -1
                }
                ,
                i
            }
            )(t.TimelineState);
            t.ActionTimelineState = e;
            var i = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.ZOrderTimelineState]"
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    this.playState >= 0 && (this._frameArray[this._frameOffset + 1] > 0 ? this._armature._sortZOrder(this._frameArray, this._frameOffset + 2) : this._armature._sortZOrder(null, 0))
                }
                ,
                e.prototype._onUpdateFrame = function() {}
                ,
                e
            }
            )(t.TimelineState);
            t.ZOrderTimelineState = i;
            var n = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.BoneAllTimelineState]"
                }
                ,
                i.prototype._onArriveAtFrame = function() {
                    if (e.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var t = this._animationData.frameFloatOffset + this._frameValueOffset + 6 * this._frameIndex
                          , i = this._armature._armatureData.scale
                          , n = this._frameFloatArray
                          , r = this.bonePose.current
                          , s = this.bonePose.delta;
                        r.x = n[t++] * i,
                        r.y = n[t++] * i,
                        r.rotation = n[t++],
                        r.skew = n[t++],
                        r.scaleX = n[t++],
                        r.scaleY = n[t++],
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (t = this._animationData.frameFloatOffset + this._frameValueOffset),
                        s.x = n[t++] * i - r.x,
                        s.y = n[t++] * i - r.y,
                        s.rotation = n[t++] - r.rotation,
                        s.skew = n[t++] - r.skew,
                        s.scaleX = n[t++] - r.scaleX,
                        s.scaleY = n[t++] - r.scaleY) : (s.x = 0,
                        s.y = 0,
                        s.rotation = 0,
                        s.skew = 0,
                        s.scaleX = 0,
                        s.scaleY = 0)
                    } else
                        r = this.bonePose.current,
                        s = this.bonePose.delta,
                        r.x = 0,
                        r.y = 0,
                        r.rotation = 0,
                        r.skew = 0,
                        r.scaleX = 1,
                        r.scaleY = 1,
                        s.x = 0,
                        s.y = 0,
                        s.rotation = 0,
                        s.skew = 0,
                        s.scaleX = 0,
                        s.scaleY = 0
                }
                ,
                i.prototype._onUpdateFrame = function() {
                    e.prototype._onUpdateFrame.call(this);
                    var t = this.bonePose.current
                      , i = this.bonePose.delta
                      , n = this.bonePose.result;
                    this.bone._transformDirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0),
                    n.x = t.x + i.x * this._tweenProgress,
                    n.y = t.y + i.y * this._tweenProgress,
                    n.rotation = t.rotation + i.rotation * this._tweenProgress,
                    n.skew = t.skew + i.skew * this._tweenProgress,
                    n.scaleX = t.scaleX + i.scaleX * this._tweenProgress,
                    n.scaleY = t.scaleY + i.scaleY * this._tweenProgress
                }
                ,
                i.prototype.fadeOut = function() {
                    var e = this.bonePose.result;
                    e.rotation = t.Transform.normalizeRadian(e.rotation),
                    e.skew = t.Transform.normalizeRadian(e.skew)
                }
                ,
                i
            }
            )(t.BoneTimelineState);
            t.BoneAllTimelineState = n;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.BoneTranslateTimelineState]"
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex
                          , i = this._armature._armatureData.scale
                          , n = this._frameFloatArray
                          , r = this.bonePose.current
                          , s = this.bonePose.delta;
                        r.x = n[e++] * i,
                        r.y = n[e++] * i,
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameFloatOffset + this._frameValueOffset),
                        s.x = n[e++] * i - r.x,
                        s.y = n[e++] * i - r.y) : (s.x = 0,
                        s.y = 0)
                    } else
                        r = this.bonePose.current,
                        s = this.bonePose.delta,
                        r.x = 0,
                        r.y = 0,
                        s.x = 0,
                        s.y = 0
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this);
                    var e = this.bonePose.current
                      , i = this.bonePose.delta
                      , n = this.bonePose.result;
                    this.bone._transformDirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0),
                    n.x = e.x + i.x * this._tweenProgress,
                    n.y = e.y + i.y * this._tweenProgress
                }
                ,
                e
            }
            )(t.BoneTimelineState);
            t.BoneTranslateTimelineState = r;
            var a = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.toString = function() {
                    return "[class dragonBones.BoneRotateTimelineState]"
                }
                ,
                i.prototype._onArriveAtFrame = function() {
                    if (e.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var i = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex
                          , n = this._frameFloatArray
                          , r = this.bonePose.current
                          , s = this.bonePose.delta;
                        r.rotation = n[i++],
                        r.skew = n[i++],
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 ? (i = this._animationData.frameFloatOffset + this._frameValueOffset,
                        s.rotation = t.Transform.normalizeRadian(n[i++] - r.rotation)) : s.rotation = n[i++] - r.rotation,
                        s.skew = n[i++] - r.skew) : (s.rotation = 0,
                        s.skew = 0)
                    } else
                        r = this.bonePose.current,
                        s = this.bonePose.delta,
                        r.rotation = 0,
                        r.skew = 0,
                        s.rotation = 0,
                        s.skew = 0
                }
                ,
                i.prototype._onUpdateFrame = function() {
                    e.prototype._onUpdateFrame.call(this);
                    var t = this.bonePose.current
                      , i = this.bonePose.delta
                      , n = this.bonePose.result;
                    this.bone._transformDirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0),
                    n.rotation = t.rotation + i.rotation * this._tweenProgress,
                    n.skew = t.skew + i.skew * this._tweenProgress
                }
                ,
                i.prototype.fadeOut = function() {
                    var e = this.bonePose.result;
                    e.rotation = t.Transform.normalizeRadian(e.rotation),
                    e.skew = t.Transform.normalizeRadian(e.skew)
                }
                ,
                i
            }
            )(t.BoneTimelineState);
            t.BoneRotateTimelineState = a;
            var o = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.BoneScaleTimelineState]"
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + 2 * this._frameIndex
                          , i = this._frameFloatArray
                          , n = this.bonePose.current
                          , r = this.bonePose.delta;
                        n.scaleX = i[e++],
                        n.scaleY = i[e++],
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameFloatOffset + this._frameValueOffset),
                        r.scaleX = i[e++] - n.scaleX,
                        r.scaleY = i[e++] - n.scaleY) : (r.scaleX = 0,
                        r.scaleY = 0)
                    } else
                        n = this.bonePose.current,
                        r = this.bonePose.delta,
                        n.scaleX = 1,
                        n.scaleY = 1,
                        r.scaleX = 0,
                        r.scaleY = 0
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this);
                    var e = this.bonePose.current
                      , i = this.bonePose.delta
                      , n = this.bonePose.result;
                    this.bone._transformDirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0),
                    n.scaleX = e.scaleX + i.scaleX * this._tweenProgress,
                    n.scaleY = e.scaleY + i.scaleY * this._tweenProgress
                }
                ,
                e
            }
            )(t.BoneTimelineState);
            t.BoneScaleTimelineState = o;
            var l = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [],
                    e._delta = [],
                    e._result = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.SurfaceTimelineState]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.surface = null,
                    this._frameFloatOffset = 0,
                    this._valueCount = 0,
                    this._deformCount = 0,
                    this._valueOffset = 0,
                    this._current.length = 0,
                    this._delta.length = 0,
                    this._result.length = 0
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount
                          , i = this._armature._armatureData.scale
                          , n = this._frameFloatArray;
                        if (2 === this._tweenState) {
                            var r = e + this._valueCount;
                            this._frameIndex === this._frameCount - 1 && (r = this._animationData.frameFloatOffset + this._frameValueOffset);
                            for (var s = 0; s < this._valueCount; ++s)
                                this._delta[s] = n[r + s] * i - (this._current[s] = n[e + s] * i)
                        } else
                            for (s = 0; s < this._valueCount; ++s)
                                this._current[s] = n[e + s] * i
                    } else
                        for (s = 0; s < this._valueCount; ++s)
                            this._current[s] = 0
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this),
                    this.surface._transformDirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0);
                    for (var e = 0; e < this._valueCount; ++e)
                        this._result[e] = this._current[e] + this._delta[e] * this._tweenProgress
                }
                ,
                e.prototype.init = function(e, i, n) {
                    if (t.prototype.init.call(this, e, i, n),
                    null !== this._timelineData) {
                        var r = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
                        this._deformCount = this._frameIntArray[r + 1],
                        this._valueCount = this._frameIntArray[r + 2],
                        this._valueOffset = this._frameIntArray[r + 3],
                        this._frameFloatOffset = this._frameIntArray[r + 4] + this._animationData.frameFloatOffset
                    } else
                        this._deformCount = this.surface._deformVertices.length,
                        this._valueCount = this._deformCount,
                        this._valueOffset = 0,
                        this._frameFloatOffset = 0;
                    this._current.length = this._valueCount,
                    this._delta.length = this._valueCount,
                    this._result.length = this._valueCount;
                    for (var s = 0; s < this._valueCount; ++s)
                        this._delta[s] = 0
                }
                ,
                e.prototype.blend = function(t) {
                    for (var e = this.surface._blendState.blendWeight, i = this.surface._deformVertices, n = 0; n < this._deformCount; ++n) {
                        var r;
                        r = n < this._valueOffset ? this._frameFloatArray[this._frameFloatOffset + n] : n < this._valueOffset + this._valueCount ? this._result[n - this._valueOffset] : this._frameFloatArray[this._frameFloatOffset + n - this._valueCount],
                        2 === t ? i[n] += r * e : i[n] = 1 !== e ? r * e : r
                    }
                    0 === this._animationState._fadeState && 0 === this._animationState._subFadeState || (this.surface._transformDirty = !0)
                }
                ,
                e
            }
            )(t.TweenTimelineState);
            t.SurfaceTimelineState = l;
            var h = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.SlotDislayTimelineState]"
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (this.playState >= 0) {
                        var t = null !== this._timelineData ? this._frameArray[this._frameOffset + 1] : this.slot._slotData.displayIndex;
                        this.slot.displayIndex !== t && this.slot._setDisplayIndex(t, !0)
                    }
                }
                ,
                e
            }
            )(t.SlotTimelineState);
            t.SlotDislayTimelineState = h;
            var c = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [0, 0, 0, 0, 0, 0, 0, 0],
                    e._delta = [0, 0, 0, 0, 0, 0, 0, 0],
                    e._result = [0, 0, 0, 0, 0, 0, 0, 0],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.SlotColorTimelineState]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this._dirty = !1
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._dragonBonesData.intArray
                          , i = this._frameIntArray
                          , n = this._animationData.frameIntOffset + this._frameValueOffset + 1 * this._frameIndex
                          , r = i[n];
                        r < 0 && (r += 65536),
                        this._current[0] = e[r++],
                        this._current[1] = e[r++],
                        this._current[2] = e[r++],
                        this._current[3] = e[r++],
                        this._current[4] = e[r++],
                        this._current[5] = e[r++],
                        this._current[6] = e[r++],
                        this._current[7] = e[r++],
                        2 === this._tweenState && ((r = this._frameIndex === this._frameCount - 1 ? i[this._animationData.frameIntOffset + this._frameValueOffset] : i[n + 1]) < 0 && (r += 65536),
                        this._delta[0] = e[r++] - this._current[0],
                        this._delta[1] = e[r++] - this._current[1],
                        this._delta[2] = e[r++] - this._current[2],
                        this._delta[3] = e[r++] - this._current[3],
                        this._delta[4] = e[r++] - this._current[4],
                        this._delta[5] = e[r++] - this._current[5],
                        this._delta[6] = e[r++] - this._current[6],
                        this._delta[7] = e[r++] - this._current[7])
                    } else {
                        var s = this.slot._slotData.color;
                        this._current[0] = 100 * s.alphaMultiplier,
                        this._current[1] = 100 * s.redMultiplier,
                        this._current[2] = 100 * s.greenMultiplier,
                        this._current[3] = 100 * s.blueMultiplier,
                        this._current[4] = s.alphaOffset,
                        this._current[5] = s.redOffset,
                        this._current[6] = s.greenOffset,
                        this._current[7] = s.blueOffset
                    }
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this),
                    this._dirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0),
                    this._result[0] = .01 * (this._current[0] + this._delta[0] * this._tweenProgress),
                    this._result[1] = .01 * (this._current[1] + this._delta[1] * this._tweenProgress),
                    this._result[2] = .01 * (this._current[2] + this._delta[2] * this._tweenProgress),
                    this._result[3] = .01 * (this._current[3] + this._delta[3] * this._tweenProgress),
                    this._result[4] = this._current[4] + this._delta[4] * this._tweenProgress,
                    this._result[5] = this._current[5] + this._delta[5] * this._tweenProgress,
                    this._result[6] = this._current[6] + this._delta[6] * this._tweenProgress,
                    this._result[7] = this._current[7] + this._delta[7] * this._tweenProgress
                }
                ,
                e.prototype.fadeOut = function() {
                    this._tweenState = 0,
                    this._dirty = !1
                }
                ,
                e.prototype.update = function(e) {
                    if (t.prototype.update.call(this, e),
                    0 !== this._tweenState || this._dirty) {
                        var i = this.slot._colorTransform;
                        if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
                            if (i.alphaMultiplier !== this._result[0] || i.redMultiplier !== this._result[1] || i.greenMultiplier !== this._result[2] || i.blueMultiplier !== this._result[3] || i.alphaOffset !== this._result[4] || i.redOffset !== this._result[5] || i.greenOffset !== this._result[6] || i.blueOffset !== this._result[7]) {
                                var n = Math.pow(this._animationState._fadeProgress, 4);
                                i.alphaMultiplier += (this._result[0] - i.alphaMultiplier) * n,
                                i.redMultiplier += (this._result[1] - i.redMultiplier) * n,
                                i.greenMultiplier += (this._result[2] - i.greenMultiplier) * n,
                                i.blueMultiplier += (this._result[3] - i.blueMultiplier) * n,
                                i.alphaOffset += (this._result[4] - i.alphaOffset) * n,
                                i.redOffset += (this._result[5] - i.redOffset) * n,
                                i.greenOffset += (this._result[6] - i.greenOffset) * n,
                                i.blueOffset += (this._result[7] - i.blueOffset) * n,
                                this.slot._colorDirty = !0
                            }
                        } else
                            this._dirty && (this._dirty = !1,
                            i.alphaMultiplier === this._result[0] && i.redMultiplier === this._result[1] && i.greenMultiplier === this._result[2] && i.blueMultiplier === this._result[3] && i.alphaOffset === this._result[4] && i.redOffset === this._result[5] && i.greenOffset === this._result[6] && i.blueOffset === this._result[7] || (i.alphaMultiplier = this._result[0],
                            i.redMultiplier = this._result[1],
                            i.greenMultiplier = this._result[2],
                            i.blueMultiplier = this._result[3],
                            i.alphaOffset = this._result[4],
                            i.redOffset = this._result[5],
                            i.greenOffset = this._result[6],
                            i.blueOffset = this._result[7],
                            this.slot._colorDirty = !0))
                    }
                }
                ,
                e
            }
            )(t.SlotTimelineState);
            t.SlotColorTimelineState = c;
            var u = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._current = [],
                    e._delta = [],
                    e._result = [],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.DeformTimelineState]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.vertexOffset = 0,
                    this._dirty = !1,
                    this._frameFloatOffset = 0,
                    this._valueCount = 0,
                    this._deformCount = 0,
                    this._valueOffset = 0,
                    this._current.length = 0,
                    this._delta.length = 0,
                    this._result.length = 0
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._animationData.frameFloatOffset + this._frameValueOffset + this._frameIndex * this._valueCount
                          , i = this._armature._armatureData.scale
                          , n = this._frameFloatArray;
                        if (2 === this._tweenState) {
                            var r = e + this._valueCount;
                            this._frameIndex === this._frameCount - 1 && (r = this._animationData.frameFloatOffset + this._frameValueOffset);
                            for (var s = 0; s < this._valueCount; ++s)
                                this._delta[s] = n[r + s] * i - (this._current[s] = n[e + s] * i)
                        } else
                            for (s = 0; s < this._valueCount; ++s)
                                this._current[s] = n[e + s] * i
                    } else
                        for (s = 0; s < this._valueCount; ++s)
                            this._current[s] = 0
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this),
                    this._dirty = !0,
                    2 !== this._tweenState && (this._tweenState = 0);
                    for (var e = 0; e < this._valueCount; ++e)
                        this._result[e] = this._current[e] + this._delta[e] * this._tweenProgress
                }
                ,
                e.prototype.init = function(e, i, n) {
                    if (t.prototype.init.call(this, e, i, n),
                    null !== this._timelineData) {
                        var r = this._animationData.frameIntOffset + this._timelineArray[this._timelineData.offset + 3];
                        this.vertexOffset = this._frameIntArray[r + 0],
                        this.vertexOffset < 0 && (this.vertexOffset += 65536),
                        this._deformCount = this._frameIntArray[r + 1],
                        this._valueCount = this._frameIntArray[r + 2],
                        this._valueOffset = this._frameIntArray[r + 3],
                        this._frameFloatOffset = this._frameIntArray[r + 4] + this._animationData.frameFloatOffset
                    } else {
                        var s = this.slot._deformVertices;
                        this._deformCount = null !== s ? s.vertices.length : 0,
                        this._valueCount = this._deformCount,
                        this._valueOffset = 0,
                        this._frameFloatOffset = 0
                    }
                    this._current.length = this._valueCount,
                    this._delta.length = this._valueCount,
                    this._result.length = this._valueCount;
                    for (var a = 0; a < this._valueCount; ++a)
                        this._delta[a] = 0
                }
                ,
                e.prototype.fadeOut = function() {
                    this._tweenState = 0,
                    this._dirty = !1
                }
                ,
                e.prototype.update = function(e) {
                    var i = this.slot._deformVertices;
                    if (null !== i && null !== i.verticesData && i.verticesData.offset === this.vertexOffset && (t.prototype.update.call(this, e),
                    0 !== this._tweenState || this._dirty)) {
                        var n = i.vertices;
                        if (0 !== this._animationState._fadeState || 0 !== this._animationState._subFadeState) {
                            for (var r = Math.pow(this._animationState._fadeProgress, 2), s = 0; s < this._deformCount; ++s)
                                s < this._valueOffset ? n[s] += (this._frameFloatArray[this._frameFloatOffset + s] - n[s]) * r : s < this._valueOffset + this._valueCount ? n[s] += (this._result[s - this._valueOffset] - n[s]) * r : n[s] += (this._frameFloatArray[this._frameFloatOffset + s - this._valueCount] - n[s]) * r;
                            i.verticesDirty = !0
                        } else if (this._dirty) {
                            for (this._dirty = !1,
                            s = 0; s < this._deformCount; ++s)
                                s < this._valueOffset ? n[s] = this._frameFloatArray[this._frameFloatOffset + s] : s < this._valueOffset + this._valueCount ? n[s] = this._result[s - this._valueOffset] : n[s] = this._frameFloatArray[this._frameFloatOffset + s - this._valueCount];
                            i.verticesDirty = !0
                        }
                    }
                }
                ,
                e
            }
            )(t.SlotTimelineState);
            t.DeformTimelineState = u;
            var _ = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.IKConstraintTimelineState]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this._current = 0,
                    this._delta = 0
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    t.prototype._onArriveAtFrame.call(this);
                    var e = this.constraint;
                    if (null !== this._timelineData) {
                        var i = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex
                          , n = this._frameIntArray
                          , r = 0 !== n[i++];
                        this._current = .01 * n[i++],
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (i = this._animationData.frameIntOffset + this._frameValueOffset),
                        this._delta = .01 * n[i + 1] - this._current) : this._delta = 0,
                        e._bendPositive = r
                    } else {
                        var s = e._constraintData;
                        this._current = s.weight,
                        this._delta = 0,
                        e._bendPositive = s.bendPositive
                    }
                    e.invalidUpdate()
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this),
                    2 !== this._tweenState && (this._tweenState = 0);
                    var e = this.constraint;
                    e._weight = this._current + this._delta * this._tweenProgress,
                    e.invalidUpdate()
                }
                ,
                e
            }
            )(t.ConstraintTimelineState);
            t.IKConstraintTimelineState = _;
            var f = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e._floats = [0, 0, 0, 0, 0, 0],
                    e
                }
                return s(e, t),
                e.toString = function() {
                    return "[class dragonBones.AnimationTimelineState]"
                }
                ,
                e.prototype._onClear = function() {
                    t.prototype._onClear.call(this),
                    this.animationState = null
                }
                ,
                e.prototype._onArriveAtFrame = function() {
                    if (t.prototype._onArriveAtFrame.call(this),
                    null !== this._timelineData) {
                        var e = this._animationData.frameIntOffset + this._frameValueOffset + 2 * this._frameIndex
                          , i = 1 / this.animationState._animationData.parent.frameRate
                          , n = this._frameIntArray;
                        this._floats[0] = n[e++] * i,
                        this._floats[3] = .01 * n[e++],
                        2 === this._tweenState ? (this._frameIndex === this._frameCount - 1 && (e = this._animationData.frameIntOffset + this._frameValueOffset),
                        this._floats[1] = n[e++] * i - this._floats[0],
                        this._floats[4] = .01 * n[e++] - this._floats[3]) : (this._floats[1] = 0,
                        this._floats[4] = 0)
                    }
                }
                ,
                e.prototype._onUpdateFrame = function() {
                    t.prototype._onUpdateFrame.call(this),
                    2 !== this._tweenState && (this._tweenState = 0),
                    this._floats[0] >= 0 && (this._floats[2] = this._floats[0] + this._floats[1] * this._tweenProgress),
                    this._floats[5] = this._floats[3] + this._floats[4] * this._tweenProgress
                }
                ,
                e.prototype.blend = function(t) {
                    var e = this.animationState
                      , i = e._blendState.blendWeight;
                    2 === t ? (e.weight += this._floats[5] * i,
                    e.currentTime += this._floats[2] * i) : (e.weight = this._floats[5] * i,
                    e.currentTime = this._floats[2] * i)
                }
                ,
                e
            }
            )(t.TweenTimelineState);
            t.AnimationTimelineState = f
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.actionDataToInstance = function(t, i, n) {
                    0 === t.type ? i.type = e.FRAME_EVENT : i.type = 10 === t.type ? e.FRAME_EVENT : e.SOUND_EVENT,
                    i.name = t.name,
                    i.armature = n,
                    i.actionData = t,
                    i.data = t.data,
                    null !== t.bone && (i.bone = n.getBone(t.bone.name)),
                    null !== t.slot && (i.slot = n.getSlot(t.slot.name))
                }
                ,
                e.toString = function() {
                    return "[class dragonBones.EventObject]"
                }
                ,
                e.prototype._onClear = function() {
                    this.time = 0,
                    this.type = "",
                    this.name = "",
                    this.armature = null,
                    this.bone = null,
                    this.slot = null,
                    this.animationState = null,
                    this.actionData = null,
                    this.data = null
                }
                ,
                e.START = "start",
                e.LOOP_COMPLETE = "loopComplete",
                e.COMPLETE = "complete",
                e.FADE_IN = "fadeIn",
                e.FADE_IN_COMPLETE = "fadeInComplete",
                e.FADE_OUT = "fadeOut",
                e.FADE_OUT_COMPLETE = "fadeOutComplete",
                e.FRAME_EVENT = "frameEvent",
                e.SOUND_EVENT = "soundEvent",
                e
            }
            )(t.BaseObject);
            t.EventObject = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e() {}
                return e._getArmatureType = function(t) {
                    switch (t.toLowerCase()) {
                    case "stage":
                        return 2;
                    case "armature":
                        return 0;
                    case "movieclip":
                        return 1;
                    default:
                        return 0
                    }
                }
                ,
                e._getBoneType = function(t) {
                    switch (t.toLowerCase()) {
                    case "bone":
                        return 0;
                    case "surface":
                        return 1;
                    default:
                        return 0
                    }
                }
                ,
                e._getDisplayType = function(t) {
                    switch (t.toLowerCase()) {
                    case "image":
                        return 0;
                    case "mesh":
                        return 2;
                    case "armature":
                        return 1;
                    case "boundingbox":
                        return 3;
                    case "path":
                        return 4;
                    default:
                        return 0
                    }
                }
                ,
                e._getBoundingBoxType = function(t) {
                    switch (t.toLowerCase()) {
                    case "rectangle":
                        return 0;
                    case "ellipse":
                        return 1;
                    case "polygon":
                        return 2;
                    default:
                        return 0
                    }
                }
                ,
                e._getActionType = function(t) {
                    switch (t.toLowerCase()) {
                    case "play":
                        return 0;
                    case "frame":
                        return 10;
                    case "sound":
                        return 11;
                    default:
                        return 0
                    }
                }
                ,
                e._getBlendMode = function(t) {
                    switch (t.toLowerCase()) {
                    case "normal":
                        return 0;
                    case "add":
                        return 1;
                    case "alpha":
                        return 2;
                    case "darken":
                        return 3;
                    case "difference":
                        return 4;
                    case "erase":
                        return 5;
                    case "hardlight":
                        return 6;
                    case "invert":
                        return 7;
                    case "layer":
                        return 8;
                    case "lighten":
                        return 9;
                    case "multiply":
                        return 10;
                    case "overlay":
                        return 11;
                    case "screen":
                        return 12;
                    case "subtract":
                        return 13;
                    default:
                        return 0
                    }
                }
                ,
                e._getPositionMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                    case "percent":
                        return 1;
                    case "fixed":
                        return 0;
                    default:
                        return 1
                    }
                }
                ,
                e._getSpacingMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                    case "length":
                        return 0;
                    case "percent":
                        return 2;
                    case "fixed":
                        return 1;
                    default:
                        return 0
                    }
                }
                ,
                e._getRotateMode = function(t) {
                    switch (t.toLocaleLowerCase()) {
                    case "tangent":
                        return 0;
                    case "chain":
                        return 1;
                    case "chainscale":
                        return 2;
                    default:
                        return 0
                    }
                }
                ,
                e.parseDragonBonesData = function(e) {
                    return console.warn("Deprecated."),
                    e instanceof ArrayBuffer ? t.BinaryDataParser.getInstance().parseDragonBonesData(e) : t.ObjectDataParser.getInstance().parseDragonBonesData(e)
                }
                ,
                e.parseTextureAtlasData = function(i, n) {
                    void 0 === n && (n = 1),
                    console.warn("\u5df2\u5e9f\u5f03");
                    for (var r = {}, s = i[e.SUB_TEXTURE], a = 0, o = s.length; a < o; a++) {
                        var l = s[a]
                          , h = l[e.NAME]
                          , c = new t.Rectangle
                          , u = null;
                        c.x = l[e.X] / n,
                        c.y = l[e.Y] / n,
                        c.width = l[e.WIDTH] / n,
                        c.height = l[e.HEIGHT] / n,
                        e.FRAME_WIDTH in l && ((u = new t.Rectangle).x = l[e.FRAME_X] / n,
                        u.y = l[e.FRAME_Y] / n,
                        u.width = l[e.FRAME_WIDTH] / n,
                        u.height = l[e.FRAME_HEIGHT] / n),
                        r[h] = {
                            region: c,
                            frame: u,
                            rotated: !1
                        }
                    }
                    return r
                }
                ,
                e.DATA_VERSION_2_3 = "2.3",
                e.DATA_VERSION_3_0 = "3.0",
                e.DATA_VERSION_4_0 = "4.0",
                e.DATA_VERSION_4_5 = "4.5",
                e.DATA_VERSION_5_0 = "5.0",
                e.DATA_VERSION_5_5 = "5.5",
                e.DATA_VERSION = e.DATA_VERSION_5_5,
                e.DATA_VERSIONS = [e.DATA_VERSION_4_0, e.DATA_VERSION_4_5, e.DATA_VERSION_5_0, e.DATA_VERSION_5_5],
                e.TEXTURE_ATLAS = "textureAtlas",
                e.SUB_TEXTURE = "SubTexture",
                e.FORMAT = "format",
                e.IMAGE_PATH = "imagePath",
                e.WIDTH = "width",
                e.HEIGHT = "height",
                e.ROTATED = "rotated",
                e.FRAME_X = "frameX",
                e.FRAME_Y = "frameY",
                e.FRAME_WIDTH = "frameWidth",
                e.FRAME_HEIGHT = "frameHeight",
                e.DRADON_BONES = "dragonBones",
                e.USER_DATA = "userData",
                e.ARMATURE = "armature",
                e.BONE = "bone",
                e.SURFACE = "surface",
                e.SLOT = "slot",
                e.CONSTRAINT = "constraint",
                e.IK = "ik",
                e.PATH_CONSTRAINT = "path",
                e.SKIN = "skin",
                e.DISPLAY = "display",
                e.ANIMATION = "animation",
                e.Z_ORDER = "zOrder",
                e.FFD = "ffd",
                e.FRAME = "frame",
                e.TRANSLATE_FRAME = "translateFrame",
                e.ROTATE_FRAME = "rotateFrame",
                e.SCALE_FRAME = "scaleFrame",
                e.DISPLAY_FRAME = "displayFrame",
                e.COLOR_FRAME = "colorFrame",
                e.DEFAULT_ACTIONS = "defaultActions",
                e.ACTIONS = "actions",
                e.EVENTS = "events",
                e.INTS = "ints",
                e.FLOATS = "floats",
                e.STRINGS = "strings",
                e.CANVAS = "canvas",
                e.TRANSFORM = "transform",
                e.PIVOT = "pivot",
                e.AABB = "aabb",
                e.COLOR = "color",
                e.VERSION = "version",
                e.COMPATIBLE_VERSION = "compatibleVersion",
                e.FRAME_RATE = "frameRate",
                e.TYPE = "type",
                e.SUB_TYPE = "subType",
                e.NAME = "name",
                e.PARENT = "parent",
                e.TARGET = "target",
                e.STAGE = "stage",
                e.SHARE = "share",
                e.PATH = "path",
                e.LENGTH = "length",
                e.DISPLAY_INDEX = "displayIndex",
                e.BLEND_MODE = "blendMode",
                e.INHERIT_TRANSLATION = "inheritTranslation",
                e.INHERIT_ROTATION = "inheritRotation",
                e.INHERIT_SCALE = "inheritScale",
                e.INHERIT_REFLECTION = "inheritReflection",
                e.INHERIT_ANIMATION = "inheritAnimation",
                e.INHERIT_DEFORM = "inheritDeform",
                e.SEGMENT_X = "segmentX",
                e.SEGMENT_Y = "segmentY",
                e.BEND_POSITIVE = "bendPositive",
                e.CHAIN = "chain",
                e.WEIGHT = "weight",
                e.FADE_IN_TIME = "fadeInTime",
                e.PLAY_TIMES = "playTimes",
                e.SCALE = "scale",
                e.OFFSET = "offset",
                e.POSITION = "position",
                e.DURATION = "duration",
                e.TWEEN_EASING = "tweenEasing",
                e.TWEEN_ROTATE = "tweenRotate",
                e.TWEEN_SCALE = "tweenScale",
                e.CLOCK_WISE = "clockwise",
                e.CURVE = "curve",
                e.SOUND = "sound",
                e.EVENT = "event",
                e.ACTION = "action",
                e.X = "x",
                e.Y = "y",
                e.SKEW_X = "skX",
                e.SKEW_Y = "skY",
                e.SCALE_X = "scX",
                e.SCALE_Y = "scY",
                e.VALUE = "value",
                e.ROTATE = "rotate",
                e.SKEW = "skew",
                e.ALPHA_OFFSET = "aO",
                e.RED_OFFSET = "rO",
                e.GREEN_OFFSET = "gO",
                e.BLUE_OFFSET = "bO",
                e.ALPHA_MULTIPLIER = "aM",
                e.RED_MULTIPLIER = "rM",
                e.GREEN_MULTIPLIER = "gM",
                e.BLUE_MULTIPLIER = "bM",
                e.UVS = "uvs",
                e.VERTICES = "vertices",
                e.TRIANGLES = "triangles",
                e.WEIGHTS = "weights",
                e.SLOT_POSE = "slotPose",
                e.BONE_POSE = "bonePose",
                e.GLUE_WEIGHTS = "glueWeights",
                e.GLUE_MESHES = "glueMeshes",
                e.BONES = "bones",
                e.POSITION_MODE = "positionMode",
                e.SPACING_MODE = "spacingMode",
                e.ROTATE_MODE = "rotateMode",
                e.SPACING = "spacing",
                e.ROTATE_OFFSET = "rotateOffset",
                e.ROTATE_MIX = "rotateMix",
                e.TRANSLATE_MIX = "translateMix",
                e.TARGET_DISPLAY = "targetDisplay",
                e.CLOSED = "closed",
                e.CONSTANT_SPEED = "constantSpeed",
                e.VERTEX_COUNT = "vertexCount",
                e.LENGTHS = "lengths",
                e.GOTO_AND_PLAY = "gotoAndPlay",
                e.DEFAULT_NAME = "default",
                e
            }
            )();
            t.DataParser = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function n() {
                    var i = null !== e && e.apply(this, arguments) || this;
                    return i._rawTextureAtlasIndex = 0,
                    i._rawBones = [],
                    i._data = null,
                    i._armature = null,
                    i._bone = null,
                    i._surface = null,
                    i._slot = null,
                    i._skin = null,
                    i._mesh = null,
                    i._animation = null,
                    i._timeline = null,
                    i._rawTextureAtlases = null,
                    i._defaultColorOffset = -1,
                    i._prevClockwise = 0,
                    i._prevRotation = 0,
                    i._helpMatrixA = new t.Matrix,
                    i._helpMatrixB = new t.Matrix,
                    i._helpTransform = new t.Transform,
                    i._helpColorTransform = new t.ColorTransform,
                    i._helpPoint = new t.Point,
                    i._helpArray = [],
                    i._intArray = [],
                    i._floatArray = [],
                    i._frameIntArray = [],
                    i._frameFloatArray = [],
                    i._frameArray = [],
                    i._timelineArray = [],
                    i._cacheRawMeshes = [],
                    i._cacheMeshes = [],
                    i._actionFrames = [],
                    i._weightSlotPose = {},
                    i._weightBonePoses = {},
                    i._cacheBones = {},
                    i._slotChildActions = {},
                    i
                }
                return s(n, e),
                n._getBoolean = function(t, e, i) {
                    if (e in t) {
                        var n = t[e]
                          , r = typeof n;
                        if ("boolean" === r)
                            return n;
                        if ("string" !== r)
                            return !!n;
                        switch (n) {
                        case "0":
                        case "NaN":
                        case "":
                        case "false":
                        case "null":
                        case "undefined":
                            return !1;
                        default:
                            return !0
                        }
                    }
                    return i
                }
                ,
                n._getNumber = function(t, e, i) {
                    if (e in t) {
                        var n = t[e];
                        return null === n || "NaN" === n ? i : +n || 0
                    }
                    return i
                }
                ,
                n._getString = function(e, i, n) {
                    if (i in e) {
                        var r = e[i];
                        if ("string" == typeof r) {
                            if (t.DragonBones.webAssembly)
                                for (var s = 0, a = r.length; s < a; ++s)
                                    if (r.charCodeAt(s) > 255)
                                        return encodeURI(r);
                            return r
                        }
                        return String(r)
                    }
                    return n
                }
                ,
                n.prototype._getCurvePoint = function(t, e, i, n, r, s, a, o, l, h) {
                    var c = 1 - l
                      , u = c * c
                      , _ = l * l
                      , f = c * u
                      , d = 3 * l * u
                      , p = 3 * c * _
                      , m = l * _;
                    h.x = f * t + d * i + p * r + m * a,
                    h.y = f * e + d * n + p * s + m * o
                }
                ,
                n.prototype._samplingEasingCurve = function(t, e) {
                    for (var i = t.length, n = -2, r = 0, s = e.length; r < s; ++r) {
                        for (var a = (r + 1) / (s + 1); (n + 6 < i ? t[n + 6] : 1) < a; )
                            n += 6;
                        for (var o = n >= 0 && n + 6 < i, l = o ? t[n] : 0, h = o ? t[n + 1] : 0, c = t[n + 2], u = t[n + 3], _ = t[n + 4], f = t[n + 5], d = o ? t[n + 6] : 1, p = o ? t[n + 7] : 1, m = 0, y = 1; y - m > 1e-4; ) {
                            var v = .5 * (y + m);
                            this._getCurvePoint(l, h, c, u, _, f, d, p, v, this._helpPoint),
                            a - this._helpPoint.x > 0 ? m = v : y = v
                        }
                        e[r] = this._helpPoint.y
                    }
                }
                ,
                n.prototype._parseActionDataInFrame = function(e, i, n, r) {
                    t.DataParser.EVENT in e && this._mergeActionFrame(e[t.DataParser.EVENT], i, 10, n, r),
                    t.DataParser.SOUND in e && this._mergeActionFrame(e[t.DataParser.SOUND], i, 11, n, r),
                    t.DataParser.ACTION in e && this._mergeActionFrame(e[t.DataParser.ACTION], i, 0, n, r),
                    t.DataParser.EVENTS in e && this._mergeActionFrame(e[t.DataParser.EVENTS], i, 10, n, r),
                    t.DataParser.ACTIONS in e && this._mergeActionFrame(e[t.DataParser.ACTIONS], i, 0, n, r)
                }
                ,
                n.prototype._mergeActionFrame = function(e, n, r, s, a) {
                    for (var o = t.DragonBones.webAssembly ? this._armature.actions.size() : this._armature.actions.length, l = this._parseActionData(e, r, s, a), h = 0, c = null, u = 0, _ = l; u < _.length; u++) {
                        var f = _[u];
                        this._armature.addAction(f, !1)
                    }
                    0 === this._actionFrames.length && ((c = new i).frameStart = 0,
                    this._actionFrames.push(c),
                    c = null);
                    for (var d = 0, p = this._actionFrames; d < p.length; d++) {
                        var m = p[d];
                        if (m.frameStart === n) {
                            c = m;
                            break
                        }
                        if (m.frameStart > n)
                            break;
                        h++
                    }
                    null === c && ((c = new i).frameStart = n,
                    this._actionFrames.splice(h + 1, 0, c));
                    for (var y = 0; y < l.length; ++y)
                        c.actions.push(o + y)
                }
                ,
                n.prototype._parseArmature = function(e, i) {
                    var r = t.BaseObject.borrowObject(t.ArmatureData);
                    if (r.name = n._getString(e, t.DataParser.NAME, ""),
                    r.frameRate = n._getNumber(e, t.DataParser.FRAME_RATE, this._data.frameRate),
                    r.scale = i,
                    t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? r.type = t.DataParser._getArmatureType(e[t.DataParser.TYPE]) : r.type = n._getNumber(e, t.DataParser.TYPE, 0),
                    0 === r.frameRate && (r.frameRate = 24),
                    this._armature = r,
                    t.DataParser.CANVAS in e) {
                        var s = e[t.DataParser.CANVAS]
                          , a = t.BaseObject.borrowObject(t.CanvasData);
                        t.DataParser.COLOR in s ? a.hasBackground = !0 : a.hasBackground = !1,
                        a.color = n._getNumber(s, t.DataParser.COLOR, 0),
                        a.x = n._getNumber(s, t.DataParser.X, 0) * r.scale,
                        a.y = n._getNumber(s, t.DataParser.Y, 0) * r.scale,
                        a.width = n._getNumber(s, t.DataParser.WIDTH, 0) * r.scale,
                        a.height = n._getNumber(s, t.DataParser.HEIGHT, 0) * r.scale,
                        r.canvas = a
                    }
                    if (t.DataParser.AABB in e) {
                        var o = e[t.DataParser.AABB];
                        r.aabb.x = n._getNumber(o, t.DataParser.X, 0) * r.scale,
                        r.aabb.y = n._getNumber(o, t.DataParser.Y, 0) * r.scale,
                        r.aabb.width = n._getNumber(o, t.DataParser.WIDTH, 0) * r.scale,
                        r.aabb.height = n._getNumber(o, t.DataParser.HEIGHT, 0) * r.scale
                    }
                    if (t.DataParser.BONE in e)
                        for (var l = 0, h = e[t.DataParser.BONE]; l < h.length; l++) {
                            var c = h[l]
                              , u = n._getString(c, t.DataParser.PARENT, "")
                              , _ = this._parseBone(c);
                            if (u.length > 0) {
                                var f = r.getBone(u);
                                null !== f ? _.parent = f : (u in this._cacheBones || (this._cacheBones[u] = []),
                                this._cacheBones[u].push(_))
                            }
                            if (_.name in this._cacheBones) {
                                for (var d = 0, p = this._cacheBones[_.name]; d < p.length; d++)
                                    p[d].parent = _;
                                delete this._cacheBones[_.name]
                            }
                            r.addBone(_),
                            this._rawBones.push(_)
                        }
                    if (t.DataParser.IK in e)
                        for (var m = 0, y = e[t.DataParser.IK]; m < y.length; m++) {
                            var v = y[m];
                            (M = this._parseIKConstraint(v)) && r.addConstraint(M)
                        }
                    if (r.sortBones(),
                    t.DataParser.SLOT in e)
                        for (var g = 0, A = 0, x = e[t.DataParser.SLOT]; A < x.length; A++) {
                            var b = x[A];
                            r.addSlot(this._parseSlot(b, g++))
                        }
                    if (t.DataParser.SKIN in e)
                        for (var C = 0, T = e[t.DataParser.SKIN]; C < T.length; C++) {
                            var S = T[C];
                            r.addSkin(this._parseSkin(S))
                        }
                    if (t.DataParser.PATH_CONSTRAINT in e)
                        for (var w = 0, E = e[t.DataParser.PATH_CONSTRAINT]; w < E.length; w++) {
                            var M, D = E[w];
                            (M = this._parsePathConstraint(D)) && r.addConstraint(M)
                        }
                    for (var B = 0, I = this._cacheRawMeshes.length; B < I; ++B) {
                        var P = this._cacheRawMeshes[B];
                        t.DataParser.GLUE_WEIGHTS in P && t.DataParser.GLUE_MESHES in P && this._parseMeshGlue(P, this._cacheMeshes[B])
                    }
                    for (B = 0,
                    I = this._cacheRawMeshes.length; B < I; ++B) {
                        var R = this._cacheRawMeshes[B]
                          , O = n._getString(R, t.DataParser.SHARE, "");
                        if (0 !== O.length) {
                            var L = n._getString(R, t.DataParser.SKIN, t.DataParser.DEFAULT_NAME);
                            0 === L.length && (L = t.DataParser.DEFAULT_NAME);
                            var F = r.getMesh(L, "", O);
                            null !== F && this._cacheMeshes[B].vertices.shareFrom(F.vertices)
                        }
                    }
                    if (t.DataParser.ANIMATION in e)
                        for (var V = 0, N = e[t.DataParser.ANIMATION]; V < N.length; V++) {
                            var k = N[V]
                              , G = this._parseAnimation(k);
                            r.addAnimation(G)
                        }
                    if (t.DataParser.DEFAULT_ACTIONS in e)
                        for (var U = 0, z = this._parseActionData(e[t.DataParser.DEFAULT_ACTIONS], 0, null, null); U < z.length; U++) {
                            var H = z[U];
                            r.addAction(H, !0),
                            0 === H.type && null !== (G = r.getAnimation(H.name)) && (r.defaultAnimation = G)
                        }
                    if (t.DataParser.ACTIONS in e)
                        for (var W = 0, j = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null); W < j.length; W++)
                            H = j[W],
                            r.addAction(H, !1);
                    for (var X in this._rawBones.length = 0,
                    this._cacheRawMeshes.length = 0,
                    this._cacheMeshes.length = 0,
                    this._armature = null,
                    this._weightSlotPose)
                        delete this._weightSlotPose[X];
                    for (var X in this._weightBonePoses)
                        delete this._weightBonePoses[X];
                    for (var X in this._cacheBones)
                        delete this._cacheBones[X];
                    for (var X in this._slotChildActions)
                        delete this._slotChildActions[X];
                    return r
                }
                ,
                n.prototype._parseBone = function(e) {
                    var i = this._armature.scale;
                    if (0 === (t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? t.DataParser._getBoneType(e[t.DataParser.TYPE]) : n._getNumber(e, t.DataParser.TYPE, 0))) {
                        var r = t.BaseObject.borrowObject(t.BoneData);
                        return r.inheritTranslation = n._getBoolean(e, t.DataParser.INHERIT_TRANSLATION, !0),
                        r.inheritRotation = n._getBoolean(e, t.DataParser.INHERIT_ROTATION, !0),
                        r.inheritScale = n._getBoolean(e, t.DataParser.INHERIT_SCALE, !0),
                        r.inheritReflection = n._getBoolean(e, t.DataParser.INHERIT_REFLECTION, !0),
                        r.length = n._getNumber(e, t.DataParser.LENGTH, 0) * i,
                        r.name = n._getString(e, t.DataParser.NAME, ""),
                        t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], r.transform, i),
                        r
                    }
                    var s = t.BaseObject.borrowObject(t.SurfaceData);
                    if (s.name = n._getString(e, t.DataParser.NAME, ""),
                    s.segmentX = n._getNumber(e, t.DataParser.SEGMENT_X, 0),
                    s.segmentY = n._getNumber(e, t.DataParser.SEGMENT_Y, 0),
                    s.vertices.length = (s.segmentX + 1) * (s.segmentY + 1) * 2,
                    t.DataParser.VERTICES in e)
                        for (var a = e[t.DataParser.VERTICES], o = 0, l = s.vertices.length; o < l; ++o)
                            o < a.length ? s.vertices[o] = a[o] * i : s.vertices[o] = 0;
                    return s
                }
                ,
                n.prototype._parseIKConstraint = function(e) {
                    var i = this._armature.getBone(n._getString(e, t.DataParser.BONE, ""));
                    if (null === i)
                        return null;
                    var r = this._armature.getBone(n._getString(e, t.DataParser.TARGET, ""));
                    if (null === r)
                        return null;
                    var s = t.BaseObject.borrowObject(t.IKConstraintData);
                    return s.scaleEnabled = n._getBoolean(e, t.DataParser.SCALE, !1),
                    s.bendPositive = n._getBoolean(e, t.DataParser.BEND_POSITIVE, !0),
                    s.weight = n._getNumber(e, t.DataParser.WEIGHT, 1),
                    s.name = n._getString(e, t.DataParser.NAME, ""),
                    s.type = 0,
                    s.target = r,
                    n._getNumber(e, t.DataParser.CHAIN, 0) > 0 && null !== i.parent ? (s.root = i.parent,
                    s.bone = i) : (s.root = i,
                    s.bone = null),
                    s
                }
                ,
                n.prototype._parsePathConstraint = function(e) {
                    var i = this._armature.getSlot(n._getString(e, t.DataParser.TARGET, ""));
                    if (null === i)
                        return null;
                    var r = this._armature.defaultSkin;
                    if (null === r)
                        return null;
                    var s = r.getDisplay(i.name, n._getString(e, t.DataParser.TARGET_DISPLAY, i.name));
                    if (null === s || !(s instanceof t.PathDisplayData))
                        return null;
                    var a = e[t.DataParser.BONES];
                    if (null === a || 0 === a.length)
                        return null;
                    var o = t.BaseObject.borrowObject(t.PathConstraintData);
                    o.name = n._getString(e, t.DataParser.NAME, ""),
                    o.type = 1,
                    o.pathSlot = i,
                    o.pathDisplayData = s,
                    o.target = i.parent,
                    o.positionMode = t.DataParser._getPositionMode(n._getString(e, t.DataParser.POSITION_MODE, "")),
                    o.spacingMode = t.DataParser._getSpacingMode(n._getString(e, t.DataParser.SPACING_MODE, "")),
                    o.rotateMode = t.DataParser._getRotateMode(n._getString(e, t.DataParser.ROTATE_MODE, "")),
                    o.position = n._getNumber(e, t.DataParser.POSITION, 0),
                    o.spacing = n._getNumber(e, t.DataParser.SPACING, 0),
                    o.rotateOffset = n._getNumber(e, t.DataParser.ROTATE_OFFSET, 0),
                    o.rotateMix = n._getNumber(e, t.DataParser.ROTATE_MIX, 1),
                    o.translateMix = n._getNumber(e, t.DataParser.TRANSLATE_MIX, 1);
                    for (var l = 0, h = a; l < h.length; l++) {
                        var c = h[l]
                          , u = this._armature.getBone(c);
                        null !== u && (o.AddBone(u),
                        null === o.root && (o.root = u))
                    }
                    return o
                }
                ,
                n.prototype._parseSlot = function(e, i) {
                    var r = t.BaseObject.borrowObject(t.SlotData);
                    return r.displayIndex = n._getNumber(e, t.DataParser.DISPLAY_INDEX, 0),
                    r.zOrder = i,
                    r.name = n._getString(e, t.DataParser.NAME, ""),
                    r.parent = this._armature.getBone(n._getString(e, t.DataParser.PARENT, "")),
                    t.DataParser.BLEND_MODE in e && "string" == typeof e[t.DataParser.BLEND_MODE] ? r.blendMode = t.DataParser._getBlendMode(e[t.DataParser.BLEND_MODE]) : r.blendMode = n._getNumber(e, t.DataParser.BLEND_MODE, 0),
                    t.DataParser.COLOR in e ? (r.color = t.SlotData.createColor(),
                    this._parseColorTransform(e[t.DataParser.COLOR], r.color)) : r.color = t.SlotData.DEFAULT_COLOR,
                    t.DataParser.ACTIONS in e && (this._slotChildActions[r.name] = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null)),
                    r
                }
                ,
                n.prototype._parseSkin = function(e) {
                    var i = t.BaseObject.borrowObject(t.SkinData);
                    if (i.name = n._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME),
                    0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME),
                    t.DataParser.SLOT in e) {
                        var r = e[t.DataParser.SLOT];
                        this._skin = i;
                        for (var s = 0, a = r; s < a.length; s++) {
                            var o = a[s]
                              , l = n._getString(o, t.DataParser.NAME, "")
                              , h = this._armature.getSlot(l);
                            if (null !== h) {
                                if (this._slot = h,
                                t.DataParser.DISPLAY in o)
                                    for (var c = 0, u = o[t.DataParser.DISPLAY]; c < u.length; c++) {
                                        var _ = u[c];
                                        _ ? i.addDisplay(l, this._parseDisplay(_)) : i.addDisplay(l, null)
                                    }
                                this._slot = null
                            }
                        }
                        this._skin = null
                    }
                    return i
                }
                ,
                n.prototype._parseDisplay = function(e) {
                    var i = n._getString(e, t.DataParser.NAME, "")
                      , r = n._getString(e, t.DataParser.PATH, "")
                      , s = 0
                      , a = null;
                    switch (s = t.DataParser.TYPE in e && "string" == typeof e[t.DataParser.TYPE] ? t.DataParser._getDisplayType(e[t.DataParser.TYPE]) : n._getNumber(e, t.DataParser.TYPE, s)) {
                    case 0:
                        var o = a = t.BaseObject.borrowObject(t.ImageDisplayData);
                        o.name = i,
                        o.path = r.length > 0 ? r : i,
                        this._parsePivot(e, o);
                        break;
                    case 1:
                        var l = a = t.BaseObject.borrowObject(t.ArmatureDisplayData);
                        if (l.name = i,
                        l.path = r.length > 0 ? r : i,
                        l.inheritAnimation = !0,
                        t.DataParser.ACTIONS in e)
                            for (var h = 0, c = this._parseActionData(e[t.DataParser.ACTIONS], 0, null, null); h < c.length; h++) {
                                var u = c[h];
                                l.addAction(u)
                            }
                        else if (this._slot.name in this._slotChildActions) {
                            var _ = this._skin.getDisplays(this._slot.name);
                            if (null === _ ? 0 === this._slot.displayIndex : this._slot.displayIndex === _.length) {
                                for (var f = 0, d = this._slotChildActions[this._slot.name]; f < d.length; f++)
                                    u = d[f],
                                    l.addAction(u);
                                delete this._slotChildActions[this._slot.name]
                            }
                        }
                        break;
                    case 2:
                        var p = a = t.BaseObject.borrowObject(t.MeshDisplayData);
                        p.vertices.inheritDeform = n._getBoolean(e, t.DataParser.INHERIT_DEFORM, !0),
                        p.name = i,
                        p.path = r.length > 0 ? r : i,
                        p.vertices.data = this._data,
                        t.DataParser.SHARE in e ? (this._cacheRawMeshes.push(e),
                        this._cacheMeshes.push(p)) : this._parseMesh(e, p),
                        t.DataParser.GLUE_WEIGHTS in e && t.DataParser.GLUE_MESHES in e && (this._cacheRawMeshes.push(e),
                        this._cacheMeshes.push(p));
                        break;
                    case 3:
                        var m = this._parseBoundingBox(e);
                        if (null !== m) {
                            var y = a = t.BaseObject.borrowObject(t.BoundingBoxDisplayData);
                            y.name = i,
                            y.path = r.length > 0 ? r : i,
                            y.boundingBox = m
                        }
                        break;
                    case 4:
                        var v = e[t.DataParser.LENGTHS]
                          , g = a = t.BaseObject.borrowObject(t.PathDisplayData);
                        g.closed = n._getBoolean(e, t.DataParser.CLOSED, !1),
                        g.constantSpeed = n._getBoolean(e, t.DataParser.CONSTANT_SPEED, !1),
                        g.name = i,
                        g.path = r.length > 0 ? r : i,
                        g.vertices.data = this._data,
                        g.curveLengths.length = v.length;
                        for (var A = 0, x = v.length; A < x; ++A)
                            g.curveLengths[A] = v[A];
                        this._parsePath(e, g)
                    }
                    return null !== a && t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], a.transform, this._armature.scale),
                    a
                }
                ,
                n.prototype._parsePath = function(e, i) {
                    var r = e[t.DataParser.VERTICES]
                      , s = n._getNumber(e, t.DataParser.VERTEX_COUNT, 0)
                      , a = this._floatArray.length
                      , o = this._intArray.length;
                    if (i.vertices.offset = o,
                    this._intArray.length += 2,
                    this._intArray[o + 0] = s,
                    this._intArray[o + 2] = a,
                    t.DataParser.WEIGHTS in e) {
                        var l = e[t.DataParser.WEIGHTS]
                          , h = e[t.DataParser.BONES]
                          , c = h.length
                          , u = Math.floor(l.length - s) / 2
                          , _ = this._intArray.length
                          , f = this._floatArray.length
                          , d = this._armature.sortedBones
                          , p = t.BaseObject.borrowObject(t.WeightData);
                        for (p.count = u,
                        p.offset = _,
                        this._intArray.length += 2 + c + s + u,
                        this._intArray[_ + 0] = c,
                        this._intArray[_ + 1] = f,
                        M = 0; M < c; M++) {
                            var m = h[M]
                              , y = this._rawBones[m];
                            p.addBone(y),
                            this._intArray[_ + 2 + M] = d.indexOf(y)
                        }
                        this._floatArray.length += 3 * u,
                        M = 0;
                        for (var v = 0, g = 0, A = _ + 2 + c, x = f; M < u; M++) {
                            var b = l[v++];
                            this._intArray[A++] = b;
                            for (var C = 0; C < b; C++) {
                                var T = l[v++]
                                  , S = l[v++]
                                  , w = r[g++]
                                  , E = r[g++];
                                this._intArray[A++] = h.indexOf(T),
                                this._floatArray[x++] = S,
                                this._floatArray[x++] = w,
                                this._floatArray[x++] = E
                            }
                        }
                        i.vertices.weight = p
                    } else {
                        this._floatArray.length += r.length;
                        for (var M = 0, D = r.length; M < D; ++M)
                            this._floatArray[a + M] = r[M]
                    }
                }
                ,
                n.prototype._parsePivot = function(e, i) {
                    if (t.DataParser.PIVOT in e) {
                        var r = e[t.DataParser.PIVOT];
                        i.pivot.x = n._getNumber(r, t.DataParser.X, 0),
                        i.pivot.y = n._getNumber(r, t.DataParser.Y, 0)
                    } else
                        i.pivot.x = .5,
                        i.pivot.y = .5
                }
                ,
                n.prototype._parseMesh = function(e, i) {
                    var n = e[t.DataParser.VERTICES]
                      , r = e[t.DataParser.UVS]
                      , s = e[t.DataParser.TRIANGLES]
                      , a = Math.floor(n.length / 2)
                      , o = Math.floor(s.length / 3)
                      , l = this._floatArray.length
                      , h = l + 2 * a
                      , c = this._intArray.length
                      , u = this._skin.name + "_" + this._slot.name + "_" + i.name;
                    i.vertices.offset = c,
                    this._intArray.length += 4 + 3 * o,
                    this._intArray[c + 0] = a,
                    this._intArray[c + 1] = o,
                    this._intArray[c + 2] = l;
                    for (var _ = 0, f = 3 * o; _ < f; ++_)
                        this._intArray[c + 4 + _] = s[_];
                    for (this._floatArray.length += 2 * a + 2 * a,
                    _ = 0,
                    f = 2 * a; _ < f; ++_)
                        this._floatArray[l + _] = n[_],
                        this._floatArray[h + _] = r[_];
                    if (t.DataParser.WEIGHTS in e) {
                        var d = e[t.DataParser.WEIGHTS]
                          , p = e[t.DataParser.SLOT_POSE]
                          , m = e[t.DataParser.BONE_POSE]
                          , y = this._armature.sortedBones
                          , v = new Array
                          , g = Math.floor(m.length / 7)
                          , A = this._floatArray.length
                          , x = Math.floor(d.length - a) / 2
                          , b = this._intArray.length
                          , C = t.BaseObject.borrowObject(t.WeightData);
                        for (C.count = x,
                        C.offset = b,
                        v.length = g,
                        this._intArray.length += 2 + g + a + x,
                        this._intArray[b + 1] = A,
                        _ = 0; _ < g; ++_) {
                            var T = m[7 * _]
                              , S = this._rawBones[T];
                            C.addBone(S),
                            v[_] = T,
                            this._intArray[b + 2 + _] = y.indexOf(S)
                        }
                        this._floatArray.length += 3 * x,
                        this._helpMatrixA.copyFromArray(p, 0),
                        _ = 0;
                        for (var w = 0, E = b + 2 + g, M = A; _ < a; ++_) {
                            var D = 2 * _
                              , B = this._intArray[E++] = d[w++]
                              , I = this._floatArray[l + D]
                              , P = this._floatArray[l + D + 1];
                            this._helpMatrixA.transformPoint(I, P, this._helpPoint),
                            I = this._helpPoint.x,
                            P = this._helpPoint.y;
                            for (var R = 0; R < B; ++R) {
                                T = d[w++];
                                var O = v.indexOf(T);
                                this._helpMatrixB.copyFromArray(m, 7 * O + 1),
                                this._helpMatrixB.invert(),
                                this._helpMatrixB.transformPoint(I, P, this._helpPoint),
                                this._intArray[E++] = O,
                                this._floatArray[M++] = d[w++],
                                this._floatArray[M++] = this._helpPoint.x,
                                this._floatArray[M++] = this._helpPoint.y
                            }
                        }
                        i.vertices.weight = C,
                        this._weightSlotPose[u] = p,
                        this._weightBonePoses[u] = m
                    }
                }
                ,
                n.prototype._parseMeshGlue = function() {}
                ,
                n.prototype._parseBoundingBox = function(e) {
                    var i = null
                      , r = 0;
                    switch (r = t.DataParser.SUB_TYPE in e && "string" == typeof e[t.DataParser.SUB_TYPE] ? t.DataParser._getBoundingBoxType(e[t.DataParser.SUB_TYPE]) : n._getNumber(e, t.DataParser.SUB_TYPE, r)) {
                    case 0:
                        i = t.BaseObject.borrowObject(t.RectangleBoundingBoxData);
                        break;
                    case 1:
                        i = t.BaseObject.borrowObject(t.EllipseBoundingBoxData);
                        break;
                    case 2:
                        i = this._parsePolygonBoundingBox(e)
                    }
                    return null !== i && (i.color = n._getNumber(e, t.DataParser.COLOR, 0),
                    0 !== i.type && 1 !== i.type || (i.width = n._getNumber(e, t.DataParser.WIDTH, 0),
                    i.height = n._getNumber(e, t.DataParser.HEIGHT, 0))),
                    i
                }
                ,
                n.prototype._parsePolygonBoundingBox = function(e) {
                    var i = t.BaseObject.borrowObject(t.PolygonBoundingBoxData);
                    if (t.DataParser.VERTICES in e) {
                        var n = this._armature.scale
                          , r = e[t.DataParser.VERTICES]
                          , s = i.vertices;
                        t.DragonBones.webAssembly ? s.resize(r.length, 0) : s.length = r.length;
                        for (var a = 0, o = r.length; a < o; a += 2) {
                            var l = r[a] * n
                              , h = r[a + 1] * n;
                            t.DragonBones.webAssembly ? (s.set(a, l),
                            s.set(a + 1, h)) : (s[a] = l,
                            s[a + 1] = h),
                            0 === a ? (i.x = l,
                            i.y = h,
                            i.width = l,
                            i.height = h) : (l < i.x ? i.x = l : l > i.width && (i.width = l),
                            h < i.y ? i.y = h : h > i.height && (i.height = h))
                        }
                        i.width -= i.x,
                        i.height -= i.y
                    } else
                        console.warn("Data error.\n Please reexport DragonBones Data to fixed the bug.");
                    return i
                }
                ,
                n.prototype._parseAnimation = function(e) {
                    var i = t.BaseObject.borrowObject(t.AnimationData);
                    if (i.frameCount = Math.max(n._getNumber(e, t.DataParser.DURATION, 1), 1),
                    i.playTimes = n._getNumber(e, t.DataParser.PLAY_TIMES, 1),
                    i.duration = i.frameCount / this._armature.frameRate,
                    i.fadeInTime = n._getNumber(e, t.DataParser.FADE_IN_TIME, 0),
                    i.scale = n._getNumber(e, t.DataParser.SCALE, 1),
                    i.name = n._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME),
                    0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME),
                    i.frameIntOffset = this._frameIntArray.length,
                    i.frameFloatOffset = this._frameFloatArray.length,
                    i.frameOffset = this._frameArray.length,
                    this._animation = i,
                    t.DataParser.FRAME in e) {
                        var r = e[t.DataParser.FRAME]
                          , s = r.length;
                        if (s > 0)
                            for (var a = 0, o = 0; a < s; ++a) {
                                var l = r[a];
                                this._parseActionDataInFrame(l, o, null, null),
                                o += n._getNumber(l, t.DataParser.DURATION, 1)
                            }
                    }
                    if (t.DataParser.Z_ORDER in e && (this._animation.zOrderTimeline = this._parseTimeline(e[t.DataParser.Z_ORDER], null, t.DataParser.FRAME, 1, !1, !1, 0, this._parseZOrderFrame)),
                    t.DataParser.BONE in e)
                        for (var h = 0, c = e[t.DataParser.BONE]; h < c.length; h++) {
                            var u = c[h];
                            this._parseBoneTimeline(u)
                        }
                    if (t.DataParser.SURFACE in e)
                        for (var _ = 0, f = e[t.DataParser.SURFACE]; _ < f.length; _++) {
                            u = f[_];
                            var d = n._getString(u, t.DataParser.NAME, "");
                            this._surface = this._armature.getBone(d),
                            null !== this._surface && (null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 50, !1, !0, 0, this._parseSurfaceFrame)) && this._animation.addSurfaceTimeline(this._surface, M),
                            this._surface = null)
                        }
                    if (t.DataParser.SLOT in e)
                        for (var p = 0, m = e[t.DataParser.SLOT]; p < m.length; p++)
                            u = m[p],
                            this._parseSlotTimeline(u);
                    if (t.DataParser.FFD in e)
                        for (var y = 0, v = e[t.DataParser.FFD]; y < v.length; y++) {
                            u = v[y];
                            var g = n._getString(u, t.DataParser.SKIN, t.DataParser.DEFAULT_NAME)
                              , A = n._getString(u, t.DataParser.SLOT, "")
                              , x = n._getString(u, t.DataParser.NAME, "");
                            0 === g.length && (g = t.DataParser.DEFAULT_NAME),
                            this._slot = this._armature.getSlot(A),
                            this._mesh = this._armature.getMesh(g, A, x),
                            null !== this._slot && null !== this._mesh && (null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 22, !1, !0, 0, this._parseSlotFFDFrame)) && this._animation.addSlotTimeline(this._slot, M),
                            this._slot = null,
                            this._mesh = null)
                        }
                    if (t.DataParser.IK in e)
                        for (var b = 0, C = e[t.DataParser.IK]; b < C.length; b++) {
                            u = C[b];
                            var T = n._getString(u, t.DataParser.NAME, "")
                              , S = this._armature.getConstraint(T);
                            null !== S && null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 30, !0, !1, 2, this._parseIKConstraintFrame)) && this._animation.addConstraintTimeline(S, M)
                        }
                    if (t.DataParser.ANIMATION in e)
                        for (var w = 0, E = e[t.DataParser.ANIMATION]; w < E.length; w++) {
                            u = E[w];
                            var M, D = n._getString(u, t.DataParser.NAME, "");
                            null !== (M = this._parseTimeline(u, null, t.DataParser.FRAME, 40, !0, !1, 2, this._parseAnimationFrame)) && this._animation.addAnimationTimeline(D, M)
                        }
                    return this._actionFrames.length > 0 && (this._animation.actionTimeline = this._parseTimeline(null, this._actionFrames, "", 0, !1, !1, 0, this._parseActionFrame),
                    this._actionFrames.length = 0),
                    this._animation = null,
                    i
                }
                ,
                n.prototype._parseTimeline = function(e, r, s, a, o, l, h, c) {
                    if (null !== e && s.length > 0 && s in e && (r = e[s]),
                    null === r)
                        return null;
                    var u = r.length;
                    if (0 === u)
                        return null;
                    var _ = this._frameIntArray.length
                      , f = this._frameFloatArray.length
                      , d = t.BaseObject.borrowObject(t.TimelineData)
                      , p = this._timelineArray.length;
                    if (this._timelineArray.length += 5 + u,
                    null !== e ? (this._timelineArray[p + 0] = Math.round(100 * n._getNumber(e, t.DataParser.SCALE, 1)),
                    this._timelineArray[p + 1] = Math.round(100 * n._getNumber(e, t.DataParser.OFFSET, 0))) : (this._timelineArray[p + 0] = 100,
                    this._timelineArray[p + 1] = 0),
                    this._timelineArray[p + 2] = u,
                    this._timelineArray[p + 3] = h,
                    this._timelineArray[p + 4] = o ? _ - this._animation.frameIntOffset : l ? f - this._animation.frameFloatOffset : 0,
                    this._timeline = d,
                    d.type = a,
                    d.offset = p,
                    1 === u)
                        d.frameIndicesOffset = -1,
                        this._timelineArray[p + 5 + 0] = c.call(this, r[0], 0, 0) - this._animation.frameOffset;
                    else {
                        var m = this._animation.frameCount + 1
                          , y = this._data.frameIndices
                          , v = 0;
                        t.DragonBones.webAssembly ? (v = y.size(),
                        y.resize(v + m, 0)) : (v = y.length,
                        y.length += m),
                        d.frameIndicesOffset = v;
                        for (var g = 0, A = 0, x = 0, b = 0; g < m; ++g) {
                            if (x + b <= g && A < u) {
                                var C = r[A];
                                x = g,
                                b = A === u - 1 ? this._animation.frameCount - x : C instanceof i ? this._actionFrames[A + 1].frameStart - x : n._getNumber(C, t.DataParser.DURATION, 1),
                                this._timelineArray[p + 5 + A] = c.call(this, C, x, b) - this._animation.frameOffset,
                                A++
                            }
                            t.DragonBones.webAssembly ? y.set(v + g, A - 1) : y[v + g] = A - 1
                        }
                    }
                    return this._timeline = null,
                    d
                }
                ,
                n.prototype._parseBoneTimeline = function(e) {
                    var i, r = this._armature.getBone(n._getString(e, t.DataParser.NAME, ""));
                    null !== r && (this._bone = r,
                    this._slot = this._armature.getSlot(this._bone.name),
                    t.DataParser.TRANSLATE_FRAME in e && null !== (i = this._parseTimeline(e, null, t.DataParser.TRANSLATE_FRAME, 11, !1, !0, 2, this._parseBoneTranslateFrame)) && this._animation.addBoneTimeline(r, i),
                    t.DataParser.ROTATE_FRAME in e && null !== (i = this._parseTimeline(e, null, t.DataParser.ROTATE_FRAME, 12, !1, !0, 2, this._parseBoneRotateFrame)) && this._animation.addBoneTimeline(r, i),
                    t.DataParser.SCALE_FRAME in e && null !== (i = this._parseTimeline(e, null, t.DataParser.SCALE_FRAME, 13, !1, !0, 2, this._parseBoneScaleFrame)) && this._animation.addBoneTimeline(r, i),
                    t.DataParser.FRAME in e && null !== (i = this._parseTimeline(e, null, t.DataParser.FRAME, 10, !1, !0, 6, this._parseBoneAllFrame)) && this._animation.addBoneTimeline(r, i),
                    this._bone = null,
                    this._slot = null)
                }
                ,
                n.prototype._parseSlotTimeline = function(e) {
                    var i = this._armature.getSlot(n._getString(e, t.DataParser.NAME, ""));
                    if (null !== i) {
                        this._slot = i;
                        var r;
                        null !== (r = t.DataParser.DISPLAY_FRAME in e ? this._parseTimeline(e, null, t.DataParser.DISPLAY_FRAME, 20, !1, !1, 0, this._parseSlotDisplayFrame) : this._parseTimeline(e, null, t.DataParser.FRAME, 20, !1, !1, 0, this._parseSlotDisplayFrame)) && this._animation.addSlotTimeline(i, r);
                        var s;
                        null !== (s = t.DataParser.COLOR_FRAME in e ? this._parseTimeline(e, null, t.DataParser.COLOR_FRAME, 21, !0, !1, 1, this._parseSlotColorFrame) : this._parseTimeline(e, null, t.DataParser.FRAME, 21, !0, !1, 1, this._parseSlotColorFrame)) && this._animation.addSlotTimeline(i, s),
                        this._slot = null
                    }
                }
                ,
                n.prototype._parseFrame = function(t, e) {
                    var i = this._frameArray.length;
                    return this._frameArray.length += 1,
                    this._frameArray[i + 0] = e,
                    i
                }
                ,
                n.prototype._parseTweenFrame = function(e, i, r) {
                    var s = this._parseFrame(e, i, r);
                    if (r > 0)
                        if (t.DataParser.CURVE in e) {
                            var a = r + 1;
                            this._helpArray.length = a,
                            this._samplingEasingCurve(e[t.DataParser.CURVE], this._helpArray),
                            this._frameArray.length += 2 + this._helpArray.length,
                            this._frameArray[s + 1] = 2,
                            this._frameArray[s + 2] = a;
                            for (var o = 0; o < a; ++o)
                                this._frameArray[s + 3 + o] = Math.round(1e4 * this._helpArray[o])
                        } else {
                            var l = -2;
                            t.DataParser.TWEEN_EASING in e && (l = n._getNumber(e, t.DataParser.TWEEN_EASING, -2)),
                            -2 === l ? (this._frameArray.length += 1,
                            this._frameArray[s + 1] = 0) : 0 === l ? (this._frameArray.length += 1,
                            this._frameArray[s + 1] = 1) : l < 0 ? (this._frameArray.length += 2,
                            this._frameArray[s + 1] = 3,
                            this._frameArray[s + 2] = Math.round(100 * -l)) : l <= 1 ? (this._frameArray.length += 2,
                            this._frameArray[s + 1] = 4,
                            this._frameArray[s + 2] = Math.round(100 * l)) : (this._frameArray.length += 2,
                            this._frameArray[s + 1] = 5,
                            this._frameArray[s + 2] = Math.round(100 * l - 100))
                        }
                    else
                        this._frameArray.length += 1,
                        this._frameArray[s + 1] = 0;
                    return s
                }
                ,
                n.prototype._parseActionFrame = function(t, e) {
                    var i = this._frameArray.length
                      , n = t.actions.length;
                    this._frameArray.length += 2 + n,
                    this._frameArray[i + 0] = e,
                    this._frameArray[i + 0 + 1] = n;
                    for (var r = 0; r < n; ++r)
                        this._frameArray[i + 0 + 2 + r] = t.actions[r];
                    return i
                }
                ,
                n.prototype._parseZOrderFrame = function(e, i, n) {
                    var r = this._parseFrame(e, i, n);
                    if (t.DataParser.Z_ORDER in e) {
                        var s = e[t.DataParser.Z_ORDER];
                        if (s.length > 0) {
                            for (var a = this._armature.sortedSlots.length, o = new Array(a - s.length / 2), l = new Array(a), h = 0; h < o.length; ++h)
                                o[h] = 0;
                            for (var c = 0; c < a; ++c)
                                l[c] = -1;
                            for (var u = 0, _ = 0, f = 0, d = s.length; f < d; f += 2) {
                                for (var p = s[f], m = s[f + 1]; u !== p; )
                                    o[_++] = u++;
                                l[u + m] = u++
                            }
                            for (; u < a; )
                                o[_++] = u++;
                            this._frameArray.length += 1 + a,
                            this._frameArray[r + 1] = a;
                            for (var y = a; y--; )
                                -1 === l[y] ? this._frameArray[r + 2 + y] = o[--_] || 0 : this._frameArray[r + 2 + y] = l[y] || 0;
                            return r
                        }
                    }
                    return this._frameArray.length += 1,
                    this._frameArray[r + 1] = 0,
                    r
                }
                ,
                n.prototype._parseBoneAllFrame = function(e, i, r) {
                    this._helpTransform.identity(),
                    t.DataParser.TRANSFORM in e && this._parseTransform(e[t.DataParser.TRANSFORM], this._helpTransform, 1);
                    var s = this._helpTransform.rotation;
                    0 !== i && (0 === this._prevClockwise ? s = this._prevRotation + t.Transform.normalizeRadian(s - this._prevRotation) : ((this._prevClockwise > 0 ? s >= this._prevRotation : s <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1),
                    s = this._prevRotation + s - this._prevRotation + t.Transform.PI_D * this._prevClockwise)),
                    this._prevClockwise = n._getNumber(e, t.DataParser.TWEEN_ROTATE, 0),
                    this._prevRotation = s;
                    var a = this._parseTweenFrame(e, i, r)
                      , o = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 6,
                    this._frameFloatArray[o++] = this._helpTransform.x,
                    this._frameFloatArray[o++] = this._helpTransform.y,
                    this._frameFloatArray[o++] = s,
                    this._frameFloatArray[o++] = this._helpTransform.skew,
                    this._frameFloatArray[o++] = this._helpTransform.scaleX,
                    this._frameFloatArray[o++] = this._helpTransform.scaleY,
                    this._parseActionDataInFrame(e, i, this._bone, this._slot),
                    a
                }
                ,
                n.prototype._parseBoneTranslateFrame = function(e, i, r) {
                    var s = this._parseTweenFrame(e, i, r)
                      , a = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2,
                    this._frameFloatArray[a++] = n._getNumber(e, t.DataParser.X, 0),
                    this._frameFloatArray[a++] = n._getNumber(e, t.DataParser.Y, 0),
                    s
                }
                ,
                n.prototype._parseBoneRotateFrame = function(e, i, r) {
                    var s = n._getNumber(e, t.DataParser.ROTATE, 0) * t.Transform.DEG_RAD;
                    0 !== i && (0 === this._prevClockwise ? s = this._prevRotation + t.Transform.normalizeRadian(s - this._prevRotation) : ((this._prevClockwise > 0 ? s >= this._prevRotation : s <= this._prevRotation) && (this._prevClockwise = this._prevClockwise > 0 ? this._prevClockwise - 1 : this._prevClockwise + 1),
                    s = this._prevRotation + s - this._prevRotation + t.Transform.PI_D * this._prevClockwise)),
                    this._prevClockwise = n._getNumber(e, t.DataParser.CLOCK_WISE, 0),
                    this._prevRotation = s;
                    var a = this._parseTweenFrame(e, i, r)
                      , o = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2,
                    this._frameFloatArray[o++] = s,
                    this._frameFloatArray[o++] = n._getNumber(e, t.DataParser.SKEW, 0) * t.Transform.DEG_RAD,
                    a
                }
                ,
                n.prototype._parseBoneScaleFrame = function(e, i, r) {
                    var s = this._parseTweenFrame(e, i, r)
                      , a = this._frameFloatArray.length;
                    return this._frameFloatArray.length += 2,
                    this._frameFloatArray[a++] = n._getNumber(e, t.DataParser.X, 1),
                    this._frameFloatArray[a++] = n._getNumber(e, t.DataParser.Y, 1),
                    s
                }
                ,
                n.prototype._parseSurfaceFrame = function(e, i, r) {
                    var s = this._frameFloatArray.length
                      , a = this._parseTweenFrame(e, i, r)
                      , o = e[t.DataParser.VERTICES]
                      , l = n._getNumber(e, t.DataParser.OFFSET, 0)
                      , h = this._surface.vertices.length / 2
                      , c = 0
                      , u = 0;
                    this._frameFloatArray.length += 2 * h;
                    for (var _ = 0; _ < 2 * h; _ += 2)
                        c = _ < l || _ - l >= o.length ? 0 : o[_ - l],
                        u = _ + 1 < l || _ + 1 - l >= o.length ? 0 : o[_ + 1 - l],
                        this._frameFloatArray[s + _] = c,
                        this._frameFloatArray[s + _ + 1] = u;
                    if (0 === i) {
                        var f = this._frameIntArray.length;
                        this._frameIntArray.length += 5,
                        this._frameIntArray[f + 0] = 0,
                        this._frameIntArray[f + 1] = this._frameFloatArray.length - s,
                        this._frameIntArray[f + 2] = this._frameFloatArray.length - s,
                        this._frameIntArray[f + 3] = 0,
                        this._frameIntArray[f + 4] = s - this._animation.frameFloatOffset,
                        this._timelineArray[this._timeline.offset + 3] = f - this._animation.frameIntOffset
                    }
                    return a
                }
                ,
                n.prototype._parseSlotDisplayFrame = function(e, i, r) {
                    var s = this._parseFrame(e, i, r);
                    return this._frameArray.length += 1,
                    t.DataParser.VALUE in e ? this._frameArray[s + 1] = n._getNumber(e, t.DataParser.VALUE, 0) : this._frameArray[s + 1] = n._getNumber(e, t.DataParser.DISPLAY_INDEX, 0),
                    this._parseActionDataInFrame(e, i, this._slot.parent, this._slot),
                    s
                }
                ,
                n.prototype._parseSlotColorFrame = function(e, i, n) {
                    var r = this._parseTweenFrame(e, i, n)
                      , s = -1;
                    if (t.DataParser.VALUE in e || t.DataParser.COLOR in e) {
                        var a = t.DataParser.VALUE in e ? e[t.DataParser.VALUE] : e[t.DataParser.COLOR];
                        for (var o in a) {
                            this._parseColorTransform(a, this._helpColorTransform),
                            s = this._intArray.length,
                            this._intArray.length += 8,
                            this._intArray[s++] = Math.round(100 * this._helpColorTransform.alphaMultiplier),
                            this._intArray[s++] = Math.round(100 * this._helpColorTransform.redMultiplier),
                            this._intArray[s++] = Math.round(100 * this._helpColorTransform.greenMultiplier),
                            this._intArray[s++] = Math.round(100 * this._helpColorTransform.blueMultiplier),
                            this._intArray[s++] = Math.round(this._helpColorTransform.alphaOffset),
                            this._intArray[s++] = Math.round(this._helpColorTransform.redOffset),
                            this._intArray[s++] = Math.round(this._helpColorTransform.greenOffset),
                            this._intArray[s++] = Math.round(this._helpColorTransform.blueOffset),
                            s -= 8;
                            break
                        }
                    }
                    s < 0 && (this._defaultColorOffset < 0 && (this._defaultColorOffset = s = this._intArray.length,
                    this._intArray.length += 8,
                    this._intArray[s++] = 100,
                    this._intArray[s++] = 100,
                    this._intArray[s++] = 100,
                    this._intArray[s++] = 100,
                    this._intArray[s++] = 0,
                    this._intArray[s++] = 0,
                    this._intArray[s++] = 0,
                    this._intArray[s++] = 0),
                    s = this._defaultColorOffset);
                    var l = this._frameIntArray.length;
                    return this._frameIntArray.length += 1,
                    this._frameIntArray[l] = s,
                    r
                }
                ,
                n.prototype._parseSlotFFDFrame = function(e, i, r) {
                    var s = this._frameFloatArray.length
                      , a = this._parseTweenFrame(e, i, r)
                      , o = t.DataParser.VERTICES in e ? e[t.DataParser.VERTICES] : null
                      , l = n._getNumber(e, t.DataParser.OFFSET, 0)
                      , h = this._intArray[this._mesh.vertices.offset + 0]
                      , c = this._mesh.parent.name + "_" + this._slot.name + "_" + this._mesh.name
                      , u = this._mesh.vertices.weight
                      , _ = 0
                      , f = 0
                      , d = 0
                      , p = 0;
                    if (null !== u) {
                        var m = this._weightSlotPose[c];
                        this._helpMatrixA.copyFromArray(m, 0),
                        this._frameFloatArray.length += 2 * u.count,
                        d = u.offset + 2 + u.bones.length
                    } else
                        this._frameFloatArray.length += 2 * h;
                    for (var y = 0; y < 2 * h; y += 2)
                        if (null === o ? (_ = 0,
                        f = 0) : (_ = y < l || y - l >= o.length ? 0 : o[y - l],
                        f = y + 1 < l || y + 1 - l >= o.length ? 0 : o[y + 1 - l]),
                        null !== u) {
                            var v = this._weightBonePoses[c]
                              , g = this._intArray[d++];
                            this._helpMatrixA.transformPoint(_, f, this._helpPoint, !0),
                            _ = this._helpPoint.x,
                            f = this._helpPoint.y;
                            for (var A = 0; A < g; ++A) {
                                var x = this._intArray[d++];
                                this._helpMatrixB.copyFromArray(v, 7 * x + 1),
                                this._helpMatrixB.invert(),
                                this._helpMatrixB.transformPoint(_, f, this._helpPoint, !0),
                                this._frameFloatArray[s + p++] = this._helpPoint.x,
                                this._frameFloatArray[s + p++] = this._helpPoint.y
                            }
                        } else
                            this._frameFloatArray[s + y] = _,
                            this._frameFloatArray[s + y + 1] = f;
                    if (0 === i) {
                        var b = this._frameIntArray.length;
                        this._frameIntArray.length += 5,
                        this._frameIntArray[b + 0] = this._mesh.vertices.offset,
                        this._frameIntArray[b + 1] = this._frameFloatArray.length - s,
                        this._frameIntArray[b + 2] = this._frameFloatArray.length - s,
                        this._frameIntArray[b + 3] = 0,
                        this._frameIntArray[b + 4] = s - this._animation.frameFloatOffset,
                        this._timelineArray[this._timeline.offset + 3] = b - this._animation.frameIntOffset
                    }
                    return a
                }
                ,
                n.prototype._parseIKConstraintFrame = function(e, i, r) {
                    var s = this._parseTweenFrame(e, i, r)
                      , a = this._frameIntArray.length;
                    return this._frameIntArray.length += 2,
                    this._frameIntArray[a++] = n._getBoolean(e, t.DataParser.BEND_POSITIVE, !0) ? 1 : 0,
                    this._frameIntArray[a++] = Math.round(100 * n._getNumber(e, t.DataParser.WEIGHT, 1)),
                    s
                }
                ,
                n.prototype._parseAnimationFrame = function(e, i, r) {
                    var s = this._parseTweenFrame(e, i, r)
                      , a = this._frameIntArray.length;
                    return this._frameIntArray.length += 2,
                    this._frameIntArray[a++] = n._getNumber(e, t.DataParser.VALUE, 0),
                    this._frameIntArray[a++] = Math.round(100 * n._getNumber(e, t.DataParser.WEIGHT, 1)),
                    s
                }
                ,
                n.prototype._parseActionData = function(e, i, r, s) {
                    var a = new Array;
                    if ("string" == typeof e)
                        (c = t.BaseObject.borrowObject(t.ActionData)).type = i,
                        c.name = e,
                        c.bone = r,
                        c.slot = s,
                        a.push(c);
                    else if (e instanceof Array)
                        for (var o = 0, l = e; o < l.length; o++) {
                            var h = l[o]
                              , c = t.BaseObject.borrowObject(t.ActionData);
                            if (t.DataParser.GOTO_AND_PLAY in h ? (c.type = 0,
                            c.name = n._getString(h, t.DataParser.GOTO_AND_PLAY, "")) : (t.DataParser.TYPE in h && "string" == typeof h[t.DataParser.TYPE] ? c.type = t.DataParser._getActionType(h[t.DataParser.TYPE]) : c.type = n._getNumber(h, t.DataParser.TYPE, i),
                            c.name = n._getString(h, t.DataParser.NAME, "")),
                            t.DataParser.BONE in h) {
                                var u = n._getString(h, t.DataParser.BONE, "");
                                c.bone = this._armature.getBone(u)
                            } else
                                c.bone = r;
                            if (t.DataParser.SLOT in h) {
                                var _ = n._getString(h, t.DataParser.SLOT, "");
                                c.slot = this._armature.getSlot(_)
                            } else
                                c.slot = s;
                            var f = null;
                            if (t.DataParser.INTS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var d = 0, p = h[t.DataParser.INTS]; d < p.length; d++) {
                                    var m = p[d];
                                    f.addInt(m)
                                }
                            }
                            if (t.DataParser.FLOATS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var y = 0, v = h[t.DataParser.FLOATS]; y < v.length; y++)
                                    m = v[y],
                                    f.addFloat(m)
                            }
                            if (t.DataParser.STRINGS in h) {
                                null === f && (f = t.BaseObject.borrowObject(t.UserData));
                                for (var g = 0, A = h[t.DataParser.STRINGS]; g < A.length; g++)
                                    m = A[g],
                                    f.addString(m)
                            }
                            c.data = f,
                            a.push(c)
                        }
                    return a
                }
                ,
                n.prototype._parseTransform = function(e, i, r) {
                    i.x = n._getNumber(e, t.DataParser.X, 0) * r,
                    i.y = n._getNumber(e, t.DataParser.Y, 0) * r,
                    t.DataParser.ROTATE in e || t.DataParser.SKEW in e ? (i.rotation = t.Transform.normalizeRadian(n._getNumber(e, t.DataParser.ROTATE, 0) * t.Transform.DEG_RAD),
                    i.skew = t.Transform.normalizeRadian(n._getNumber(e, t.DataParser.SKEW, 0) * t.Transform.DEG_RAD)) : (t.DataParser.SKEW_X in e || t.DataParser.SKEW_Y in e) && (i.rotation = t.Transform.normalizeRadian(n._getNumber(e, t.DataParser.SKEW_Y, 0) * t.Transform.DEG_RAD),
                    i.skew = t.Transform.normalizeRadian(n._getNumber(e, t.DataParser.SKEW_X, 0) * t.Transform.DEG_RAD) - i.rotation),
                    i.scaleX = n._getNumber(e, t.DataParser.SCALE_X, 1),
                    i.scaleY = n._getNumber(e, t.DataParser.SCALE_Y, 1)
                }
                ,
                n.prototype._parseColorTransform = function(e, i) {
                    i.alphaMultiplier = .01 * n._getNumber(e, t.DataParser.ALPHA_MULTIPLIER, 100),
                    i.redMultiplier = .01 * n._getNumber(e, t.DataParser.RED_MULTIPLIER, 100),
                    i.greenMultiplier = .01 * n._getNumber(e, t.DataParser.GREEN_MULTIPLIER, 100),
                    i.blueMultiplier = .01 * n._getNumber(e, t.DataParser.BLUE_MULTIPLIER, 100),
                    i.alphaOffset = n._getNumber(e, t.DataParser.ALPHA_OFFSET, 0),
                    i.redOffset = n._getNumber(e, t.DataParser.RED_OFFSET, 0),
                    i.greenOffset = n._getNumber(e, t.DataParser.GREEN_OFFSET, 0),
                    i.blueOffset = n._getNumber(e, t.DataParser.BLUE_OFFSET, 0)
                }
                ,
                n.prototype._parseArray = function() {
                    this._intArray.length = 0,
                    this._floatArray.length = 0,
                    this._frameIntArray.length = 0,
                    this._frameFloatArray.length = 0,
                    this._frameArray.length = 0,
                    this._timelineArray.length = 0
                }
                ,
                n.prototype._modifyArray = function() {
                    this._intArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._intArray.push(0),
                    this._frameIntArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._frameIntArray.push(0),
                    this._frameArray.length % Int16Array.BYTES_PER_ELEMENT != 0 && this._frameArray.push(0),
                    this._timelineArray.length % Uint16Array.BYTES_PER_ELEMENT != 0 && this._timelineArray.push(0);
                    var e = this._intArray.length * Int16Array.BYTES_PER_ELEMENT
                      , i = this._floatArray.length * Float32Array.BYTES_PER_ELEMENT
                      , n = this._frameIntArray.length * Int16Array.BYTES_PER_ELEMENT
                      , r = this._frameFloatArray.length * Float32Array.BYTES_PER_ELEMENT
                      , s = this._frameArray.length * Int16Array.BYTES_PER_ELEMENT
                      , a = this._timelineArray.length * Uint16Array.BYTES_PER_ELEMENT
                      , o = e + i + n + r + s + a;
                    if (t.DragonBones.webAssembly) {
                        for (var l = t.webAssemblyModule.HEAP16.buffer, h = t.webAssemblyModule._malloc(o), c = new Int16Array(l,h,this._intArray.length), u = new Float32Array(l,h + e,this._floatArray.length), _ = new Int16Array(l,h + e + i,this._frameIntArray.length), f = new Float32Array(l,h + e + i + n,this._frameFloatArray.length), d = new Int16Array(l,h + e + i + n + r,this._frameArray.length), p = new Uint16Array(l,h + e + i + n + r + s,this._timelineArray.length), m = 0, y = this._intArray.length; m < y; ++m)
                            c[m] = this._intArray[m];
                        for (m = 0,
                        y = this._floatArray.length; m < y; ++m)
                            u[m] = this._floatArray[m];
                        for (m = 0,
                        y = this._frameIntArray.length; m < y; ++m)
                            _[m] = this._frameIntArray[m];
                        for (m = 0,
                        y = this._frameFloatArray.length; m < y; ++m)
                            f[m] = this._frameFloatArray[m];
                        for (m = 0,
                        y = this._frameArray.length; m < y; ++m)
                            d[m] = this._frameArray[m];
                        for (m = 0,
                        y = this._timelineArray.length; m < y; ++m)
                            p[m] = this._timelineArray[m];
                        t.webAssemblyModule.setDataBinary(this._data, h, e, i, n, r, s, a)
                    } else {
                        var v = new ArrayBuffer(o);
                        for (c = new Int16Array(v,0,this._intArray.length),
                        u = new Float32Array(v,e,this._floatArray.length),
                        _ = new Int16Array(v,e + i,this._frameIntArray.length),
                        f = new Float32Array(v,e + i + n,this._frameFloatArray.length),
                        d = new Int16Array(v,e + i + n + r,this._frameArray.length),
                        p = new Uint16Array(v,e + i + n + r + s,this._timelineArray.length),
                        m = 0,
                        y = this._intArray.length; m < y; ++m)
                            c[m] = this._intArray[m];
                        for (m = 0,
                        y = this._floatArray.length; m < y; ++m)
                            u[m] = this._floatArray[m];
                        for (m = 0,
                        y = this._frameIntArray.length; m < y; ++m)
                            _[m] = this._frameIntArray[m];
                        for (m = 0,
                        y = this._frameFloatArray.length; m < y; ++m)
                            f[m] = this._frameFloatArray[m];
                        for (m = 0,
                        y = this._frameArray.length; m < y; ++m)
                            d[m] = this._frameArray[m];
                        for (m = 0,
                        y = this._timelineArray.length; m < y; ++m)
                            p[m] = this._timelineArray[m];
                        this._data.binary = v,
                        this._data.intArray = c,
                        this._data.floatArray = u,
                        this._data.frameIntArray = _,
                        this._data.frameFloatArray = f,
                        this._data.frameArray = d,
                        this._data.timelineArray = p
                    }
                    this._defaultColorOffset = -1
                }
                ,
                n.prototype.parseDragonBonesData = function(e, i) {
                    void 0 === i && (i = 1),
                    console.assert(null != e, "Data error.");
                    var r = n._getString(e, t.DataParser.VERSION, "")
                      , s = n._getString(e, t.DataParser.COMPATIBLE_VERSION, "");
                    if (t.DataParser.DATA_VERSIONS.indexOf(r) >= 0 || t.DataParser.DATA_VERSIONS.indexOf(s) >= 0) {
                        var a = t.BaseObject.borrowObject(t.DragonBonesData);
                        if (a.version = r,
                        a.name = n._getString(e, t.DataParser.NAME, ""),
                        a.frameRate = n._getNumber(e, t.DataParser.FRAME_RATE, 24),
                        0 === a.frameRate && (a.frameRate = 24),
                        t.DataParser.ARMATURE in e) {
                            this._data = a,
                            this._parseArray(e);
                            for (var o = 0, l = e[t.DataParser.ARMATURE]; o < l.length; o++) {
                                var h = l[o];
                                a.addArmature(this._parseArmature(h, i))
                            }
                            this._data.binary || this._modifyArray(),
                            t.DataParser.STAGE in e ? a.stage = a.getArmature(n._getString(e, t.DataParser.STAGE, "")) : a.armatureNames.length > 0 && (a.stage = a.getArmature(a.armatureNames[0])),
                            this._data = null
                        }
                        return t.DataParser.TEXTURE_ATLAS in e && (this._rawTextureAtlases = e[t.DataParser.TEXTURE_ATLAS]),
                        a
                    }
                    return console.assert(!1, "Nonsupport data version: " + r + "\nPlease convert DragonBones data to support version.\nRead more: https://github.com/DragonBones/Tools/"),
                    null
                }
                ,
                n.prototype.parseTextureAtlasData = function(e, i, r) {
                    if (void 0 === r && (r = 1),
                    console.assert(void 0 !== e),
                    null === e) {
                        if (null === this._rawTextureAtlases || 0 === this._rawTextureAtlases.length)
                            return !1;
                        var s = this._rawTextureAtlases[this._rawTextureAtlasIndex++];
                        return this.parseTextureAtlasData(s, i, r),
                        this._rawTextureAtlasIndex >= this._rawTextureAtlases.length && (this._rawTextureAtlasIndex = 0,
                        this._rawTextureAtlases = null),
                        !0
                    }
                    if (i.width = n._getNumber(e, t.DataParser.WIDTH, 0),
                    i.height = n._getNumber(e, t.DataParser.HEIGHT, 0),
                    i.scale = 1 === r ? 1 / n._getNumber(e, t.DataParser.SCALE, 1) : r,
                    i.name = n._getString(e, t.DataParser.NAME, ""),
                    i.imagePath = n._getString(e, t.DataParser.IMAGE_PATH, ""),
                    t.DataParser.SUB_TEXTURE in e)
                        for (var a = e[t.DataParser.SUB_TEXTURE], o = 0, l = a.length; o < l; ++o) {
                            var h = a[o]
                              , c = i.createTexture();
                            c.rotated = n._getBoolean(h, t.DataParser.ROTATED, !1),
                            c.name = n._getString(h, t.DataParser.NAME, ""),
                            c.region.x = n._getNumber(h, t.DataParser.X, 0),
                            c.region.y = n._getNumber(h, t.DataParser.Y, 0),
                            c.region.width = n._getNumber(h, t.DataParser.WIDTH, 0),
                            c.region.height = n._getNumber(h, t.DataParser.HEIGHT, 0);
                            var u = n._getNumber(h, t.DataParser.FRAME_WIDTH, -1)
                              , _ = n._getNumber(h, t.DataParser.FRAME_HEIGHT, -1);
                            u > 0 && _ > 0 && (c.frame = t.TextureData.createRectangle(),
                            c.frame.x = n._getNumber(h, t.DataParser.FRAME_X, 0),
                            c.frame.y = n._getNumber(h, t.DataParser.FRAME_Y, 0),
                            c.frame.width = u,
                            c.frame.height = _),
                            i.addTexture(c)
                        }
                    return !0
                }
                ,
                n.getInstance = function() {
                    return null === n._objectDataParserInstance && (n._objectDataParserInstance = new n),
                    n._objectDataParserInstance
                }
                ,
                n._objectDataParserInstance = null,
                n
            }
            )(t.DataParser);
            t.ObjectDataParser = e;
            var i = function() {
                this.frameStart = 0,
                this.actions = []
            };
            t.ActionFrame = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i() {
                    return null !== e && e.apply(this, arguments) || this
                }
                return s(i, e),
                i.prototype._inRange = function(t, e, i) {
                    return e <= t && t <= i
                }
                ,
                i.prototype._decodeUTF8 = function(t) {
                    for (var e, i = 0, n = "", r = 0, s = 0, a = 0, o = 0; t.length > i; ) {
                        var l = t[i++];
                        if (-1 === l)
                            e = 0 !== s ? 65533 : -1;
                        else if (0 === s)
                            this._inRange(l, 0, 127) ? e = l : (this._inRange(l, 194, 223) ? (s = 1,
                            o = 128,
                            r = l - 192) : this._inRange(l, 224, 239) ? (s = 2,
                            o = 2048,
                            r = l - 224) : this._inRange(l, 240, 244) && (s = 3,
                            o = 65536,
                            r = l - 240),
                            r *= Math.pow(64, s),
                            e = null);
                        else if (this._inRange(l, 128, 191))
                            if (a += 1,
                            r += (l - 128) * Math.pow(64, s - a),
                            a !== s)
                                e = null;
                            else {
                                var h = r
                                  , c = o;
                                r = 0,
                                s = 0,
                                a = 0,
                                o = 0,
                                e = this._inRange(h, c, 1114111) && !this._inRange(h, 55296, 57343) ? h : l
                            }
                        else
                            r = 0,
                            s = 0,
                            a = 0,
                            o = 0,
                            i--,
                            e = l;
                        null !== e && -1 !== e && (e <= 65535 ? e > 0 && (n += String.fromCharCode(e)) : (e -= 65536,
                        n += String.fromCharCode(55296 + (e >> 10 & 1023)),
                        n += String.fromCharCode(56320 + (1023 & e))))
                    }
                    return n
                }
                ,
                i.prototype._getUTF16Key = function(t) {
                    for (var e = 0, i = t.length; e < i; ++e)
                        if (t.charCodeAt(e) > 255)
                            return encodeURI(t);
                    return t
                }
                ,
                i.prototype._parseBinaryTimeline = function(e, i, n) {
                    void 0 === n && (n = null);
                    var r = null !== n ? n : t.BaseObject.borrowObject(t.TimelineData);
                    r.type = e,
                    r.offset = i,
                    this._timeline = r;
                    var s = this._timelineArrayBuffer[r.offset + 2];
                    if (1 === s)
                        r.frameIndicesOffset = -1;
                    else {
                        var a = 0
                          , o = this._animation.frameCount + 1
                          , l = this._data.frameIndices;
                        t.DragonBones.webAssembly ? (a = l.size(),
                        l.resize(a + o, 0)) : (a = l.length,
                        l.length += o),
                        r.frameIndicesOffset = a;
                        for (var h = 0, c = 0, u = 0, _ = 0; h < o; ++h)
                            u + _ <= h && c < s && (u = this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[r.offset + 5 + c]],
                            _ = c === s - 1 ? this._animation.frameCount - u : this._frameArrayBuffer[this._animation.frameOffset + this._timelineArrayBuffer[r.offset + 5 + c + 1]] - u,
                            c++),
                            t.DragonBones.webAssembly ? l.set(a + h, c - 1) : l[a + h] = c - 1
                    }
                    return this._timeline = null,
                    r
                }
                ,
                i.prototype._parseVertices = function(e, i) {
                    i.offset = e[t.DataParser.OFFSET];
                    var n = this._intArrayBuffer[i.offset + 3];
                    if (n >= 0) {
                        var r = t.BaseObject.borrowObject(t.WeightData)
                          , s = this._intArrayBuffer[i.offset + 0]
                          , a = this._intArrayBuffer[n + 0];
                        r.offset = n;
                        for (var o = 0; o < a; ++o) {
                            var l = this._intArrayBuffer[n + 2 + o];
                            r.addBone(this._rawBones[l])
                        }
                        for (var h = n + 2 + a, c = 0, u = (o = 0,
                        s); o < u; ++o) {
                            var _ = this._intArrayBuffer[h++];
                            c += _,
                            h += _
                        }
                        r.count = c,
                        i.weight = r
                    }
                }
                ,
                i.prototype._parseMesh = function(t, e) {
                    this._parseVertices(t, e.vertices)
                }
                ,
                i.prototype._parsePath = function(t, e) {
                    this._parseVertices(t, e.vertices)
                }
                ,
                i.prototype._parseAnimation = function(e) {
                    var i = t.BaseObject.borrowObject(t.AnimationData);
                    i.frameCount = Math.max(t.ObjectDataParser._getNumber(e, t.DataParser.DURATION, 1), 1),
                    i.playTimes = t.ObjectDataParser._getNumber(e, t.DataParser.PLAY_TIMES, 1),
                    i.duration = i.frameCount / this._armature.frameRate,
                    i.fadeInTime = t.ObjectDataParser._getNumber(e, t.DataParser.FADE_IN_TIME, 0),
                    i.scale = t.ObjectDataParser._getNumber(e, t.DataParser.SCALE, 1),
                    i.name = t.ObjectDataParser._getString(e, t.DataParser.NAME, t.DataParser.DEFAULT_NAME),
                    0 === i.name.length && (i.name = t.DataParser.DEFAULT_NAME);
                    var n = e[t.DataParser.OFFSET];
                    if (i.frameIntOffset = n[0],
                    i.frameFloatOffset = n[1],
                    i.frameOffset = n[2],
                    this._animation = i,
                    t.DataParser.ACTION in e && (i.actionTimeline = this._parseBinaryTimeline(0, e[t.DataParser.ACTION])),
                    t.DataParser.Z_ORDER in e && (i.zOrderTimeline = this._parseBinaryTimeline(1, e[t.DataParser.Z_ORDER])),
                    t.DataParser.BONE in e) {
                        var r = e[t.DataParser.BONE];
                        for (var s in r) {
                            var a = r[s];
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var o = this._armature.getBone(s);
                            if (null !== o)
                                for (var l = 0, h = a.length; l < h; l += 2) {
                                    var c = a[l]
                                      , u = a[l + 1]
                                      , _ = this._parseBinaryTimeline(c, u);
                                    this._animation.addBoneTimeline(o, _)
                                }
                        }
                    }
                    if (t.DataParser.SURFACE in e)
                        for (var s in r = e[t.DataParser.SURFACE]) {
                            a = r[s],
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var f = this._armature.getBone(s);
                            if (null !== f)
                                for (l = 0,
                                h = a.length; l < h; l += 2)
                                    c = a[l],
                                    u = a[l + 1],
                                    _ = this._parseBinaryTimeline(c, u),
                                    this._animation.addSurfaceTimeline(f, _)
                        }
                    if (t.DataParser.SLOT in e)
                        for (var s in r = e[t.DataParser.SLOT]) {
                            a = r[s],
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var d = this._armature.getSlot(s);
                            if (null !== d)
                                for (l = 0,
                                h = a.length; l < h; l += 2)
                                    c = a[l],
                                    u = a[l + 1],
                                    _ = this._parseBinaryTimeline(c, u),
                                    this._animation.addSlotTimeline(d, _)
                        }
                    if (t.DataParser.CONSTRAINT in e)
                        for (var s in r = e[t.DataParser.CONSTRAINT]) {
                            a = r[s],
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s));
                            var p = this._armature.getConstraint(s);
                            if (null !== p)
                                for (l = 0,
                                h = a.length; l < h; l += 2)
                                    c = a[l],
                                    u = a[l + 1],
                                    _ = this._parseBinaryTimeline(c, u),
                                    this._animation.addConstraintTimeline(p, _)
                        }
                    if (t.DataParser.ANIMATION in e)
                        for (var s in r = e[t.DataParser.ANIMATION])
                            for (a = r[s],
                            t.DragonBones.webAssembly && (s = this._getUTF16Key(s)),
                            l = 0,
                            h = a.length; l < h; l += 2)
                                c = a[l],
                                u = a[l + 1],
                                _ = this._parseBinaryTimeline(c, u),
                                this._animation.addAnimationTimeline(s, _);
                    return this._animation = null,
                    i
                }
                ,
                i.prototype._parseArray = function(e) {
                    var i = e[t.DataParser.OFFSET]
                      , n = i[1]
                      , r = i[3]
                      , s = i[5]
                      , a = i[7]
                      , o = i[9]
                      , l = i[11]
                      , h = new Int16Array(this._binary,this._binaryOffset + i[0],n / Int16Array.BYTES_PER_ELEMENT)
                      , c = new Float32Array(this._binary,this._binaryOffset + i[2],r / Float32Array.BYTES_PER_ELEMENT)
                      , u = new Int16Array(this._binary,this._binaryOffset + i[4],s / Int16Array.BYTES_PER_ELEMENT)
                      , _ = new Float32Array(this._binary,this._binaryOffset + i[6],a / Float32Array.BYTES_PER_ELEMENT)
                      , f = new Int16Array(this._binary,this._binaryOffset + i[8],o / Int16Array.BYTES_PER_ELEMENT)
                      , d = new Uint16Array(this._binary,this._binaryOffset + i[10],l / Uint16Array.BYTES_PER_ELEMENT);
                    if (t.DragonBones.webAssembly) {
                        for (var p = n + r + s + a + o + l, m = t.webAssemblyModule._malloc(p), y = new Uint8Array(this._binary,this._binaryOffset,p / Uint8Array.BYTES_PER_ELEMENT), v = new Uint8Array(t.webAssemblyModule.HEAP16.buffer,m,y.length), g = 0, A = y.length; g < A; ++g)
                            v[g] = y[g];
                        t.webAssemblyModule.setDataBinary(this._data, m, n, r, s, a, o, l),
                        this._intArrayBuffer = h,
                        this._floatArrayBuffer = c,
                        this._frameIntArrayBuffer = u,
                        this._frameFloatArrayBuffer = _,
                        this._frameArrayBuffer = f,
                        this._timelineArrayBuffer = d
                    } else
                        this._data.binary = this._binary,
                        this._data.intArray = this._intArrayBuffer = h,
                        this._data.floatArray = this._floatArrayBuffer = c,
                        this._data.frameIntArray = this._frameIntArrayBuffer = u,
                        this._data.frameFloatArray = this._frameFloatArrayBuffer = _,
                        this._data.frameArray = this._frameArrayBuffer = f,
                        this._data.timelineArray = this._timelineArrayBuffer = d
                }
                ,
                i.prototype.parseDragonBonesData = function(t, i) {
                    void 0 === i && (i = 1),
                    console.assert(null != t && t instanceof ArrayBuffer, "Data error.");
                    var n = new Uint8Array(t,0,8);
                    if (n[0] !== "D".charCodeAt(0) || n[1] !== "B".charCodeAt(0) || n[2] !== "D".charCodeAt(0) || n[3] !== "T".charCodeAt(0))
                        return console.assert(!1, "Nonsupport data."),
                        null;
                    var r = new Uint32Array(t,8,1)[0]
                      , s = new Uint8Array(t,12,r)
                      , a = this._decodeUTF8(s)
                      , o = JSON.parse(a);
                    return this._binaryOffset = 12 + r,
                    this._binary = t,
                    e.prototype.parseDragonBonesData.call(this, o, i)
                }
                ,
                i.getInstance = function() {
                    return null === i._binaryDataParserInstance && (i._binaryDataParserInstance = new i),
                    i._binaryDataParserInstance
                }
                ,
                i._binaryDataParserInstance = null,
                i
            }
            )(t.ObjectDataParser);
            t.BinaryDataParser = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(i) {
                    void 0 === i && (i = null),
                    this.autoSearch = !1,
                    this._dragonBonesDataMap = {},
                    this._textureAtlasDataMap = {},
                    this._dragonBones = null,
                    this._dataParser = null,
                    null === e._objectParser && (e._objectParser = new t.ObjectDataParser),
                    null === e._binaryParser && (e._binaryParser = new t.BinaryDataParser),
                    this._dataParser = null !== i ? i : e._objectParser
                }
                return e.prototype._isSupportMesh = function() {
                    return !0
                }
                ,
                e.prototype._getTextureData = function(t, e) {
                    if (t in this._textureAtlasDataMap)
                        for (var i = 0, n = this._textureAtlasDataMap[t]; i < n.length; i++)
                            if (null !== (l = (o = n[i]).getTexture(e)))
                                return l;
                    if (this.autoSearch)
                        for (var r in this._textureAtlasDataMap)
                            for (var s = 0, a = this._textureAtlasDataMap[r]; s < a.length; s++) {
                                var o, l;
                                if ((o = a[s]).autoSearch && null !== (l = o.getTexture(e)))
                                    return l
                            }
                    return null
                }
                ,
                e.prototype._fillBuildArmaturePackage = function(t, e, i, n, r) {
                    var s = null
                      , a = null;
                    if (e.length > 0 && e in this._dragonBonesDataMap && (a = (s = this._dragonBonesDataMap[e]).getArmature(i)),
                    null === a && (0 === e.length || this.autoSearch))
                        for (var o in this._dragonBonesDataMap)
                            if (s = this._dragonBonesDataMap[o],
                            (0 === e.length || s.autoSearch) && null !== (a = s.getArmature(i))) {
                                e = o;
                                break
                            }
                    if (null !== a) {
                        if (t.dataName = e,
                        t.textureAtlasName = r,
                        t.data = s,
                        t.armature = a,
                        t.skin = null,
                        n.length > 0 && (t.skin = a.getSkin(n),
                        null === t.skin && this.autoSearch))
                            for (var o in this._dragonBonesDataMap) {
                                var l = this._dragonBonesDataMap[o].getArmature(n);
                                if (null !== l) {
                                    t.skin = l.defaultSkin;
                                    break
                                }
                            }
                        return null === t.skin && (t.skin = a.defaultSkin),
                        !0
                    }
                    return !1
                }
                ,
                e.prototype._buildBones = function(e, i) {
                    for (var n = 0, r = e.armature.sortedBones; n < r.length; n++) {
                        var s = r[n];
                        t.BaseObject.borrowObject(0 === s.type ? t.Bone : t.Surface).init(s, i)
                    }
                }
                ,
                e.prototype._buildSlots = function(e, i) {
                    var n = e.skin
                      , r = e.armature.defaultSkin;
                    if (null !== n && null !== r) {
                        var s = {};
                        for (var a in r.displays) {
                            var o = r.getDisplays(a);
                            s[a] = o
                        }
                        if (n !== r)
                            for (var a in n.displays)
                                o = n.getDisplays(a),
                                s[a] = o;
                        for (var l = 0, h = e.armature.sortedSlots; l < h.length; l++) {
                            var c = h[l]
                              , u = c.name in s ? s[c.name] : null
                              , _ = this._buildSlot(e, c, i);
                            if (_.rawDisplayDatas = u,
                            null !== u) {
                                for (var f = new Array, d = 0, p = t.DragonBones.webAssembly ? u.size() : u.length; d < p; ++d) {
                                    var m = t.DragonBones.webAssembly ? u.get(d) : u[d];
                                    null !== m ? f.push(this._getSlotDisplay(e, m, null, _)) : f.push(null)
                                }
                                _._setDisplayList(f)
                            }
                            _._setDisplayIndex(c.displayIndex, !0)
                        }
                    }
                }
                ,
                e.prototype._buildConstraints = function(e, i) {
                    var n = e.armature.constraints;
                    for (var r in n) {
                        var s = n[r];
                        switch (s.type) {
                        case 0:
                            var a = t.BaseObject.borrowObject(t.IKConstraint);
                            a.init(s, i),
                            i._addConstraint(a);
                            break;
                        case 1:
                            var o = t.BaseObject.borrowObject(t.PathConstraint);
                            o.init(s, i),
                            i._addConstraint(o);
                            break;
                        default:
                            var l = t.BaseObject.borrowObject(t.IKConstraint);
                            l.init(s, i),
                            i._addConstraint(l)
                        }
                    }
                }
                ,
                e.prototype._buildChildArmature = function(t, e, i) {
                    return this.buildArmature(i.path, null !== t ? t.dataName : "", "", null !== t ? t.textureAtlasName : "")
                }
                ,
                e.prototype._getSlotDisplay = function(e, i, n, r) {
                    var s = null !== e ? e.dataName : i.parent.parent.parent.name
                      , a = null;
                    switch (i.type) {
                    case 0:
                        var o = i;
                        null !== e && e.textureAtlasName.length > 0 && (o.texture = this._getTextureData(e.textureAtlasName, i.path)),
                        null === o.texture && (o.texture = this._getTextureData(s, i.path)),
                        a = null !== n && 2 === n.type && this._isSupportMesh() ? r.meshDisplay : r.rawDisplay;
                        break;
                    case 2:
                        var l = i;
                        null !== e && e.textureAtlasName.length > 0 && (l.texture = this._getTextureData(e.textureAtlasName, l.path)),
                        null === l.texture && (l.texture = this._getTextureData(s, l.path)),
                        a = this._isSupportMesh() ? r.meshDisplay : r.rawDisplay;
                        break;
                    case 1:
                        var h = i
                          , c = this._buildChildArmature(e, r, i);
                        if (null !== c) {
                            if (c.inheritAnimation = h.inheritAnimation,
                            !c.inheritAnimation) {
                                var u = h.actions.length > 0 ? h.actions : c.armatureData.defaultActions;
                                if (u.length > 0)
                                    for (var _ = 0, f = u; _ < f.length; _++) {
                                        var d = f[_]
                                          , p = t.BaseObject.borrowObject(t.EventObject);
                                        t.EventObject.actionDataToInstance(d, p, r.armature),
                                        p.slot = r,
                                        r.armature._bufferAction(p, !1)
                                    }
                                else
                                    c.animation.play()
                            }
                            h.armature = c.armatureData
                        }
                        a = c
                    }
                    return a
                }
                ,
                e.prototype.parseDragonBonesData = function(t, i, n) {
                    void 0 === i && (i = null),
                    void 0 === n && (n = 1);
                    for (var r = t instanceof ArrayBuffer ? e._binaryParser : this._dataParser, s = r.parseDragonBonesData(t, n); ; ) {
                        var a = this._buildTextureAtlasData(null, null);
                        if (!r.parseTextureAtlasData(null, a, n)) {
                            a.returnToPool();
                            break
                        }
                        this.addTextureAtlasData(a, i)
                    }
                    return null !== s && this.addDragonBonesData(s, i),
                    s
                }
                ,
                e.prototype.parseTextureAtlasData = function(t, e, i, n) {
                    void 0 === i && (i = null),
                    void 0 === n && (n = 1);
                    var r = this._buildTextureAtlasData(null, null);
                    return this._dataParser.parseTextureAtlasData(t, r, n),
                    this._buildTextureAtlasData(r, e || null),
                    this.addTextureAtlasData(r, i),
                    r
                }
                ,
                e.prototype.updateTextureAtlasData = function(t, e) {
                    var i = this.getTextureAtlasData(t);
                    if (null !== i)
                        for (var n = 0, r = i.length; n < r; ++n)
                            n < e.length && this._buildTextureAtlasData(i[n], e[n])
                }
                ,
                e.prototype.getDragonBonesData = function(t) {
                    return t in this._dragonBonesDataMap ? this._dragonBonesDataMap[t] : null
                }
                ,
                e.prototype.addDragonBonesData = function(t, e) {
                    if (void 0 === e && (e = null),
                    (e = null !== e ? e : t.name)in this._dragonBonesDataMap) {
                        if (this._dragonBonesDataMap[e] === t)
                            return;
                        console.warn("Can not add same name data: " + e)
                    } else
                        this._dragonBonesDataMap[e] = t
                }
                ,
                e.prototype.removeDragonBonesData = function(t, e) {
                    void 0 === e && (e = !0),
                    t in this._dragonBonesDataMap && (e && this._dragonBones.bufferObject(this._dragonBonesDataMap[t]),
                    delete this._dragonBonesDataMap[t])
                }
                ,
                e.prototype.getTextureAtlasData = function(t) {
                    return t in this._textureAtlasDataMap ? this._textureAtlasDataMap[t] : null
                }
                ,
                e.prototype.addTextureAtlasData = function(t, e) {
                    void 0 === e && (e = null);
                    var i = (e = null !== e ? e : t.name)in this._textureAtlasDataMap ? this._textureAtlasDataMap[e] : this._textureAtlasDataMap[e] = [];
                    i.indexOf(t) < 0 && i.push(t)
                }
                ,
                e.prototype.removeTextureAtlasData = function(t, e) {
                    if (void 0 === e && (e = !0),
                    t in this._textureAtlasDataMap) {
                        var i = this._textureAtlasDataMap[t];
                        if (e)
                            for (var n = 0, r = i; n < r.length; n++) {
                                var s = r[n];
                                this._dragonBones.bufferObject(s)
                            }
                        delete this._textureAtlasDataMap[t]
                    }
                }
                ,
                e.prototype.getArmatureData = function(t, e) {
                    void 0 === e && (e = "");
                    var n = new i;
                    return this._fillBuildArmaturePackage(n, e, t, "", "") ? n.armature : null
                }
                ,
                e.prototype.clear = function(t) {
                    for (var e in void 0 === t && (t = !0),
                    this._dragonBonesDataMap)
                        t && this._dragonBones.bufferObject(this._dragonBonesDataMap[e]),
                        delete this._dragonBonesDataMap[e];
                    for (var e in this._textureAtlasDataMap) {
                        if (t)
                            for (var i = 0, n = this._textureAtlasDataMap[e]; i < n.length; i++) {
                                var r = n[i];
                                this._dragonBones.bufferObject(r)
                            }
                        delete this._textureAtlasDataMap[e]
                    }
                }
                ,
                e.prototype.buildArmature = function(t, e, n, r) {
                    void 0 === e && (e = ""),
                    void 0 === n && (n = ""),
                    void 0 === r && (r = "");
                    var s = new i;
                    if (!this._fillBuildArmaturePackage(s, e || "", t, n || "", r || ""))
                        return console.warn("No armature data: " + t + ", " + (null !== e ? e : "")),
                        null;
                    var a = this._buildArmature(s);
                    return this._buildBones(s, a),
                    this._buildSlots(s, a),
                    this._buildConstraints(s, a),
                    a.invalidUpdate(null, !0),
                    a.advanceTime(0),
                    a
                }
                ,
                e.prototype.replaceDisplay = function(e, i, n) {
                    void 0 === n && (n = -1),
                    n < 0 && (n = e.displayIndex),
                    n < 0 && (n = 0),
                    e.replaceDisplayData(i, n);
                    var r = e.displayList;
                    if (r.length <= n) {
                        r.length = n + 1;
                        for (var s = 0, a = r.length; s < a; ++s)
                            r[s] || (r[s] = null)
                    }
                    if (null !== i) {
                        var o = e.rawDisplayDatas
                          , l = null;
                        o && (t.DragonBones.webAssembly ? n < o.size() && (l = o.get(n)) : n < o.length && (l = o[n])),
                        r[n] = this._getSlotDisplay(null, i, l, e)
                    } else
                        r[n] = null;
                    e.displayList = r
                }
                ,
                e.prototype.replaceSlotDisplay = function(t, e, i, n, r, s) {
                    void 0 === s && (s = -1);
                    var a = this.getArmatureData(e, t || "");
                    if (!a || !a.defaultSkin)
                        return !1;
                    var o = a.defaultSkin.getDisplay(i, n);
                    return !!o && (this.replaceDisplay(r, o, s),
                    !0)
                }
                ,
                e.prototype.replaceSlotDisplayList = function(e, i, n, r) {
                    var s = this.getArmatureData(i, e || "");
                    if (!s || !s.defaultSkin)
                        return !1;
                    var a = s.defaultSkin.getDisplays(n);
                    if (!a)
                        return !1;
                    for (var o = 0, l = 0, h = t.DragonBones.webAssembly ? a.size() : a.length; l < h; ++l) {
                        var c = t.DragonBones.webAssembly ? a.get(l) : a[l];
                        this.replaceDisplay(r, c, o++)
                    }
                    return !0
                }
                ,
                e.prototype.replaceSkin = function(e, i, n, r) {
                    void 0 === n && (n = !1),
                    void 0 === r && (r = null);
                    for (var s = !1, a = i.parent.defaultSkin, o = 0, l = e.getSlots(); o < l.length; o++) {
                        var h = l[o];
                        if (!(null !== r && r.indexOf(h.name) >= 0)) {
                            var c = i.getDisplays(h.name);
                            if (c || (null !== a && i !== a && (c = a.getDisplays(h.name)),
                            c)) {
                                var u = t.DragonBones.webAssembly ? c.size() : c.length
                                  , _ = h.displayList;
                                _.length = u;
                                for (var f = 0, d = u; f < d; ++f) {
                                    var p = t.DragonBones.webAssembly ? c.get(f) : c[f];
                                    _[f] = null !== p ? this._getSlotDisplay(null, p, null, h) : null
                                }
                                s = !0,
                                h.rawDisplayDatas = c,
                                h.displayList = _
                            } else
                                n && (h.rawDisplayDatas = null,
                                h.displayList = [])
                        }
                    }
                    return s
                }
                ,
                e.prototype.replaceAnimation = function(e, i, n) {
                    void 0 === n && (n = !0);
                    var r = i.defaultSkin;
                    if (null === r)
                        return !1;
                    if (n)
                        e.animation.animations = i.animations;
                    else {
                        var s = e.animation.animations
                          , a = {};
                        for (var o in s)
                            a[o] = s[o];
                        for (var o in i.animations)
                            a[o] = i.animations[o];
                        e.animation.animations = a
                    }
                    for (var l = 0, h = e.getSlots(); l < h.length; l++)
                        for (var c = h[l], u = 0, _ = 0, f = c.displayList; _ < f.length; _++) {
                            var d = f[_];
                            if (d instanceof t.Armature) {
                                var p = r.getDisplays(c.name);
                                if (null !== p && u < (t.DragonBones.webAssembly ? p.size() : p.length)) {
                                    var m = t.DragonBones.webAssembly ? p.get(u) : p[u];
                                    if (null !== m && 1 === m.type) {
                                        var y = this.getArmatureData(m.path, m.parent.parent.parent.name);
                                        y && this.replaceAnimation(d, y, n)
                                    }
                                }
                            }
                            u++
                        }
                    return !0
                }
                ,
                e.prototype.getAllDragonBonesData = function() {
                    return this._dragonBonesDataMap
                }
                ,
                e.prototype.getAllTextureAtlasData = function() {
                    return this._textureAtlasDataMap
                }
                ,
                Object.defineProperty(e.prototype, "clock", {
                    get: function() {
                        return this._dragonBones.clock
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(e.prototype, "dragonBones", {
                    get: function() {
                        return this._dragonBones
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                e.prototype.changeSkin = function(t, e, i) {
                    return void 0 === i && (i = null),
                    this.replaceSkin(t, e, !1, i)
                }
                ,
                e.prototype.copyAnimationsToArmature = function(t, e, i, n, r) {
                    void 0 === i && (i = ""),
                    void 0 === n && (n = ""),
                    void 0 === r && (r = !0);
                    var s = this.getArmatureData(e, n);
                    return !!s && this.replaceAnimation(t, s, r)
                }
                ,
                e._objectParser = null,
                e._binaryParser = null,
                e
            }
            )();
            t.BaseFactory = e;
            var i = function() {
                this.dataName = "",
                this.textureAtlasName = "",
                this.skin = null
            };
            t.BuildArmaturePackage = i
        }
        )(r || (r = {})),
        e.exports = r
    }
    ), {}],
    366: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n = s(t("../../cocos2d/core/renderer/assembler"))
          , r = s(t("../../cocos2d/core/value-types/mat4"));
        function s(t) {
            return t && t.__esModule ? t : {
                default: t
            }
        }
        function a(t, e) {
            return (a = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var o, l, h, c, u, _, f, d, p, m, y, v, g, A, x, b, C, T, S, w, E, M, D, B, I, P, R, O, L, F, V = t("./ArmatureDisplay"), N = t("../../cocos2d/core/renderer/render-flow"), k = cc.gfx, G = cc.color(255, 0, 0, 255), U = cc.color(0, 0, 255, 255), z = cc.color(0, 255, 0, 255);
        function H(t, e) {
            if (!t)
                return null;
            var i, n;
            switch (e) {
            case 1:
                i = u ? cc.macro.ONE : cc.macro.SRC_ALPHA,
                n = cc.macro.ONE;
                break;
            case 10:
                i = cc.macro.DST_COLOR,
                n = cc.macro.ONE_MINUS_SRC_ALPHA;
                break;
            case 12:
                i = cc.macro.ONE,
                n = cc.macro.ONE_MINUS_SRC_COLOR;
                break;
            case 0:
            default:
                i = u ? cc.macro.ONE : cc.macro.SRC_ALPHA,
                n = cc.macro.ONE_MINUS_SRC_ALPHA
            }
            var r = !y.enableBatch
              , s = y._materials[0];
            if (!s)
                return null;
            var a = y._materialCache
              , o = t.getId() + i + n + r
              , l = a[o];
            return l || (a.baseMaterial ? l = cc.MaterialVariant.create(s) : (l = s,
            a.baseMaterial = s),
            l.define("CC_USE_MODEL", r),
            l.setProperty("texture", t),
            l.setBlend(!0, k.BLEND_FUNC_ADD, i, n, k.BLEND_FUNC_ADD, i, n),
            a[o] = l),
            l
        }
        function W(t, e) {
            D = t.a * e * c,
            _ = u ? D / 255 : 1,
            w = t.r * o * _,
            E = t.g * l * _,
            M = t.b * h * _,
            S = (D << 24 >>> 0) + (M << 16) + (E << 8) + w
        }
        var j = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            a(e, i);
            var s = n.prototype;
            return s.updateRenderData = function() {}
            ,
            s.realTimeTraverse = function(t, e, i) {
                for (var n, s, a, o, l, h, c, u, _, y, w = t._slots, E = 0, M = w.length; E < M; E++)
                    if (c = (u = w[E])._color,
                    u._visible && u._displayData)
                        if (e ? u._mulMat(u._worldMatrix, e, u._matrix) : r.default.copy(u._worldMatrix, u._matrix),
                        u.childArmature)
                            this.realTimeTraverse(u.childArmature, u._worldMatrix, i * c.a / 255);
                        else if (o = H(u.getTexture(), u._blendMode)) {
                            (f || o.getHash() !== m.material.getHash()) && (f = !1,
                            m._flush(),
                            m.node = p,
                            m.material = o),
                            W(c, i),
                            _ = u._worldMatrix.m,
                            l = u._localVertices,
                            x = l.length >> 2,
                            h = u._indices,
                            b = h.length,
                            y = d.request(x, b),
                            g = y.indiceOffset,
                            v = y.byteOffset >> 2,
                            A = y.vertexOffset,
                            n = d._vData,
                            s = d._iData,
                            a = d._uintVData,
                            I = _[0],
                            P = _[4],
                            R = _[12],
                            O = _[1],
                            L = _[5],
                            F = _[13];
                            for (var D = 0, B = l.length; D < B; )
                                C = l[D++],
                                T = l[D++],
                                n[v++] = C * I + T * P + R,
                                n[v++] = C * O + T * L + F,
                                n[v++] = l[D++],
                                n[v++] = l[D++],
                                a[v++] = S;
                            for (var V = 0, N = h.length; V < N; V++)
                                s[g++] = A + h[V]
                        }
            }
            ,
            s.cacheTraverse = function(t, e) {
                if (t) {
                    var i = t.segments;
                    if (0 != i.length) {
                        var n, r, s, a, o, l = t.vertices, h = t.indices, c = 0, u = 0, _ = 0;
                        if (e) {
                            var y = e.m;
                            I = y[0],
                            O = y[1],
                            P = y[4],
                            L = y[5],
                            R = y[12],
                            F = y[13]
                        }
                        var w = 16 & B
                          , E = w && 1 === I && 0 === O && 0 === P && 1 === L
                          , M = 0
                          , D = t.colors
                          , V = D[M++]
                          , N = V.vfOffset;
                        W(V, 1);
                        for (var k = 0, G = i.length; k < G; k++) {
                            var U = i[k];
                            a = H(U.tex, U.blendMode),
                            (f || a.getHash() !== m.material.getHash()) && (f = !1,
                            m._flush(),
                            m.node = p,
                            m.material = a),
                            x = U.vertexCount,
                            b = U.indexCount,
                            o = d.request(x, b),
                            g = o.indiceOffset,
                            A = o.vertexOffset,
                            v = o.byteOffset >> 2,
                            n = d._vData,
                            r = d._iData,
                            s = d._uintVData;
                            for (var z = g, j = g + b; z < j; z++)
                                r[z] = A + h[u++];
                            if (_ = U.vfCount,
                            n.set(l.subarray(c, c + _), v),
                            c += _,
                            E)
                                for (var X = v, Y = v + _; X < Y; X += 5)
                                    n[X] += R,
                                    n[X + 1] += F;
                            else if (w)
                                for (var q = v, J = v + _; q < J; q += 5)
                                    C = n[q],
                                    T = n[q + 1],
                                    n[q] = C * I + T * P + R,
                                    n[q + 1] = C * O + T * L + F;
                            if (1 & B)
                                for (var Z = c - _, K = v + 4, Q = v + 4 + _; K < Q; K += 5,
                                Z += 5)
                                    Z >= N && (W(V = D[M++], 1),
                                    N = V.vfOffset),
                                    s[K] = S
                        }
                    }
                }
            }
            ,
            s.fillBuffers = function(t, e) {
                t.node._renderFlag |= N.FLAG_UPDATE_RENDER_DATA;
                var i = t._armature;
                if (i) {
                    f = !0,
                    u = t.premultipliedAlpha,
                    p = t.node,
                    d = e._meshBuffer,
                    m = e,
                    y = t,
                    B = 0;
                    var n = p._color;
                    o = n.r / 255,
                    l = n.g / 255,
                    h = n.b / 255,
                    c = n.a / 255,
                    4294967295 !== n._val && (B |= 1);
                    var r = void 0;
                    if (y.enableBatch && (r = p._worldMatrix,
                    f = !1,
                    B |= 16),
                    t.isAnimationCached())
                        this.cacheTraverse(t._curFrame, r);
                    else {
                        this.realTimeTraverse(i, r, 1);
                        var s = t._debugDraw;
                        if (t.debugBones && s) {
                            s.clear(),
                            s.lineWidth = 5,
                            s.strokeColor = G,
                            s.fillColor = U;
                            for (var a = i.getBones(), _ = 0, v = a.length; _ < v; _++) {
                                var g = a[_]
                                  , A = Math.max(g.boneData.length, 5)
                                  , x = g.globalTransformMatrix.tx
                                  , b = g.globalTransformMatrix.ty
                                  , C = x + g.globalTransformMatrix.a * A
                                  , T = b + g.globalTransformMatrix.b * A;
                                s.moveTo(x, b),
                                s.lineTo(C, T),
                                s.stroke(),
                                s.circle(x, b, 2 * Math.PI),
                                s.fill(),
                                0 === _ && (s.fillColor = z)
                            }
                        }
                    }
                    e.worldMatDirty++,
                    t.attachUtil._syncAttachedNode(),
                    p = void 0,
                    d = void 0,
                    m = void 0,
                    y = void 0
                }
            }
            ,
            s.postFillBuffers = function(t, e) {
                e.worldMatDirty--
            }
            ,
            n
        }
        )(n.default);
        i.default = j,
        n.default.register(V, j),
        e.exports = i.default
    }
    ), {
        "../../cocos2d/core/renderer/assembler": 221,
        "../../cocos2d/core/renderer/render-flow": 225,
        "../../cocos2d/core/value-types/mat4": 284,
        "./ArmatureDisplay": 356
    }],
    367: [(function(t, e) {
        "use strict";
        var i, n = (i = t("../../cocos2d/core/value-types/mat4")) && i.__esModule ? i : {
            default: i
        }, r = t("../../cocos2d/core/renderer/render-flow").FLAG_TRANSFORM, s = function() {}, a = function(t) {
            Object.defineProperty(t, "_worldMatDirty", {
                get: function() {
                    return !0
                },
                set: function() {}
            }),
            t._calculWorldMatrix = s,
            t._mulMat = s
        }, o = new n.default, l = cc.Class({
            name: "sp.AttachUtil",
            ctor: function() {
                this._inited = !1,
                this._skeleton = null,
                this._skeletonNode = null,
                this._skeletonComp = null,
                this._attachedRootNode = null,
                this._attachedNodeArray = [],
                this._boneIndexToNode = {}
            },
            init: function(t) {
                this._inited = !0,
                this._skeleton = t._skeleton,
                this._skeletonNode = t.node,
                this._skeletonComp = t
            },
            reset: function() {
                this._inited = !1,
                this._skeleton = null,
                this._skeletonNode = null,
                this._skeletonComp = null
            },
            _prepareAttachNode: function() {
                if (this._skeleton) {
                    var t = this._skeletonNode.getChildByName("ATTACHED_NODE_TREE");
                    return t && t.isValid || (t = new cc.Node("ATTACHED_NODE_TREE"),
                    a(t),
                    this._skeletonNode.addChild(t)),
                    this._skeletonComp.isAnimationCached() && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo(),
                    this._attachedRootNode = t,
                    t
                }
            },
            _buildBoneAttachedNode: function(t, e) {
                var i = "ATTACHED_NODE:" + t.data.name
                  , n = new cc.Node(i);
                return this._buildBoneRelation(n, t, e),
                n
            },
            _buildBoneRelation: function(t, e, i) {
                a(t),
                t._bone = e,
                t._boneIndex = i,
                this._attachedNodeArray.push(t),
                this._boneIndexToNode[i] = t
            },
            getAttachedRootNode: function() {
                return this._attachedRootNode
            },
            getAttachedNodes: function(t) {
                var e = this._attachedNodeArray
                  , i = [];
                if (!this._inited)
                    return i;
                for (var n = 0, r = e.length; n < r; n++) {
                    var s = e[n];
                    s && s.isValid && s.name === "ATTACHED_NODE:" + t && i.push(s)
                }
                return i
            },
            _rebuildNodeArray: function() {
                for (var t = this._boneIndexToNode = {}, e = this._attachedNodeArray, i = this._attachedNodeArray = [], n = 0, r = e.length; n < r; n++) {
                    var s = e[n];
                    s && s.isValid && !s._toRemove && (i.push(s),
                    t[s._boneIndex] = s)
                }
            },
            _sortNodeArray: function() {
                this._attachedNodeArray.sort((function(t, e) {
                    return t._boneIndex < e._boneIndex ? -1 : 1
                }
                ))
            },
            _getNodeByBoneIndex: function(t) {
                var e = this._boneIndexToNode[t];
                return e && e.isValid ? e : null
            },
            destroyAttachedNodes: function(t) {
                if (this._inited) {
                    for (var e = this._attachedNodeArray, i = function t(e) {
                        for (var i = e.children, n = 0, r = i.length; n < r; n++) {
                            var s = i[n];
                            s && t(s)
                        }
                        e._toRemove = !0
                    }, n = 0, r = e.length; n < r; n++) {
                        var s = e[n];
                        s && s.isValid && s.name.split("ATTACHED_NODE:")[1] === t && (i(s),
                        s.removeFromParent(!0),
                        s.destroy(),
                        e[n] = null)
                    }
                    this._rebuildNodeArray()
                }
            },
            generateAttachedNodes: function(t) {
                var e = [];
                if (!this._inited)
                    return e;
                var i = this._prepareAttachNode();
                if (!i)
                    return e;
                for (var n = [], r = this._skeleton.bones, s = 0, a = r.length; s < a; s++) {
                    var o = r[s];
                    o.data.name == t && n.push(o)
                }
                for (var l = function(t) {
                    if (t) {
                        var e = t.data
                          , n = this._getNodeByBoneIndex(e.index);
                        if (n)
                            return n;
                        n = this._buildBoneAttachedNode(t, e.index);
                        var r = l(t.parent) || i;
                        return n.parent = r,
                        n
                    }
                }
                .bind(this), h = 0, c = n.length; h < c; h++) {
                    var u = l(n[h]);
                    e.push(u)
                }
                return this._sortNodeArray(),
                e
            },
            destroyAllAttachedNodes: function() {
                if (this._attachedRootNode = null,
                this._attachedNodeArray.length = 0,
                this._boneIndexToNode = {},
                this._inited) {
                    var t = this._skeletonNode.getChildByName("ATTACHED_NODE_TREE");
                    t && (t.removeFromParent(!0),
                    t.destroy(),
                    t = null)
                }
            },
            generateAllAttachedNodes: function() {
                if (this._inited) {
                    this._boneIndexToNode = {},
                    this._attachedNodeArray.length = 0;
                    var t = this._prepareAttachNode();
                    if (t) {
                        for (var e = this._skeleton.bones, i = 0, n = e.length; i < n; i++) {
                            var r = e[i]
                              , s = r.data
                              , a = null;
                            if (r.parent) {
                                var o = r.parent.data.index;
                                a = this._boneIndexToNode[o]
                            } else
                                a = t;
                            if (a) {
                                var l = a.getChildByName("ATTACHED_NODE:" + s.name);
                                l && l.isValid ? this._buildBoneRelation(l, r, s.index) : (l = this._buildBoneAttachedNode(r, s.index),
                                a.addChild(l))
                            }
                        }
                        return t
                    }
                }
            },
            _hasAttachedNode: function() {
                return !!this._inited && !!this._skeletonNode.getChildByName("ATTACHED_NODE_TREE")
            },
            _associateAttachedNode: function() {
                if (this._inited) {
                    var t = this._skeletonNode.getChildByName("ATTACHED_NODE_TREE");
                    if (t && t.isValid) {
                        this._attachedRootNode = t,
                        this._boneIndexToNode = {},
                        this._attachedNodeArray.length = 0,
                        a(t),
                        this._skeletonComp.isAnimationCached() && this._skeletonComp._frameCache && this._skeletonComp._frameCache.enableCacheAttachedInfo();
                        for (var e = this._skeleton.bones, i = 0, n = e.length; i < n; i++) {
                            var r = e[i]
                              , s = r.data
                              , o = null;
                            if (r.parent) {
                                var l = r.parent.data.index;
                                o = this._boneIndexToNode[l]
                            } else
                                o = t;
                            if (o) {
                                var h = o.getChildByName("ATTACHED_NODE:" + s.name);
                                h && h.isValid && this._buildBoneRelation(h, r, s.index)
                            }
                        }
                    }
                }
            },
            _syncAttachedNode: function() {
                if (this._inited) {
                    var t = this._attachedRootNode
                      , e = this._attachedNodeArray;
                    if (!t || !t.isValid)
                        return this._attachedRootNode = null,
                        void (e.length = 0);
                    var i = this._skeletonNode._worldMatrix;
                    n.default.copy(t._worldMatrix, i),
                    t._renderFlag &= ~r;
                    var s;
                    if (s = this._skeletonComp.isAnimationCached() ? this._skeletonComp._curFrame && this._skeletonComp._curFrame.boneInfos : this._skeleton.bones) {
                        for (var a = this._skeletonNode._mulMat, l = function(t, e, i) {
                            var n = o.m;
                            n[0] = i.a,
                            n[1] = i.c,
                            n[4] = i.b,
                            n[5] = i.d,
                            n[12] = i.worldX,
                            n[13] = i.worldY,
                            a(t, e, o)
                        }, h = !1, c = 0, u = e.length; c < u; c++) {
                            var _ = e[c];
                            if (_ && _.isValid) {
                                var f = s[_._boneIndex];
                                f ? (l(_._worldMatrix, t._worldMatrix, f),
                                _._renderFlag &= ~r) : (_.removeFromParent(!0),
                                _.destroy(),
                                e[c] = null,
                                h = !0)
                            } else
                                e[c] = null,
                                h = !0
                        }
                        h && this._rebuildNodeArray()
                    }
                }
            }
        });
        e.exports = sp.AttachUtil = l
    }
    ), {
        "../../cocos2d/core/renderer/render-flow": 225,
        "../../cocos2d/core/value-types/mat4": 284
    }],
    368: [(function(t, e) {
        "use strict";
        var i = t("./track-entry-listeners")
          , n = t("../../cocos2d/core/components/CCRenderComponent")
          , r = t("./lib/spine")
          , s = t("../../cocos2d/core/graphics/graphics")
          , a = t("../../cocos2d/core/renderer/render-flow").FLAG_POST_RENDER
          , o = t("./skeleton-cache")
          , l = t("./AttachUtil")
          , h = cc.Enum({
            default: -1
        })
          , c = cc.Enum({
            "<None>": 0
        })
          , u = cc.Enum({
            REALTIME: 0,
            SHARED_CACHE: 1,
            PRIVATE_CACHE: 2
        });
        sp.Skeleton = cc.Class({
            name: "sp.Skeleton",
            extends: n,
            editor: !1,
            statics: {
                AnimationCacheMode: u
            },
            properties: {
                paused: {
                    default: !1,
                    visible: !1
                },
                skeletonData: {
                    default: null,
                    type: sp.SkeletonData,
                    notify: function() {
                        this.defaultSkin = "",
                        this.defaultAnimation = "",
                        this._updateSkeletonData()
                    },
                    tooltip: !1
                },
                defaultSkin: {
                    default: "",
                    visible: !1
                },
                defaultAnimation: {
                    default: "",
                    visible: !1
                },
                animation: {
                    get: function() {
                        if (this.isAnimationCached())
                            return this._animationName;
                        var t = this.getCurrent(0);
                        return t && t.animation.name || ""
                    },
                    set: function(t) {
                        this.defaultAnimation = t,
                        t ? this.setAnimation(0, t, this.loop) : this.isAnimationCached() || (this.clearTrack(0),
                        this.setToSetupPose())
                    },
                    visible: !1
                },
                _defaultSkinIndex: {
                    get: function() {
                        if (this.skeletonData) {
                            var t = this.skeletonData.getSkinsEnum();
                            if (t)
                                if ("" === this.defaultSkin) {
                                    if (t.hasOwnProperty(0))
                                        return this._defaultSkinIndex = 0,
                                        0
                                } else {
                                    var e = t[this.defaultSkin];
                                    if (void 0 !== e)
                                        return e
                                }
                        }
                        return 0
                    },
                    set: function(t) {
                        var e;
                        if (this.skeletonData && (e = this.skeletonData.getSkinsEnum()),
                        !e)
                            return cc.errorID("", this.name);
                        var i = e[t];
                        void 0 !== i ? (this.defaultSkin = i,
                        this.setSkin(this.defaultSkin)) : cc.errorID(7501, this.name)
                    },
                    type: h,
                    visible: !0,
                    animatable: !1,
                    displayName: "Default Skin",
                    tooltip: !1
                },
                _animationIndex: {
                    get: function() {
                        var t = this.animation;
                        if (this.skeletonData && t) {
                            var e = this.skeletonData.getAnimsEnum();
                            if (e) {
                                var i = e[t];
                                if (void 0 !== i)
                                    return i
                            }
                        }
                        return 0
                    },
                    set: function(t) {
                        if (0 !== t) {
                            var e;
                            if (this.skeletonData && (e = this.skeletonData.getAnimsEnum()),
                            !e)
                                return cc.errorID(7502, this.name);
                            var i = e[t];
                            void 0 !== i ? this.animation = i : cc.errorID(7503, this.name)
                        } else
                            this.animation = ""
                    },
                    type: c,
                    visible: !0,
                    animatable: !1,
                    displayName: "Animation",
                    tooltip: !1
                },
                _preCacheMode: -1,
                _cacheMode: u.REALTIME,
                _defaultCacheMode: {
                    default: 0,
                    type: u,
                    notify: function() {
                        this.setAnimationCacheMode(this._defaultCacheMode)
                    },
                    editorOnly: !0,
                    visible: !0,
                    animatable: !1,
                    displayName: "Animation Cache Mode",
                    tooltip: !1
                },
                loop: {
                    default: !0,
                    tooltip: !1
                },
                premultipliedAlpha: {
                    default: !0,
                    tooltip: !1
                },
                timeScale: {
                    default: 1,
                    tooltip: !1
                },
                debugSlots: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                debugBones: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                debugMesh: {
                    default: !1,
                    editorOnly: !0,
                    tooltip: !1,
                    notify: function() {
                        this._updateDebugDraw()
                    }
                },
                useTint: {
                    default: !1,
                    tooltip: !1,
                    notify: function() {
                        this._updateUseTint()
                    }
                },
                enableBatch: {
                    default: !1,
                    notify: function() {
                        this._updateBatch()
                    },
                    tooltip: !1
                },
                _accTime: 0,
                _playCount: 0,
                _frameCache: null,
                _curFrame: null,
                _skeletonCache: null,
                _animationName: "",
                _animationQueue: [],
                _headAniInfo: null,
                _playTimes: 0,
                _isAniComplete: !0
            },
            ctor: function() {
                this._effectDelegate = null,
                this._skeleton = null,
                this._rootBone = null,
                this._listener = null,
                this._materialCache = {},
                this._debugRenderer = null,
                this._startSlotIndex = -1,
                this._endSlotIndex = -1,
                this._startEntry = {
                    animation: {
                        name: ""
                    },
                    trackIndex: 0
                },
                this._endEntry = {
                    animation: {
                        name: ""
                    },
                    trackIndex: 0
                },
                this.attachUtil = new l
            },
            _getDefaultMaterial: function() {
                return cc.Material.getBuiltinMaterial("2d-spine")
            },
            _updateMaterial: function() {
                var t = this.useTint || this.isAnimationCached() && !0
                  , e = this.getMaterial(0);
                if (e) {
                    e.define("USE_TINT", t),
                    e.define("CC_USE_MODEL", !this.enableBatch);
                    var i = this.premultipliedAlpha ? cc.gfx.BLEND_ONE : cc.gfx.BLEND_SRC_ALPHA
                      , n = cc.gfx.BLEND_ONE_MINUS_SRC_ALPHA;
                    e.setBlend(!0, cc.gfx.BLEND_FUNC_ADD, i, i, cc.gfx.BLEND_FUNC_ADD, n, n)
                }
                this._materialCache = {}
            },
            disableRender: function() {
                this._super(),
                this.node._renderFlag &= ~a
            },
            markForRender: function(t) {
                this._super(t),
                t ? this.node._renderFlag |= a : this.node._renderFlag &= ~a
            },
            _updateUseTint: function() {
                var t = this.getMaterial(0);
                if (t) {
                    var e = this.useTint || this.isAnimationCached() && !0;
                    t.define("USE_TINT", e)
                }
                this._materialCache = {}
            },
            _updateBatch: function() {
                var t = this.getMaterial(0);
                t && t.define("CC_USE_MODEL", !this.enableBatch),
                this._materialCache = {}
            },
            _validateRender: function() {
                var t = this.skeletonData;
                t && t.isTexturesLoaded() ? this._super() : this.disableRender()
            },
            setSkeletonData: function(t) {
                if (null != t.width && null != t.height && this.node.setContentSize(t.width, t.height),
                this._cacheMode === u.SHARED_CACHE ? this._skeletonCache = o.sharedCache : this._cacheMode === u.PRIVATE_CACHE && (this._skeletonCache = new o,
                this._skeletonCache.enablePrivateMode()),
                this.isAnimationCached()) {
                    (this.debugBones || this.debugSlots) && cc.warn("Debug bones or slots is invalid in cached mode");
                    var e = this._skeletonCache.getSkeletonCache(this.skeletonData._uuid, t);
                    this._skeleton = e.skeleton,
                    this._clipper = e.clipper,
                    this._rootBone = this._skeleton.getRootBone()
                } else
                    this._skeleton = new r.Skeleton(t),
                    this._clipper = new r.SkeletonClipping,
                    this._rootBone = this._skeleton.getRootBone();
                this.markForRender(!0)
            },
            setSlotsRange: function(t, e) {
                this.isAnimationCached() ? cc.warn("Slots visible range can not be modified in cached mode.") : (this._startSlotIndex = t,
                this._endSlotIndex = e)
            },
            setAnimationStateData: function(t) {
                if (this.isAnimationCached())
                    cc.warn("'setAnimationStateData' interface can not be invoked in cached mode.");
                else {
                    var e = new r.AnimationState(t);
                    this._listener && (this._state && this._state.removeListener(this._listener),
                    e.addListener(this._listener)),
                    this._state = e
                }
            },
            __preload: function() {
                this._super();
                for (var t = this.node.children, e = 0, i = t.length; e < i; e++) {
                    var n = t[e];
                    n && "DEBUG_DRAW_NODE" === n._name && n.destroy()
                }
                this._updateSkeletonData(),
                this._updateDebugDraw(),
                this._updateUseTint(),
                this._updateBatch()
            },
            setAnimationCacheMode: function(t) {
                this._preCacheMode !== t && (this._cacheMode = t,
                this._updateSkeletonData(),
                this._updateUseTint())
            },
            isAnimationCached: function() {
                return this._cacheMode !== u.REALTIME
            },
            update: function(t) {
                if (!this.paused)
                    if (t *= this.timeScale * sp.timeScale,
                    this.isAnimationCached()) {
                        if (this._isAniComplete) {
                            if (0 === this._animationQueue.length && !this._headAniInfo) {
                                var e = this._frameCache;
                                if (e && e.isInvalid()) {
                                    e.updateToFrame();
                                    var i = e.frames;
                                    this._curFrame = i[i.length - 1]
                                }
                                return
                            }
                            if (this._headAniInfo || (this._headAniInfo = this._animationQueue.shift()),
                            this._accTime += t,
                            this._accTime > this._headAniInfo.delay) {
                                var n = this._headAniInfo;
                                this._headAniInfo = null,
                                this.setAnimation(0, n.animationName, n.loop)
                            }
                            return
                        }
                        this._updateCache(t)
                    } else
                        this._updateRealtime(t)
            },
            _emitCacheCompleteEvent: function() {
                this._listener && (this._endEntry.animation.name = this._animationName,
                this._listener.complete && this._listener.complete(this._endEntry),
                this._listener.end && this._listener.end(this._endEntry))
            },
            _updateCache: function(t) {
                var e = this._frameCache;
                if (e.isInited()) {
                    var i = e.frames
                      , n = o.FrameTime;
                    0 == this._accTime && 0 == this._playCount && (this._startEntry.animation.name = this._animationName,
                    this._listener && this._listener.start && this._listener.start(this._startEntry)),
                    this._accTime += t;
                    var r = Math.floor(this._accTime / n);
                    if (e.isCompleted || e.updateToFrame(r),
                    e.isCompleted && r >= i.length) {
                        if (this._playCount++,
                        this._playTimes > 0 && this._playCount >= this._playTimes)
                            return this._curFrame = i[i.length - 1],
                            this._accTime = 0,
                            this._playCount = 0,
                            this._isAniComplete = !0,
                            void this._emitCacheCompleteEvent();
                        this._accTime = 0,
                        r = 0,
                        this._emitCacheCompleteEvent()
                    }
                    this._curFrame = i[r]
                }
            },
            _updateRealtime: function(t) {
                var e = this._skeleton
                  , i = this._state;
                e && (e.update(t),
                i && (i.update(t),
                i.apply(e)))
            },
            setVertexEffectDelegate: function(t) {
                this._effectDelegate = t
            },
            updateWorldTransform: function() {
                this.isAnimationCached() && this._skeleton && this._skeleton.updateWorldTransform()
            },
            setToSetupPose: function() {
                this._skeleton && this._skeleton.setToSetupPose()
            },
            setBonesToSetupPose: function() {
                this._skeleton && this._skeleton.setBonesToSetupPose()
            },
            setSlotsToSetupPose: function() {
                this._skeleton && this._skeleton.setSlotsToSetupPose()
            },
            updateAnimationCache: function(t) {
                if (this.isAnimationCached()) {
                    var e = this.skeletonData._uuid;
                    this._skeletonCache && this._skeletonCache.updateAnimationCache(e, t)
                }
            },
            invalidAnimationCache: function() {
                this.isAnimationCached() && this._skeletonCache && this._skeletonCache.invalidAnimationCache(this.skeletonData._uuid)
            },
            findBone: function(t) {
                return this._skeleton ? this._skeleton.findBone(t) : null
            },
            findSlot: function(t) {
                return this._skeleton ? this._skeleton.findSlot(t) : null
            },
            setSkin: function(t) {
                this._skeleton && (this._skeleton.setSkinByName(t),
                this._skeleton.setSlotsToSetupPose()),
                this.invalidAnimationCache()
            },
            getAttachment: function(t, e) {
                return this._skeleton ? this._skeleton.getAttachmentByName(t, e) : null
            },
            setAttachment: function(t, e) {
                this._skeleton && this._skeleton.setAttachment(t, e),
                this.invalidAnimationCache()
            },
            getTextureAtlas: function(t) {
                return t.region
            },
            setMix: function(t, e, i) {
                this._state && this._state.data.setMix(t, e, i)
            },
            setAnimation: function(t, e, i) {
                if (this._playTimes = i ? 0 : 1,
                this._animationName = e,
                this.isAnimationCached()) {
                    if (0 !== t && cc.warn("Track index can not greater than 0 in cached mode."),
                    !this._skeletonCache)
                        return null;
                    var n = this._skeletonCache.getAnimationCache(this.skeletonData._uuid, e);
                    n || (n = this._skeletonCache.initAnimationCache(this.skeletonData._uuid, e)),
                    n && (this._isAniComplete = !1,
                    this._accTime = 0,
                    this._playCount = 0,
                    this._frameCache = n,
                    this.attachUtil._hasAttachedNode() && this._frameCache.enableCacheAttachedInfo(),
                    this._frameCache.updateToFrame(0),
                    this._curFrame = this._frameCache.frames[0])
                } else if (this._skeleton) {
                    var r = this._skeleton.data.findAnimation(e);
                    if (!r)
                        return cc.logID(7509, e),
                        null;
                    var s = this._state.setAnimationWith(t, r, i);
                    return this._state.apply(this._skeleton),
                    s
                }
                return null
            },
            addAnimation: function(t, e, i, n) {
                if (n = n || 0,
                this.isAnimationCached())
                    0 !== t && cc.warn("Track index can not greater than 0 in cached mode."),
                    this._animationQueue.push({
                        animationName: e,
                        loop: i,
                        delay: n
                    });
                else if (this._skeleton) {
                    var r = this._skeleton.data.findAnimation(e);
                    return r ? this._state.addAnimationWith(t, r, i, n) : (cc.logID(7510, e),
                    null)
                }
                return null
            },
            findAnimation: function(t) {
                return this._skeleton ? this._skeleton.data.findAnimation(t) : null
            },
            getCurrent: function(t) {
                if (this.isAnimationCached())
                    cc.warn("'getCurrent' interface can not be invoked in cached mode.");
                else if (this._state)
                    return this._state.getCurrent(t);
                return null
            },
            clearTracks: function() {
                this.isAnimationCached() ? cc.warn("'clearTracks' interface can not be invoked in cached mode.") : this._state && this._state.clearTracks()
            },
            clearTrack: function(t) {
                this.isAnimationCached() ? cc.warn("'clearTrack' interface can not be invoked in cached mode.") : this._state && this._state.clearTrack(t)
            },
            setStartListener: function(t) {
                this._ensureListener(),
                this._listener.start = t
            },
            setInterruptListener: function(t) {
                this._ensureListener(),
                this._listener.interrupt = t
            },
            setEndListener: function(t) {
                this._ensureListener(),
                this._listener.end = t
            },
            setDisposeListener: function(t) {
                this._ensureListener(),
                this._listener.dispose = t
            },
            setCompleteListener: function(t) {
                this._ensureListener(),
                this._listener.complete = t
            },
            setEventListener: function(t) {
                this._ensureListener(),
                this._listener.event = t
            },
            setTrackStartListener: function(t, e) {
                i.getListeners(t).start = e
            },
            setTrackInterruptListener: function(t, e) {
                i.getListeners(t).interrupt = e
            },
            setTrackEndListener: function(t, e) {
                i.getListeners(t).end = e
            },
            setTrackDisposeListener: function(t, e) {
                i.getListeners(t).dispose = e
            },
            setTrackCompleteListener: function(t, e) {
                i.getListeners(t).complete = function(t) {
                    var i = Math.floor(t.trackTime / t.animationEnd);
                    e(t, i)
                }
            },
            setTrackEventListener: function(t, e) {
                i.getListeners(t).event = e
            },
            getState: function() {
                return this._state
            },
            _updateAnimEnum: !1,
            _updateSkinEnum: !1,
            _ensureListener: function() {
                this._listener || (this._listener = new i,
                this._state && this._state.addListener(this._listener))
            },
            _updateSkeletonData: function() {
                if (this.skeletonData) {
                    var t = this.skeletonData.getRuntimeData();
                    if (t) {
                        try {
                            this.setSkeletonData(t),
                            this.isAnimationCached() || this.setAnimationStateData(new r.AnimationStateData(this._skeleton.data)),
                            this.defaultSkin && this.setSkin(this.defaultSkin)
                        } catch (e) {
                            cc.warn(e)
                        }
                        this.attachUtil.init(this),
                        this.attachUtil._associateAttachedNode(),
                        this._preCacheMode = this._cacheMode,
                        this.animation = this.defaultAnimation
                    } else
                        this.disableRender()
                } else
                    this.disableRender()
            },
            _refreshInspector: function() {
                this._updateAnimEnum(),
                this._updateSkinEnum(),
                Editor.Utils.refreshSelectedInspector("node", this.node.uuid)
            },
            _updateDebugDraw: function() {
                if (this.debugBones || this.debugSlots) {
                    if (!this._debugRenderer) {
                        var t = new cc.PrivateNode;
                        t.name = "DEBUG_DRAW_NODE";
                        var e = t.addComponent(s);
                        e.lineWidth = 1,
                        e.strokeColor = cc.color(255, 0, 0, 255),
                        this._debugRenderer = e
                    }
                    this._debugRenderer.node.parent = this.node,
                    this.isAnimationCached() && cc.warn("Debug bones or slots is invalid in cached mode")
                } else
                    this._debugRenderer && (this._debugRenderer.node.parent = null)
            }
        }),
        e.exports = sp.Skeleton
    }
    ), {
        "../../cocos2d/core/components/CCRenderComponent": 115,
        "../../cocos2d/core/graphics/graphics": 156,
        "../../cocos2d/core/renderer/render-flow": 225,
        "./AttachUtil": 367,
        "./lib/spine": 370,
        "./skeleton-cache": 371,
        "./track-entry-listeners": 375
    }],
    369: [(function(t) {
        "use strict";
        var e = "undefined" == typeof window ? global : window;
        e.spine = t("./lib/spine"),
        e.sp = {},
        sp._timeScale = 1,
        Object.defineProperty(sp, "timeScale", {
            get: function() {
                return this._timeScale
            },
            set: function(t) {
                this._timeScale = t
            },
            configurable: !0
        }),
        sp.ATTACHMENT_TYPE = {
            REGION: 0,
            BOUNDING_BOX: 1,
            MESH: 2,
            SKINNED_MESH: 3
        },
        sp.AnimationEventType = cc.Enum({
            START: 0,
            INTERRUPT: 1,
            END: 2,
            DISPOSE: 3,
            COMPLETE: 4,
            EVENT: 5
        }),
        sp.spine = e.spine,
        t("./skeleton-texture"),
        t("./skeleton-data"),
        t("./vertex-effect-delegate"),
        t("./Skeleton"),
        t("./spine-assembler")
    }
    ), {
        "./Skeleton": 368,
        "./lib/spine": 370,
        "./skeleton-data": 372,
        "./skeleton-texture": 373,
        "./spine-assembler": 374,
        "./vertex-effect-delegate": 376
    }],
    370: [(function(t, e) {
        "use strict";
        var i, n, r, s = (i = function(t, e) {
            return (i = Object.setPrototypeOf || {
                __proto__: []
            }instanceof Array && function(t, e) {
                t.__proto__ = e
            }
            || function(t, e) {
                for (var i in e)
                    e.hasOwnProperty(i) && (t[i] = e[i])
            }
            )(t, e)
        }
        ,
        function(t, e) {
            function n() {
                this.constructor = t
            }
            i(t, e),
            t.prototype = null === e ? Object.create(e) : (n.prototype = e.prototype,
            new n)
        }
        );
        (function(t) {
            var e, i, n, r = (function() {
                function t(t, e, i) {
                    if (null == t)
                        throw new Error("name cannot be null.");
                    if (null == e)
                        throw new Error("timelines cannot be null.");
                    this.name = t,
                    this.timelines = e,
                    this.timelineIds = [];
                    for (var n = 0; n < e.length; n++)
                        this.timelineIds[e[n].getPropertyId()] = !0;
                    this.duration = i
                }
                return t.prototype.hasTimeline = function(t) {
                    return 1 == this.timelineIds[t]
                }
                ,
                t.prototype.apply = function(t, e, i, n, r, s, a, o) {
                    if (null == t)
                        throw new Error("skeleton cannot be null.");
                    n && 0 != this.duration && (i %= this.duration,
                    e > 0 && (e %= this.duration));
                    for (var l = this.timelines, h = 0, c = l.length; h < c; h++)
                        l[h].apply(t, e, i, r, s, a, o)
                }
                ,
                t.binarySearch = function(t, e, i) {
                    void 0 === i && (i = 1);
                    var n = 0
                      , r = t.length / i - 2;
                    if (0 == r)
                        return i;
                    for (var s = r >>> 1; ; ) {
                        if (t[(s + 1) * i] <= e ? n = s + 1 : r = s,
                        n == r)
                            return (n + 1) * i;
                        s = n + r >>> 1
                    }
                }
                ,
                t.linearSearch = function(t, e, i) {
                    for (var n = 0, r = t.length - i; n <= r; n += i)
                        if (t[n] > e)
                            return n;
                    return -1
                }
                ,
                t
            }
            )();
            t.Animation = r,
            (function(t) {
                t[t.setup = 0] = "setup",
                t[t.first = 1] = "first",
                t[t.replace = 2] = "replace",
                t[t.add = 3] = "add"
            }
            )(e = t.MixBlend || (t.MixBlend = {})),
            (function(t) {
                t[t.mixIn = 0] = "mixIn",
                t[t.mixOut = 1] = "mixOut"
            }
            )(i = t.MixDirection || (t.MixDirection = {})),
            (function(t) {
                t[t.rotate = 0] = "rotate",
                t[t.translate = 1] = "translate",
                t[t.scale = 2] = "scale",
                t[t.shear = 3] = "shear",
                t[t.attachment = 4] = "attachment",
                t[t.color = 5] = "color",
                t[t.deform = 6] = "deform",
                t[t.event = 7] = "event",
                t[t.drawOrder = 8] = "drawOrder",
                t[t.ikConstraint = 9] = "ikConstraint",
                t[t.transformConstraint = 10] = "transformConstraint",
                t[t.pathConstraintPosition = 11] = "pathConstraintPosition",
                t[t.pathConstraintSpacing = 12] = "pathConstraintSpacing",
                t[t.pathConstraintMix = 13] = "pathConstraintMix",
                t[t.twoColor = 14] = "twoColor"
            }
            )(n = t.TimelineType || (t.TimelineType = {}));
            var a = (function() {
                function e(i) {
                    if (i <= 0)
                        throw new Error("frameCount must be > 0: " + i);
                    this.curves = t.Utils.newFloatArray((i - 1) * e.BEZIER_SIZE)
                }
                return e.prototype.getFrameCount = function() {
                    return this.curves.length / e.BEZIER_SIZE + 1
                }
                ,
                e.prototype.setLinear = function(t) {
                    this.curves[t * e.BEZIER_SIZE] = e.LINEAR
                }
                ,
                e.prototype.setStepped = function(t) {
                    this.curves[t * e.BEZIER_SIZE] = e.STEPPED
                }
                ,
                e.prototype.getCurveType = function(t) {
                    var i = t * e.BEZIER_SIZE;
                    if (i == this.curves.length)
                        return e.LINEAR;
                    var n = this.curves[i];
                    return n == e.LINEAR ? e.LINEAR : n == e.STEPPED ? e.STEPPED : e.BEZIER
                }
                ,
                e.prototype.setCurve = function(t, i, n, r, s) {
                    var a = .03 * (2 * -i + r)
                      , o = .03 * (2 * -n + s)
                      , l = .006 * (3 * (i - r) + 1)
                      , h = .006 * (3 * (n - s) + 1)
                      , c = 2 * a + l
                      , u = 2 * o + h
                      , _ = .3 * i + a + .16666667 * l
                      , f = .3 * n + o + .16666667 * h
                      , d = t * e.BEZIER_SIZE
                      , p = this.curves;
                    p[d++] = e.BEZIER;
                    for (var m = _, y = f, v = d + e.BEZIER_SIZE - 1; d < v; d += 2)
                        p[d] = m,
                        p[d + 1] = y,
                        _ += c,
                        f += u,
                        c += l,
                        u += h,
                        m += _,
                        y += f
                }
                ,
                e.prototype.getCurvePercent = function(i, n) {
                    n = t.MathUtils.clamp(n, 0, 1);
                    var r = this.curves
                      , s = i * e.BEZIER_SIZE
                      , a = r[s];
                    if (a == e.LINEAR)
                        return n;
                    if (a == e.STEPPED)
                        return 0;
                    for (var o = 0, l = ++s, h = s + e.BEZIER_SIZE - 1; s < h; s += 2)
                        if ((o = r[s]) >= n) {
                            var c = void 0
                              , u = void 0;
                            return s == l ? (c = 0,
                            u = 0) : (c = r[s - 2],
                            u = r[s - 1]),
                            u + (r[s + 1] - u) * (n - c) / (o - c)
                        }
                    var _ = r[s - 1];
                    return _ + (1 - _) * (n - o) / (1 - o)
                }
                ,
                e.LINEAR = 0,
                e.STEPPED = 1,
                e.BEZIER = 2,
                e.BEZIER_SIZE = 19,
                e
            }
            )();
            t.CurveTimeline = a;
            var o = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e << 1),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.rotate << 24) + this.boneIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i) {
                    t <<= 1,
                    this.frames[t] = e,
                    this.frames[t + a.ROTATION] = i
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = this.frames
                      , c = t.bones[this.boneIndex];
                    if (c.active)
                        if (n < h[0])
                            switch (l) {
                            case e.setup:
                                return void (c.rotation = c.data.rotation);
                            case e.first:
                                var u = c.data.rotation - c.rotation;
                                c.rotation += (u - 360 * (16384 - (16384.499999999996 - u / 360 | 0))) * o
                            }
                        else if (n >= h[h.length - a.ENTRIES]) {
                            var _ = h[h.length + a.PREV_ROTATION];
                            switch (l) {
                            case e.setup:
                                c.rotation = c.data.rotation + _ * o;
                                break;
                            case e.first:
                            case e.replace:
                                _ += c.data.rotation - c.rotation,
                                _ -= 360 * (16384 - (16384.499999999996 - _ / 360 | 0));
                            case e.add:
                                c.rotation += _ * o
                            }
                        } else {
                            var f = r.binarySearch(h, n, a.ENTRIES)
                              , d = h[f + a.PREV_ROTATION]
                              , p = h[f]
                              , m = this.getCurvePercent((f >> 1) - 1, 1 - (n - p) / (h[f + a.PREV_TIME] - p))
                              , y = h[f + a.ROTATION] - d;
                            switch (y = d + (y - 360 * (16384 - (16384.499999999996 - y / 360 | 0))) * m,
                            l) {
                            case e.setup:
                                c.rotation = c.data.rotation + (y - 360 * (16384 - (16384.499999999996 - y / 360 | 0))) * o;
                                break;
                            case e.first:
                            case e.replace:
                                y += c.data.rotation - c.rotation;
                            case e.add:
                                c.rotation += (y - 360 * (16384 - (16384.499999999996 - y / 360 | 0))) * o
                            }
                        }
                }
                ,
                a.ENTRIES = 2,
                a.PREV_TIME = -2,
                a.PREV_ROTATION = -1,
                a.ROTATION = 1,
                a
            }
            )(a);
            t.RotateTimeline = o;
            var l = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.translate << 24) + this.boneIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i, n) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.X] = i,
                    this.frames[t + a.Y] = n
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = this.frames
                      , c = t.bones[this.boneIndex];
                    if (c.active)
                        if (n < h[0])
                            switch (l) {
                            case e.setup:
                                return c.x = c.data.x,
                                void (c.y = c.data.y);
                            case e.first:
                                c.x += (c.data.x - c.x) * o,
                                c.y += (c.data.y - c.y) * o
                            }
                        else {
                            var u = 0
                              , _ = 0;
                            if (n >= h[h.length - a.ENTRIES])
                                u = h[h.length + a.PREV_X],
                                _ = h[h.length + a.PREV_Y];
                            else {
                                var f = r.binarySearch(h, n, a.ENTRIES);
                                u = h[f + a.PREV_X],
                                _ = h[f + a.PREV_Y];
                                var d = h[f]
                                  , p = this.getCurvePercent(f / a.ENTRIES - 1, 1 - (n - d) / (h[f + a.PREV_TIME] - d));
                                u += (h[f + a.X] - u) * p,
                                _ += (h[f + a.Y] - _) * p
                            }
                            switch (l) {
                            case e.setup:
                                c.x = c.data.x + u * o,
                                c.y = c.data.y + _ * o;
                                break;
                            case e.first:
                            case e.replace:
                                c.x += (c.data.x + u - c.x) * o,
                                c.y += (c.data.y + _ - c.y) * o;
                                break;
                            case e.add:
                                c.x += u * o,
                                c.y += _ * o
                            }
                        }
                }
                ,
                a.ENTRIES = 3,
                a.PREV_TIME = -3,
                a.PREV_X = -2,
                a.PREV_Y = -1,
                a.X = 1,
                a.Y = 2,
                a
            }
            )(a);
            t.TranslateTimeline = l;
            var h = (function(a) {
                function o(t) {
                    return a.call(this, t) || this
                }
                return s(o, a),
                o.prototype.getPropertyId = function() {
                    return (n.scale << 24) + this.boneIndex
                }
                ,
                o.prototype.apply = function(n, s, a, l, h, c, u) {
                    var _ = this.frames
                      , f = n.bones[this.boneIndex];
                    if (f.active)
                        if (a < _[0])
                            switch (c) {
                            case e.setup:
                                return f.scaleX = f.data.scaleX,
                                void (f.scaleY = f.data.scaleY);
                            case e.first:
                                f.scaleX += (f.data.scaleX - f.scaleX) * h,
                                f.scaleY += (f.data.scaleY - f.scaleY) * h
                            }
                        else {
                            var d = 0
                              , p = 0;
                            if (a >= _[_.length - o.ENTRIES])
                                d = _[_.length + o.PREV_X] * f.data.scaleX,
                                p = _[_.length + o.PREV_Y] * f.data.scaleY;
                            else {
                                var m = r.binarySearch(_, a, o.ENTRIES);
                                d = _[m + o.PREV_X],
                                p = _[m + o.PREV_Y];
                                var y = _[m]
                                  , v = this.getCurvePercent(m / o.ENTRIES - 1, 1 - (a - y) / (_[m + o.PREV_TIME] - y));
                                d = (d + (_[m + o.X] - d) * v) * f.data.scaleX,
                                p = (p + (_[m + o.Y] - p) * v) * f.data.scaleY
                            }
                            if (1 == h)
                                c == e.add ? (f.scaleX += d - f.data.scaleX,
                                f.scaleY += p - f.data.scaleY) : (f.scaleX = d,
                                f.scaleY = p);
                            else {
                                var g = 0
                                  , A = 0;
                                if (u == i.mixOut)
                                    switch (c) {
                                    case e.setup:
                                        g = f.data.scaleX,
                                        A = f.data.scaleY,
                                        f.scaleX = g + (Math.abs(d) * t.MathUtils.signum(g) - g) * h,
                                        f.scaleY = A + (Math.abs(p) * t.MathUtils.signum(A) - A) * h;
                                        break;
                                    case e.first:
                                    case e.replace:
                                        g = f.scaleX,
                                        A = f.scaleY,
                                        f.scaleX = g + (Math.abs(d) * t.MathUtils.signum(g) - g) * h,
                                        f.scaleY = A + (Math.abs(p) * t.MathUtils.signum(A) - A) * h;
                                        break;
                                    case e.add:
                                        g = f.scaleX,
                                        A = f.scaleY,
                                        f.scaleX = g + (Math.abs(d) * t.MathUtils.signum(g) - f.data.scaleX) * h,
                                        f.scaleY = A + (Math.abs(p) * t.MathUtils.signum(A) - f.data.scaleY) * h
                                    }
                                else
                                    switch (c) {
                                    case e.setup:
                                        g = Math.abs(f.data.scaleX) * t.MathUtils.signum(d),
                                        A = Math.abs(f.data.scaleY) * t.MathUtils.signum(p),
                                        f.scaleX = g + (d - g) * h,
                                        f.scaleY = A + (p - A) * h;
                                        break;
                                    case e.first:
                                    case e.replace:
                                        g = Math.abs(f.scaleX) * t.MathUtils.signum(d),
                                        A = Math.abs(f.scaleY) * t.MathUtils.signum(p),
                                        f.scaleX = g + (d - g) * h,
                                        f.scaleY = A + (p - A) * h;
                                        break;
                                    case e.add:
                                        g = t.MathUtils.signum(d),
                                        A = t.MathUtils.signum(p),
                                        f.scaleX = Math.abs(f.scaleX) * g + (d - Math.abs(f.data.scaleX) * g) * h,
                                        f.scaleY = Math.abs(f.scaleY) * A + (p - Math.abs(f.data.scaleY) * A) * h
                                    }
                            }
                        }
                }
                ,
                o
            }
            )(l);
            t.ScaleTimeline = h;
            var c = (function(t) {
                function i(e) {
                    return t.call(this, e) || this
                }
                return s(i, t),
                i.prototype.getPropertyId = function() {
                    return (n.shear << 24) + this.boneIndex
                }
                ,
                i.prototype.apply = function(t, n, s, a, o, l) {
                    var h = this.frames
                      , c = t.bones[this.boneIndex];
                    if (c.active)
                        if (s < h[0])
                            switch (l) {
                            case e.setup:
                                return c.shearX = c.data.shearX,
                                void (c.shearY = c.data.shearY);
                            case e.first:
                                c.shearX += (c.data.shearX - c.shearX) * o,
                                c.shearY += (c.data.shearY - c.shearY) * o
                            }
                        else {
                            var u = 0
                              , _ = 0;
                            if (s >= h[h.length - i.ENTRIES])
                                u = h[h.length + i.PREV_X],
                                _ = h[h.length + i.PREV_Y];
                            else {
                                var f = r.binarySearch(h, s, i.ENTRIES);
                                u = h[f + i.PREV_X],
                                _ = h[f + i.PREV_Y];
                                var d = h[f]
                                  , p = this.getCurvePercent(f / i.ENTRIES - 1, 1 - (s - d) / (h[f + i.PREV_TIME] - d));
                                u += (h[f + i.X] - u) * p,
                                _ += (h[f + i.Y] - _) * p
                            }
                            switch (l) {
                            case e.setup:
                                c.shearX = c.data.shearX + u * o,
                                c.shearY = c.data.shearY + _ * o;
                                break;
                            case e.first:
                            case e.replace:
                                c.shearX += (c.data.shearX + u - c.shearX) * o,
                                c.shearY += (c.data.shearY + _ - c.shearY) * o;
                                break;
                            case e.add:
                                c.shearX += u * o,
                                c.shearY += _ * o
                            }
                        }
                }
                ,
                i
            }
            )(l);
            t.ShearTimeline = c;
            var u = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.color << 24) + this.slotIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i, n, r, s) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.R] = i,
                    this.frames[t + a.G] = n,
                    this.frames[t + a.B] = r,
                    this.frames[t + a.A] = s
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = t.slots[this.slotIndex];
                    if (h.bone.active) {
                        var c = this.frames;
                        if (n < c[0])
                            switch (l) {
                            case e.setup:
                                return void h.color.setFromColor(h.data.color);
                            case e.first:
                                var u = h.color
                                  , _ = h.data.color;
                                u.add((_.r - u.r) * o, (_.g - u.g) * o, (_.b - u.b) * o, (_.a - u.a) * o)
                            }
                        else {
                            var f = 0
                              , d = 0
                              , p = 0
                              , m = 0;
                            if (n >= c[c.length - a.ENTRIES]) {
                                var y = c.length;
                                f = c[y + a.PREV_R],
                                d = c[y + a.PREV_G],
                                p = c[y + a.PREV_B],
                                m = c[y + a.PREV_A]
                            } else {
                                var v = r.binarySearch(c, n, a.ENTRIES);
                                f = c[v + a.PREV_R],
                                d = c[v + a.PREV_G],
                                p = c[v + a.PREV_B],
                                m = c[v + a.PREV_A];
                                var g = c[v]
                                  , A = this.getCurvePercent(v / a.ENTRIES - 1, 1 - (n - g) / (c[v + a.PREV_TIME] - g));
                                f += (c[v + a.R] - f) * A,
                                d += (c[v + a.G] - d) * A,
                                p += (c[v + a.B] - p) * A,
                                m += (c[v + a.A] - m) * A
                            }
                            1 == o ? h.color.set(f, d, p, m) : (u = h.color,
                            l == e.setup && u.setFromColor(h.data.color),
                            u.add((f - u.r) * o, (d - u.g) * o, (p - u.b) * o, (m - u.a) * o))
                        }
                    }
                }
                ,
                a.ENTRIES = 5,
                a.PREV_TIME = -5,
                a.PREV_R = -4,
                a.PREV_G = -3,
                a.PREV_B = -2,
                a.PREV_A = -1,
                a.R = 1,
                a.G = 2,
                a.B = 3,
                a.A = 4,
                a
            }
            )(a);
            t.ColorTimeline = u;
            var _ = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.twoColor << 24) + this.slotIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i, n, r, s, o, l, h) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.R] = i,
                    this.frames[t + a.G] = n,
                    this.frames[t + a.B] = r,
                    this.frames[t + a.A] = s,
                    this.frames[t + a.R2] = o,
                    this.frames[t + a.G2] = l,
                    this.frames[t + a.B2] = h
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = t.slots[this.slotIndex];
                    if (h.bone.active) {
                        var c = this.frames;
                        if (n < c[0])
                            switch (l) {
                            case e.setup:
                                return h.color.setFromColor(h.data.color),
                                void h.darkColor.setFromColor(h.data.darkColor);
                            case e.first:
                                var u = h.color
                                  , _ = h.darkColor
                                  , f = h.data.color
                                  , d = h.data.darkColor;
                                u.add((f.r - u.r) * o, (f.g - u.g) * o, (f.b - u.b) * o, (f.a - u.a) * o),
                                _.add((d.r - _.r) * o, (d.g - _.g) * o, (d.b - _.b) * o, 0)
                            }
                        else {
                            var p = 0
                              , m = 0
                              , y = 0
                              , v = 0
                              , g = 0
                              , A = 0
                              , x = 0;
                            if (n >= c[c.length - a.ENTRIES]) {
                                var b = c.length;
                                p = c[b + a.PREV_R],
                                m = c[b + a.PREV_G],
                                y = c[b + a.PREV_B],
                                v = c[b + a.PREV_A],
                                g = c[b + a.PREV_R2],
                                A = c[b + a.PREV_G2],
                                x = c[b + a.PREV_B2]
                            } else {
                                var C = r.binarySearch(c, n, a.ENTRIES);
                                p = c[C + a.PREV_R],
                                m = c[C + a.PREV_G],
                                y = c[C + a.PREV_B],
                                v = c[C + a.PREV_A],
                                g = c[C + a.PREV_R2],
                                A = c[C + a.PREV_G2],
                                x = c[C + a.PREV_B2];
                                var T = c[C]
                                  , S = this.getCurvePercent(C / a.ENTRIES - 1, 1 - (n - T) / (c[C + a.PREV_TIME] - T));
                                p += (c[C + a.R] - p) * S,
                                m += (c[C + a.G] - m) * S,
                                y += (c[C + a.B] - y) * S,
                                v += (c[C + a.A] - v) * S,
                                g += (c[C + a.R2] - g) * S,
                                A += (c[C + a.G2] - A) * S,
                                x += (c[C + a.B2] - x) * S
                            }
                            1 == o ? (h.color.set(p, m, y, v),
                            h.darkColor.set(g, A, x, 1)) : (u = h.color,
                            _ = h.darkColor,
                            l == e.setup && (u.setFromColor(h.data.color),
                            _.setFromColor(h.data.darkColor)),
                            u.add((p - u.r) * o, (m - u.g) * o, (y - u.b) * o, (v - u.a) * o),
                            _.add((g - _.r) * o, (A - _.g) * o, (x - _.b) * o, 0))
                        }
                    }
                }
                ,
                a.ENTRIES = 8,
                a.PREV_TIME = -8,
                a.PREV_R = -7,
                a.PREV_G = -6,
                a.PREV_B = -5,
                a.PREV_A = -4,
                a.PREV_R2 = -3,
                a.PREV_G2 = -2,
                a.PREV_B2 = -1,
                a.R = 1,
                a.G = 2,
                a.B = 3,
                a.A = 4,
                a.R2 = 5,
                a.G2 = 6,
                a.B2 = 7,
                a
            }
            )(a);
            t.TwoColorTimeline = _;
            var f = (function() {
                function s(e) {
                    this.frames = t.Utils.newFloatArray(e),
                    this.attachmentNames = new Array(e)
                }
                return s.prototype.getPropertyId = function() {
                    return (n.attachment << 24) + this.slotIndex
                }
                ,
                s.prototype.getFrameCount = function() {
                    return this.frames.length
                }
                ,
                s.prototype.setFrame = function(t, e, i) {
                    this.frames[t] = e,
                    this.attachmentNames[t] = i
                }
                ,
                s.prototype.apply = function(t, n, s, a, o, l, h) {
                    var c = t.slots[this.slotIndex];
                    if (c.bone.active)
                        if (h != i.mixOut || l != e.setup) {
                            var u = this.frames;
                            if (s < u[0]) {
                                if (l == e.setup || l == e.first) {
                                    var _ = c.data.attachmentName;
                                    c.setAttachment(null == _ ? null : t.getAttachment(this.slotIndex, _))
                                }
                            } else {
                                var f;
                                f = s >= u[u.length - 1] ? u.length - 1 : r.binarySearch(u, s, 1) - 1;
                                var d = this.attachmentNames[f];
                                t.slots[this.slotIndex].setAttachment(null == d ? null : t.getAttachment(this.slotIndex, d))
                            }
                        } else {
                            var p = c.data.attachmentName;
                            c.setAttachment(null == p ? null : t.getAttachment(this.slotIndex, p))
                        }
                }
                ,
                s
            }
            )();
            t.AttachmentTimeline = f;
            var d = null
              , p = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e),
                    n.frameVertices = new Array(e),
                    null == d && (d = t.Utils.newFloatArray(64)),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.deform << 27) + +this.attachment.id + this.slotIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i) {
                    this.frames[t] = e,
                    this.frameVertices[t] = i
                }
                ,
                a.prototype.apply = function(i, n, s, a, o, l) {
                    var h = i.slots[this.slotIndex];
                    if (h.bone.active) {
                        var c = h.getAttachment();
                        if (c instanceof t.VertexAttachment && c.deformAttachment == this.attachment) {
                            var u = h.deform;
                            0 == u.length && (l = e.setup);
                            var _ = this.frameVertices
                              , f = _[0].length
                              , d = this.frames;
                            if (s < d[0]) {
                                var p = c;
                                switch (l) {
                                case e.setup:
                                    return void (u.length = 0);
                                case e.first:
                                    if (1 == o) {
                                        u.length = 0;
                                        break
                                    }
                                    var m = t.Utils.setArraySize(u, f);
                                    if (null == p.bones)
                                        for (var y = p.vertices, v = 0; v < f; v++)
                                            m[v] += (y[v] - m[v]) * o;
                                    else
                                        for (o = 1 - o,
                                        v = 0; v < f; v++)
                                            m[v] *= o
                                }
                            } else {
                                var g = t.Utils.setArraySize(u, f);
                                if (s >= d[d.length - 1]) {
                                    var A = _[d.length - 1];
                                    if (1 == o)
                                        if (l == e.add)
                                            if (null == (p = c).bones) {
                                                y = p.vertices;
                                                for (var x = 0; x < f; x++)
                                                    g[x] += A[x] - y[x]
                                            } else
                                                for (var b = 0; b < f; b++)
                                                    g[b] += A[b];
                                        else
                                            t.Utils.arrayCopy(A, 0, g, 0, f);
                                    else
                                        switch (l) {
                                        case e.setup:
                                            var C = c;
                                            if (null == C.bones) {
                                                y = C.vertices;
                                                for (var T = 0; T < f; T++) {
                                                    var S = y[T];
                                                    g[T] = S + (A[T] - S) * o
                                                }
                                            } else
                                                for (var w = 0; w < f; w++)
                                                    g[w] = A[w] * o;
                                            break;
                                        case e.first:
                                        case e.replace:
                                            for (var E = 0; E < f; E++)
                                                g[E] += (A[E] - g[E]) * o;
                                        case e.add:
                                            if (null == (p = c).bones) {
                                                y = p.vertices;
                                                for (var M = 0; M < f; M++)
                                                    g[M] += (A[M] - y[M]) * o
                                            } else
                                                for (var D = 0; D < f; D++)
                                                    g[D] += A[D] * o
                                        }
                                } else {
                                    var B = r.binarySearch(d, s)
                                      , I = _[B - 1]
                                      , P = _[B]
                                      , R = d[B]
                                      , O = this.getCurvePercent(B - 1, 1 - (s - R) / (d[B - 1] - R));
                                    if (1 == o)
                                        if (l == e.add)
                                            if (null == (p = c).bones) {
                                                y = p.vertices;
                                                for (var L = 0; L < f; L++) {
                                                    var F = I[L];
                                                    g[L] += F + (P[L] - F) * O - y[L]
                                                }
                                            } else
                                                for (var V = 0; V < f; V++)
                                                    F = I[V],
                                                    g[V] += F + (P[V] - F) * O;
                                        else
                                            for (var N = 0; N < f; N++)
                                                F = I[N],
                                                g[N] = F + (P[N] - F) * O;
                                    else
                                        switch (l) {
                                        case e.setup:
                                            var k = c;
                                            if (null == k.bones) {
                                                y = k.vertices;
                                                for (var G = 0; G < f; G++)
                                                    F = I[G],
                                                    S = y[G],
                                                    g[G] = S + (F + (P[G] - F) * O - S) * o
                                            } else
                                                for (var U = 0; U < f; U++)
                                                    F = I[U],
                                                    g[U] = (F + (P[U] - F) * O) * o;
                                            break;
                                        case e.first:
                                        case e.replace:
                                            for (var z = 0; z < f; z++)
                                                F = I[z],
                                                g[z] += (F + (P[z] - F) * O - g[z]) * o;
                                            break;
                                        case e.add:
                                            if (null == (p = c).bones) {
                                                y = p.vertices;
                                                for (var H = 0; H < f; H++)
                                                    F = I[H],
                                                    g[H] += (F + (P[H] - F) * O - y[H]) * o
                                            } else
                                                for (var W = 0; W < f; W++)
                                                    F = I[W],
                                                    g[W] += (F + (P[W] - F) * O) * o
                                        }
                                }
                            }
                        }
                    }
                }
                ,
                a
            }
            )(a);
            t.DeformTimeline = p;
            var m = (function() {
                function e(e) {
                    this.frames = t.Utils.newFloatArray(e),
                    this.events = new Array(e)
                }
                return e.prototype.getPropertyId = function() {
                    return n.event << 24
                }
                ,
                e.prototype.getFrameCount = function() {
                    return this.frames.length
                }
                ,
                e.prototype.setFrame = function(t, e) {
                    this.frames[t] = e.time,
                    this.events[t] = e
                }
                ,
                e.prototype.apply = function(t, e, i, n, s, a, o) {
                    if (null != n) {
                        var l = this.frames
                          , h = this.frames.length;
                        if (e > i)
                            this.apply(t, e, Number.MAX_VALUE, n, s, a, o),
                            e = -1;
                        else if (e >= l[h - 1])
                            return;
                        if (!(i < l[0])) {
                            var c = 0;
                            if (e < l[0])
                                c = 0;
                            else
                                for (var u = l[c = r.binarySearch(l, e)]; c > 0 && l[c - 1] == u; )
                                    c--;
                            for (; c < h && i >= l[c]; c++)
                                n.push(this.events[c])
                        }
                    }
                }
                ,
                e
            }
            )();
            t.EventTimeline = m;
            var y = (function() {
                function s(e) {
                    this.frames = t.Utils.newFloatArray(e),
                    this.drawOrders = new Array(e)
                }
                return s.prototype.getPropertyId = function() {
                    return n.drawOrder << 24
                }
                ,
                s.prototype.getFrameCount = function() {
                    return this.frames.length
                }
                ,
                s.prototype.setFrame = function(t, e, i) {
                    this.frames[t] = e,
                    this.drawOrders[t] = i
                }
                ,
                s.prototype.apply = function(n, s, a, o, l, h, c) {
                    var u = n.drawOrder
                      , _ = n.slots;
                    if (c != i.mixOut || h != e.setup) {
                        var f = this.frames;
                        if (a < f[0])
                            h != e.setup && h != e.first || t.Utils.arrayCopy(n.slots, 0, n.drawOrder, 0, n.slots.length);
                        else {
                            var d;
                            d = a >= f[f.length - 1] ? f.length - 1 : r.binarySearch(f, a) - 1;
                            var p = this.drawOrders[d];
                            if (null == p)
                                t.Utils.arrayCopy(_, 0, u, 0, _.length);
                            else
                                for (var m = 0, y = p.length; m < y; m++)
                                    u[m] = _[p[m]]
                        }
                    } else
                        t.Utils.arrayCopy(n.slots, 0, n.drawOrder, 0, n.slots.length)
                }
                ,
                s
            }
            )();
            t.DrawOrderTimeline = y;
            var v = (function(a) {
                function o(e) {
                    var i = a.call(this, e) || this;
                    return i.frames = t.Utils.newFloatArray(e * o.ENTRIES),
                    i
                }
                return s(o, a),
                o.prototype.getPropertyId = function() {
                    return (n.ikConstraint << 24) + this.ikConstraintIndex
                }
                ,
                o.prototype.setFrame = function(t, e, i, n, r, s, a) {
                    t *= o.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + o.MIX] = i,
                    this.frames[t + o.SOFTNESS] = n,
                    this.frames[t + o.BEND_DIRECTION] = r,
                    this.frames[t + o.COMPRESS] = s ? 1 : 0,
                    this.frames[t + o.STRETCH] = a ? 1 : 0
                }
                ,
                o.prototype.apply = function(t, n, s, a, l, h, c) {
                    var u = this.frames
                      , _ = t.ikConstraints[this.ikConstraintIndex];
                    if (_.active)
                        if (s < u[0])
                            switch (h) {
                            case e.setup:
                                return _.mix = _.data.mix,
                                _.softness = _.data.softness,
                                _.bendDirection = _.data.bendDirection,
                                _.compress = _.data.compress,
                                void (_.stretch = _.data.stretch);
                            case e.first:
                                _.mix += (_.data.mix - _.mix) * l,
                                _.softness += (_.data.softness - _.softness) * l,
                                _.bendDirection = _.data.bendDirection,
                                _.compress = _.data.compress,
                                _.stretch = _.data.stretch
                            }
                        else if (s >= u[u.length - o.ENTRIES])
                            h == e.setup ? (_.mix = _.data.mix + (u[u.length + o.PREV_MIX] - _.data.mix) * l,
                            _.softness = _.data.softness + (u[u.length + o.PREV_SOFTNESS] - _.data.softness) * l,
                            c == i.mixOut ? (_.bendDirection = _.data.bendDirection,
                            _.compress = _.data.compress,
                            _.stretch = _.data.stretch) : (_.bendDirection = u[u.length + o.PREV_BEND_DIRECTION],
                            _.compress = 0 != u[u.length + o.PREV_COMPRESS],
                            _.stretch = 0 != u[u.length + o.PREV_STRETCH])) : (_.mix += (u[u.length + o.PREV_MIX] - _.mix) * l,
                            _.softness += (u[u.length + o.PREV_SOFTNESS] - _.softness) * l,
                            c == i.mixIn && (_.bendDirection = u[u.length + o.PREV_BEND_DIRECTION],
                            _.compress = 0 != u[u.length + o.PREV_COMPRESS],
                            _.stretch = 0 != u[u.length + o.PREV_STRETCH]));
                        else {
                            var f = r.binarySearch(u, s, o.ENTRIES)
                              , d = u[f + o.PREV_MIX]
                              , p = u[f + o.PREV_SOFTNESS]
                              , m = u[f]
                              , y = this.getCurvePercent(f / o.ENTRIES - 1, 1 - (s - m) / (u[f + o.PREV_TIME] - m));
                            h == e.setup ? (_.mix = _.data.mix + (d + (u[f + o.MIX] - d) * y - _.data.mix) * l,
                            _.softness = _.data.softness + (p + (u[f + o.SOFTNESS] - p) * y - _.data.softness) * l,
                            c == i.mixOut ? (_.bendDirection = _.data.bendDirection,
                            _.compress = _.data.compress,
                            _.stretch = _.data.stretch) : (_.bendDirection = u[f + o.PREV_BEND_DIRECTION],
                            _.compress = 0 != u[f + o.PREV_COMPRESS],
                            _.stretch = 0 != u[f + o.PREV_STRETCH])) : (_.mix += (d + (u[f + o.MIX] - d) * y - _.mix) * l,
                            _.softness += (p + (u[f + o.SOFTNESS] - p) * y - _.softness) * l,
                            c == i.mixIn && (_.bendDirection = u[f + o.PREV_BEND_DIRECTION],
                            _.compress = 0 != u[f + o.PREV_COMPRESS],
                            _.stretch = 0 != u[f + o.PREV_STRETCH]))
                        }
                }
                ,
                o.ENTRIES = 6,
                o.PREV_TIME = -6,
                o.PREV_MIX = -5,
                o.PREV_SOFTNESS = -4,
                o.PREV_BEND_DIRECTION = -3,
                o.PREV_COMPRESS = -2,
                o.PREV_STRETCH = -1,
                o.MIX = 1,
                o.SOFTNESS = 2,
                o.BEND_DIRECTION = 3,
                o.COMPRESS = 4,
                o.STRETCH = 5,
                o
            }
            )(a);
            t.IkConstraintTimeline = v;
            var g = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.transformConstraint << 24) + this.transformConstraintIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i, n, r, s) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.ROTATE] = i,
                    this.frames[t + a.TRANSLATE] = n,
                    this.frames[t + a.SCALE] = r,
                    this.frames[t + a.SHEAR] = s
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = this.frames
                      , c = t.transformConstraints[this.transformConstraintIndex];
                    if (c.active)
                        if (n < h[0]) {
                            var u = c.data;
                            switch (l) {
                            case e.setup:
                                return c.rotateMix = u.rotateMix,
                                c.translateMix = u.translateMix,
                                c.scaleMix = u.scaleMix,
                                void (c.shearMix = u.shearMix);
                            case e.first:
                                c.rotateMix += (u.rotateMix - c.rotateMix) * o,
                                c.translateMix += (u.translateMix - c.translateMix) * o,
                                c.scaleMix += (u.scaleMix - c.scaleMix) * o,
                                c.shearMix += (u.shearMix - c.shearMix) * o
                            }
                        } else {
                            var _ = 0
                              , f = 0
                              , d = 0
                              , p = 0;
                            if (n >= h[h.length - a.ENTRIES]) {
                                var m = h.length;
                                _ = h[m + a.PREV_ROTATE],
                                f = h[m + a.PREV_TRANSLATE],
                                d = h[m + a.PREV_SCALE],
                                p = h[m + a.PREV_SHEAR]
                            } else {
                                var y = r.binarySearch(h, n, a.ENTRIES);
                                _ = h[y + a.PREV_ROTATE],
                                f = h[y + a.PREV_TRANSLATE],
                                d = h[y + a.PREV_SCALE],
                                p = h[y + a.PREV_SHEAR];
                                var v = h[y]
                                  , g = this.getCurvePercent(y / a.ENTRIES - 1, 1 - (n - v) / (h[y + a.PREV_TIME] - v));
                                _ += (h[y + a.ROTATE] - _) * g,
                                f += (h[y + a.TRANSLATE] - f) * g,
                                d += (h[y + a.SCALE] - d) * g,
                                p += (h[y + a.SHEAR] - p) * g
                            }
                            l == e.setup ? (u = c.data,
                            c.rotateMix = u.rotateMix + (_ - u.rotateMix) * o,
                            c.translateMix = u.translateMix + (f - u.translateMix) * o,
                            c.scaleMix = u.scaleMix + (d - u.scaleMix) * o,
                            c.shearMix = u.shearMix + (p - u.shearMix) * o) : (c.rotateMix += (_ - c.rotateMix) * o,
                            c.translateMix += (f - c.translateMix) * o,
                            c.scaleMix += (d - c.scaleMix) * o,
                            c.shearMix += (p - c.shearMix) * o)
                        }
                }
                ,
                a.ENTRIES = 5,
                a.PREV_TIME = -5,
                a.PREV_ROTATE = -4,
                a.PREV_TRANSLATE = -3,
                a.PREV_SCALE = -2,
                a.PREV_SHEAR = -1,
                a.ROTATE = 1,
                a.TRANSLATE = 2,
                a.SCALE = 3,
                a.SHEAR = 4,
                a
            }
            )(a);
            t.TransformConstraintTimeline = g;
            var A = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.pathConstraintPosition << 24) + this.pathConstraintIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.VALUE] = i
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = this.frames
                      , c = t.pathConstraints[this.pathConstraintIndex];
                    if (c.active)
                        if (n < h[0])
                            switch (l) {
                            case e.setup:
                                return void (c.position = c.data.position);
                            case e.first:
                                c.position += (c.data.position - c.position) * o
                            }
                        else {
                            var u = 0;
                            if (n >= h[h.length - a.ENTRIES])
                                u = h[h.length + a.PREV_VALUE];
                            else {
                                var _ = r.binarySearch(h, n, a.ENTRIES);
                                u = h[_ + a.PREV_VALUE];
                                var f = h[_]
                                  , d = this.getCurvePercent(_ / a.ENTRIES - 1, 1 - (n - f) / (h[_ + a.PREV_TIME] - f));
                                u += (h[_ + a.VALUE] - u) * d
                            }
                            l == e.setup ? c.position = c.data.position + (u - c.data.position) * o : c.position += (u - c.position) * o
                        }
                }
                ,
                a.ENTRIES = 2,
                a.PREV_TIME = -2,
                a.PREV_VALUE = -1,
                a.VALUE = 1,
                a
            }
            )(a);
            t.PathConstraintPositionTimeline = A;
            var x = (function(t) {
                function i(e) {
                    return t.call(this, e) || this
                }
                return s(i, t),
                i.prototype.getPropertyId = function() {
                    return (n.pathConstraintSpacing << 24) + this.pathConstraintIndex
                }
                ,
                i.prototype.apply = function(t, n, s, a, o, l) {
                    var h = this.frames
                      , c = t.pathConstraints[this.pathConstraintIndex];
                    if (c.active)
                        if (s < h[0])
                            switch (l) {
                            case e.setup:
                                return void (c.spacing = c.data.spacing);
                            case e.first:
                                c.spacing += (c.data.spacing - c.spacing) * o
                            }
                        else {
                            var u = 0;
                            if (s >= h[h.length - i.ENTRIES])
                                u = h[h.length + i.PREV_VALUE];
                            else {
                                var _ = r.binarySearch(h, s, i.ENTRIES);
                                u = h[_ + i.PREV_VALUE];
                                var f = h[_]
                                  , d = this.getCurvePercent(_ / i.ENTRIES - 1, 1 - (s - f) / (h[_ + i.PREV_TIME] - f));
                                u += (h[_ + i.VALUE] - u) * d
                            }
                            l == e.setup ? c.spacing = c.data.spacing + (u - c.data.spacing) * o : c.spacing += (u - c.spacing) * o
                        }
                }
                ,
                i
            }
            )(A);
            t.PathConstraintSpacingTimeline = x;
            var b = (function(i) {
                function a(e) {
                    var n = i.call(this, e) || this;
                    return n.frames = t.Utils.newFloatArray(e * a.ENTRIES),
                    n
                }
                return s(a, i),
                a.prototype.getPropertyId = function() {
                    return (n.pathConstraintMix << 24) + this.pathConstraintIndex
                }
                ,
                a.prototype.setFrame = function(t, e, i, n) {
                    t *= a.ENTRIES,
                    this.frames[t] = e,
                    this.frames[t + a.ROTATE] = i,
                    this.frames[t + a.TRANSLATE] = n
                }
                ,
                a.prototype.apply = function(t, i, n, s, o, l) {
                    var h = this.frames
                      , c = t.pathConstraints[this.pathConstraintIndex];
                    if (c.active)
                        if (n < h[0])
                            switch (l) {
                            case e.setup:
                                return c.rotateMix = c.data.rotateMix,
                                void (c.translateMix = c.data.translateMix);
                            case e.first:
                                c.rotateMix += (c.data.rotateMix - c.rotateMix) * o,
                                c.translateMix += (c.data.translateMix - c.translateMix) * o
                            }
                        else {
                            var u = 0
                              , _ = 0;
                            if (n >= h[h.length - a.ENTRIES])
                                u = h[h.length + a.PREV_ROTATE],
                                _ = h[h.length + a.PREV_TRANSLATE];
                            else {
                                var f = r.binarySearch(h, n, a.ENTRIES);
                                u = h[f + a.PREV_ROTATE],
                                _ = h[f + a.PREV_TRANSLATE];
                                var d = h[f]
                                  , p = this.getCurvePercent(f / a.ENTRIES - 1, 1 - (n - d) / (h[f + a.PREV_TIME] - d));
                                u += (h[f + a.ROTATE] - u) * p,
                                _ += (h[f + a.TRANSLATE] - _) * p
                            }
                            l == e.setup ? (c.rotateMix = c.data.rotateMix + (u - c.data.rotateMix) * o,
                            c.translateMix = c.data.translateMix + (_ - c.data.translateMix) * o) : (c.rotateMix += (u - c.rotateMix) * o,
                            c.translateMix += (_ - c.translateMix) * o)
                        }
                }
                ,
                a.ENTRIES = 3,
                a.PREV_TIME = -3,
                a.PREV_ROTATE = -2,
                a.PREV_TRANSLATE = -1,
                a.ROTATE = 1,
                a.TRANSLATE = 2,
                a
            }
            )(a);
            t.PathConstraintMixTimeline = b
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(e) {
                    this.tracks = new Array,
                    this.timeScale = 1,
                    this.events = new Array,
                    this.listeners = new Array,
                    this.queue = new r(this),
                    this.propertyIDs = new t.IntSet,
                    this.animationsChanged = !1,
                    this.trackEntryPool = new t.Pool(function() {
                        return new i
                    }
                    ),
                    this.data = e
                }
                return e.prototype.update = function(t) {
                    t *= this.timeScale;
                    for (var e = this.tracks, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (null != r) {
                            r.animationLast = r.nextAnimationLast,
                            r.trackLast = r.nextTrackLast;
                            var s = t * r.timeScale;
                            if (r.delay > 0) {
                                if (r.delay -= s,
                                r.delay > 0)
                                    continue;
                                s = -r.delay,
                                r.delay = 0
                            }
                            var a = r.next;
                            if (null != a) {
                                var o = r.trackLast - a.delay;
                                if (o >= 0) {
                                    for (a.delay = 0,
                                    a.trackTime += 0 == r.timeScale ? 0 : (o / r.timeScale + t) * a.timeScale,
                                    r.trackTime += s,
                                    this.setCurrent(i, a, !0); null != a.mixingFrom; )
                                        a.mixTime += t,
                                        a = a.mixingFrom;
                                    continue
                                }
                            } else if (r.trackLast >= r.trackEnd && null == r.mixingFrom) {
                                e[i] = null,
                                this.queue.end(r),
                                this.disposeNext(r);
                                continue
                            }
                            if (null != r.mixingFrom && this.updateMixingFrom(r, t)) {
                                var l = r.mixingFrom;
                                for (r.mixingFrom = null,
                                null != l && (l.mixingTo = null); null != l; )
                                    this.queue.end(l),
                                    l = l.mixingFrom
                            }
                            r.trackTime += s
                        }
                    }
                    this.queue.drain()
                }
                ,
                e.prototype.updateMixingFrom = function(t, e) {
                    var i = t.mixingFrom;
                    if (null == i)
                        return !0;
                    var n = this.updateMixingFrom(i, e);
                    return i.animationLast = i.nextAnimationLast,
                    i.trackLast = i.nextTrackLast,
                    t.mixTime > 0 && t.mixTime >= t.mixDuration ? (0 != i.totalAlpha && 0 != t.mixDuration || (t.mixingFrom = i.mixingFrom,
                    null != i.mixingFrom && (i.mixingFrom.mixingTo = t),
                    t.interruptAlpha = i.interruptAlpha,
                    this.queue.end(i)),
                    n) : (i.trackTime += e * i.timeScale,
                    t.mixTime += e,
                    !1)
                }
                ,
                e.prototype.apply = function(i) {
                    if (null == i)
                        throw new Error("skeleton cannot be null.");
                    this.animationsChanged && this._animationsChanged();
                    for (var n = this.events, r = this.tracks, s = !1, a = 0, o = r.length; a < o; a++) {
                        var l = r[a];
                        if (!(null == l || l.delay > 0)) {
                            s = !0;
                            var h = 0 == a ? t.MixBlend.first : l.mixBlend
                              , c = l.alpha;
                            null != l.mixingFrom ? c *= this.applyMixingFrom(l, i, h) : l.trackTime >= l.trackEnd && null == l.next && (c = 0);
                            var u = l.animationLast
                              , _ = l.getAnimationTime()
                              , f = l.animation.timelines.length
                              , d = l.animation.timelines;
                            if (0 == a && 1 == c || h == t.MixBlend.add)
                                for (var p = 0; p < f; p++)
                                    t.Utils.webkit602BugfixHelper(c, h),
                                    d[p].apply(i, u, _, n, c, h, t.MixDirection.mixIn);
                            else {
                                var m = l.timelineMode
                                  , y = 0 == l.timelinesRotation.length;
                                y && t.Utils.setArraySize(l.timelinesRotation, f << 1, null);
                                var v = l.timelinesRotation;
                                for (p = 0; p < f; p++) {
                                    var g = d[p]
                                      , A = (m[p] & e.NOT_LAST - 1) == e.SUBSEQUENT ? h : t.MixBlend.setup;
                                    g instanceof t.RotateTimeline ? this.applyRotateTimeline(g, i, _, c, A, v, p << 1, y) : (t.Utils.webkit602BugfixHelper(c, h),
                                    g.apply(i, u, _, n, c, A, t.MixDirection.mixIn))
                                }
                            }
                            this.queueEvents(l, _),
                            n.length = 0,
                            l.nextAnimationLast = _,
                            l.nextTrackLast = l.trackTime
                        }
                    }
                    return this.queue.drain(),
                    s
                }
                ,
                e.prototype.applyMixingFrom = function(i, n, r) {
                    var s = i.mixingFrom;
                    null != s.mixingFrom && this.applyMixingFrom(s, n, r);
                    var a = 0;
                    0 == i.mixDuration ? (a = 1,
                    r == t.MixBlend.first && (r = t.MixBlend.setup)) : ((a = i.mixTime / i.mixDuration) > 1 && (a = 1),
                    r != t.MixBlend.first && (r = s.mixBlend));
                    var o = a < s.eventThreshold ? this.events : null
                      , l = a < s.attachmentThreshold
                      , h = a < s.drawOrderThreshold
                      , c = s.animationLast
                      , u = s.getAnimationTime()
                      , _ = s.animation.timelines.length
                      , f = s.animation.timelines
                      , d = s.alpha * i.interruptAlpha
                      , p = d * (1 - a);
                    if (r == t.MixBlend.add)
                        for (var m = 0; m < _; m++)
                            f[m].apply(n, c, u, o, p, r, t.MixDirection.mixOut);
                    else {
                        var y = s.timelineMode
                          , v = s.timelineHoldMix
                          , g = 0 == s.timelinesRotation.length;
                        g && t.Utils.setArraySize(s.timelinesRotation, _ << 1, null);
                        var A = s.timelinesRotation;
                        for (s.totalAlpha = 0,
                        m = 0; m < _; m++) {
                            var x = f[m]
                              , b = t.MixDirection.mixOut
                              , C = void 0
                              , T = 0;
                            switch (y[m] & e.NOT_LAST - 1) {
                            case e.SUBSEQUENT:
                                if (C = r,
                                !l && x instanceof t.AttachmentTimeline) {
                                    if ((y[m] & e.NOT_LAST) == e.NOT_LAST)
                                        continue;
                                    C = t.MixBlend.setup
                                }
                                if (!h && x instanceof t.DrawOrderTimeline)
                                    continue;
                                T = p;
                                break;
                            case e.FIRST:
                                C = t.MixBlend.setup,
                                T = p;
                                break;
                            case e.HOLD:
                                C = t.MixBlend.setup,
                                T = d;
                                break;
                            default:
                                C = t.MixBlend.setup;
                                var S = v[m];
                                T = d * Math.max(0, 1 - S.mixTime / S.mixDuration)
                            }
                            s.totalAlpha += T,
                            x instanceof t.RotateTimeline ? this.applyRotateTimeline(x, n, u, T, C, A, m << 1, g) : (t.Utils.webkit602BugfixHelper(T, r),
                            C == t.MixBlend.setup && (x instanceof t.AttachmentTimeline ? (l || (y[m] & e.NOT_LAST) == e.NOT_LAST) && (b = t.MixDirection.mixIn) : x instanceof t.DrawOrderTimeline && h && (b = t.MixDirection.mixIn)),
                            x.apply(n, c, u, o, T, C, b))
                        }
                    }
                    return i.mixDuration > 0 && this.queueEvents(s, u),
                    this.events.length = 0,
                    s.nextAnimationLast = u,
                    s.nextTrackLast = s.trackTime,
                    a
                }
                ,
                e.prototype.applyRotateTimeline = function(e, i, n, r, s, a, o, l) {
                    if (l && (a[o] = 0),
                    1 != r) {
                        var h = e
                          , c = h.frames
                          , u = i.bones[h.boneIndex];
                        if (u.active) {
                            var _ = 0
                              , f = 0;
                            if (n < c[0])
                                switch (s) {
                                case t.MixBlend.setup:
                                    u.rotation = u.data.rotation;
                                default:
                                    return;
                                case t.MixBlend.first:
                                    _ = u.rotation,
                                    f = u.data.rotation
                                }
                            else if (_ = s == t.MixBlend.setup ? u.data.rotation : u.rotation,
                            n >= c[c.length - t.RotateTimeline.ENTRIES])
                                f = u.data.rotation + c[c.length + t.RotateTimeline.PREV_ROTATION];
                            else {
                                var d = t.Animation.binarySearch(c, n, t.RotateTimeline.ENTRIES)
                                  , p = c[d + t.RotateTimeline.PREV_ROTATION]
                                  , m = c[d]
                                  , y = h.getCurvePercent((d >> 1) - 1, 1 - (n - m) / (c[d + t.RotateTimeline.PREV_TIME] - m));
                                f = c[d + t.RotateTimeline.ROTATION] - p,
                                f = p + (f -= 360 * (16384 - (16384.499999999996 - f / 360 | 0))) * y + u.data.rotation,
                                f -= 360 * (16384 - (16384.499999999996 - f / 360 | 0))
                            }
                            var v = 0
                              , g = f - _;
                            if (0 == (g -= 360 * (16384 - (16384.499999999996 - g / 360 | 0))))
                                v = a[o];
                            else {
                                var A = 0
                                  , x = 0;
                                l ? (A = 0,
                                x = g) : (A = a[o],
                                x = a[o + 1]);
                                var b = g > 0
                                  , C = A >= 0;
                                t.MathUtils.signum(x) != t.MathUtils.signum(g) && Math.abs(x) <= 90 && (Math.abs(A) > 180 && (A += 360 * t.MathUtils.signum(A)),
                                C = b),
                                v = g + A - A % 360,
                                C != b && (v += 360 * t.MathUtils.signum(A)),
                                a[o] = v
                            }
                            a[o + 1] = g,
                            _ += v * r,
                            u.rotation = _ - 360 * (16384 - (16384.499999999996 - _ / 360 | 0))
                        }
                    } else
                        e.apply(i, 0, n, null, 1, s, t.MixDirection.mixIn)
                }
                ,
                e.prototype.queueEvents = function(t, e) {
                    for (var i = t.animationStart, n = t.animationEnd, r = n - i, s = t.trackLast % r, a = this.events, o = 0, l = a.length; o < l; o++) {
                        var h = a[o];
                        if (h.time < s)
                            break;
                        h.time > n || this.queue.event(t, h)
                    }
                    for ((t.loop ? 0 == r || s > t.trackTime % r : e >= n && t.animationLast < n) && this.queue.complete(t); o < l; o++)
                        a[o].time < i || this.queue.event(t, a[o])
                }
                ,
                e.prototype.clearTracks = function() {
                    var t = this.queue.drainDisabled;
                    this.queue.drainDisabled = !0;
                    for (var e = 0, i = this.tracks.length; e < i; e++)
                        this.clearTrack(e);
                    this.tracks.length = 0,
                    this.queue.drainDisabled = t,
                    this.queue.drain()
                }
                ,
                e.prototype.clearTrack = function(t) {
                    if (!(t >= this.tracks.length)) {
                        var e = this.tracks[t];
                        if (null != e) {
                            this.queue.end(e),
                            this.disposeNext(e);
                            for (var i = e; ; ) {
                                var n = i.mixingFrom;
                                if (null == n)
                                    break;
                                this.queue.end(n),
                                i.mixingFrom = null,
                                i.mixingTo = null,
                                i = n
                            }
                            this.tracks[e.trackIndex] = null,
                            this.queue.drain()
                        }
                    }
                }
                ,
                e.prototype.setCurrent = function(t, e, i) {
                    var n = this.expandToIndex(t);
                    this.tracks[t] = e,
                    null != n && (i && this.queue.interrupt(n),
                    e.mixingFrom = n,
                    n.mixingTo = e,
                    e.mixTime = 0,
                    null != n.mixingFrom && n.mixDuration > 0 && (e.interruptAlpha *= Math.min(1, n.mixTime / n.mixDuration)),
                    n.timelinesRotation.length = 0),
                    this.queue.start(e)
                }
                ,
                e.prototype.setAnimation = function(t, e, i) {
                    var n = this.data.skeletonData.findAnimation(e);
                    if (null == n)
                        throw new Error("Animation not found: " + e);
                    return this.setAnimationWith(t, n, i)
                }
                ,
                e.prototype.setAnimationWith = function(t, e, i) {
                    if (null == e)
                        throw new Error("animation cannot be null.");
                    var n = !0
                      , r = this.expandToIndex(t);
                    null != r && (-1 == r.nextTrackLast ? (this.tracks[t] = r.mixingFrom,
                    this.queue.interrupt(r),
                    this.queue.end(r),
                    this.disposeNext(r),
                    r = r.mixingFrom,
                    n = !1) : this.disposeNext(r));
                    var s = this.trackEntry(t, e, i, r);
                    return this.setCurrent(t, s, n),
                    this.queue.drain(),
                    s
                }
                ,
                e.prototype.addAnimation = function(t, e, i, n) {
                    var r = this.data.skeletonData.findAnimation(e);
                    if (null == r)
                        throw new Error("Animation not found: " + e);
                    return this.addAnimationWith(t, r, i, n)
                }
                ,
                e.prototype.addAnimationWith = function(t, e, i, n) {
                    if (null == e)
                        throw new Error("animation cannot be null.");
                    var r = this.expandToIndex(t);
                    if (null != r)
                        for (; null != r.next; )
                            r = r.next;
                    var s = this.trackEntry(t, e, i, r);
                    if (null == r)
                        this.setCurrent(t, s, !0),
                        this.queue.drain();
                    else if (r.next = s,
                    n <= 0) {
                        var a = r.animationEnd - r.animationStart;
                        0 != a ? (r.loop ? n += a * (1 + (r.trackTime / a | 0)) : n += Math.max(a, r.trackTime),
                        n -= this.data.getMix(r.animation, e)) : n = r.trackTime
                    }
                    return s.delay = n,
                    s
                }
                ,
                e.prototype.setEmptyAnimation = function(t, i) {
                    var n = this.setAnimationWith(t, e.emptyAnimation, !1);
                    return n.mixDuration = i,
                    n.trackEnd = i,
                    n
                }
                ,
                e.prototype.addEmptyAnimation = function(t, i, n) {
                    n <= 0 && (n -= i);
                    var r = this.addAnimationWith(t, e.emptyAnimation, !1, n);
                    return r.mixDuration = i,
                    r.trackEnd = i,
                    r
                }
                ,
                e.prototype.setEmptyAnimations = function(t) {
                    var e = this.queue.drainDisabled;
                    this.queue.drainDisabled = !0;
                    for (var i = 0, n = this.tracks.length; i < n; i++) {
                        var r = this.tracks[i];
                        null != r && this.setEmptyAnimation(r.trackIndex, t)
                    }
                    this.queue.drainDisabled = e,
                    this.queue.drain()
                }
                ,
                e.prototype.expandToIndex = function(e) {
                    return e < this.tracks.length ? this.tracks[e] : (t.Utils.ensureArrayCapacity(this.tracks, e + 1, null),
                    this.tracks.length = e + 1,
                    null)
                }
                ,
                e.prototype.trackEntry = function(t, e, i, n) {
                    var r = this.trackEntryPool.obtain();
                    return r.trackIndex = t,
                    r.animation = e,
                    r.loop = i,
                    r.holdPrevious = !1,
                    r.eventThreshold = 0,
                    r.attachmentThreshold = 0,
                    r.drawOrderThreshold = 0,
                    r.animationStart = 0,
                    r.animationEnd = e.duration,
                    r.animationLast = -1,
                    r.nextAnimationLast = -1,
                    r.delay = 0,
                    r.trackTime = 0,
                    r.trackLast = -1,
                    r.nextTrackLast = -1,
                    r.trackEnd = Number.MAX_VALUE,
                    r.timeScale = 1,
                    r.alpha = 1,
                    r.interruptAlpha = 1,
                    r.mixTime = 0,
                    r.mixDuration = null == n ? 0 : this.data.getMix(n.animation, e),
                    r
                }
                ,
                e.prototype.disposeNext = function(t) {
                    for (var e = t.next; null != e; )
                        this.queue.dispose(e),
                        e = e.next;
                    t.next = null
                }
                ,
                e.prototype._animationsChanged = function() {
                    this.animationsChanged = !1,
                    this.propertyIDs.clear();
                    for (var e = 0, i = this.tracks.length; e < i; e++)
                        if (null != (n = this.tracks[e])) {
                            for (; null != n.mixingFrom; )
                                n = n.mixingFrom;
                            do {
                                null != n.mixingFrom && n.mixBlend == t.MixBlend.add || this.computeHold(n),
                                n = n.mixingTo
                            } while (null != n)
                        }
                    for (this.propertyIDs.clear(),
                    e = this.tracks.length - 1; e >= 0; e--)
                        for (var n = this.tracks[e]; null != n; )
                            this.computeNotLast(n),
                            n = n.mixingFrom
                }
                ,
                e.prototype.computeHold = function(i) {
                    var n = i.mixingTo
                      , r = i.animation.timelines
                      , s = i.animation.timelines.length
                      , a = t.Utils.setArraySize(i.timelineMode, s);
                    i.timelineHoldMix.length = 0;
                    var o = t.Utils.setArraySize(i.timelineHoldMix, s)
                      , l = this.propertyIDs;
                    if (null != n && n.holdPrevious)
                        for (var h = 0; h < s; h++)
                            l.add(r[h].getPropertyId()),
                            a[h] = e.HOLD;
                    else
                        t: for (h = 0; h < s; h++) {
                            var c = r[h]
                              , u = c.getPropertyId();
                            if (l.add(u))
                                if (null == n || c instanceof t.AttachmentTimeline || c instanceof t.DrawOrderTimeline || c instanceof t.EventTimeline || !n.animation.hasTimeline(u))
                                    a[h] = e.FIRST;
                                else {
                                    for (var _ = n.mixingTo; null != _; _ = _.mixingTo)
                                        if (!_.animation.hasTimeline(u)) {
                                            if (i.mixDuration > 0) {
                                                a[h] = e.HOLD_MIX,
                                                o[h] = _;
                                                continue t
                                            }
                                            break
                                        }
                                    a[h] = e.HOLD
                                }
                            else
                                a[h] = e.SUBSEQUENT
                        }
                }
                ,
                e.prototype.computeNotLast = function(i) {
                    for (var n = i.animation.timelines, r = i.animation.timelines.length, s = i.timelineMode, a = this.propertyIDs, o = 0; o < r; o++)
                        if (n[o]instanceof t.AttachmentTimeline) {
                            var l = n[o];
                            a.add(l.slotIndex) || (s[o] |= e.NOT_LAST)
                        }
                }
                ,
                e.prototype.getCurrent = function(t) {
                    return t >= this.tracks.length ? null : this.tracks[t]
                }
                ,
                e.prototype.addListener = function(t) {
                    if (null == t)
                        throw new Error("listener cannot be null.");
                    this.listeners.push(t)
                }
                ,
                e.prototype.removeListener = function(t) {
                    var e = this.listeners.indexOf(t);
                    e >= 0 && this.listeners.splice(e, 1)
                }
                ,
                e.prototype.clearListeners = function() {
                    this.listeners.length = 0
                }
                ,
                e.prototype.clearListenerNotifications = function() {
                    this.queue.clear()
                }
                ,
                e.emptyAnimation = new t.Animation("<empty>",[],0),
                e.SUBSEQUENT = 0,
                e.FIRST = 1,
                e.HOLD = 2,
                e.HOLD_MIX = 3,
                e.NOT_LAST = 4,
                e
            }
            )();
            t.AnimationState = e;
            var i = (function() {
                function e() {
                    this.mixBlend = t.MixBlend.replace,
                    this.timelineMode = new Array,
                    this.timelineHoldMix = new Array,
                    this.timelinesRotation = new Array
                }
                return e.prototype.reset = function() {
                    this.next = null,
                    this.mixingFrom = null,
                    this.mixingTo = null,
                    this.animation = null,
                    this.listener = null,
                    this.timelineMode.length = 0,
                    this.timelineHoldMix.length = 0,
                    this.timelinesRotation.length = 0
                }
                ,
                e.prototype.getAnimationTime = function() {
                    if (this.loop) {
                        var t = this.animationEnd - this.animationStart;
                        return 0 == t ? this.animationStart : this.trackTime % t + this.animationStart
                    }
                    return Math.min(this.trackTime + this.animationStart, this.animationEnd)
                }
                ,
                e.prototype.setAnimationLast = function(t) {
                    this.animationLast = t,
                    this.nextAnimationLast = t
                }
                ,
                e.prototype.isComplete = function() {
                    return this.trackTime >= this.animationEnd - this.animationStart
                }
                ,
                e.prototype.resetRotationDirections = function() {
                    this.timelinesRotation.length = 0
                }
                ,
                e
            }
            )();
            t.TrackEntry = i;
            var n, r = (function() {
                function t(t) {
                    this.objects = [],
                    this.drainDisabled = !1,
                    this.animState = t
                }
                return t.prototype.start = function(t) {
                    this.objects.push(n.start),
                    this.objects.push(t),
                    this.animState.animationsChanged = !0
                }
                ,
                t.prototype.interrupt = function(t) {
                    this.objects.push(n.interrupt),
                    this.objects.push(t)
                }
                ,
                t.prototype.end = function(t) {
                    this.objects.push(n.end),
                    this.objects.push(t),
                    this.animState.animationsChanged = !0
                }
                ,
                t.prototype.dispose = function(t) {
                    this.objects.push(n.dispose),
                    this.objects.push(t)
                }
                ,
                t.prototype.complete = function(t) {
                    this.objects.push(n.complete),
                    this.objects.push(t)
                }
                ,
                t.prototype.event = function(t, e) {
                    this.objects.push(n.event),
                    this.objects.push(t),
                    this.objects.push(e)
                }
                ,
                t.prototype.drain = function() {
                    if (!this.drainDisabled) {
                        this.drainDisabled = !0;
                        for (var t = this.objects, e = this.animState.listeners, i = 0; i < t.length; i += 2) {
                            var r = t[i]
                              , s = t[i + 1];
                            switch (r) {
                            case n.start:
                                null != s.listener && s.listener.start && s.listener.start(s);
                                for (var a = 0; a < e.length; a++)
                                    e[a].start && e[a].start(s);
                                break;
                            case n.interrupt:
                                for (null != s.listener && s.listener.interrupt && s.listener.interrupt(s),
                                a = 0; a < e.length; a++)
                                    e[a].interrupt && e[a].interrupt(s);
                                break;
                            case n.end:
                                for (null != s.listener && s.listener.end && s.listener.end(s),
                                a = 0; a < e.length; a++)
                                    e[a].end && e[a].end(s);
                            case n.dispose:
                                for (null != s.listener && s.listener.dispose && s.listener.dispose(s),
                                a = 0; a < e.length; a++)
                                    e[a].dispose && e[a].dispose(s);
                                this.animState.trackEntryPool.free(s);
                                break;
                            case n.complete:
                                for (null != s.listener && s.listener.complete && s.listener.complete(s),
                                a = 0; a < e.length; a++)
                                    e[a].complete && e[a].complete(s);
                                break;
                            case n.event:
                                var o = t[2 + i++];
                                for (null != s.listener && s.listener.event && s.listener.event(s, o),
                                a = 0; a < e.length; a++)
                                    e[a].event && e[a].event(s, o)
                            }
                        }
                        this.clear(),
                        this.drainDisabled = !1
                    }
                }
                ,
                t.prototype.clear = function() {
                    this.objects.length = 0
                }
                ,
                t
            }
            )();
            t.EventQueue = r,
            (function(t) {
                t[t.start = 0] = "start",
                t[t.interrupt = 1] = "interrupt",
                t[t.end = 2] = "end",
                t[t.dispose = 3] = "dispose",
                t[t.complete = 4] = "complete",
                t[t.event = 5] = "event"
            }
            )(n = t.EventType || (t.EventType = {}));
            var s = (function() {
                function t() {}
                return t.prototype.start = function() {}
                ,
                t.prototype.interrupt = function() {}
                ,
                t.prototype.end = function() {}
                ,
                t.prototype.dispose = function() {}
                ,
                t.prototype.complete = function() {}
                ,
                t.prototype.event = function() {}
                ,
                t
            }
            )();
            t.AnimationStateAdapter = s
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t) {
                    if (this.animationToMixTime = {},
                    this.defaultMix = 0,
                    null == t)
                        throw new Error("skeletonData cannot be null.");
                    this.skeletonData = t
                }
                return t.prototype.setMix = function(t, e, i) {
                    var n = this.skeletonData.findAnimation(t);
                    if (null == n)
                        throw new Error("Animation not found: " + t);
                    var r = this.skeletonData.findAnimation(e);
                    if (null == r)
                        throw new Error("Animation not found: " + e);
                    this.setMixWith(n, r, i)
                }
                ,
                t.prototype.setMixWith = function(t, e, i) {
                    if (null == t)
                        throw new Error("from cannot be null.");
                    if (null == e)
                        throw new Error("to cannot be null.");
                    var n = t.name + "." + e.name;
                    this.animationToMixTime[n] = i
                }
                ,
                t.prototype.getMix = function(t, e) {
                    var i = t.name + "." + e.name
                      , n = this.animationToMixTime[i];
                    return void 0 === n ? this.defaultMix : n
                }
                ,
                t
            }
            )();
            t.AnimationStateData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    void 0 === e && (e = ""),
                    this.assets = {},
                    this.errors = {},
                    this.toLoad = 0,
                    this.loaded = 0,
                    this.textureLoader = t,
                    this.pathPrefix = e
                }
                return e.downloadText = function(t, e, i) {
                    var n = new XMLHttpRequest;
                    n.open("GET", t, !0),
                    n.onload = function() {
                        200 == n.status ? e(n.responseText) : i(n.status, n.responseText)
                    }
                    ,
                    n.onerror = function() {
                        i(n.status, n.responseText)
                    }
                    ,
                    n.send()
                }
                ,
                e.downloadBinary = function(t, e, i) {
                    var n = new XMLHttpRequest;
                    n.open("GET", t, !0),
                    n.responseType = "arraybuffer",
                    n.onload = function() {
                        200 == n.status ? e(new Uint8Array(n.response)) : i(n.status, n.responseText)
                    }
                    ,
                    n.onerror = function() {
                        i(n.status, n.responseText)
                    }
                    ,
                    n.send()
                }
                ,
                e.prototype.loadBinary = function(t, i, n) {
                    var r = this;
                    void 0 === i && (i = null),
                    void 0 === n && (n = null),
                    t = this.pathPrefix + t,
                    this.toLoad++,
                    e.downloadBinary(t, (function(e) {
                        r.assets[t] = e,
                        i && i(t, e),
                        r.toLoad--,
                        r.loaded++
                    }
                    ), (function(e, i) {
                        r.errors[t] = "Couldn't load binary " + t + ": status " + status + ", " + i,
                        n && n(t, "Couldn't load binary " + t + ": status " + status + ", " + i),
                        r.toLoad--,
                        r.loaded++
                    }
                    ))
                }
                ,
                e.prototype.loadText = function(t, i, n) {
                    var r = this;
                    void 0 === i && (i = null),
                    void 0 === n && (n = null),
                    t = this.pathPrefix + t,
                    this.toLoad++,
                    e.downloadText(t, (function(e) {
                        r.assets[t] = e,
                        i && i(t, e),
                        r.toLoad--,
                        r.loaded++
                    }
                    ), (function(e, i) {
                        r.errors[t] = "Couldn't load text " + t + ": status " + status + ", " + i,
                        n && n(t, "Couldn't load text " + t + ": status " + status + ", " + i),
                        r.toLoad--,
                        r.loaded++
                    }
                    ))
                }
                ,
                e.prototype.loadTexture = function(t, e, i) {
                    var n = this;
                    void 0 === e && (e = null),
                    void 0 === i && (i = null),
                    t = this.pathPrefix + t,
                    this.toLoad++;
                    var r = new Image;
                    r.crossOrigin = "anonymous",
                    r.onload = function() {
                        var i = n.textureLoader(r);
                        n.assets[t] = i,
                        n.toLoad--,
                        n.loaded++,
                        e && e(t, r)
                    }
                    ,
                    r.onerror = function() {
                        n.errors[t] = "Couldn't load image " + t,
                        n.toLoad--,
                        n.loaded++,
                        i && i(t, "Couldn't load image " + t)
                    }
                    ,
                    r.src = t
                }
                ,
                e.prototype.loadTextureData = function(t, e, i, n) {
                    var r = this;
                    void 0 === i && (i = null),
                    void 0 === n && (n = null),
                    t = this.pathPrefix + t,
                    this.toLoad++;
                    var s = new Image;
                    s.onload = function() {
                        var e = r.textureLoader(s);
                        r.assets[t] = e,
                        r.toLoad--,
                        r.loaded++,
                        i && i(t, s)
                    }
                    ,
                    s.onerror = function() {
                        r.errors[t] = "Couldn't load image " + t,
                        r.toLoad--,
                        r.loaded++,
                        n && n(t, "Couldn't load image " + t)
                    }
                    ,
                    s.src = e
                }
                ,
                e.prototype.loadTextureAtlas = function(i, n, r) {
                    var s = this;
                    void 0 === n && (n = null),
                    void 0 === r && (r = null);
                    var a = i.lastIndexOf("/") >= 0 ? i.substring(0, i.lastIndexOf("/")) : "";
                    i = this.pathPrefix + i,
                    this.toLoad++,
                    e.downloadText(i, (function(e) {
                        var o = {
                            count: 0
                        }
                          , l = new Array;
                        try {
                            new t.TextureAtlas(e,function(e) {
                                l.push(a + "/" + e);
                                var i = document.createElement("img");
                                return i.width = 16,
                                i.height = 16,
                                new t.FakeTexture(i)
                            }
                            )
                        } catch (f) {
                            var h = f;
                            return s.errors[i] = "Couldn't load texture atlas " + i + ": " + h.message,
                            r && r(i, "Couldn't load texture atlas " + i + ": " + h.message),
                            s.toLoad--,
                            void s.loaded++
                        }
                        for (var c = function(h) {
                            var c = !1;
                            s.loadTexture(h, (function(h) {
                                if (o.count++,
                                o.count == l.length)
                                    if (c)
                                        s.errors[i] = "Couldn't load texture atlas page " + h + "} of atlas " + i,
                                        r && r(i, "Couldn't load texture atlas page " + h + " of atlas " + i),
                                        s.toLoad--,
                                        s.loaded++;
                                    else
                                        try {
                                            var u = new t.TextureAtlas(e,function(t) {
                                                return s.get(a + "/" + t)
                                            }
                                            );
                                            s.assets[i] = u,
                                            n && n(i, u),
                                            s.toLoad--,
                                            s.loaded++
                                        } catch (f) {
                                            var _ = f;
                                            s.errors[i] = "Couldn't load texture atlas " + i + ": " + _.message,
                                            r && r(i, "Couldn't load texture atlas " + i + ": " + _.message),
                                            s.toLoad--,
                                            s.loaded++
                                        }
                            }
                            ), (function(t) {
                                c = !0,
                                o.count++,
                                o.count == l.length && (s.errors[i] = "Couldn't load texture atlas page " + t + "} of atlas " + i,
                                r && r(i, "Couldn't load texture atlas page " + t + " of atlas " + i),
                                s.toLoad--,
                                s.loaded++)
                            }
                            ))
                        }, u = 0, _ = l; u < _.length; u++)
                            c(_[u])
                    }
                    ), (function(t, e) {
                        s.errors[i] = "Couldn't load texture atlas " + i + ": status " + status + ", " + e,
                        r && r(i, "Couldn't load texture atlas " + i + ": status " + status + ", " + e),
                        s.toLoad--,
                        s.loaded++
                    }
                    ))
                }
                ,
                e.prototype.get = function(t) {
                    return t = this.pathPrefix + t,
                    this.assets[t]
                }
                ,
                e.prototype.remove = function(t) {
                    t = this.pathPrefix + t;
                    var e = this.assets[t];
                    e.dispose && e.dispose(),
                    this.assets[t] = null
                }
                ,
                e.prototype.removeAll = function() {
                    for (var t in this.assets) {
                        var e = this.assets[t];
                        e.dispose && e.dispose()
                    }
                    this.assets = {}
                }
                ,
                e.prototype.isLoadingComplete = function() {
                    return 0 == this.toLoad
                }
                ,
                e.prototype.getToLoad = function() {
                    return this.toLoad
                }
                ,
                e.prototype.getLoaded = function() {
                    return this.loaded
                }
                ,
                e.prototype.dispose = function() {
                    this.removeAll()
                }
                ,
                e.prototype.hasErrors = function() {
                    return Object.keys(this.errors).length > 0
                }
                ,
                e.prototype.getErrors = function() {
                    return this.errors
                }
                ,
                e
            }
            )();
            t.AssetManager = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t) {
                    this.atlas = t
                }
                return e.prototype.newRegionAttachment = function(e, i, n) {
                    var r = this.atlas.findRegion(n);
                    if (null == r)
                        return null;
                    r.renderObject = r;
                    var s = new t.RegionAttachment(i);
                    return s.setRegion(r),
                    s
                }
                ,
                e.prototype.newMeshAttachment = function(e, i, n) {
                    var r = this.atlas.findRegion(n);
                    if (null == r)
                        return null;
                    r.renderObject = r;
                    var s = new t.MeshAttachment(i);
                    return s.region = r,
                    s
                }
                ,
                e.prototype.newBoundingBoxAttachment = function(e, i) {
                    return new t.BoundingBoxAttachment(i)
                }
                ,
                e.prototype.newPathAttachment = function(e, i) {
                    return new t.PathAttachment(i)
                }
                ,
                e.prototype.newPointAttachment = function(e, i) {
                    return new t.PointAttachment(i)
                }
                ,
                e.prototype.newClippingAttachment = function(e, i) {
                    return new t.ClippingAttachment(i)
                }
                ,
                e
            }
            )();
            t.AtlasAttachmentLoader = e
        }
        )(r || (r = {})),
        (function(t) {
            (function(t) {
                t[t.Normal = 0] = "Normal",
                t[t.Additive = 1] = "Additive",
                t[t.Multiply = 2] = "Multiply",
                t[t.Screen = 3] = "Screen"
            }
            )(t.BlendMode || (t.BlendMode = {}))
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e, i) {
                    if (this.children = new Array,
                    this.x = 0,
                    this.y = 0,
                    this.rotation = 0,
                    this.scaleX = 0,
                    this.scaleY = 0,
                    this.shearX = 0,
                    this.shearY = 0,
                    this.ax = 0,
                    this.ay = 0,
                    this.arotation = 0,
                    this.ascaleX = 0,
                    this.ascaleY = 0,
                    this.ashearX = 0,
                    this.ashearY = 0,
                    this.appliedValid = !1,
                    this.a = 0,
                    this.b = 0,
                    this.c = 0,
                    this.d = 0,
                    this.worldY = 0,
                    this.worldX = 0,
                    this.sorted = !1,
                    this.active = !1,
                    null == t)
                        throw new Error("data cannot be null.");
                    if (null == e)
                        throw new Error("skeleton cannot be null.");
                    this.data = t,
                    this.skeleton = e,
                    this.parent = i,
                    this.setToSetupPose()
                }
                return e.prototype.isActive = function() {
                    return this.active
                }
                ,
                e.prototype.update = function() {
                    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY)
                }
                ,
                e.prototype.updateWorldTransform = function() {
                    this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY)
                }
                ,
                e.prototype.updateWorldTransformWith = function(e, i, n, r, s, a, o) {
                    this.ax = e,
                    this.ay = i,
                    this.arotation = n,
                    this.ascaleX = r,
                    this.ascaleY = s,
                    this.ashearX = a,
                    this.ashearY = o,
                    this.appliedValid = !0;
                    var l = this.parent;
                    if (null == l) {
                        var h = this.skeleton
                          , c = n + 90 + o
                          , u = h.scaleX
                          , _ = h.scaleY;
                        return this.a = t.MathUtils.cosDeg(n + a) * r * u,
                        this.b = t.MathUtils.cosDeg(c) * s * u,
                        this.c = t.MathUtils.sinDeg(n + a) * r * _,
                        this.d = t.MathUtils.sinDeg(c) * s * _,
                        this.worldX = e * u + h.x,
                        void (this.worldY = i * _ + h.y)
                    }
                    var f = l.a
                      , d = l.b
                      , p = l.c
                      , m = l.d;
                    switch (this.worldX = f * e + d * i + l.worldX,
                    this.worldY = p * e + m * i + l.worldY,
                    this.data.transformMode) {
                    case t.TransformMode.Normal:
                        c = n + 90 + o;
                        var y = t.MathUtils.cosDeg(n + a) * r
                          , v = t.MathUtils.cosDeg(c) * s
                          , g = t.MathUtils.sinDeg(n + a) * r
                          , A = t.MathUtils.sinDeg(c) * s;
                        return this.a = f * y + d * g,
                        this.b = f * v + d * A,
                        this.c = p * y + m * g,
                        void (this.d = p * v + m * A);
                    case t.TransformMode.OnlyTranslation:
                        c = n + 90 + o,
                        this.a = t.MathUtils.cosDeg(n + a) * r,
                        this.b = t.MathUtils.cosDeg(c) * s,
                        this.c = t.MathUtils.sinDeg(n + a) * r,
                        this.d = t.MathUtils.sinDeg(c) * s;
                        break;
                    case t.TransformMode.NoRotationOrReflection:
                        var x = 0;
                        (T = f * f + p * p) > 1e-4 ? (d = p * (T = Math.abs(f * m - d * p) / T),
                        m = f * T,
                        x = Math.atan2(p, f) * t.MathUtils.radDeg) : (f = 0,
                        p = 0,
                        x = 90 - Math.atan2(m, d) * t.MathUtils.radDeg);
                        var b = n + a - x
                          , C = n + o - x + 90;
                        y = t.MathUtils.cosDeg(b) * r,
                        v = t.MathUtils.cosDeg(C) * s,
                        g = t.MathUtils.sinDeg(b) * r,
                        A = t.MathUtils.sinDeg(C) * s,
                        this.a = f * y - d * g,
                        this.b = f * v - d * A,
                        this.c = p * y + m * g,
                        this.d = p * v + m * A;
                        break;
                    case t.TransformMode.NoScale:
                    case t.TransformMode.NoScaleOrReflection:
                        var T, S = t.MathUtils.cosDeg(n), w = t.MathUtils.sinDeg(n), E = (f * S + d * w) / this.skeleton.scaleX, M = (p * S + m * w) / this.skeleton.scaleY;
                        (T = Math.sqrt(E * E + M * M)) > 1e-5 && (T = 1 / T),
                        E *= T,
                        M *= T,
                        T = Math.sqrt(E * E + M * M),
                        this.data.transformMode == t.TransformMode.NoScale && f * m - d * p < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0) && (T = -T);
                        var D = Math.PI / 2 + Math.atan2(M, E)
                          , B = Math.cos(D) * T
                          , I = Math.sin(D) * T;
                        y = t.MathUtils.cosDeg(a) * r,
                        v = t.MathUtils.cosDeg(90 + o) * s,
                        g = t.MathUtils.sinDeg(a) * r,
                        A = t.MathUtils.sinDeg(90 + o) * s,
                        this.a = E * y + B * g,
                        this.b = E * v + B * A,
                        this.c = M * y + I * g,
                        this.d = M * v + I * A
                    }
                    this.a *= this.skeleton.scaleX,
                    this.b *= this.skeleton.scaleX,
                    this.c *= this.skeleton.scaleY,
                    this.d *= this.skeleton.scaleY
                }
                ,
                e.prototype.setToSetupPose = function() {
                    var t = this.data;
                    this.x = t.x,
                    this.y = t.y,
                    this.rotation = t.rotation,
                    this.scaleX = t.scaleX,
                    this.scaleY = t.scaleY,
                    this.shearX = t.shearX,
                    this.shearY = t.shearY
                }
                ,
                e.prototype.getWorldRotationX = function() {
                    return Math.atan2(this.c, this.a) * t.MathUtils.radDeg
                }
                ,
                e.prototype.getWorldRotationY = function() {
                    return Math.atan2(this.d, this.b) * t.MathUtils.radDeg
                }
                ,
                e.prototype.getWorldScaleX = function() {
                    return Math.sqrt(this.a * this.a + this.c * this.c)
                }
                ,
                e.prototype.getWorldScaleY = function() {
                    return Math.sqrt(this.b * this.b + this.d * this.d)
                }
                ,
                e.prototype.updateAppliedTransform = function() {
                    this.appliedValid = !0;
                    var e = this.parent;
                    if (null == e)
                        return this.ax = this.worldX,
                        this.ay = this.worldY,
                        this.arotation = Math.atan2(this.c, this.a) * t.MathUtils.radDeg,
                        this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c),
                        this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d),
                        this.ashearX = 0,
                        void (this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * t.MathUtils.radDeg);
                    var i = e.a
                      , n = e.b
                      , r = e.c
                      , s = e.d
                      , a = 1 / (i * s - n * r)
                      , o = this.worldX - e.worldX
                      , l = this.worldY - e.worldY;
                    this.ax = o * s * a - l * n * a,
                    this.ay = l * i * a - o * r * a;
                    var h = a * s
                      , c = a * i
                      , u = a * n
                      , _ = a * r
                      , f = h * this.a - u * this.c
                      , d = h * this.b - u * this.d
                      , p = c * this.c - _ * this.a
                      , m = c * this.d - _ * this.b;
                    if (this.ashearX = 0,
                    this.ascaleX = Math.sqrt(f * f + p * p),
                    this.ascaleX > 1e-4) {
                        var y = f * m - d * p;
                        this.ascaleY = y / this.ascaleX,
                        this.ashearY = Math.atan2(f * d + p * m, y) * t.MathUtils.radDeg,
                        this.arotation = Math.atan2(p, f) * t.MathUtils.radDeg
                    } else
                        this.ascaleX = 0,
                        this.ascaleY = Math.sqrt(d * d + m * m),
                        this.ashearY = 0,
                        this.arotation = 90 - Math.atan2(m, d) * t.MathUtils.radDeg
                }
                ,
                e.prototype.worldToLocal = function(t) {
                    var e = this.a
                      , i = this.b
                      , n = this.c
                      , r = this.d
                      , s = 1 / (e * r - i * n)
                      , a = t.x - this.worldX
                      , o = t.y - this.worldY;
                    return t.x = a * r * s - o * i * s,
                    t.y = o * e * s - a * n * s,
                    t
                }
                ,
                e.prototype.localToWorld = function(t) {
                    var e = t.x
                      , i = t.y;
                    return t.x = e * this.a + i * this.b + this.worldX,
                    t.y = e * this.c + i * this.d + this.worldY,
                    t
                }
                ,
                e.prototype.worldToLocalRotation = function(e) {
                    var i = t.MathUtils.sinDeg(e)
                      , n = t.MathUtils.cosDeg(e);
                    return Math.atan2(this.a * i - this.c * n, this.d * n - this.b * i) * t.MathUtils.radDeg + this.rotation - this.shearX
                }
                ,
                e.prototype.localToWorldRotation = function(e) {
                    e -= this.rotation - this.shearX;
                    var i = t.MathUtils.sinDeg(e)
                      , n = t.MathUtils.cosDeg(e);
                    return Math.atan2(n * this.c + i * this.d, n * this.a + i * this.b) * t.MathUtils.radDeg
                }
                ,
                e.prototype.rotateWorld = function(e) {
                    var i = this.a
                      , n = this.b
                      , r = this.c
                      , s = this.d
                      , a = t.MathUtils.cosDeg(e)
                      , o = t.MathUtils.sinDeg(e);
                    this.a = a * i - o * r,
                    this.b = a * n - o * s,
                    this.c = o * i + a * r,
                    this.d = o * n + a * s,
                    this.appliedValid = !1
                }
                ,
                e
            }
            )();
            t.Bone = e
        }
        )(r || (r = {})),
        (function(t) {
            var e;
            t.BoneData = function(i, n, r) {
                if (this.x = 0,
                this.y = 0,
                this.rotation = 0,
                this.scaleX = 1,
                this.scaleY = 1,
                this.shearX = 0,
                this.shearY = 0,
                this.transformMode = e.Normal,
                this.skinRequired = !1,
                this.color = new t.Color,
                i < 0)
                    throw new Error("index must be >= 0.");
                if (null == n)
                    throw new Error("name cannot be null.");
                this.index = i,
                this.name = n,
                this.parent = r
            }
            ,
            (function(t) {
                t[t.Normal = 0] = "Normal",
                t[t.OnlyTranslation = 1] = "OnlyTranslation",
                t[t.NoRotationOrReflection = 2] = "NoRotationOrReflection",
                t[t.NoScale = 3] = "NoScale",
                t[t.NoScaleOrReflection = 4] = "NoScaleOrReflection"
            }
            )(e = t.TransformMode || (t.TransformMode = {}))
        }
        )(r || (r = {})),
        (function(t) {
            t.ConstraintData = function(t, e, i) {
                this.name = t,
                this.order = e,
                this.skinRequired = i
            }
        }
        )(r || (r = {})),
        (function(t) {
            t.Event = function(t, e) {
                if (null == e)
                    throw new Error("data cannot be null.");
                this.time = t,
                this.data = e
            }
        }
        )(r || (r = {})),
        (function(t) {
            t.EventData = function(t) {
                this.name = t
            }
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    if (this.bendDirection = 0,
                    this.compress = !1,
                    this.stretch = !1,
                    this.mix = 1,
                    this.softness = 0,
                    this.active = !1,
                    null == t)
                        throw new Error("data cannot be null.");
                    if (null == e)
                        throw new Error("skeleton cannot be null.");
                    this.data = t,
                    this.mix = t.mix,
                    this.softness = t.softness,
                    this.bendDirection = t.bendDirection,
                    this.compress = t.compress,
                    this.stretch = t.stretch,
                    this.bones = new Array;
                    for (var i = 0; i < t.bones.length; i++)
                        this.bones.push(e.findBone(t.bones[i].name));
                    this.target = e.findBone(t.target.name)
                }
                return e.prototype.isActive = function() {
                    return this.active
                }
                ,
                e.prototype.apply = function() {
                    this.update()
                }
                ,
                e.prototype.update = function() {
                    var t = this.target
                      , e = this.bones;
                    switch (e.length) {
                    case 1:
                        this.apply1(e[0], t.worldX, t.worldY, this.compress, this.stretch, this.data.uniform, this.mix);
                        break;
                    case 2:
                        this.apply2(e[0], e[1], t.worldX, t.worldY, this.bendDirection, this.stretch, this.softness, this.mix)
                    }
                }
                ,
                e.prototype.apply1 = function(e, i, n, r, s, a, o) {
                    e.appliedValid || e.updateAppliedTransform();
                    var l = e.parent
                      , h = 1 / (l.a * l.d - l.b * l.c)
                      , c = i - l.worldX
                      , u = n - l.worldY
                      , _ = (c * l.d - u * l.b) * h - e.ax
                      , f = (u * l.a - c * l.c) * h - e.ay
                      , d = Math.atan2(f, _) * t.MathUtils.radDeg - e.ashearX - e.arotation;
                    e.ascaleX < 0 && (d += 180),
                    d > 180 ? d -= 360 : d < -180 && (d += 360);
                    var p = e.ascaleX
                      , m = e.ascaleY;
                    if (r || s) {
                        var y = e.data.length * p
                          , v = Math.sqrt(_ * _ + f * f);
                        if (r && v < y || s && v > y && y > 1e-4) {
                            var g = (v / y - 1) * o + 1;
                            p *= g,
                            a && (m *= g)
                        }
                    }
                    e.updateWorldTransformWith(e.ax, e.ay, e.arotation + d * o, p, m, e.ashearX, e.ashearY)
                }
                ,
                e.prototype.apply2 = function(e, i, n, r, s, a, o, l) {
                    if (0 != l) {
                        e.appliedValid || e.updateAppliedTransform(),
                        i.appliedValid || i.updateAppliedTransform();
                        var h = e.ax
                          , c = e.ay
                          , u = e.ascaleX
                          , _ = u
                          , f = e.ascaleY
                          , d = i.ascaleX
                          , p = 0
                          , m = 0
                          , y = 0;
                        u < 0 ? (u = -u,
                        p = 180,
                        y = -1) : (p = 0,
                        y = 1),
                        f < 0 && (f = -f,
                        y = -y),
                        d < 0 ? (d = -d,
                        m = 180) : m = 0;
                        var v = i.ax
                          , g = 0
                          , A = 0
                          , x = 0
                          , b = e.a
                          , C = e.b
                          , T = e.c
                          , S = e.d
                          , w = Math.abs(u - f) <= 1e-4;
                        w ? (A = b * v + C * (g = i.ay) + e.worldX,
                        x = T * v + S * g + e.worldY) : (g = 0,
                        A = b * v + e.worldX,
                        x = T * v + e.worldY);
                        var E = e.parent;
                        b = E.a,
                        C = E.b,
                        T = E.c;
                        var M, D, B = 1 / (b * (S = E.d) - C * T), I = A - E.worldX, P = x - E.worldY, R = (I * S - P * C) * B - h, O = (P * b - I * T) * B - c, L = Math.sqrt(R * R + O * O), F = i.data.length * d;
                        if (L < 1e-4)
                            return this.apply1(e, n, r, !1, a, !1, l),
                            void i.updateWorldTransformWith(v, g, 0, i.ascaleX, i.ascaleY, i.ashearX, i.ashearY);
                        var V = ((I = n - E.worldX) * S - (P = r - E.worldY) * C) * B - h
                          , N = (P * b - I * T) * B - c
                          , k = V * V + N * N;
                        if (0 != o) {
                            o *= u * (d + 1) / 2;
                            var G = Math.sqrt(k)
                              , U = G - L - F * u + o;
                            if (U > 0) {
                                var z = Math.min(1, U / (2 * o)) - 1;
                                k = (V -= (z = (U - o * (1 - z * z)) / G) * V) * V + (N -= z * N) * N
                            }
                        }
                        t: if (w) {
                            var H = (k - L * L - (F *= u) * F) / (2 * L * F);
                            H < -1 ? H = -1 : H > 1 && (H = 1,
                            a && (_ *= (Math.sqrt(k) / (L + F) - 1) * l + 1)),
                            D = Math.acos(H) * s,
                            b = L + F * H,
                            C = F * Math.sin(D),
                            M = Math.atan2(N * b - V * C, V * b + N * C)
                        } else {
                            var W = (b = u * F) * b
                              , j = (C = f * F) * C
                              , X = Math.atan2(N, V)
                              , Y = -2 * j * L
                              , q = j - W;
                            if ((S = Y * Y - 4 * q * (T = j * L * L + W * k - W * j)) >= 0) {
                                var J = Math.sqrt(S);
                                Y < 0 && (J = -J);
                                var Z = (J = -(Y + J) / 2) / q
                                  , K = T / J
                                  , Q = Math.abs(Z) < Math.abs(K) ? Z : K;
                                if (Q * Q <= k) {
                                    P = Math.sqrt(k - Q * Q) * s,
                                    M = X - Math.atan2(P, Q),
                                    D = Math.atan2(P / f, (Q - L) / u);
                                    break t
                                }
                            }
                            var $ = t.MathUtils.PI
                              , tt = L - b
                              , et = tt * tt
                              , it = 0
                              , nt = 0
                              , rt = L + b
                              , st = rt * rt
                              , at = 0;
                            (T = -b * L / (W - j)) >= -1 && T <= 1 && (T = Math.acos(T),
                            (S = (I = b * Math.cos(T) + L) * I + (P = C * Math.sin(T)) * P) < et && ($ = T,
                            et = S,
                            tt = I,
                            it = P),
                            S > st && (nt = T,
                            st = S,
                            rt = I,
                            at = P)),
                            k <= (et + st) / 2 ? (M = X - Math.atan2(it * s, tt),
                            D = $ * s) : (M = X - Math.atan2(at * s, rt),
                            D = nt * s)
                        }
                        var ot = Math.atan2(g, v) * y
                          , lt = e.arotation;
                        (M = (M - ot) * t.MathUtils.radDeg + p - lt) > 180 ? M -= 360 : M < -180 && (M += 360),
                        e.updateWorldTransformWith(h, c, lt + M * l, _, e.ascaleY, 0, 0),
                        lt = i.arotation,
                        (D = ((D + ot) * t.MathUtils.radDeg - i.ashearX) * y + m - lt) > 180 ? D -= 360 : D < -180 && (D += 360),
                        i.updateWorldTransformWith(v, g, lt + D * l, i.ascaleX, i.ascaleY, i.ashearX, i.ashearY)
                    } else
                        i.updateWorldTransform()
                }
                ,
                e
            }
            )();
            t.IkConstraint = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e(e) {
                    var i = t.call(this, e, 0, !1) || this;
                    return i.bones = new Array,
                    i.bendDirection = 1,
                    i.compress = !1,
                    i.stretch = !1,
                    i.uniform = !1,
                    i.mix = 1,
                    i.softness = 0,
                    i
                }
                return s(e, t),
                e
            }
            )(t.ConstraintData);
            t.IkConstraintData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    if (this.position = 0,
                    this.spacing = 0,
                    this.rotateMix = 0,
                    this.translateMix = 0,
                    this.spaces = new Array,
                    this.positions = new Array,
                    this.world = new Array,
                    this.curves = new Array,
                    this.lengths = new Array,
                    this.segments = new Array,
                    this.active = !1,
                    null == t)
                        throw new Error("data cannot be null.");
                    if (null == e)
                        throw new Error("skeleton cannot be null.");
                    this.data = t,
                    this.bones = new Array;
                    for (var i = 0, n = t.bones.length; i < n; i++)
                        this.bones.push(e.findBone(t.bones[i].name));
                    this.target = e.findSlot(t.target.name),
                    this.position = t.position,
                    this.spacing = t.spacing,
                    this.rotateMix = t.rotateMix,
                    this.translateMix = t.translateMix
                }
                return e.prototype.isActive = function() {
                    return this.active
                }
                ,
                e.prototype.apply = function() {
                    this.update()
                }
                ,
                e.prototype.update = function() {
                    var i = this.target.getAttachment();
                    if (i instanceof t.PathAttachment) {
                        var n = this.rotateMix
                          , r = this.translateMix
                          , s = n > 0;
                        if (r > 0 || s) {
                            var a = this.data
                              , o = a.spacingMode == t.SpacingMode.Percent
                              , l = a.rotateMode
                              , h = l == t.RotateMode.Tangent
                              , c = l == t.RotateMode.ChainScale
                              , u = this.bones.length
                              , _ = h ? u : u + 1
                              , f = this.bones
                              , d = t.Utils.setArraySize(this.spaces, _)
                              , p = null
                              , m = this.spacing;
                            if (c || !o) {
                                c && (p = t.Utils.setArraySize(this.lengths, u));
                                for (var y = a.spacingMode == t.SpacingMode.Length, v = 0, g = _ - 1; v < g; ) {
                                    var A = (I = f[v]).data.length;
                                    if (A < e.epsilon)
                                        c && (p[v] = 0),
                                        d[++v] = 0;
                                    else if (o) {
                                        if (c) {
                                            var x = A * I.a
                                              , b = A * I.c
                                              , C = Math.sqrt(x * x + b * b);
                                            p[v] = C
                                        }
                                        d[++v] = m
                                    } else {
                                        x = A * I.a,
                                        b = A * I.c;
                                        var T = Math.sqrt(x * x + b * b);
                                        c && (p[v] = T),
                                        d[++v] = (y ? A + m : m) * T / A
                                    }
                                }
                            } else
                                for (v = 1; v < _; v++)
                                    d[v] = m;
                            var S = this.computeWorldPositions(i, _, h, a.positionMode == t.PositionMode.Percent, o)
                              , w = S[0]
                              , E = S[1]
                              , M = a.offsetRotation
                              , D = !1;
                            0 == M ? D = l == t.RotateMode.Chain : (D = !1,
                            M *= (B = this.target.bone).a * B.d - B.b * B.c > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad),
                            v = 0;
                            for (var B = 3; v < u; v++,
                            B += 3) {
                                var I;
                                (I = f[v]).worldX += (w - I.worldX) * r,
                                I.worldY += (E - I.worldY) * r;
                                var P = (x = S[B]) - w
                                  , R = (b = S[B + 1]) - E;
                                if (c) {
                                    var O = p[v];
                                    if (0 != O) {
                                        var L = (Math.sqrt(P * P + R * R) / O - 1) * n + 1;
                                        I.a *= L,
                                        I.c *= L
                                    }
                                }
                                if (w = x,
                                E = b,
                                s) {
                                    var F = I.a
                                      , V = I.b
                                      , N = I.c
                                      , k = I.d
                                      , G = 0
                                      , U = 0
                                      , z = 0;
                                    if (G = h ? S[B - 1] : 0 == d[v + 1] ? S[B + 2] : Math.atan2(R, P),
                                    G -= Math.atan2(N, F),
                                    D) {
                                        U = Math.cos(G),
                                        z = Math.sin(G);
                                        var H = I.data.length;
                                        w += (H * (U * F - z * N) - P) * n,
                                        E += (H * (z * F + U * N) - R) * n
                                    } else
                                        G += M;
                                    G > t.MathUtils.PI ? G -= t.MathUtils.PI2 : G < -t.MathUtils.PI && (G += t.MathUtils.PI2),
                                    G *= n,
                                    U = Math.cos(G),
                                    z = Math.sin(G),
                                    I.a = U * F - z * N,
                                    I.b = U * V - z * k,
                                    I.c = z * F + U * N,
                                    I.d = z * V + U * k
                                }
                                I.appliedValid = !1
                            }
                        }
                    }
                }
                ,
                e.prototype.computeWorldPositions = function(i, n, r, s, a) {
                    var o = this.target
                      , l = this.position
                      , h = this.spaces
                      , c = t.Utils.setArraySize(this.positions, 3 * n + 2)
                      , u = null
                      , _ = i.closed
                      , f = i.worldVerticesLength
                      , d = f / 6
                      , p = e.NONE;
                    if (!i.constantSpeed) {
                        var m = i.lengths
                          , y = m[d -= _ ? 1 : 2];
                        if (s && (l *= y),
                        a)
                            for (var v = 1; v < n; v++)
                                h[v] *= y;
                        u = t.Utils.setArraySize(this.world, 8),
                        v = 0;
                        for (var g = 0, A = 0; v < n; v++,
                        g += 3) {
                            var x = l += j = h[v];
                            if (_)
                                (x %= y) < 0 && (x += y),
                                A = 0;
                            else {
                                if (x < 0) {
                                    p != e.BEFORE && (p = e.BEFORE,
                                    i.computeWorldVertices(o, 2, 4, u, 0, 2)),
                                    this.addBeforePosition(x, u, 0, c, g);
                                    continue
                                }
                                if (x > y) {
                                    p != e.AFTER && (p = e.AFTER,
                                    i.computeWorldVertices(o, f - 6, 4, u, 0, 2)),
                                    this.addAfterPosition(x - y, u, 0, c, g);
                                    continue
                                }
                            }
                            for (; ; A++) {
                                var b = m[A];
                                if (!(x > b)) {
                                    0 == A ? x /= b : x = (x - (J = m[A - 1])) / (b - J);
                                    break
                                }
                            }
                            A != p && (p = A,
                            _ && A == d ? (i.computeWorldVertices(o, f - 4, 4, u, 0, 2),
                            i.computeWorldVertices(o, 0, 4, u, 4, 2)) : i.computeWorldVertices(o, 6 * A + 2, 8, u, 0, 2)),
                            this.addCurvePosition(x, u[0], u[1], u[2], u[3], u[4], u[5], u[6], u[7], c, g, r || v > 0 && 0 == j)
                        }
                        return c
                    }
                    _ ? (f += 2,
                    u = t.Utils.setArraySize(this.world, f),
                    i.computeWorldVertices(o, 2, f - 4, u, 0, 2),
                    i.computeWorldVertices(o, 0, 2, u, f - 4, 2),
                    u[f - 2] = u[0],
                    u[f - 1] = u[1]) : (d--,
                    f -= 4,
                    u = t.Utils.setArraySize(this.world, f),
                    i.computeWorldVertices(o, 2, f, u, 0, 2));
                    for (var C = t.Utils.setArraySize(this.curves, d), T = 0, S = u[0], w = u[1], E = 0, M = 0, D = 0, B = 0, I = 0, P = 0, R = 0, O = 0, L = 0, F = 0, V = 0, N = 0, k = 0, G = 0, U = (v = 0,
                    2); v < d; v++,
                    U += 6)
                        E = u[U],
                        M = u[U + 1],
                        D = u[U + 2],
                        B = u[U + 3],
                        V = 2 * (R = .1875 * (S - 2 * E + D)) + (L = .09375 * (3 * (E - D) - S + (I = u[U + 4]))),
                        N = 2 * (O = .1875 * (w - 2 * M + B)) + (F = .09375 * (3 * (M - B) - w + (P = u[U + 5]))),
                        k = .75 * (E - S) + R + .16666667 * L,
                        G = .75 * (M - w) + O + .16666667 * F,
                        T += Math.sqrt(k * k + G * G),
                        k += V,
                        G += N,
                        V += L,
                        N += F,
                        T += Math.sqrt(k * k + G * G),
                        k += V,
                        G += N,
                        T += Math.sqrt(k * k + G * G),
                        k += V + L,
                        G += N + F,
                        T += Math.sqrt(k * k + G * G),
                        C[v] = T,
                        S = I,
                        w = P;
                    if (l *= s ? T : T / i.lengths[d - 1],
                    a)
                        for (v = 1; v < n; v++)
                            h[v] *= T;
                    for (var z = this.segments, H = 0, W = (v = 0,
                    g = 0,
                    A = 0,
                    0); v < n; v++,
                    g += 3) {
                        var j;
                        if (x = l += j = h[v],
                        _)
                            (x %= T) < 0 && (x += T),
                            A = 0;
                        else {
                            if (x < 0) {
                                this.addBeforePosition(x, u, 0, c, g);
                                continue
                            }
                            if (x > T) {
                                this.addAfterPosition(x - T, u, f - 4, c, g);
                                continue
                            }
                        }
                        for (; ; A++) {
                            var X = C[A];
                            if (!(x > X)) {
                                0 == A ? x /= X : x = (x - (J = C[A - 1])) / (X - J);
                                break
                            }
                        }
                        if (A != p) {
                            p = A;
                            var Y = 6 * A;
                            for (S = u[Y],
                            w = u[Y + 1],
                            E = u[Y + 2],
                            M = u[Y + 3],
                            D = u[Y + 4],
                            B = u[Y + 5],
                            V = 2 * (R = .03 * (S - 2 * E + D)) + (L = .006 * (3 * (E - D) - S + (I = u[Y + 6]))),
                            N = 2 * (O = .03 * (w - 2 * M + B)) + (F = .006 * (3 * (M - B) - w + (P = u[Y + 7]))),
                            k = .3 * (E - S) + R + .16666667 * L,
                            G = .3 * (M - w) + O + .16666667 * F,
                            H = Math.sqrt(k * k + G * G),
                            z[0] = H,
                            Y = 1; Y < 8; Y++)
                                k += V,
                                G += N,
                                V += L,
                                N += F,
                                H += Math.sqrt(k * k + G * G),
                                z[Y] = H;
                            k += V,
                            G += N,
                            H += Math.sqrt(k * k + G * G),
                            z[8] = H,
                            k += V + L,
                            G += N + F,
                            H += Math.sqrt(k * k + G * G),
                            z[9] = H,
                            W = 0
                        }
                        for (x *= H; ; W++) {
                            var q = z[W];
                            if (!(x > q)) {
                                var J;
                                0 == W ? x /= q : x = W + (x - (J = z[W - 1])) / (q - J);
                                break
                            }
                        }
                        this.addCurvePosition(.1 * x, S, w, E, M, D, B, I, P, c, g, r || v > 0 && 0 == j)
                    }
                    return c
                }
                ,
                e.prototype.addBeforePosition = function(t, e, i, n, r) {
                    var s = e[i]
                      , a = e[i + 1]
                      , o = e[i + 2] - s
                      , l = e[i + 3] - a
                      , h = Math.atan2(l, o);
                    n[r] = s + t * Math.cos(h),
                    n[r + 1] = a + t * Math.sin(h),
                    n[r + 2] = h
                }
                ,
                e.prototype.addAfterPosition = function(t, e, i, n, r) {
                    var s = e[i + 2]
                      , a = e[i + 3]
                      , o = s - e[i]
                      , l = a - e[i + 1]
                      , h = Math.atan2(l, o);
                    n[r] = s + t * Math.cos(h),
                    n[r + 1] = a + t * Math.sin(h),
                    n[r + 2] = h
                }
                ,
                e.prototype.addCurvePosition = function(t, e, i, n, r, s, a, o, l, h, c, u) {
                    if (0 == t || isNaN(t))
                        return h[c] = e,
                        h[c + 1] = i,
                        void (h[c + 2] = Math.atan2(r - i, n - e));
                    var _ = t * t
                      , f = _ * t
                      , d = 1 - t
                      , p = d * d
                      , m = p * d
                      , y = d * t
                      , v = 3 * y
                      , g = d * v
                      , A = v * t
                      , x = e * m + n * g + s * A + o * f
                      , b = i * m + r * g + a * A + l * f;
                    h[c] = x,
                    h[c + 1] = b,
                    u && (h[c + 2] = t < .001 ? Math.atan2(r - i, n - e) : Math.atan2(b - (i * p + r * y * 2 + a * _), x - (e * p + n * y * 2 + s * _)))
                }
                ,
                e.NONE = -1,
                e.BEFORE = -2,
                e.AFTER = -3,
                e.epsilon = 1e-5,
                e
            }
            )();
            t.PathConstraint = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e(e) {
                    var i = t.call(this, e, 0, !1) || this;
                    return i.bones = new Array,
                    i
                }
                return s(e, t),
                e
            }
            )(t.ConstraintData);
            t.PathConstraintData = e,
            (function(t) {
                t[t.Fixed = 0] = "Fixed",
                t[t.Percent = 1] = "Percent"
            }
            )(t.PositionMode || (t.PositionMode = {})),
            (function(t) {
                t[t.Length = 0] = "Length",
                t[t.Fixed = 1] = "Fixed",
                t[t.Percent = 2] = "Percent"
            }
            )(t.SpacingMode || (t.SpacingMode = {})),
            (function(t) {
                t[t.Tangent = 0] = "Tangent",
                t[t.Chain = 1] = "Chain",
                t[t.ChainScale = 2] = "ChainScale"
            }
            )(t.RotateMode || (t.RotateMode = {}))
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t(t) {
                    this.toLoad = new Array,
                    this.assets = {},
                    this.clientId = t
                }
                return t.prototype.loaded = function() {
                    var t = 0;
                    for (var e in this.assets)
                        t++;
                    return t
                }
                ,
                t
            }
            )()
              , i = (function() {
                function t(t) {
                    void 0 === t && (t = ""),
                    this.clientAssets = {},
                    this.queuedAssets = {},
                    this.rawAssets = {},
                    this.errors = {},
                    this.pathPrefix = t
                }
                return t.prototype.queueAsset = function(t, i, n) {
                    var r = this.clientAssets[t];
                    return null == r && (r = new e(t),
                    this.clientAssets[t] = r),
                    null !== i && (r.textureLoader = i),
                    r.toLoad.push(n),
                    this.queuedAssets[n] !== n && (this.queuedAssets[n] = n,
                    !0)
                }
                ,
                t.prototype.loadText = function(t, e) {
                    var i = this;
                    if (e = this.pathPrefix + e,
                    this.queueAsset(t, null, e)) {
                        var n = new XMLHttpRequest;
                        n.onreadystatechange = function() {
                            n.readyState == XMLHttpRequest.DONE && (n.status >= 200 && n.status < 300 ? i.rawAssets[e] = n.responseText : i.errors[e] = "Couldn't load text " + e + ": status " + n.status + ", " + n.responseText)
                        }
                        ,
                        n.open("GET", e, !0),
                        n.send()
                    }
                }
                ,
                t.prototype.loadJson = function(t, e) {
                    var i = this;
                    if (e = this.pathPrefix + e,
                    this.queueAsset(t, null, e)) {
                        var n = new XMLHttpRequest;
                        n.onreadystatechange = function() {
                            n.readyState == XMLHttpRequest.DONE && (n.status >= 200 && n.status < 300 ? i.rawAssets[e] = JSON.parse(n.responseText) : i.errors[e] = "Couldn't load text " + e + ": status " + n.status + ", " + n.responseText)
                        }
                        ,
                        n.open("GET", e, !0),
                        n.send()
                    }
                }
                ,
                t.prototype.loadTexture = function(t, e, i) {
                    var n = this;
                    if (i = this.pathPrefix + i,
                    this.queueAsset(t, e, i)) {
                        var r = new Image;
                        r.src = i,
                        r.crossOrigin = "anonymous",
                        r.onload = function() {
                            n.rawAssets[i] = r
                        }
                        ,
                        r.onerror = function() {
                            n.errors[i] = "Couldn't load image " + i
                        }
                    }
                }
                ,
                t.prototype.get = function(t, e) {
                    e = this.pathPrefix + e;
                    var i = this.clientAssets[t];
                    return null == i || i.assets[e]
                }
                ,
                t.prototype.updateClientAssets = function(t) {
                    for (var e = 0; e < t.toLoad.length; e++) {
                        var i = t.toLoad[e];
                        if (null == t.assets[i]) {
                            var n = this.rawAssets[i];
                            if (null == n)
                                continue;
                            n instanceof HTMLImageElement ? t.assets[i] = t.textureLoader(n) : t.assets[i] = n
                        }
                    }
                }
                ,
                t.prototype.isLoadingComplete = function(t) {
                    var e = this.clientAssets[t];
                    return null == e || (this.updateClientAssets(e),
                    e.toLoad.length == e.loaded())
                }
                ,
                t.prototype.dispose = function() {}
                ,
                t.prototype.hasErrors = function() {
                    return Object.keys(this.errors).length > 0
                }
                ,
                t.prototype.getErrors = function() {
                    return this.errors
                }
                ,
                t
            }
            )();
            t.SharedAssetManager = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(e) {
                    if (this._updateCache = new Array,
                    this.updateCacheReset = new Array,
                    this.time = 0,
                    this.scaleX = 1,
                    this.scaleY = 1,
                    this.x = 0,
                    this.y = 0,
                    null == e)
                        throw new Error("data cannot be null.");
                    this.data = e,
                    this.bones = new Array;
                    for (var i = 0; i < e.bones.length; i++) {
                        var n = e.bones[i]
                          , r = void 0;
                        if (null == n.parent)
                            r = new t.Bone(n,this,null);
                        else {
                            var s = this.bones[n.parent.index];
                            r = new t.Bone(n,this,s),
                            s.children.push(r)
                        }
                        this.bones.push(r)
                    }
                    for (this.slots = new Array,
                    this.drawOrder = new Array,
                    i = 0; i < e.slots.length; i++) {
                        var a = e.slots[i]
                          , o = (r = this.bones[a.boneData.index],
                        new t.Slot(a,r));
                        this.slots.push(o),
                        this.drawOrder.push(o)
                    }
                    for (this.ikConstraints = new Array,
                    i = 0; i < e.ikConstraints.length; i++) {
                        var l = e.ikConstraints[i];
                        this.ikConstraints.push(new t.IkConstraint(l,this))
                    }
                    for (this.transformConstraints = new Array,
                    i = 0; i < e.transformConstraints.length; i++) {
                        var h = e.transformConstraints[i];
                        this.transformConstraints.push(new t.TransformConstraint(h,this))
                    }
                    for (this.pathConstraints = new Array,
                    i = 0; i < e.pathConstraints.length; i++) {
                        var c = e.pathConstraints[i];
                        this.pathConstraints.push(new t.PathConstraint(c,this))
                    }
                    this.color = new t.Color(1,1,1,1),
                    this.updateCache()
                }
                return e.prototype.updateCache = function() {
                    this._updateCache.length = 0,
                    this.updateCacheReset.length = 0;
                    for (var t = this.bones, e = 0, i = t.length; e < i; e++)
                        (r = t[e]).sorted = r.data.skinRequired,
                        r.active = !r.sorted;
                    if (null != this.skin) {
                        var n = this.skin.bones;
                        for (e = 0,
                        i = this.skin.bones.length; e < i; e++) {
                            var r = this.bones[n[e].index];
                            do {
                                r.sorted = !1,
                                r.active = !0,
                                r = r.parent
                            } while (null != r)
                        }
                    }
                    var s = this.ikConstraints
                      , a = this.transformConstraints
                      , o = this.pathConstraints
                      , l = s.length
                      , h = a.length
                      , c = o.length
                      , u = l + h + c;
                    t: for (e = 0; e < u; e++) {
                        for (var _ = 0; _ < l; _++)
                            if ((f = s[_]).data.order == e) {
                                this.sortIkConstraint(f);
                                continue t
                            }
                        for (_ = 0; _ < h; _++)
                            if ((f = a[_]).data.order == e) {
                                this.sortTransformConstraint(f);
                                continue t
                            }
                        for (_ = 0; _ < c; _++) {
                            var f;
                            if ((f = o[_]).data.order == e) {
                                this.sortPathConstraint(f);
                                continue t
                            }
                        }
                    }
                    for (e = 0,
                    i = t.length; e < i; e++)
                        this.sortBone(t[e])
                }
                ,
                e.prototype.sortIkConstraint = function(e) {
                    if (e.active = e.target.isActive() && (!e.data.skinRequired || null != this.skin && t.Utils.contains(this.skin.constraints, e.data, !0)),
                    e.active) {
                        var i = e.target;
                        this.sortBone(i);
                        var n = e.bones
                          , r = n[0];
                        if (this.sortBone(r),
                        n.length > 1) {
                            var s = n[n.length - 1];
                            this._updateCache.indexOf(s) > -1 || this.updateCacheReset.push(s)
                        }
                        this._updateCache.push(e),
                        this.sortReset(r.children),
                        n[n.length - 1].sorted = !0
                    }
                }
                ,
                e.prototype.sortPathConstraint = function(e) {
                    if (e.active = e.target.bone.isActive() && (!e.data.skinRequired || null != this.skin && t.Utils.contains(this.skin.constraints, e.data, !0)),
                    e.active) {
                        var i = e.target
                          , n = i.data.index
                          , r = i.bone;
                        null != this.skin && this.sortPathConstraintAttachment(this.skin, n, r),
                        null != this.data.defaultSkin && this.data.defaultSkin != this.skin && this.sortPathConstraintAttachment(this.data.defaultSkin, n, r);
                        for (var s = 0, a = this.data.skins.length; s < a; s++)
                            this.sortPathConstraintAttachment(this.data.skins[s], n, r);
                        var o = i.getAttachment();
                        o instanceof t.PathAttachment && this.sortPathConstraintAttachmentWith(o, r);
                        var l = e.bones
                          , h = l.length;
                        for (s = 0; s < h; s++)
                            this.sortBone(l[s]);
                        for (this._updateCache.push(e),
                        s = 0; s < h; s++)
                            this.sortReset(l[s].children);
                        for (s = 0; s < h; s++)
                            l[s].sorted = !0
                    }
                }
                ,
                e.prototype.sortTransformConstraint = function(e) {
                    if (e.active = e.target.isActive() && (!e.data.skinRequired || null != this.skin && t.Utils.contains(this.skin.constraints, e.data, !0)),
                    e.active) {
                        this.sortBone(e.target);
                        var i = e.bones
                          , n = i.length;
                        if (e.data.local)
                            for (var r = 0; r < n; r++) {
                                var s = i[r];
                                this.sortBone(s.parent),
                                this._updateCache.indexOf(s) > -1 || this.updateCacheReset.push(s)
                            }
                        else
                            for (r = 0; r < n; r++)
                                this.sortBone(i[r]);
                        this._updateCache.push(e);
                        for (var a = 0; a < n; a++)
                            this.sortReset(i[a].children);
                        for (a = 0; a < n; a++)
                            i[a].sorted = !0
                    }
                }
                ,
                e.prototype.sortPathConstraintAttachment = function(t, e, i) {
                    var n = t.attachments[e];
                    if (n)
                        for (var r in n)
                            this.sortPathConstraintAttachmentWith(n[r], i)
                }
                ,
                e.prototype.sortPathConstraintAttachmentWith = function(e, i) {
                    if (e instanceof t.PathAttachment) {
                        var n = e.bones;
                        if (null == n)
                            this.sortBone(i);
                        else
                            for (var r = this.bones, s = 0; s < n.length; )
                                for (var a = n[s++], o = s + a; s < o; s++) {
                                    var l = n[s];
                                    this.sortBone(r[l])
                                }
                    }
                }
                ,
                e.prototype.sortBone = function(t) {
                    if (!t.sorted) {
                        var e = t.parent;
                        null != e && this.sortBone(e),
                        t.sorted = !0,
                        this._updateCache.push(t)
                    }
                }
                ,
                e.prototype.sortReset = function(t) {
                    for (var e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n.active && (n.sorted && this.sortReset(n.children),
                        n.sorted = !1)
                    }
                }
                ,
                e.prototype.updateWorldTransform = function() {
                    for (var t = this.updateCacheReset, e = 0, i = t.length; e < i; e++) {
                        var n = t[e];
                        n.ax = n.x,
                        n.ay = n.y,
                        n.arotation = n.rotation,
                        n.ascaleX = n.scaleX,
                        n.ascaleY = n.scaleY,
                        n.ashearX = n.shearX,
                        n.ashearY = n.shearY,
                        n.appliedValid = !0
                    }
                    var r = this._updateCache;
                    for (e = 0,
                    i = r.length; e < i; e++)
                        r[e].update()
                }
                ,
                e.prototype.setToSetupPose = function() {
                    this.setBonesToSetupPose(),
                    this.setSlotsToSetupPose()
                }
                ,
                e.prototype.setBonesToSetupPose = function() {
                    for (var t = this.bones, e = 0, i = t.length; e < i; e++)
                        t[e].setToSetupPose();
                    var n = this.ikConstraints;
                    for (e = 0,
                    i = n.length; e < i; e++)
                        (o = n[e]).mix = o.data.mix,
                        o.softness = o.data.softness,
                        o.bendDirection = o.data.bendDirection,
                        o.compress = o.data.compress,
                        o.stretch = o.data.stretch;
                    var r = this.transformConstraints;
                    for (e = 0,
                    i = r.length; e < i; e++) {
                        var s = (o = r[e]).data;
                        o.rotateMix = s.rotateMix,
                        o.translateMix = s.translateMix,
                        o.scaleMix = s.scaleMix,
                        o.shearMix = s.shearMix
                    }
                    var a = this.pathConstraints;
                    for (e = 0,
                    i = a.length; e < i; e++) {
                        var o;
                        s = (o = a[e]).data,
                        o.position = s.position,
                        o.spacing = s.spacing,
                        o.rotateMix = s.rotateMix,
                        o.translateMix = s.translateMix
                    }
                }
                ,
                e.prototype.setSlotsToSetupPose = function() {
                    var e = this.slots;
                    t.Utils.arrayCopy(e, 0, this.drawOrder, 0, e.length);
                    for (var i = 0, n = e.length; i < n; i++)
                        e[i].setToSetupPose()
                }
                ,
                e.prototype.getRootBone = function() {
                    return 0 == this.bones.length ? null : this.bones[0]
                }
                ,
                e.prototype.findBone = function(t) {
                    if (null == t)
                        throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t)
                            return r
                    }
                    return null
                }
                ,
                e.prototype.findBoneIndex = function(t) {
                    if (null == t)
                        throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++)
                        if (e[i].data.name == t)
                            return i;
                    return -1
                }
                ,
                e.prototype.findSlot = function(t) {
                    if (null == t)
                        throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t)
                            return r
                    }
                    return null
                }
                ,
                e.prototype.findSlotIndex = function(t) {
                    if (null == t)
                        throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++)
                        if (e[i].data.name == t)
                            return i;
                    return -1
                }
                ,
                e.prototype.setSkinByName = function(t) {
                    var e = this.data.findSkin(t);
                    if (null == e)
                        throw new Error("Skin not found: " + t);
                    this.setSkin(e)
                }
                ,
                e.prototype.setSkin = function(t) {
                    if (t != this.skin) {
                        if (null != t)
                            if (null != this.skin)
                                t.attachAll(this, this.skin);
                            else
                                for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                                    var r = e[i]
                                      , s = r.data.attachmentName;
                                    if (null != s) {
                                        var a = t.getAttachment(i, s);
                                        null != a && r.setAttachment(a)
                                    }
                                }
                        this.skin = t,
                        this.updateCache()
                    }
                }
                ,
                e.prototype.getAttachmentByName = function(t, e) {
                    return this.getAttachment(this.data.findSlotIndex(t), e)
                }
                ,
                e.prototype.getAttachment = function(t, e) {
                    if (null == e)
                        throw new Error("attachmentName cannot be null.");
                    if (null != this.skin) {
                        var i = this.skin.getAttachment(t, e);
                        if (null != i)
                            return i
                    }
                    return null != this.data.defaultSkin ? this.data.defaultSkin.getAttachment(t, e) : null
                }
                ,
                e.prototype.setAttachment = function(t, e) {
                    if (null == t)
                        throw new Error("slotName cannot be null.");
                    for (var i = this.slots, n = 0, r = i.length; n < r; n++) {
                        var s = i[n];
                        if (s.data.name == t) {
                            var a = null;
                            if (null != e && null == (a = this.getAttachment(n, e)))
                                throw new Error("Attachment not found: " + e + ", for slot: " + t);
                            return void s.setAttachment(a)
                        }
                    }
                    throw new Error("Slot not found: " + t)
                }
                ,
                e.prototype.findIkConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.ikConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t)
                            return r
                    }
                    return null
                }
                ,
                e.prototype.findTransformConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.transformConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t)
                            return r
                    }
                    return null
                }
                ,
                e.prototype.findPathConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.data.name == t)
                            return r
                    }
                    return null
                }
                ,
                e.prototype.getBounds = function(e, i, n) {
                    if (void 0 === n && (n = new Array(2)),
                    null == e)
                        throw new Error("offset cannot be null.");
                    if (null == i)
                        throw new Error("size cannot be null.");
                    for (var r = this.drawOrder, s = Number.POSITIVE_INFINITY, a = Number.POSITIVE_INFINITY, o = Number.NEGATIVE_INFINITY, l = Number.NEGATIVE_INFINITY, h = 0, c = r.length; h < c; h++) {
                        var u = r[h];
                        if (u.bone.active) {
                            var _ = 0
                              , f = null
                              , d = u.getAttachment();
                            if (d instanceof t.RegionAttachment)
                                _ = 8,
                                f = t.Utils.setArraySize(n, _, 0),
                                d.computeWorldVertices(u.bone, f, 0, 2);
                            else if (d instanceof t.MeshAttachment) {
                                var p = d;
                                _ = p.worldVerticesLength,
                                f = t.Utils.setArraySize(n, _, 0),
                                p.computeWorldVertices(u, 0, _, f, 0, 2)
                            }
                            if (null != f)
                                for (var m = 0, y = f.length; m < y; m += 2) {
                                    var v = f[m]
                                      , g = f[m + 1];
                                    s = Math.min(s, v),
                                    a = Math.min(a, g),
                                    o = Math.max(o, v),
                                    l = Math.max(l, g)
                                }
                        }
                    }
                    e.set(s, a),
                    i.set(o - s, l - a)
                }
                ,
                e.prototype.update = function(t) {
                    this.time += t
                }
                ,
                e
            }
            )();
            t.Skeleton = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t) {
                    this.scale = 1,
                    this.linkedMeshes = new Array,
                    this.attachmentLoader = t
                }
                return e.prototype.readSkeletonData = function(n) {
                    var r = this.scale
                      , s = new t.SkeletonData;
                    s.name = "";
                    var a = new i(n);
                    s.hash = a.readString(),
                    s.version = a.readString(),
                    s.x = a.readFloat(),
                    s.y = a.readFloat(),
                    s.width = a.readFloat(),
                    s.height = a.readFloat();
                    var o = a.readBoolean();
                    o && (s.fps = a.readFloat(),
                    s.imagesPath = a.readString(),
                    s.audioPath = a.readString());
                    var l = 0;
                    l = a.readInt(!0);
                    for (var h = 0; h < l; h++)
                        a.strings.push(a.readString());
                    for (l = a.readInt(!0),
                    h = 0; h < l; h++) {
                        var c = a.readString()
                          , u = 0 == h ? null : s.bones[a.readInt(!0)];
                        (d = new t.BoneData(h,c,u)).rotation = a.readFloat(),
                        d.x = a.readFloat() * r,
                        d.y = a.readFloat() * r,
                        d.scaleX = a.readFloat(),
                        d.scaleY = a.readFloat(),
                        d.shearX = a.readFloat(),
                        d.shearY = a.readFloat(),
                        d.length = a.readFloat() * r,
                        d.transformMode = e.TransformModeValues[a.readInt(!0)],
                        d.skinRequired = a.readBoolean(),
                        o && t.Color.rgba8888ToColor(d.color, a.readInt32()),
                        s.bones.push(d)
                    }
                    for (l = a.readInt(!0),
                    h = 0; h < l; h++) {
                        var _ = a.readString()
                          , f = s.bones[a.readInt(!0)]
                          , d = new t.SlotData(h,_,f);
                        t.Color.rgba8888ToColor(d.color, a.readInt32());
                        var p = a.readInt32();
                        -1 != p && t.Color.rgb888ToColor(d.darkColor = new t.Color, p),
                        d.attachmentName = a.readStringRef(),
                        d.blendMode = e.BlendModeValues[a.readInt(!0)],
                        s.slots.push(d)
                    }
                    l = a.readInt(!0),
                    h = 0;
                    for (var m = void 0; h < l; h++) {
                        (d = new t.IkConstraintData(a.readString())).order = a.readInt(!0),
                        d.skinRequired = a.readBoolean(),
                        m = a.readInt(!0);
                        for (var y = 0; y < m; y++)
                            d.bones.push(s.bones[a.readInt(!0)]);
                        d.target = s.bones[a.readInt(!0)],
                        d.mix = a.readFloat(),
                        d.softness = a.readFloat() * r,
                        d.bendDirection = a.readByte(),
                        d.compress = a.readBoolean(),
                        d.stretch = a.readBoolean(),
                        d.uniform = a.readBoolean(),
                        s.ikConstraints.push(d)
                    }
                    for (l = a.readInt(!0),
                    h = 0,
                    m = void 0; h < l; h++) {
                        for ((d = new t.TransformConstraintData(a.readString())).order = a.readInt(!0),
                        d.skinRequired = a.readBoolean(),
                        m = a.readInt(!0),
                        y = 0; y < m; y++)
                            d.bones.push(s.bones[a.readInt(!0)]);
                        d.target = s.bones[a.readInt(!0)],
                        d.local = a.readBoolean(),
                        d.relative = a.readBoolean(),
                        d.offsetRotation = a.readFloat(),
                        d.offsetX = a.readFloat() * r,
                        d.offsetY = a.readFloat() * r,
                        d.offsetScaleX = a.readFloat(),
                        d.offsetScaleY = a.readFloat(),
                        d.offsetShearY = a.readFloat(),
                        d.rotateMix = a.readFloat(),
                        d.translateMix = a.readFloat(),
                        d.scaleMix = a.readFloat(),
                        d.shearMix = a.readFloat(),
                        s.transformConstraints.push(d)
                    }
                    for (l = a.readInt(!0),
                    h = 0,
                    m = void 0; h < l; h++) {
                        for ((d = new t.PathConstraintData(a.readString())).order = a.readInt(!0),
                        d.skinRequired = a.readBoolean(),
                        m = a.readInt(!0),
                        y = 0; y < m; y++)
                            d.bones.push(s.bones[a.readInt(!0)]);
                        d.target = s.slots[a.readInt(!0)],
                        d.positionMode = e.PositionModeValues[a.readInt(!0)],
                        d.spacingMode = e.SpacingModeValues[a.readInt(!0)],
                        d.rotateMode = e.RotateModeValues[a.readInt(!0)],
                        d.offsetRotation = a.readFloat(),
                        d.position = a.readFloat(),
                        d.positionMode == t.PositionMode.Fixed && (d.position *= r),
                        d.spacing = a.readFloat(),
                        d.spacingMode != t.SpacingMode.Length && d.spacingMode != t.SpacingMode.Fixed || (d.spacing *= r),
                        d.rotateMix = a.readFloat(),
                        d.translateMix = a.readFloat(),
                        s.pathConstraints.push(d)
                    }
                    var v = this.readSkin(a, s, !0, o);
                    for (null != v && (s.defaultSkin = v,
                    s.skins.push(v)),
                    h = s.skins.length,
                    t.Utils.setArraySize(s.skins, l = h + a.readInt(!0)); h < l; h++)
                        s.skins[h] = this.readSkin(a, s, !1, o);
                    for (l = this.linkedMeshes.length,
                    h = 0; h < l; h++) {
                        var g = this.linkedMeshes[h]
                          , A = null == g.skin ? s.defaultSkin : s.findSkin(g.skin);
                        if (null == A)
                            throw new Error("Skin not found: " + g.skin);
                        var x = A.getAttachment(g.slotIndex, g.parent);
                        if (null == x)
                            throw new Error("Parent mesh not found: " + g.parent);
                        g.mesh.deformAttachment = g.inheritDeform ? x : g.mesh,
                        g.mesh.setParentMesh(x),
                        g.mesh.updateUVs()
                    }
                    for (this.linkedMeshes.length = 0,
                    l = a.readInt(!0),
                    h = 0; h < l; h++)
                        (d = new t.EventData(a.readStringRef())).intValue = a.readInt(!1),
                        d.floatValue = a.readFloat(),
                        d.stringValue = a.readString(),
                        d.audioPath = a.readString(),
                        null != d.audioPath && (d.volume = a.readFloat(),
                        d.balance = a.readFloat()),
                        s.events.push(d);
                    for (l = a.readInt(!0),
                    h = 0; h < l; h++)
                        s.animations.push(this.readAnimation(a, a.readString(), s));
                    return s
                }
                ,
                e.prototype.readSkin = function(e, i, n, r) {
                    var s = null
                      , a = 0;
                    if (n) {
                        if (0 == (a = e.readInt(!0)))
                            return null;
                        s = new t.Skin("default")
                    } else {
                        (s = new t.Skin(e.readStringRef())).bones.length = e.readInt(!0);
                        for (var o = 0, l = s.bones.length; o < l; o++)
                            s.bones[o] = i.bones[e.readInt(!0)];
                        for (o = 0,
                        l = e.readInt(!0); o < l; o++)
                            s.constraints.push(i.ikConstraints[e.readInt(!0)]);
                        for (o = 0,
                        l = e.readInt(!0); o < l; o++)
                            s.constraints.push(i.transformConstraints[e.readInt(!0)]);
                        for (o = 0,
                        l = e.readInt(!0); o < l; o++)
                            s.constraints.push(i.pathConstraints[e.readInt(!0)]);
                        a = e.readInt(!0)
                    }
                    for (o = 0; o < a; o++)
                        for (var h = e.readInt(!0), c = 0, u = e.readInt(!0); c < u; c++) {
                            var _ = e.readStringRef()
                              , f = this.readAttachment(e, i, s, h, _, r);
                            null != f && s.setAttachment(h, _, f)
                        }
                    return s
                }
                ,
                e.prototype.readAttachment = function(i, r, s, a, o, l) {
                    var h = this.scale
                      , c = i.readStringRef();
                    null == c && (c = o);
                    var u = i.readByte();
                    switch (e.AttachmentTypeValues[u]) {
                    case t.AttachmentType.Region:
                        var _ = i.readStringRef()
                          , f = i.readFloat()
                          , d = i.readFloat()
                          , p = i.readFloat()
                          , m = i.readFloat()
                          , y = i.readFloat()
                          , v = i.readFloat()
                          , g = i.readFloat()
                          , A = i.readInt32();
                        null == _ && (_ = c);
                        var x = this.attachmentLoader.newRegionAttachment(s, c, _);
                        return null == x ? null : (x.path = _,
                        x.x = d * h,
                        x.y = p * h,
                        x.scaleX = m,
                        x.scaleY = y,
                        x.rotation = f,
                        x.width = v * h,
                        x.height = g * h,
                        t.Color.rgba8888ToColor(x.color, A),
                        x.updateOffset(),
                        x);
                    case t.AttachmentType.BoundingBox:
                        var b = i.readInt(!0)
                          , C = this.readVertices(i, b)
                          , T = (A = l ? i.readInt32() : 0,
                        this.attachmentLoader.newBoundingBoxAttachment(s, c));
                        return null == T ? null : (T.worldVerticesLength = b << 1,
                        T.vertices = C.vertices,
                        T.bones = C.bones,
                        l && t.Color.rgba8888ToColor(T.color, A),
                        T);
                    case t.AttachmentType.Mesh:
                        _ = i.readStringRef(),
                        A = i.readInt32(),
                        b = i.readInt(!0);
                        var S = this.readFloatArray(i, b << 1, 1)
                          , w = this.readShortArray(i)
                          , E = (C = this.readVertices(i, b),
                        i.readInt(!0))
                          , M = null;
                        return v = 0,
                        g = 0,
                        l && (M = this.readShortArray(i),
                        v = i.readFloat(),
                        g = i.readFloat()),
                        null == _ && (_ = c),
                        null == (D = this.attachmentLoader.newMeshAttachment(s, c, _)) ? null : (D.path = _,
                        t.Color.rgba8888ToColor(D.color, A),
                        D.bones = C.bones,
                        D.vertices = C.vertices,
                        D.worldVerticesLength = b << 1,
                        D.triangles = w,
                        D.regionUVs = S,
                        D.updateUVs(),
                        D.hullLength = E << 1,
                        l && (D.edges = M,
                        D.width = v * h,
                        D.height = g * h),
                        D);
                    case t.AttachmentType.LinkedMesh:
                        _ = i.readStringRef(),
                        A = i.readInt32();
                        var D, B = i.readStringRef(), I = i.readStringRef(), P = i.readBoolean();
                        return v = 0,
                        g = 0,
                        l && (v = i.readFloat(),
                        g = i.readFloat()),
                        null == _ && (_ = c),
                        null == (D = this.attachmentLoader.newMeshAttachment(s, c, _)) ? null : (D.path = _,
                        t.Color.rgba8888ToColor(D.color, A),
                        l && (D.width = v * h,
                        D.height = g * h),
                        this.linkedMeshes.push(new n(D,B,a,I,P)),
                        D);
                    case t.AttachmentType.Path:
                        for (var R = i.readBoolean(), O = i.readBoolean(), L = (b = i.readInt(!0),
                        C = this.readVertices(i, b),
                        t.Utils.newArray(b / 3, 0)), F = 0, V = L.length; F < V; F++)
                            L[F] = i.readFloat() * h;
                        return A = l ? i.readInt32() : 0,
                        null == (_ = this.attachmentLoader.newPathAttachment(s, c)) ? null : (_.closed = R,
                        _.constantSpeed = O,
                        _.worldVerticesLength = b << 1,
                        _.vertices = C.vertices,
                        _.bones = C.bones,
                        _.lengths = L,
                        l && t.Color.rgba8888ToColor(_.color, A),
                        _);
                    case t.AttachmentType.Point:
                        f = i.readFloat(),
                        d = i.readFloat(),
                        p = i.readFloat(),
                        A = l ? i.readInt32() : 0;
                        var N = this.attachmentLoader.newPointAttachment(s, c);
                        return null == N ? null : (N.x = d * h,
                        N.y = p * h,
                        N.rotation = f,
                        l && t.Color.rgba8888ToColor(N.color, A),
                        N);
                    case t.AttachmentType.Clipping:
                        var k = i.readInt(!0)
                          , G = (b = i.readInt(!0),
                        C = this.readVertices(i, b),
                        A = l ? i.readInt32() : 0,
                        this.attachmentLoader.newClippingAttachment(s, c));
                        return null == G ? null : (G.endSlot = r.slots[k],
                        G.worldVerticesLength = b << 1,
                        G.vertices = C.vertices,
                        G.bones = C.bones,
                        l && t.Color.rgba8888ToColor(G.color, A),
                        G)
                    }
                    return null
                }
                ,
                e.prototype.readVertices = function(e, i) {
                    var n = i << 1
                      , s = new r
                      , a = this.scale;
                    if (!e.readBoolean())
                        return s.vertices = this.readFloatArray(e, n, a),
                        s;
                    for (var o = new Array, l = new Array, h = 0; h < i; h++) {
                        var c = e.readInt(!0);
                        l.push(c);
                        for (var u = 0; u < c; u++)
                            l.push(e.readInt(!0)),
                            o.push(e.readFloat() * a),
                            o.push(e.readFloat() * a),
                            o.push(e.readFloat())
                    }
                    return s.vertices = t.Utils.toFloatArray(o),
                    s.bones = l,
                    s
                }
                ,
                e.prototype.readFloatArray = function(t, e, i) {
                    var n = new Array(e);
                    if (1 == i)
                        for (var r = 0; r < e; r++)
                            n[r] = t.readFloat();
                    else
                        for (r = 0; r < e; r++)
                            n[r] = t.readFloat() * i;
                    return n
                }
                ,
                e.prototype.readShortArray = function(t) {
                    for (var e = t.readInt(!0), i = new Array(e), n = 0; n < e; n++)
                        i[n] = t.readShort();
                    return i
                }
                ,
                e.prototype.readAnimation = function(i, n, r) {
                    for (var s = new Array, a = this.scale, o = 0, l = new t.Color, h = new t.Color, c = 0, u = i.readInt(!0); c < u; c++)
                        for (var _ = i.readInt(!0), f = 0, d = i.readInt(!0); f < d; f++) {
                            var p = i.readByte()
                              , m = i.readInt(!0);
                            switch (p) {
                            case e.SLOT_ATTACHMENT:
                                (A = new t.AttachmentTimeline(m)).slotIndex = _;
                                for (var y = 0; y < m; y++)
                                    A.setFrame(y, i.readFloat(), i.readStringRef());
                                s.push(A),
                                o = Math.max(o, A.frames[m - 1]);
                                break;
                            case e.SLOT_COLOR:
                                for ((A = new t.ColorTimeline(m)).slotIndex = _,
                                y = 0; y < m; y++) {
                                    var v = i.readFloat();
                                    t.Color.rgba8888ToColor(l, i.readInt32()),
                                    A.setFrame(y, v, l.r, l.g, l.b, l.a),
                                    y < m - 1 && this.readCurve(i, y, A)
                                }
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.ColorTimeline.ENTRIES]);
                                break;
                            case e.SLOT_TWO_COLOR:
                                for ((A = new t.TwoColorTimeline(m)).slotIndex = _,
                                y = 0; y < m; y++)
                                    v = i.readFloat(),
                                    t.Color.rgba8888ToColor(l, i.readInt32()),
                                    t.Color.rgb888ToColor(h, i.readInt32()),
                                    A.setFrame(y, v, l.r, l.g, l.b, l.a, h.r, h.g, h.b),
                                    y < m - 1 && this.readCurve(i, y, A);
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.TwoColorTimeline.ENTRIES])
                            }
                        }
                    for (c = 0,
                    u = i.readInt(!0); c < u; c++) {
                        var g = i.readInt(!0);
                        for (f = 0,
                        d = i.readInt(!0); f < d; f++)
                            switch (p = i.readByte(),
                            m = i.readInt(!0),
                            p) {
                            case e.BONE_ROTATE:
                                for ((A = new t.RotateTimeline(m)).boneIndex = g,
                                y = 0; y < m; y++)
                                    A.setFrame(y, i.readFloat(), i.readFloat()),
                                    y < m - 1 && this.readCurve(i, y, A);
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.RotateTimeline.ENTRIES]);
                                break;
                            case e.BONE_TRANSLATE:
                            case e.BONE_SCALE:
                            case e.BONE_SHEAR:
                                var A = void 0
                                  , x = 1;
                                for (p == e.BONE_SCALE ? A = new t.ScaleTimeline(m) : p == e.BONE_SHEAR ? A = new t.ShearTimeline(m) : (A = new t.TranslateTimeline(m),
                                x = a),
                                A.boneIndex = g,
                                y = 0; y < m; y++)
                                    A.setFrame(y, i.readFloat(), i.readFloat() * x, i.readFloat() * x),
                                    y < m - 1 && this.readCurve(i, y, A);
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.TranslateTimeline.ENTRIES])
                            }
                    }
                    for (c = 0,
                    u = i.readInt(!0); c < u; c++) {
                        var b = i.readInt(!0);
                        for (m = i.readInt(!0),
                        (A = new t.IkConstraintTimeline(m)).ikConstraintIndex = b,
                        y = 0; y < m; y++)
                            A.setFrame(y, i.readFloat(), i.readFloat(), i.readFloat() * a, i.readByte(), i.readBoolean(), i.readBoolean()),
                            y < m - 1 && this.readCurve(i, y, A);
                        s.push(A),
                        o = Math.max(o, A.frames[(m - 1) * t.IkConstraintTimeline.ENTRIES])
                    }
                    for (c = 0,
                    u = i.readInt(!0); c < u; c++) {
                        for (b = i.readInt(!0),
                        m = i.readInt(!0),
                        (A = new t.TransformConstraintTimeline(m)).transformConstraintIndex = b,
                        y = 0; y < m; y++)
                            A.setFrame(y, i.readFloat(), i.readFloat(), i.readFloat(), i.readFloat(), i.readFloat()),
                            y < m - 1 && this.readCurve(i, y, A);
                        s.push(A),
                        o = Math.max(o, A.frames[(m - 1) * t.TransformConstraintTimeline.ENTRIES])
                    }
                    for (c = 0,
                    u = i.readInt(!0); c < u; c++) {
                        b = i.readInt(!0);
                        var C = r.pathConstraints[b];
                        for (f = 0,
                        d = i.readInt(!0); f < d; f++)
                            switch (p = i.readByte(),
                            m = i.readInt(!0),
                            p) {
                            case e.PATH_POSITION:
                            case e.PATH_SPACING:
                                for (A = void 0,
                                x = 1,
                                p == e.PATH_SPACING ? (A = new t.PathConstraintSpacingTimeline(m),
                                C.spacingMode != t.SpacingMode.Length && C.spacingMode != t.SpacingMode.Fixed || (x = a)) : (A = new t.PathConstraintPositionTimeline(m),
                                C.positionMode == t.PositionMode.Fixed && (x = a)),
                                A.pathConstraintIndex = b,
                                y = 0; y < m; y++)
                                    A.setFrame(y, i.readFloat(), i.readFloat() * x),
                                    y < m - 1 && this.readCurve(i, y, A);
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.PathConstraintPositionTimeline.ENTRIES]);
                                break;
                            case e.PATH_MIX:
                                for ((A = new t.PathConstraintMixTimeline(m)).pathConstraintIndex = b,
                                y = 0; y < m; y++)
                                    A.setFrame(y, i.readFloat(), i.readFloat(), i.readFloat()),
                                    y < m - 1 && this.readCurve(i, y, A);
                                s.push(A),
                                o = Math.max(o, A.frames[(m - 1) * t.PathConstraintMixTimeline.ENTRIES])
                            }
                    }
                    for (c = 0,
                    u = i.readInt(!0); c < u; c++) {
                        var T = r.skins[i.readInt(!0)];
                        for (f = 0,
                        d = i.readInt(!0); f < d; f++) {
                            _ = i.readInt(!0);
                            for (var S = 0, w = i.readInt(!0); S < w; S++) {
                                var E = T.getAttachment(_, i.readStringRef())
                                  , M = null != E.bones
                                  , D = E.vertices
                                  , B = M ? D.length / 3 * 2 : D.length;
                                for (m = i.readInt(!0),
                                (A = new t.DeformTimeline(m)).slotIndex = _,
                                A.attachment = E,
                                y = 0; y < m; y++) {
                                    v = i.readFloat();
                                    var I = void 0
                                      , P = i.readInt(!0);
                                    if (0 == P)
                                        I = M ? t.Utils.newFloatArray(B) : D;
                                    else {
                                        I = t.Utils.newFloatArray(B);
                                        var R = i.readInt(!0);
                                        if (P += R,
                                        1 == a)
                                            for (var O = R; O < P; O++)
                                                I[O] = i.readFloat();
                                        else
                                            for (O = R; O < P; O++)
                                                I[O] = i.readFloat() * a;
                                        if (!M) {
                                            O = 0;
                                            for (var L = I.length; O < L; O++)
                                                I[O] += D[O]
                                        }
                                    }
                                    A.setFrame(y, v, I),
                                    y < m - 1 && this.readCurve(i, y, A)
                                }
                                s.push(A),
                                o = Math.max(o, A.frames[m - 1])
                            }
                        }
                    }
                    var F = i.readInt(!0);
                    if (F > 0) {
                        A = new t.DrawOrderTimeline(F);
                        var V = r.slots.length;
                        for (c = 0; c < F; c++) {
                            v = i.readFloat();
                            var N = i.readInt(!0)
                              , k = t.Utils.newArray(V, 0);
                            for (f = V - 1; f >= 0; f--)
                                k[f] = -1;
                            var G = t.Utils.newArray(V - N, 0)
                              , U = 0
                              , z = 0;
                            for (f = 0; f < N; f++) {
                                for (_ = i.readInt(!0); U != _; )
                                    G[z++] = U++;
                                k[U + i.readInt(!0)] = U++
                            }
                            for (; U < V; )
                                G[z++] = U++;
                            for (f = V - 1; f >= 0; f--)
                                -1 == k[f] && (k[f] = G[--z]);
                            A.setFrame(c, v, k)
                        }
                        s.push(A),
                        o = Math.max(o, A.frames[F - 1])
                    }
                    var H = i.readInt(!0);
                    if (H > 0) {
                        for (A = new t.EventTimeline(H),
                        c = 0; c < H; c++) {
                            v = i.readFloat();
                            var W = r.events[i.readInt(!0)]
                              , j = new t.Event(v,W);
                            j.intValue = i.readInt(!1),
                            j.floatValue = i.readFloat(),
                            j.stringValue = i.readBoolean() ? i.readString() : W.stringValue,
                            null != j.data.audioPath && (j.volume = i.readFloat(),
                            j.balance = i.readFloat()),
                            A.setFrame(c, j)
                        }
                        s.push(A),
                        o = Math.max(o, A.frames[H - 1])
                    }
                    return new t.Animation(n,s,o)
                }
                ,
                e.prototype.readCurve = function(t, i, n) {
                    switch (t.readByte()) {
                    case e.CURVE_STEPPED:
                        n.setStepped(i);
                        break;
                    case e.CURVE_BEZIER:
                        this.setCurve(n, i, t.readFloat(), t.readFloat(), t.readFloat(), t.readFloat())
                    }
                }
                ,
                e.prototype.setCurve = function(t, e, i, n, r, s) {
                    t.setCurve(e, i, n, r, s)
                }
                ,
                e.AttachmentTypeValues = [0, 1, 2, 3, 4, 5, 6],
                e.TransformModeValues = [t.TransformMode.Normal, t.TransformMode.OnlyTranslation, t.TransformMode.NoRotationOrReflection, t.TransformMode.NoScale, t.TransformMode.NoScaleOrReflection],
                e.PositionModeValues = [t.PositionMode.Fixed, t.PositionMode.Percent],
                e.SpacingModeValues = [t.SpacingMode.Length, t.SpacingMode.Fixed, t.SpacingMode.Percent],
                e.RotateModeValues = [t.RotateMode.Tangent, t.RotateMode.Chain, t.RotateMode.ChainScale],
                e.BlendModeValues = [t.BlendMode.Normal, t.BlendMode.Additive, t.BlendMode.Multiply, t.BlendMode.Screen],
                e.BONE_ROTATE = 0,
                e.BONE_TRANSLATE = 1,
                e.BONE_SCALE = 2,
                e.BONE_SHEAR = 3,
                e.SLOT_ATTACHMENT = 0,
                e.SLOT_COLOR = 1,
                e.SLOT_TWO_COLOR = 2,
                e.PATH_POSITION = 0,
                e.PATH_SPACING = 1,
                e.PATH_MIX = 2,
                e.CURVE_LINEAR = 0,
                e.CURVE_STEPPED = 1,
                e.CURVE_BEZIER = 2,
                e
            }
            )();
            t.SkeletonBinary = e;
            var i = (function() {
                function t(t, e, i, n) {
                    void 0 === e && (e = new Array),
                    void 0 === i && (i = 0),
                    void 0 === n && (n = new DataView(t.buffer)),
                    this.strings = e,
                    this.index = i,
                    this.buffer = n
                }
                return t.prototype.readByte = function() {
                    return this.buffer.getInt8(this.index++)
                }
                ,
                t.prototype.readShort = function() {
                    var t = this.buffer.getInt16(this.index);
                    return this.index += 2,
                    t
                }
                ,
                t.prototype.readInt32 = function() {
                    var t = this.buffer.getInt32(this.index);
                    return this.index += 4,
                    t
                }
                ,
                t.prototype.readInt = function(t) {
                    var e = this.readByte()
                      , i = 127 & e;
                    return 0 != (128 & e) && (i |= (127 & (e = this.readByte())) << 7,
                    0 != (128 & e) && (i |= (127 & (e = this.readByte())) << 14,
                    0 != (128 & e) && (i |= (127 & (e = this.readByte())) << 21,
                    0 != (128 & e) && (i |= (127 & (e = this.readByte())) << 28)))),
                    t ? i : i >>> 1 ^ -(1 & i)
                }
                ,
                t.prototype.readStringRef = function() {
                    var t = this.readInt(!0);
                    return 0 == t ? null : this.strings[t - 1]
                }
                ,
                t.prototype.readString = function() {
                    var t = this.readInt(!0);
                    switch (t) {
                    case 0:
                        return null;
                    case 1:
                        return ""
                    }
                    t--;
                    for (var e = "", i = 0; i < t; ) {
                        var n = this.readByte();
                        switch (n >> 4) {
                        case 12:
                        case 13:
                            e += String.fromCharCode((31 & n) << 6 | 63 & this.readByte()),
                            i += 2;
                            break;
                        case 14:
                            e += String.fromCharCode((15 & n) << 12 | (63 & this.readByte()) << 6 | 63 & this.readByte()),
                            i += 3;
                            break;
                        default:
                            e += String.fromCharCode(n),
                            i++
                        }
                    }
                    return e
                }
                ,
                t.prototype.readFloat = function() {
                    var t = this.buffer.getFloat32(this.index);
                    return this.index += 4,
                    t
                }
                ,
                t.prototype.readBoolean = function() {
                    return 0 != this.readByte()
                }
                ,
                t
            }
            )()
              , n = function(t, e, i, n, r) {
                this.mesh = t,
                this.skin = e,
                this.slotIndex = i,
                this.parent = n,
                this.inheritDeform = r
            }
              , r = function(t, e) {
                void 0 === t && (t = null),
                void 0 === e && (e = null),
                this.bones = t,
                this.vertices = e
            }
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e() {
                    this.minX = 0,
                    this.minY = 0,
                    this.maxX = 0,
                    this.maxY = 0,
                    this.boundingBoxes = new Array,
                    this.polygons = new Array,
                    this.polygonPool = new t.Pool(function() {
                        return t.Utils.newFloatArray(16)
                    }
                    )
                }
                return e.prototype.update = function(e, i) {
                    if (null == e)
                        throw new Error("skeleton cannot be null.");
                    var n = this.boundingBoxes
                      , r = this.polygons
                      , s = this.polygonPool
                      , a = e.slots
                      , o = a.length;
                    n.length = 0,
                    s.freeAll(r),
                    r.length = 0;
                    for (var l = 0; l < o; l++) {
                        var h = a[l];
                        if (h.bone.active) {
                            var c = h.getAttachment();
                            if (c instanceof t.BoundingBoxAttachment) {
                                var u = c;
                                n.push(u);
                                var _ = s.obtain();
                                _.length != u.worldVerticesLength && (_ = t.Utils.newFloatArray(u.worldVerticesLength)),
                                r.push(_),
                                u.computeWorldVertices(h, 0, u.worldVerticesLength, _, 0, 2)
                            }
                        }
                    }
                    i ? this.aabbCompute() : (this.minX = Number.POSITIVE_INFINITY,
                    this.minY = Number.POSITIVE_INFINITY,
                    this.maxX = Number.NEGATIVE_INFINITY,
                    this.maxY = Number.NEGATIVE_INFINITY)
                }
                ,
                e.prototype.aabbCompute = function() {
                    for (var t = Number.POSITIVE_INFINITY, e = Number.POSITIVE_INFINITY, i = Number.NEGATIVE_INFINITY, n = Number.NEGATIVE_INFINITY, r = this.polygons, s = 0, a = r.length; s < a; s++)
                        for (var o = r[s], l = o, h = 0, c = o.length; h < c; h += 2) {
                            var u = l[h]
                              , _ = l[h + 1];
                            t = Math.min(t, u),
                            e = Math.min(e, _),
                            i = Math.max(i, u),
                            n = Math.max(n, _)
                        }
                    this.minX = t,
                    this.minY = e,
                    this.maxX = i,
                    this.maxY = n
                }
                ,
                e.prototype.aabbContainsPoint = function(t, e) {
                    return t >= this.minX && t <= this.maxX && e >= this.minY && e <= this.maxY
                }
                ,
                e.prototype.aabbIntersectsSegment = function(t, e, i, n) {
                    var r = this.minX
                      , s = this.minY
                      , a = this.maxX
                      , o = this.maxY;
                    if (t <= r && i <= r || e <= s && n <= s || t >= a && i >= a || e >= o && n >= o)
                        return !1;
                    var l = (n - e) / (i - t)
                      , h = l * (r - t) + e;
                    if (h > s && h < o)
                        return !0;
                    if ((h = l * (a - t) + e) > s && h < o)
                        return !0;
                    var c = (s - e) / l + t;
                    return c > r && c < a || (c = (o - e) / l + t) > r && c < a
                }
                ,
                e.prototype.aabbIntersectsSkeleton = function(t) {
                    return this.minX < t.maxX && this.maxX > t.minX && this.minY < t.maxY && this.maxY > t.minY
                }
                ,
                e.prototype.containsPoint = function(t, e) {
                    for (var i = this.polygons, n = 0, r = i.length; n < r; n++)
                        if (this.containsPointPolygon(i[n], t, e))
                            return this.boundingBoxes[n];
                    return null
                }
                ,
                e.prototype.containsPointPolygon = function(t, e, i) {
                    for (var n = t, r = t.length, s = r - 2, a = !1, o = 0; o < r; o += 2) {
                        var l = n[o + 1]
                          , h = n[s + 1];
                        if (l < i && h >= i || h < i && l >= i) {
                            var c = n[o];
                            c + (i - l) / (h - l) * (n[s] - c) < e && (a = !a)
                        }
                        s = o
                    }
                    return a
                }
                ,
                e.prototype.intersectsSegment = function(t, e, i, n) {
                    for (var r = this.polygons, s = 0, a = r.length; s < a; s++)
                        if (this.intersectsSegmentPolygon(r[s], t, e, i, n))
                            return this.boundingBoxes[s];
                    return null
                }
                ,
                e.prototype.intersectsSegmentPolygon = function(t, e, i, n, r) {
                    for (var s = t, a = t.length, o = e - n, l = i - r, h = e * r - i * n, c = s[a - 2], u = s[a - 1], _ = 0; _ < a; _ += 2) {
                        var f = s[_]
                          , d = s[_ + 1]
                          , p = c * d - u * f
                          , m = c - f
                          , y = u - d
                          , v = o * y - l * m
                          , g = (h * m - o * p) / v;
                        if ((g >= c && g <= f || g >= f && g <= c) && (g >= e && g <= n || g >= n && g <= e)) {
                            var A = (h * y - l * p) / v;
                            if ((A >= u && A <= d || A >= d && A <= u) && (A >= i && A <= r || A >= r && A <= i))
                                return !0
                        }
                        c = f,
                        u = d
                    }
                    return !1
                }
                ,
                e.prototype.getPolygon = function(t) {
                    if (null == t)
                        throw new Error("boundingBox cannot be null.");
                    var e = this.boundingBoxes.indexOf(t);
                    return -1 == e ? null : this.polygons[e]
                }
                ,
                e.prototype.getWidth = function() {
                    return this.maxX - this.minX
                }
                ,
                e.prototype.getHeight = function() {
                    return this.maxY - this.minY
                }
                ,
                e
            }
            )();
            t.SkeletonBounds = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e() {
                    this.triangulator = new t.Triangulator,
                    this.clippingPolygon = new Array,
                    this.clipOutput = new Array,
                    this.clippedVertices = new Array,
                    this.clippedTriangles = new Array,
                    this.scratch = new Array
                }
                return e.prototype.clipStart = function(i, n) {
                    if (null != this.clipAttachment)
                        return 0;
                    this.clipAttachment = n;
                    var r = n.worldVerticesLength
                      , s = t.Utils.setArraySize(this.clippingPolygon, r);
                    n.computeWorldVertices(i, 0, r, s, 0, 2);
                    var a = this.clippingPolygon;
                    e.makeClockwise(a);
                    for (var o = this.clippingPolygons = this.triangulator.decompose(a, this.triangulator.triangulate(a)), l = 0, h = o.length; l < h; l++) {
                        var c = o[l];
                        e.makeClockwise(c),
                        c.push(c[0]),
                        c.push(c[1])
                    }
                    return o.length
                }
                ,
                e.prototype.clipEndWithSlot = function(t) {
                    null != this.clipAttachment && this.clipAttachment.endSlot == t.data && this.clipEnd()
                }
                ,
                e.prototype.clipEnd = function() {
                    null != this.clipAttachment && (this.clipAttachment = null,
                    this.clippingPolygons = null,
                    this.clippedVertices.length = 0,
                    this.clippedTriangles.length = 0,
                    this.clippingPolygon.length = 0)
                }
                ,
                e.prototype.isClipping = function() {
                    return null != this.clipAttachment
                }
                ,
                e.prototype.clipTriangles = function(e, i, n, r, s, a, o, l, h, c, u, _) {
                    var f = this.clipOutput
                      , d = this.clippedVertices
                      , p = this.clippedTriangles
                      , m = this.clippingPolygons
                      , y = this.clippingPolygons.length
                      , v = l ? 12 : 8
                      , g = 0;
                    c = c || 0,
                    u = u || 0,
                    _ = _ || 0,
                    d.length = 0,
                    p.length = 0;
                    t: for (var A = c, x = c + r; A < x; A += 3) {
                        var b = n[A] * h
                          , C = b + u
                          , T = b + _
                          , S = e[C]
                          , w = e[C + 1]
                          , E = s[T]
                          , M = s[T + 1];
                        T = (b = n[A + 1] * h) + _;
                        var D = e[C = b + u]
                          , B = e[C + 1]
                          , I = s[T]
                          , P = s[T + 1];
                        T = (b = n[A + 2] * h) + _;
                        for (var R = e[C = b + u], O = e[C + 1], L = s[T], F = s[T + 1], V = 0; V < y; V++) {
                            var N = d.length;
                            if (!this.clip(S, w, D, B, R, O, m[V], f)) {
                                (Y = t.Utils.setArraySize(d, N + 3 * v))[N] = S,
                                Y[N + 1] = w,
                                Y[N + 2] = a.r,
                                Y[N + 3] = a.g,
                                Y[N + 4] = a.b,
                                Y[N + 5] = a.a,
                                l ? (Y[N + 6] = E,
                                Y[N + 7] = M,
                                Y[N + 8] = o.r,
                                Y[N + 9] = o.g,
                                Y[N + 10] = o.b,
                                Y[N + 11] = o.a,
                                Y[N + 12] = D,
                                Y[N + 13] = B,
                                Y[N + 14] = a.r,
                                Y[N + 15] = a.g,
                                Y[N + 16] = a.b,
                                Y[N + 17] = a.a,
                                Y[N + 18] = I,
                                Y[N + 19] = P,
                                Y[N + 20] = o.r,
                                Y[N + 21] = o.g,
                                Y[N + 22] = o.b,
                                Y[N + 23] = o.a,
                                Y[N + 24] = R,
                                Y[N + 25] = O,
                                Y[N + 26] = a.r,
                                Y[N + 27] = a.g,
                                Y[N + 28] = a.b,
                                Y[N + 29] = a.a,
                                Y[N + 30] = L,
                                Y[N + 31] = F,
                                Y[N + 32] = o.r,
                                Y[N + 33] = o.g,
                                Y[N + 34] = o.b,
                                Y[N + 35] = o.a) : (Y[N + 6] = E,
                                Y[N + 7] = M,
                                Y[N + 8] = D,
                                Y[N + 9] = B,
                                Y[N + 10] = a.r,
                                Y[N + 11] = a.g,
                                Y[N + 12] = a.b,
                                Y[N + 13] = a.a,
                                Y[N + 14] = I,
                                Y[N + 15] = P,
                                Y[N + 16] = R,
                                Y[N + 17] = O,
                                Y[N + 18] = a.r,
                                Y[N + 19] = a.g,
                                Y[N + 20] = a.b,
                                Y[N + 21] = a.a,
                                Y[N + 22] = L,
                                Y[N + 23] = F),
                                N = p.length,
                                (it = t.Utils.setArraySize(p, N + 3))[N] = g,
                                it[N + 1] = g + 1,
                                it[N + 2] = g + 2,
                                g += 3;
                                continue t
                            }
                            var k = f.length;
                            if (0 != k) {
                                for (var G = B - O, U = R - D, z = S - R, H = O - w, W = 1 / (G * z + U * (w - O)), j = k >> 1, X = this.clipOutput, Y = t.Utils.setArraySize(d, N + j * v), q = 0; q < k; q += 2) {
                                    var J = X[q]
                                      , Z = X[q + 1];
                                    Y[N] = J,
                                    Y[N + 1] = Z,
                                    Y[N + 2] = a.r,
                                    Y[N + 3] = a.g,
                                    Y[N + 4] = a.b,
                                    Y[N + 5] = a.a;
                                    var K = J - R
                                      , Q = Z - O
                                      , $ = (G * K + U * Q) * W
                                      , tt = (H * K + z * Q) * W
                                      , et = 1 - $ - tt;
                                    Y[N + 6] = E * $ + I * tt + L * et,
                                    Y[N + 7] = M * $ + P * tt + F * et,
                                    l && (Y[N + 8] = o.r,
                                    Y[N + 9] = o.g,
                                    Y[N + 10] = o.b,
                                    Y[N + 11] = o.a),
                                    N += v
                                }
                                N = p.length;
                                var it = t.Utils.setArraySize(p, N + 3 * (j - 2));
                                for (j--,
                                q = 1; q < j; q++)
                                    it[N] = g,
                                    it[N + 1] = g + q,
                                    it[N + 2] = g + q + 1,
                                    N += 3;
                                g += j + 1
                            }
                        }
                    }
                }
                ,
                e.prototype.clip = function(t, e, i, n, r, s, a, o) {
                    var l = o
                      , h = !1
                      , c = null;
                    a.length % 4 >= 2 ? (c = o,
                    o = this.scratch) : c = this.scratch,
                    c.length = 0,
                    c.push(t),
                    c.push(e),
                    c.push(i),
                    c.push(n),
                    c.push(r),
                    c.push(s),
                    c.push(t),
                    c.push(e),
                    o.length = 0;
                    for (var u = a, _ = a.length - 4, f = 0; ; f += 2) {
                        for (var d = u[f], p = u[f + 1], m = u[f + 2], y = u[f + 3], v = d - m, g = p - y, A = c, x = c.length - 2, b = o.length, C = 0; C < x; C += 2) {
                            var T = A[C]
                              , S = A[C + 1]
                              , w = A[C + 2]
                              , E = A[C + 3]
                              , M = v * (E - y) - g * (w - m) > 0;
                            if (v * (S - y) - g * (T - m) > 0) {
                                if (M) {
                                    o.push(w),
                                    o.push(E);
                                    continue
                                }
                                var D = (I = E - S) * (m - d) - (P = w - T) * (y - p);
                                if (Math.abs(D) > 1e-6) {
                                    var B = (P * (p - S) - I * (d - T)) / D;
                                    o.push(d + (m - d) * B),
                                    o.push(p + (y - p) * B)
                                } else
                                    o.push(d),
                                    o.push(p)
                            } else if (M) {
                                var I, P;
                                D = (I = E - S) * (m - d) - (P = w - T) * (y - p),
                                Math.abs(D) > 1e-6 ? (B = (P * (p - S) - I * (d - T)) / D,
                                o.push(d + (m - d) * B),
                                o.push(p + (y - p) * B)) : (o.push(d),
                                o.push(p)),
                                o.push(w),
                                o.push(E)
                            }
                            h = !0
                        }
                        if (b == o.length)
                            return l.length = 0,
                            !0;
                        if (o.push(o[0]),
                        o.push(o[1]),
                        f == _)
                            break;
                        var R = o;
                        (o = c).length = 0,
                        c = R
                    }
                    if (l != o) {
                        l.length = 0,
                        f = 0;
                        for (var O = o.length - 2; f < O; f++)
                            l[f] = o[f]
                    } else
                        l.length = l.length - 2;
                    return h
                }
                ,
                e.makeClockwise = function(t) {
                    for (var e = t, i = t.length, n = e[i - 2] * e[1] - e[0] * e[i - 1], r = 0, s = 0, a = 0, o = 0, l = i - 3; o < l; o += 2)
                        r = e[o],
                        s = e[o + 1],
                        a = e[o + 2],
                        n += r * e[o + 3] - a * s;
                    if (!(n < 0)) {
                        o = 0;
                        var h = i - 2;
                        for (l = i >> 1; o < l; o += 2) {
                            var c = e[o]
                              , u = e[o + 1]
                              , _ = h - o;
                            e[o] = e[_],
                            e[o + 1] = e[_ + 1],
                            e[_] = c,
                            e[_ + 1] = u
                        }
                    }
                }
                ,
                e
            }
            )();
            t.SkeletonClipping = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t() {
                    this.bones = new Array,
                    this.slots = new Array,
                    this.skins = new Array,
                    this.events = new Array,
                    this.animations = new Array,
                    this.ikConstraints = new Array,
                    this.transformConstraints = new Array,
                    this.pathConstraints = new Array,
                    this.fps = 0
                }
                return t.prototype.findBone = function(t) {
                    if (null == t)
                        throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findBoneIndex = function(t) {
                    if (null == t)
                        throw new Error("boneName cannot be null.");
                    for (var e = this.bones, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t)
                            return i;
                    return -1
                }
                ,
                t.prototype.findSlot = function(t) {
                    if (null == t)
                        throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findSlotIndex = function(t) {
                    if (null == t)
                        throw new Error("slotName cannot be null.");
                    for (var e = this.slots, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t)
                            return i;
                    return -1
                }
                ,
                t.prototype.findSkin = function(t) {
                    if (null == t)
                        throw new Error("skinName cannot be null.");
                    for (var e = this.skins, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findEvent = function(t) {
                    if (null == t)
                        throw new Error("eventDataName cannot be null.");
                    for (var e = this.events, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findAnimation = function(t) {
                    if (null == t)
                        throw new Error("animationName cannot be null.");
                    for (var e = this.animations, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findIkConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.ikConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findTransformConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.transformConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findPathConstraint = function(t) {
                    if (null == t)
                        throw new Error("constraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++) {
                        var r = e[i];
                        if (r.name == t)
                            return r
                    }
                    return null
                }
                ,
                t.prototype.findPathConstraintIndex = function(t) {
                    if (null == t)
                        throw new Error("pathConstraintName cannot be null.");
                    for (var e = this.pathConstraints, i = 0, n = e.length; i < n; i++)
                        if (e[i].name == t)
                            return i;
                    return -1
                }
                ,
                t
            }
            )();
            t.SkeletonData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t) {
                    this.scale = 1,
                    this.linkedMeshes = new Array,
                    this.attachmentLoader = t
                }
                return e.prototype.readSkeletonData = function(i) {
                    var n = this.scale
                      , r = new t.SkeletonData
                      , s = "string" == typeof i ? JSON.parse(i) : i
                      , a = s.skeleton;
                    if (null != a && (r.hash = a.hash,
                    r.version = a.spine,
                    r.x = a.x,
                    r.y = a.y,
                    r.width = a.width,
                    r.height = a.height,
                    r.fps = a.fps,
                    r.imagesPath = a.images),
                    s.bones)
                        for (var o = 0; o < s.bones.length; o++) {
                            var l = s.bones[o]
                              , h = null
                              , c = this.getValue(l, "parent", null);
                            if (null != c && null == (h = r.findBone(c)))
                                throw new Error("Parent bone not found: " + c);
                            (d = new t.BoneData(r.bones.length,l.name,h)).length = this.getValue(l, "length", 0) * n,
                            d.x = this.getValue(l, "x", 0) * n,
                            d.y = this.getValue(l, "y", 0) * n,
                            d.rotation = this.getValue(l, "rotation", 0),
                            d.scaleX = this.getValue(l, "scaleX", 1),
                            d.scaleY = this.getValue(l, "scaleY", 1),
                            d.shearX = this.getValue(l, "shearX", 0),
                            d.shearY = this.getValue(l, "shearY", 0),
                            d.transformMode = e.transformModeFromString(this.getValue(l, "transform", "normal")),
                            d.skinRequired = this.getValue(l, "skin", !1),
                            r.bones.push(d)
                        }
                    if (s.slots)
                        for (o = 0; o < s.slots.length; o++) {
                            var u = (D = s.slots[o]).name
                              , _ = D.bone
                              , f = r.findBone(_);
                            if (null == f)
                                throw new Error("Slot bone not found: " + _);
                            var d = new t.SlotData(r.slots.length,u,f)
                              , p = this.getValue(D, "color", null);
                            null != p && d.color.setFromString(p);
                            var m = this.getValue(D, "dark", null);
                            null != m && (d.darkColor = new t.Color(1,1,1,1),
                            d.darkColor.setFromString(m)),
                            d.attachmentName = this.getValue(D, "attachment", null),
                            d.blendMode = e.blendModeFromString(this.getValue(D, "blend", "normal")),
                            r.slots.push(d)
                        }
                    if (s.ik)
                        for (o = 0; o < s.ik.length; o++) {
                            var y = s.ik[o];
                            (d = new t.IkConstraintData(y.name)).order = this.getValue(y, "order", 0),
                            d.skinRequired = this.getValue(y, "skin", !1);
                            for (var v = 0; v < y.bones.length; v++) {
                                if (_ = y.bones[v],
                                null == (w = r.findBone(_)))
                                    throw new Error("IK bone not found: " + _);
                                d.bones.push(w)
                            }
                            var g = y.target;
                            if (d.target = r.findBone(g),
                            null == d.target)
                                throw new Error("IK target bone not found: " + g);
                            d.mix = this.getValue(y, "mix", 1),
                            d.softness = this.getValue(y, "softness", 0) * n,
                            d.bendDirection = this.getValue(y, "bendPositive", !0) ? 1 : -1,
                            d.compress = this.getValue(y, "compress", !1),
                            d.stretch = this.getValue(y, "stretch", !1),
                            d.uniform = this.getValue(y, "uniform", !1),
                            r.ikConstraints.push(d)
                        }
                    if (s.transform)
                        for (o = 0; o < s.transform.length; o++) {
                            for (y = s.transform[o],
                            (d = new t.TransformConstraintData(y.name)).order = this.getValue(y, "order", 0),
                            d.skinRequired = this.getValue(y, "skin", !1),
                            v = 0; v < y.bones.length; v++) {
                                if (_ = y.bones[v],
                                null == (w = r.findBone(_)))
                                    throw new Error("Transform constraint bone not found: " + _);
                                d.bones.push(w)
                            }
                            if (g = y.target,
                            d.target = r.findBone(g),
                            null == d.target)
                                throw new Error("Transform constraint target bone not found: " + g);
                            d.local = this.getValue(y, "local", !1),
                            d.relative = this.getValue(y, "relative", !1),
                            d.offsetRotation = this.getValue(y, "rotation", 0),
                            d.offsetX = this.getValue(y, "x", 0) * n,
                            d.offsetY = this.getValue(y, "y", 0) * n,
                            d.offsetScaleX = this.getValue(y, "scaleX", 0),
                            d.offsetScaleY = this.getValue(y, "scaleY", 0),
                            d.offsetShearY = this.getValue(y, "shearY", 0),
                            d.rotateMix = this.getValue(y, "rotateMix", 1),
                            d.translateMix = this.getValue(y, "translateMix", 1),
                            d.scaleMix = this.getValue(y, "scaleMix", 1),
                            d.shearMix = this.getValue(y, "shearMix", 1),
                            r.transformConstraints.push(d)
                        }
                    if (s.path)
                        for (o = 0; o < s.path.length; o++) {
                            for (y = s.path[o],
                            (d = new t.PathConstraintData(y.name)).order = this.getValue(y, "order", 0),
                            d.skinRequired = this.getValue(y, "skin", !1),
                            v = 0; v < y.bones.length; v++) {
                                if (_ = y.bones[v],
                                null == (w = r.findBone(_)))
                                    throw new Error("Transform constraint bone not found: " + _);
                                d.bones.push(w)
                            }
                            if (g = y.target,
                            d.target = r.findSlot(g),
                            null == d.target)
                                throw new Error("Path target slot not found: " + g);
                            d.positionMode = e.positionModeFromString(this.getValue(y, "positionMode", "percent")),
                            d.spacingMode = e.spacingModeFromString(this.getValue(y, "spacingMode", "length")),
                            d.rotateMode = e.rotateModeFromString(this.getValue(y, "rotateMode", "tangent")),
                            d.offsetRotation = this.getValue(y, "rotation", 0),
                            d.position = this.getValue(y, "position", 0),
                            d.positionMode == t.PositionMode.Fixed && (d.position *= n),
                            d.spacing = this.getValue(y, "spacing", 0),
                            d.spacingMode != t.SpacingMode.Length && d.spacingMode != t.SpacingMode.Fixed || (d.spacing *= n),
                            d.rotateMix = this.getValue(y, "rotateMix", 1),
                            d.translateMix = this.getValue(y, "translateMix", 1),
                            r.pathConstraints.push(d)
                        }
                    if (s.skins) {
                        var A = s.skins;
                        if (!(A instanceof Array)) {
                            var x = [];
                            for (var b in A)
                                x.push({
                                    name: b,
                                    attachments: A[b]
                                });
                            A = x
                        }
                        for (o = 0; o < A.length; o++) {
                            var C = A[o]
                              , T = new t.Skin(C.name);
                            if (C.bones)
                                for (var S = 0; S < C.bones.length; S++) {
                                    var w;
                                    if (null == (w = r.findBone(C.bones[S])))
                                        throw new Error("Skin bone not found: " + C.bones[o]);
                                    T.bones.push(w)
                                }
                            if (C.ik)
                                for (S = 0; S < C.ik.length; S++) {
                                    if (null == (E = r.findIkConstraint(C.ik[S])))
                                        throw new Error("Skin IK constraint not found: " + C.ik[o]);
                                    T.constraints.push(E)
                                }
                            if (C.transform)
                                for (S = 0; S < C.transform.length; S++) {
                                    if (null == (E = r.findTransformConstraint(C.transform[S])))
                                        throw new Error("Skin transform constraint not found: " + C.transform[o]);
                                    T.constraints.push(E)
                                }
                            if (C.path)
                                for (S = 0; S < C.path.length; S++) {
                                    var E;
                                    if (null == (E = r.findPathConstraint(C.path[S])))
                                        throw new Error("Skin path constraint not found: " + C.path[o]);
                                    T.constraints.push(E)
                                }
                            for (var u in C.attachments) {
                                var M = r.findSlot(u);
                                if (null == M)
                                    throw new Error("Slot not found: " + u);
                                var D = C.attachments[u];
                                for (var B in D) {
                                    var I = this.readAttachment(D[B], T, M.index, B, r);
                                    null != I && T.setAttachment(M.index, B, I)
                                }
                            }
                            r.skins.push(T),
                            "default" == T.name && (r.defaultSkin = T)
                        }
                    }
                    o = 0;
                    for (var P = this.linkedMeshes.length; o < P; o++) {
                        var R = this.linkedMeshes[o];
                        if (null == (T = null == R.skin ? r.defaultSkin : r.findSkin(R.skin)))
                            throw new Error("Skin not found: " + R.skin);
                        var O = T.getAttachment(R.slotIndex, R.parent);
                        if (null == O)
                            throw new Error("Parent mesh not found: " + R.parent);
                        R.mesh.deformAttachment = R.inheritDeform ? O : R.mesh,
                        R.mesh.setParentMesh(O),
                        R.mesh.updateUVs()
                    }
                    if (this.linkedMeshes.length = 0,
                    s.events)
                        for (var L in s.events) {
                            var F = s.events[L];
                            (d = new t.EventData(L)).intValue = this.getValue(F, "int", 0),
                            d.floatValue = this.getValue(F, "float", 0),
                            d.stringValue = this.getValue(F, "string", ""),
                            d.audioPath = this.getValue(F, "audio", null),
                            null != d.audioPath && (d.volume = this.getValue(F, "volume", 1),
                            d.balance = this.getValue(F, "balance", 0)),
                            r.events.push(d)
                        }
                    if (s.animations)
                        for (var V in s.animations) {
                            var N = s.animations[V];
                            this.readAnimation(N, V, r)
                        }
                    return r
                }
                ,
                e.prototype.readAttachment = function(e, n, r, s, a) {
                    var o = this.scale;
                    switch (s = this.getValue(e, "name", s),
                    this.getValue(e, "type", "region")) {
                    case "region":
                        var l = this.getValue(e, "path", s)
                          , h = this.attachmentLoader.newRegionAttachment(n, s, l);
                        return null == h ? null : (h.path = l,
                        h.x = this.getValue(e, "x", 0) * o,
                        h.y = this.getValue(e, "y", 0) * o,
                        h.scaleX = this.getValue(e, "scaleX", 1),
                        h.scaleY = this.getValue(e, "scaleY", 1),
                        h.rotation = this.getValue(e, "rotation", 0),
                        h.width = e.width * o,
                        h.height = e.height * o,
                        null != (g = this.getValue(e, "color", null)) && h.color.setFromString(g),
                        h.updateOffset(),
                        h);
                    case "boundingbox":
                        var c = this.attachmentLoader.newBoundingBoxAttachment(n, s);
                        return null == c ? null : (this.readVertices(e, c, e.vertexCount << 1),
                        null != (g = this.getValue(e, "color", null)) && c.color.setFromString(g),
                        c);
                    case "mesh":
                    case "linkedmesh":
                        l = this.getValue(e, "path", s);
                        var u = this.attachmentLoader.newMeshAttachment(n, s, l);
                        if (null == u)
                            return null;
                        u.path = l,
                        null != (g = this.getValue(e, "color", null)) && u.color.setFromString(g),
                        u.width = this.getValue(e, "width", 0) * o,
                        u.height = this.getValue(e, "height", 0) * o;
                        var _ = this.getValue(e, "parent", null);
                        if (null != _)
                            return this.linkedMeshes.push(new i(u,this.getValue(e, "skin", null),r,_,this.getValue(e, "deform", !0))),
                            u;
                        var f = e.uvs;
                        return this.readVertices(e, u, f.length),
                        u.triangles = e.triangles,
                        u.regionUVs = f,
                        u.updateUVs(),
                        u.edges = this.getValue(e, "edges", null),
                        u.hullLength = 2 * this.getValue(e, "hull", 0),
                        u;
                    case "path":
                        if (null == (l = this.attachmentLoader.newPathAttachment(n, s)))
                            return null;
                        l.closed = this.getValue(e, "closed", !1),
                        l.constantSpeed = this.getValue(e, "constantSpeed", !0);
                        var d = e.vertexCount;
                        this.readVertices(e, l, d << 1);
                        for (var p = t.Utils.newArray(d / 3, 0), m = 0; m < e.lengths.length; m++)
                            p[m] = e.lengths[m] * o;
                        return l.lengths = p,
                        null != (g = this.getValue(e, "color", null)) && l.color.setFromString(g),
                        l;
                    case "point":
                        var y = this.attachmentLoader.newPointAttachment(n, s);
                        return null == y ? null : (y.x = this.getValue(e, "x", 0) * o,
                        y.y = this.getValue(e, "y", 0) * o,
                        y.rotation = this.getValue(e, "rotation", 0),
                        null != (g = this.getValue(e, "color", null)) && y.color.setFromString(g),
                        y);
                    case "clipping":
                        var v = this.attachmentLoader.newClippingAttachment(n, s);
                        if (null == v)
                            return null;
                        var g, A = this.getValue(e, "end", null);
                        if (null != A) {
                            var x = a.findSlot(A);
                            if (null == x)
                                throw new Error("Clipping end slot not found: " + A);
                            v.endSlot = x
                        }
                        return d = e.vertexCount,
                        this.readVertices(e, v, d << 1),
                        null != (g = this.getValue(e, "color", null)) && v.color.setFromString(g),
                        v
                    }
                    return null
                }
                ,
                e.prototype.readVertices = function(e, i, n) {
                    var r = this.scale;
                    i.worldVerticesLength = n;
                    var s = e.vertices;
                    if (n != s.length) {
                        var a = new Array
                          , o = new Array;
                        for (u = 0,
                        _ = s.length; u < _; ) {
                            var l = s[u++];
                            o.push(l);
                            for (var h = u + 4 * l; u < h; u += 4)
                                o.push(s[u]),
                                a.push(s[u + 1] * r),
                                a.push(s[u + 2] * r),
                                a.push(s[u + 3])
                        }
                        i.bones = o,
                        i.vertices = t.Utils.toFloatArray(a)
                    } else {
                        var c = t.Utils.toFloatArray(s);
                        if (1 != r)
                            for (var u = 0, _ = s.length; u < _; u++)
                                c[u] *= r;
                        i.vertices = c
                    }
                }
                ,
                e.prototype.readAnimation = function(e, i, n) {
                    var r = this.scale
                      , s = new Array
                      , a = 0;
                    if (e.slots)
                        for (var o in e.slots) {
                            var l = e.slots[o];
                            if (-1 == (K = n.findSlotIndex(o)))
                                throw new Error("Slot not found: " + o);
                            for (var h in l) {
                                var c = l[h];
                                if ("attachment" == h) {
                                    (A = new t.AttachmentTimeline(c.length)).slotIndex = K;
                                    for (var u = 0, _ = 0; _ < c.length; _++) {
                                        var f = c[_];
                                        A.setFrame(u++, this.getValue(f, "time", 0), f.name)
                                    }
                                    s.push(A),
                                    a = Math.max(a, A.frames[A.getFrameCount() - 1])
                                } else if ("color" == h) {
                                    for ((A = new t.ColorTimeline(c.length)).slotIndex = K,
                                    u = 0,
                                    _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var d = new t.Color;
                                        d.setFromString(f.color),
                                        A.setFrame(u, this.getValue(f, "time", 0), d.r, d.g, d.b, d.a),
                                        this.readCurve(f, A, u),
                                        u++
                                    }
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.ColorTimeline.ENTRIES])
                                } else {
                                    if ("twoColor" != h)
                                        throw new Error("Invalid timeline type for a slot: " + h + " (" + o + ")");
                                    for ((A = new t.TwoColorTimeline(c.length)).slotIndex = K,
                                    u = 0,
                                    _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var p = new t.Color
                                          , m = new t.Color;
                                        p.setFromString(f.light),
                                        m.setFromString(f.dark),
                                        A.setFrame(u, this.getValue(f, "time", 0), p.r, p.g, p.b, p.a, m.r, m.g, m.b),
                                        this.readCurve(f, A, u),
                                        u++
                                    }
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.TwoColorTimeline.ENTRIES])
                                }
                            }
                        }
                    if (e.bones)
                        for (var y in e.bones) {
                            var v = e.bones[y]
                              , g = n.findBoneIndex(y);
                            if (-1 == g)
                                throw new Error("Bone not found: " + y);
                            for (var h in v)
                                if (c = v[h],
                                "rotate" === h) {
                                    for ((A = new t.RotateTimeline(c.length)).boneIndex = g,
                                    u = 0,
                                    _ = 0; _ < c.length; _++)
                                        f = c[_],
                                        A.setFrame(u, this.getValue(f, "time", 0), this.getValue(f, "angle", 0)),
                                        this.readCurve(f, A, u),
                                        u++;
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.RotateTimeline.ENTRIES])
                                } else {
                                    if ("translate" !== h && "scale" !== h && "shear" !== h)
                                        throw new Error("Invalid timeline type for a bone: " + h + " (" + y + ")");
                                    var A = null
                                      , x = 1
                                      , b = 0;
                                    for ("scale" === h ? (A = new t.ScaleTimeline(c.length),
                                    b = 1) : "shear" === h ? A = new t.ShearTimeline(c.length) : (A = new t.TranslateTimeline(c.length),
                                    x = r),
                                    A.boneIndex = g,
                                    u = 0,
                                    _ = 0; _ < c.length; _++) {
                                        f = c[_];
                                        var C = this.getValue(f, "x", b)
                                          , T = this.getValue(f, "y", b);
                                        A.setFrame(u, this.getValue(f, "time", 0), C * x, T * x),
                                        this.readCurve(f, A, u),
                                        u++
                                    }
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.TranslateTimeline.ENTRIES])
                                }
                        }
                    if (e.ik)
                        for (var S in e.ik) {
                            var w = e.ik[S]
                              , E = n.findIkConstraint(S);
                            for ((A = new t.IkConstraintTimeline(w.length)).ikConstraintIndex = n.ikConstraints.indexOf(E),
                            u = 0,
                            _ = 0; _ < w.length; _++)
                                f = w[_],
                                A.setFrame(u, this.getValue(f, "time", 0), this.getValue(f, "mix", 1), this.getValue(f, "softness", 0) * r, this.getValue(f, "bendPositive", !0) ? 1 : -1, this.getValue(f, "compress", !1), this.getValue(f, "stretch", !1)),
                                this.readCurve(f, A, u),
                                u++;
                            s.push(A),
                            a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.IkConstraintTimeline.ENTRIES])
                        }
                    if (e.transform)
                        for (var S in e.transform) {
                            for (w = e.transform[S],
                            E = n.findTransformConstraint(S),
                            (A = new t.TransformConstraintTimeline(w.length)).transformConstraintIndex = n.transformConstraints.indexOf(E),
                            u = 0,
                            _ = 0; _ < w.length; _++)
                                f = w[_],
                                A.setFrame(u, this.getValue(f, "time", 0), this.getValue(f, "rotateMix", 1), this.getValue(f, "translateMix", 1), this.getValue(f, "scaleMix", 1), this.getValue(f, "shearMix", 1)),
                                this.readCurve(f, A, u),
                                u++;
                            s.push(A),
                            a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.TransformConstraintTimeline.ENTRIES])
                        }
                    var M = e.path || e.paths;
                    if (M)
                        for (var S in M) {
                            w = M[S];
                            var D = n.findPathConstraintIndex(S);
                            if (-1 == D)
                                throw new Error("Path constraint not found: " + S);
                            var B = n.pathConstraints[D];
                            for (var h in w)
                                if (c = w[h],
                                "position" === h || "spacing" === h) {
                                    for (A = null,
                                    x = 1,
                                    "spacing" === h ? (A = new t.PathConstraintSpacingTimeline(c.length),
                                    B.spacingMode != t.SpacingMode.Length && B.spacingMode != t.SpacingMode.Fixed || (x = r)) : (A = new t.PathConstraintPositionTimeline(c.length),
                                    B.positionMode == t.PositionMode.Fixed && (x = r)),
                                    A.pathConstraintIndex = D,
                                    u = 0,
                                    _ = 0; _ < c.length; _++)
                                        f = c[_],
                                        A.setFrame(u, this.getValue(f, "time", 0), this.getValue(f, h, 0) * x),
                                        this.readCurve(f, A, u),
                                        u++;
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.PathConstraintPositionTimeline.ENTRIES])
                                } else if ("mix" === h) {
                                    for ((A = new t.PathConstraintMixTimeline(c.length)).pathConstraintIndex = D,
                                    u = 0,
                                    _ = 0; _ < c.length; _++)
                                        f = c[_],
                                        A.setFrame(u, this.getValue(f, "time", 0), this.getValue(f, "rotateMix", 1), this.getValue(f, "translateMix", 1)),
                                        this.readCurve(f, A, u),
                                        u++;
                                    s.push(A),
                                    a = Math.max(a, A.frames[(A.getFrameCount() - 1) * t.PathConstraintMixTimeline.ENTRIES])
                                }
                        }
                    if (e.deform)
                        for (var I in e.deform) {
                            var P = e.deform[I]
                              , R = n.findSkin(I);
                            if (null == R)
                                throw new Error("Skin not found: " + I);
                            for (var o in P) {
                                if (l = P[o],
                                -1 == (K = n.findSlotIndex(o)))
                                    throw new Error("Slot not found: " + l.name);
                                for (var h in l) {
                                    c = l[h];
                                    var O = R.getAttachment(K, h);
                                    if (null != O) {
                                        var L = null != O.bones
                                          , F = O.vertices
                                          , V = L ? F.length / 3 * 2 : F.length;
                                        (A = new t.DeformTimeline(c.length)).slotIndex = K,
                                        A.attachment = O,
                                        u = 0;
                                        for (var N = 0; N < c.length; N++) {
                                            f = c[N];
                                            var k = void 0
                                              , G = this.getValue(f, "vertices", null);
                                            if (null == G)
                                                k = L ? t.Utils.newFloatArray(V) : F;
                                            else {
                                                k = t.Utils.newFloatArray(V);
                                                var U = this.getValue(f, "offset", 0);
                                                if (t.Utils.arrayCopy(G, 0, k, U, G.length),
                                                1 != r)
                                                    for (var z = (_ = U) + G.length; _ < z; _++)
                                                        k[_] *= r;
                                                if (!L)
                                                    for (_ = 0; _ < V; _++)
                                                        k[_] += F[_]
                                            }
                                            A.setFrame(u, this.getValue(f, "time", 0), k),
                                            this.readCurve(f, A, u),
                                            u++
                                        }
                                        s.push(A),
                                        a = Math.max(a, A.frames[A.getFrameCount() - 1])
                                    }
                                }
                            }
                        }
                    var H = e.drawOrder;
                    if (null == H && (H = e.draworder),
                    null != H) {
                        A = new t.DrawOrderTimeline(H.length);
                        var W = n.slots.length;
                        for (u = 0,
                        N = 0; N < H.length; N++) {
                            var j = H[N]
                              , X = null
                              , Y = this.getValue(j, "offsets", null);
                            if (null != Y) {
                                X = t.Utils.newArray(W, -1);
                                var q = t.Utils.newArray(W - Y.length, 0)
                                  , J = 0
                                  , Z = 0;
                                for (_ = 0; _ < Y.length; _++) {
                                    var K, Q = Y[_];
                                    if (-1 == (K = n.findSlotIndex(Q.slot)))
                                        throw new Error("Slot not found: " + Q.slot);
                                    for (; J != K; )
                                        q[Z++] = J++;
                                    X[J + Q.offset] = J++
                                }
                                for (; J < W; )
                                    q[Z++] = J++;
                                for (_ = W - 1; _ >= 0; _--)
                                    -1 == X[_] && (X[_] = q[--Z])
                            }
                            A.setFrame(u++, this.getValue(j, "time", 0), X)
                        }
                        s.push(A),
                        a = Math.max(a, A.frames[A.getFrameCount() - 1])
                    }
                    if (e.events) {
                        for (A = new t.EventTimeline(e.events.length),
                        u = 0,
                        _ = 0; _ < e.events.length; _++) {
                            var $ = e.events[_]
                              , tt = n.findEvent($.name);
                            if (null == tt)
                                throw new Error("Event not found: " + $.name);
                            var et = new t.Event(t.Utils.toSinglePrecision(this.getValue($, "time", 0)),tt);
                            et.intValue = this.getValue($, "int", tt.intValue),
                            et.floatValue = this.getValue($, "float", tt.floatValue),
                            et.stringValue = this.getValue($, "string", tt.stringValue),
                            null != et.data.audioPath && (et.volume = this.getValue($, "volume", 1),
                            et.balance = this.getValue($, "balance", 0)),
                            A.setFrame(u++, et)
                        }
                        s.push(A),
                        a = Math.max(a, A.frames[A.getFrameCount() - 1])
                    }
                    if (isNaN(a))
                        throw new Error("Error while parsing animation, duration is NaN");
                    n.animations.push(new t.Animation(i,s,a))
                }
                ,
                e.prototype.readCurve = function(t, e, i) {
                    var n = t.curve;
                    n && ("stepped" == n ? e.setStepped(i) : "[object Array]" === Object.prototype.toString.call(n) ? e.setCurve(i, n[0], n[1], n[2], n[3]) : e.setCurve(i, n, this.getValue(t, "c2", 0), this.getValue(t, "c3", 1), this.getValue(t, "c4", 1)))
                }
                ,
                e.prototype.getValue = function(t, e, i) {
                    return void 0 !== t[e] ? t[e] : i
                }
                ,
                e.blendModeFromString = function(e) {
                    if ("normal" == (e = e.toLowerCase()))
                        return t.BlendMode.Normal;
                    if ("additive" == e)
                        return t.BlendMode.Additive;
                    if ("multiply" == e)
                        return t.BlendMode.Multiply;
                    if ("screen" == e)
                        return t.BlendMode.Screen;
                    throw new Error("Unknown blend mode: " + e)
                }
                ,
                e.positionModeFromString = function(e) {
                    if ("fixed" == (e = e.toLowerCase()))
                        return t.PositionMode.Fixed;
                    if ("percent" == e)
                        return t.PositionMode.Percent;
                    throw new Error("Unknown position mode: " + e)
                }
                ,
                e.spacingModeFromString = function(e) {
                    if ("length" == (e = e.toLowerCase()))
                        return t.SpacingMode.Length;
                    if ("fixed" == e)
                        return t.SpacingMode.Fixed;
                    if ("percent" == e)
                        return t.SpacingMode.Percent;
                    throw new Error("Unknown position mode: " + e)
                }
                ,
                e.rotateModeFromString = function(e) {
                    if ("tangent" == (e = e.toLowerCase()))
                        return t.RotateMode.Tangent;
                    if ("chain" == e)
                        return t.RotateMode.Chain;
                    if ("chainscale" == e)
                        return t.RotateMode.ChainScale;
                    throw new Error("Unknown rotate mode: " + e)
                }
                ,
                e.transformModeFromString = function(e) {
                    if ("normal" == (e = e.toLowerCase()))
                        return t.TransformMode.Normal;
                    if ("onlytranslation" == e)
                        return t.TransformMode.OnlyTranslation;
                    if ("norotationorreflection" == e)
                        return t.TransformMode.NoRotationOrReflection;
                    if ("noscale" == e)
                        return t.TransformMode.NoScale;
                    if ("noscaleorreflection" == e)
                        return t.TransformMode.NoScaleOrReflection;
                    throw new Error("Unknown transform mode: " + e)
                }
                ,
                e
            }
            )();
            t.SkeletonJson = e;
            var i = function(t, e, i, n, r) {
                this.mesh = t,
                this.skin = e,
                this.slotIndex = i,
                this.parent = n,
                this.inheritDeform = r
            }
        }
        )(r || (r = {})),
        (function(t) {
            var e = function(t, e, i) {
                this.slotIndex = t,
                this.name = e,
                this.attachment = i
            };
            t.SkinEntry = e;
            var i = (function() {
                function i(t) {
                    if (this.attachments = new Array,
                    this.bones = Array(),
                    this.constraints = new Array,
                    null == t)
                        throw new Error("name cannot be null.");
                    this.name = t
                }
                return i.prototype.setAttachment = function(t, e, i) {
                    if (null == i)
                        throw new Error("attachment cannot be null.");
                    var n = this.attachments;
                    t >= n.length && (n.length = t + 1),
                    n[t] || (n[t] = {}),
                    n[t][e] = i
                }
                ,
                i.prototype.addSkin = function(t) {
                    for (var e = 0; e < t.bones.length; e++) {
                        for (var i = t.bones[e], n = !1, r = 0; r < this.bones.length; r++)
                            if (this.bones[r] == i) {
                                n = !0;
                                break
                            }
                        n || this.bones.push(i)
                    }
                    for (e = 0; e < t.constraints.length; e++) {
                        var s = t.constraints[e];
                        for (n = !1,
                        r = 0; r < this.constraints.length; r++)
                            if (this.constraints[r] == s) {
                                n = !0;
                                break
                            }
                        n || this.constraints.push(s)
                    }
                    var a = t.getAttachments();
                    for (e = 0; e < a.length; e++) {
                        var o = a[e];
                        this.setAttachment(o.slotIndex, o.name, o.attachment)
                    }
                }
                ,
                i.prototype.copySkin = function(e) {
                    for (var i = 0; i < e.bones.length; i++) {
                        for (var n = e.bones[i], r = !1, s = 0; s < this.bones.length; s++)
                            if (this.bones[s] == n) {
                                r = !0;
                                break
                            }
                        r || this.bones.push(n)
                    }
                    for (i = 0; i < e.constraints.length; i++) {
                        var a = e.constraints[i];
                        for (r = !1,
                        s = 0; s < this.constraints.length; s++)
                            if (this.constraints[s] == a) {
                                r = !0;
                                break
                            }
                        r || this.constraints.push(a)
                    }
                    var o = e.getAttachments();
                    for (i = 0; i < o.length; i++) {
                        var l = o[i];
                        null != l.attachment && (l.attachment instanceof t.MeshAttachment ? (l.attachment = l.attachment.newLinkedMesh(),
                        this.setAttachment(l.slotIndex, l.name, l.attachment)) : (l.attachment = l.attachment.copy(),
                        this.setAttachment(l.slotIndex, l.name, l.attachment)))
                    }
                }
                ,
                i.prototype.getAttachment = function(t, e) {
                    var i = this.attachments[t];
                    return i ? i[e] : null
                }
                ,
                i.prototype.removeAttachment = function(t, e) {
                    var i = this.attachments[t];
                    i && (i[e] = null)
                }
                ,
                i.prototype.getAttachments = function() {
                    for (var t = new Array, i = 0; i < this.attachments.length; i++) {
                        var n = this.attachments[i];
                        if (n)
                            for (var r in n) {
                                var s = n[r];
                                s && t.push(new e(i,r,s))
                            }
                    }
                    return t
                }
                ,
                i.prototype.getAttachmentsForSlot = function(t, i) {
                    var n = this.attachments[t];
                    if (n)
                        for (var r in n) {
                            var s = n[r];
                            s && i.push(new e(t,r,s))
                        }
                }
                ,
                i.prototype.clear = function() {
                    this.attachments.length = 0,
                    this.bones.length = 0,
                    this.constraints.length = 0
                }
                ,
                i.prototype.attachAll = function(t, e) {
                    for (var i = 0, n = 0; n < t.slots.length; n++) {
                        var r = t.slots[n]
                          , s = r.getAttachment();
                        if (s && i < e.attachments.length) {
                            var a = e.attachments[i];
                            for (var o in a)
                                if (s == a[o]) {
                                    var l = this.getAttachment(i, o);
                                    null != l && r.setAttachment(l);
                                    break
                                }
                        }
                        i++
                    }
                }
                ,
                i
            }
            )();
            t.Skin = i
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(e, i) {
                    if (this.deform = new Array,
                    null == e)
                        throw new Error("data cannot be null.");
                    if (null == i)
                        throw new Error("bone cannot be null.");
                    this.data = e,
                    this.bone = i,
                    this.color = new t.Color,
                    this.darkColor = null == e.darkColor ? null : new t.Color,
                    this.setToSetupPose()
                }
                return e.prototype.getSkeleton = function() {
                    return this.bone.skeleton
                }
                ,
                e.prototype.getAttachment = function() {
                    return this.attachment
                }
                ,
                e.prototype.setAttachment = function(t) {
                    this.attachment != t && (this.attachment = t,
                    this.attachmentTime = this.bone.skeleton.time,
                    this.deform.length = 0)
                }
                ,
                e.prototype.setAttachmentTime = function(t) {
                    this.attachmentTime = this.bone.skeleton.time - t
                }
                ,
                e.prototype.getAttachmentTime = function() {
                    return this.bone.skeleton.time - this.attachmentTime
                }
                ,
                e.prototype.setToSetupPose = function() {
                    this.color.setFromColor(this.data.color),
                    null != this.darkColor && this.darkColor.setFromColor(this.data.darkColor),
                    null == this.data.attachmentName ? this.attachment = null : (this.attachment = null,
                    this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)))
                }
                ,
                e
            }
            )();
            t.Slot = e
        }
        )(r || (r = {})),
        (function(t) {
            t.SlotData = function(e, i, n) {
                if (this.color = new t.Color(1,1,1,1),
                e < 0)
                    throw new Error("index must be >= 0.");
                if (null == i)
                    throw new Error("name cannot be null.");
                if (null == n)
                    throw new Error("boneData cannot be null.");
                this.index = e,
                this.name = i,
                this.boneData = n
            }
        }
        )(r || (r = {})),
        (function(t) {
            var e, i, n = (function() {
                function t(t) {
                    this._image = t
                }
                return t.prototype.getImage = function() {
                    return this._image
                }
                ,
                t.filterFromString = function(t) {
                    switch (t.toLowerCase()) {
                    case "nearest":
                        return e.Nearest;
                    case "linear":
                        return e.Linear;
                    case "mipmap":
                        return e.MipMap;
                    case "mipmapnearestnearest":
                        return e.MipMapNearestNearest;
                    case "mipmaplinearnearest":
                        return e.MipMapLinearNearest;
                    case "mipmapnearestlinear":
                        return e.MipMapNearestLinear;
                    case "mipmaplinearlinear":
                        return e.MipMapLinearLinear;
                    default:
                        throw new Error("Unknown texture filter " + t)
                    }
                }
                ,
                t.wrapFromString = function(t) {
                    switch (t.toLowerCase()) {
                    case "mirroredtepeat":
                        return i.MirroredRepeat;
                    case "clamptoedge":
                        return i.ClampToEdge;
                    case "repeat":
                        return i.Repeat;
                    default:
                        throw new Error("Unknown texture wrap " + t)
                    }
                }
                ,
                t
            }
            )();
            t.Texture = n,
            (function(t) {
                t[t.Nearest = 9728] = "Nearest",
                t[t.Linear = 9729] = "Linear",
                t[t.MipMap = 9987] = "MipMap",
                t[t.MipMapNearestNearest = 9984] = "MipMapNearestNearest",
                t[t.MipMapLinearNearest = 9985] = "MipMapLinearNearest",
                t[t.MipMapNearestLinear = 9986] = "MipMapNearestLinear",
                t[t.MipMapLinearLinear = 9987] = "MipMapLinearLinear"
            }
            )(e = t.TextureFilter || (t.TextureFilter = {})),
            (function(t) {
                t[t.MirroredRepeat = 33648] = "MirroredRepeat",
                t[t.ClampToEdge = 33071] = "ClampToEdge",
                t[t.Repeat = 10497] = "Repeat"
            }
            )(i = t.TextureWrap || (t.TextureWrap = {}));
            t.TextureRegion = function() {
                this.u = 0,
                this.v = 0,
                this.u2 = 0,
                this.v2 = 0,
                this.width = 0,
                this.height = 0,
                this.rotate = !1,
                this.offsetX = 0,
                this.offsetY = 0,
                this.originalWidth = 0,
                this.originalHeight = 0
            }
            ;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e.prototype.setFilters = function() {}
                ,
                e.prototype.setWraps = function() {}
                ,
                e.prototype.dispose = function() {}
                ,
                e
            }
            )(n);
            t.FakeTexture = r
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.pages = new Array,
                    this.regions = new Array,
                    this.load(t, e)
                }
                return e.prototype.load = function(e, s) {
                    if (null == s)
                        throw new Error("textureLoader cannot be null.");
                    for (var a = new i(e), o = new Array(4), l = null; ; ) {
                        var h = a.readLine();
                        if (null == h)
                            break;
                        if (0 == (h = h.trim()).length)
                            l = null;
                        else if (l) {
                            var c = new r;
                            c.name = h,
                            c.page = l;
                            var u = a.readValue();
                            "true" == u.toLocaleLowerCase() ? c.degrees = 90 : "false" == u.toLocaleLowerCase() ? c.degrees = 0 : c.degrees = parseFloat(u),
                            c.rotate = 90 == c.degrees,
                            a.readTuple(o);
                            var _ = parseInt(o[0])
                              , f = parseInt(o[1]);
                            a.readTuple(o);
                            var d = parseInt(o[0])
                              , p = parseInt(o[1]);
                            c.u = _ / l.width,
                            c.v = f / l.height,
                            c.rotate ? (c.u2 = (_ + p) / l.width,
                            c.v2 = (f + d) / l.height) : (c.u2 = (_ + d) / l.width,
                            c.v2 = (f + p) / l.height),
                            c.x = _,
                            c.y = f,
                            c.width = Math.abs(d),
                            c.height = Math.abs(p),
                            4 == a.readTuple(o) && 4 == a.readTuple(o) && a.readTuple(o),
                            c.originalWidth = parseInt(o[0]),
                            c.originalHeight = parseInt(o[1]),
                            a.readTuple(o),
                            c.offsetX = parseInt(o[0]),
                            c.offsetY = parseInt(o[1]),
                            c.index = parseInt(a.readValue()),
                            c.texture = l.texture,
                            this.regions.push(c)
                        } else {
                            (l = new n).name = h,
                            2 == a.readTuple(o) && (l.width = parseInt(o[0]),
                            l.height = parseInt(o[1]),
                            a.readTuple(o)),
                            a.readTuple(o),
                            l.minFilter = t.Texture.filterFromString(o[0]),
                            l.magFilter = t.Texture.filterFromString(o[1]);
                            var m = a.readValue();
                            l.uWrap = t.TextureWrap.ClampToEdge,
                            l.vWrap = t.TextureWrap.ClampToEdge,
                            "x" == m ? l.uWrap = t.TextureWrap.Repeat : "y" == m ? l.vWrap = t.TextureWrap.Repeat : "xy" == m && (l.uWrap = l.vWrap = t.TextureWrap.Repeat),
                            l.texture = s(h),
                            l.texture.setFilters(l.minFilter, l.magFilter),
                            l.texture.setWraps(l.uWrap, l.vWrap),
                            l.width = l.texture.getImage().width,
                            l.height = l.texture.getImage().height,
                            this.pages.push(l)
                        }
                    }
                }
                ,
                e.prototype.findRegion = function(t) {
                    for (var e = 0; e < this.regions.length; e++)
                        if (this.regions[e].name == t)
                            return this.regions[e];
                    return null
                }
                ,
                e.prototype.dispose = function() {
                    for (var t = 0; t < this.pages.length; t++)
                        this.pages[t].texture.dispose()
                }
                ,
                e
            }
            )();
            t.TextureAtlas = e;
            var i = (function() {
                function t(t) {
                    this.index = 0,
                    this.lines = t.split(/\r\n|\r|\n/)
                }
                return t.prototype.readLine = function() {
                    return this.index >= this.lines.length ? null : this.lines[this.index++]
                }
                ,
                t.prototype.readValue = function() {
                    var t = this.readLine()
                      , e = t.indexOf(":");
                    if (-1 == e)
                        throw new Error("Invalid line: " + t);
                    return t.substring(e + 1).trim()
                }
                ,
                t.prototype.readTuple = function(t) {
                    var e = this.readLine()
                      , i = e.indexOf(":");
                    if (-1 == i)
                        throw new Error("Invalid line: " + e);
                    for (var n = 0, r = i + 1; n < 3; n++) {
                        var s = e.indexOf(",", r);
                        if (-1 == s)
                            break;
                        t[n] = e.substr(r, s - r).trim(),
                        r = s + 1
                    }
                    return t[n] = e.substring(r).trim(),
                    n + 1
                }
                ,
                t
            }
            )()
              , n = function() {};
            t.TextureAtlasPage = n;
            var r = (function(t) {
                function e() {
                    return null !== t && t.apply(this, arguments) || this
                }
                return s(e, t),
                e
            }
            )(t.TextureRegion);
            t.TextureAtlasRegion = r
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(e, i) {
                    if (this.rotateMix = 0,
                    this.translateMix = 0,
                    this.scaleMix = 0,
                    this.shearMix = 0,
                    this.temp = new t.Vector2,
                    this.active = !1,
                    null == e)
                        throw new Error("data cannot be null.");
                    if (null == i)
                        throw new Error("skeleton cannot be null.");
                    this.data = e,
                    this.rotateMix = e.rotateMix,
                    this.translateMix = e.translateMix,
                    this.scaleMix = e.scaleMix,
                    this.shearMix = e.shearMix,
                    this.bones = new Array;
                    for (var n = 0; n < e.bones.length; n++)
                        this.bones.push(i.findBone(e.bones[n].name));
                    this.target = i.findBone(e.target.name)
                }
                return e.prototype.isActive = function() {
                    return this.active
                }
                ,
                e.prototype.apply = function() {
                    this.update()
                }
                ,
                e.prototype.update = function() {
                    this.data.local ? this.data.relative ? this.applyRelativeLocal() : this.applyAbsoluteLocal() : this.data.relative ? this.applyRelativeWorld() : this.applyAbsoluteWorld()
                }
                ,
                e.prototype.applyAbsoluteWorld = function() {
                    for (var e = this.rotateMix, i = this.translateMix, n = this.scaleMix, r = this.shearMix, s = this.target, a = s.a, o = s.b, l = s.c, h = s.d, c = a * h - o * l > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad, u = this.data.offsetRotation * c, _ = this.data.offsetShearY * c, f = this.bones, d = 0, p = f.length; d < p; d++) {
                        var m = f[d]
                          , y = !1;
                        if (0 != e) {
                            var v = m.a
                              , g = m.b
                              , A = m.c
                              , x = m.d;
                            (E = Math.atan2(l, a) - Math.atan2(A, v) + u) > t.MathUtils.PI ? E -= t.MathUtils.PI2 : E < -t.MathUtils.PI && (E += t.MathUtils.PI2),
                            E *= e;
                            var b = Math.cos(E)
                              , C = Math.sin(E);
                            m.a = b * v - C * A,
                            m.b = b * g - C * x,
                            m.c = C * v + b * A,
                            m.d = C * g + b * x,
                            y = !0
                        }
                        if (0 != i) {
                            var T = this.temp;
                            s.localToWorld(T.set(this.data.offsetX, this.data.offsetY)),
                            m.worldX += (T.x - m.worldX) * i,
                            m.worldY += (T.y - m.worldY) * i,
                            y = !0
                        }
                        if (n > 0) {
                            var S = Math.sqrt(m.a * m.a + m.c * m.c)
                              , w = Math.sqrt(a * a + l * l);
                            S > 1e-5 && (S = (S + (w - S + this.data.offsetScaleX) * n) / S),
                            m.a *= S,
                            m.c *= S,
                            S = Math.sqrt(m.b * m.b + m.d * m.d),
                            w = Math.sqrt(o * o + h * h),
                            S > 1e-5 && (S = (S + (w - S + this.data.offsetScaleY) * n) / S),
                            m.b *= S,
                            m.d *= S,
                            y = !0
                        }
                        if (r > 0) {
                            g = m.b,
                            x = m.d;
                            var E, M = Math.atan2(x, g);
                            (E = Math.atan2(h, o) - Math.atan2(l, a) - (M - Math.atan2(m.c, m.a))) > t.MathUtils.PI ? E -= t.MathUtils.PI2 : E < -t.MathUtils.PI && (E += t.MathUtils.PI2),
                            E = M + (E + _) * r,
                            S = Math.sqrt(g * g + x * x),
                            m.b = Math.cos(E) * S,
                            m.d = Math.sin(E) * S,
                            y = !0
                        }
                        y && (m.appliedValid = !1)
                    }
                }
                ,
                e.prototype.applyRelativeWorld = function() {
                    for (var e = this.rotateMix, i = this.translateMix, n = this.scaleMix, r = this.shearMix, s = this.target, a = s.a, o = s.b, l = s.c, h = s.d, c = a * h - o * l > 0 ? t.MathUtils.degRad : -t.MathUtils.degRad, u = this.data.offsetRotation * c, _ = this.data.offsetShearY * c, f = this.bones, d = 0, p = f.length; d < p; d++) {
                        var m, y = f[d], v = !1;
                        if (0 != e) {
                            var g = y.a
                              , A = y.b
                              , x = y.c
                              , b = y.d;
                            (m = Math.atan2(l, a) + u) > t.MathUtils.PI ? m -= t.MathUtils.PI2 : m < -t.MathUtils.PI && (m += t.MathUtils.PI2),
                            m *= e;
                            var C = Math.cos(m)
                              , T = Math.sin(m);
                            y.a = C * g - T * x,
                            y.b = C * A - T * b,
                            y.c = T * g + C * x,
                            y.d = T * A + C * b,
                            v = !0
                        }
                        if (0 != i) {
                            var S = this.temp;
                            s.localToWorld(S.set(this.data.offsetX, this.data.offsetY)),
                            y.worldX += S.x * i,
                            y.worldY += S.y * i,
                            v = !0
                        }
                        if (n > 0) {
                            var w = (Math.sqrt(a * a + l * l) - 1 + this.data.offsetScaleX) * n + 1;
                            y.a *= w,
                            y.c *= w,
                            w = (Math.sqrt(o * o + h * h) - 1 + this.data.offsetScaleY) * n + 1,
                            y.b *= w,
                            y.d *= w,
                            v = !0
                        }
                        if (r > 0)
                            (m = Math.atan2(h, o) - Math.atan2(l, a)) > t.MathUtils.PI ? m -= t.MathUtils.PI2 : m < -t.MathUtils.PI && (m += t.MathUtils.PI2),
                            A = y.b,
                            b = y.d,
                            m = Math.atan2(b, A) + (m - t.MathUtils.PI / 2 + _) * r,
                            w = Math.sqrt(A * A + b * b),
                            y.b = Math.cos(m) * w,
                            y.d = Math.sin(m) * w,
                            v = !0;
                        v && (y.appliedValid = !1)
                    }
                }
                ,
                e.prototype.applyAbsoluteLocal = function() {
                    var t = this.rotateMix
                      , e = this.translateMix
                      , i = this.scaleMix
                      , n = this.shearMix
                      , r = this.target;
                    r.appliedValid || r.updateAppliedTransform();
                    for (var s = this.bones, a = 0, o = s.length; a < o; a++) {
                        var l = s[a];
                        l.appliedValid || l.updateAppliedTransform();
                        var h = l.arotation;
                        if (0 != t) {
                            var c = r.arotation - h + this.data.offsetRotation;
                            h += (c -= 360 * (16384 - (16384.499999999996 - c / 360 | 0))) * t
                        }
                        var u = l.ax
                          , _ = l.ay;
                        0 != e && (u += (r.ax - u + this.data.offsetX) * e,
                        _ += (r.ay - _ + this.data.offsetY) * e);
                        var f = l.ascaleX
                          , d = l.ascaleY;
                        0 != i && (f > 1e-5 && (f = (f + (r.ascaleX - f + this.data.offsetScaleX) * i) / f),
                        d > 1e-5 && (d = (d + (r.ascaleY - d + this.data.offsetScaleY) * i) / d));
                        var p = l.ashearY;
                        0 != n && (c = r.ashearY - p + this.data.offsetShearY,
                        c -= 360 * (16384 - (16384.499999999996 - c / 360 | 0)),
                        l.shearY += c * n),
                        l.updateWorldTransformWith(u, _, h, f, d, l.ashearX, p)
                    }
                }
                ,
                e.prototype.applyRelativeLocal = function() {
                    var t = this.rotateMix
                      , e = this.translateMix
                      , i = this.scaleMix
                      , n = this.shearMix
                      , r = this.target;
                    r.appliedValid || r.updateAppliedTransform();
                    for (var s = this.bones, a = 0, o = s.length; a < o; a++) {
                        var l = s[a];
                        l.appliedValid || l.updateAppliedTransform();
                        var h = l.arotation;
                        0 != t && (h += (r.arotation + this.data.offsetRotation) * t);
                        var c = l.ax
                          , u = l.ay;
                        0 != e && (c += (r.ax + this.data.offsetX) * e,
                        u += (r.ay + this.data.offsetY) * e);
                        var _ = l.ascaleX
                          , f = l.ascaleY;
                        0 != i && (_ > 1e-5 && (_ *= (r.ascaleX - 1 + this.data.offsetScaleX) * i + 1),
                        f > 1e-5 && (f *= (r.ascaleY - 1 + this.data.offsetScaleY) * i + 1));
                        var d = l.ashearY;
                        0 != n && (d += (r.ashearY + this.data.offsetShearY) * n),
                        l.updateWorldTransformWith(c, u, h, _, f, l.ashearX, d)
                    }
                }
                ,
                e
            }
            )();
            t.TransformConstraint = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(t) {
                function e(e) {
                    var i = t.call(this, e, 0, !1) || this;
                    return i.bones = new Array,
                    i.rotateMix = 0,
                    i.translateMix = 0,
                    i.scaleMix = 0,
                    i.shearMix = 0,
                    i.offsetRotation = 0,
                    i.offsetX = 0,
                    i.offsetY = 0,
                    i.offsetScaleX = 0,
                    i.offsetScaleY = 0,
                    i.offsetShearY = 0,
                    i.relative = !1,
                    i.local = !1,
                    i
                }
                return s(e, t),
                e
            }
            )(t.ConstraintData);
            t.TransformConstraintData = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e() {
                    this.convexPolygons = new Array,
                    this.convexPolygonsIndices = new Array,
                    this.indicesArray = new Array,
                    this.isConcaveArray = new Array,
                    this.triangles = new Array,
                    this.polygonPool = new t.Pool(function() {
                        return new Array
                    }
                    ),
                    this.polygonIndicesPool = new t.Pool(function() {
                        return new Array
                    }
                    )
                }
                return e.prototype.triangulate = function(t) {
                    var i = t
                      , n = t.length >> 1
                      , r = this.indicesArray;
                    r.length = 0;
                    for (var s = 0; s < n; s++)
                        r[s] = s;
                    var a = this.isConcaveArray;
                    a.length = 0,
                    s = 0;
                    for (var o = n; s < o; ++s)
                        a[s] = e.isConcave(s, n, i, r);
                    var l = this.triangles;
                    for (l.length = 0; n > 3; ) {
                        for (var h = n - 1, c = (s = 0,
                        1); ; ) {
                            t: if (!a[s]) {
                                for (var u = r[h] << 1, _ = r[s] << 1, f = r[c] << 1, d = i[u], p = i[u + 1], m = i[_], y = i[_ + 1], v = i[f], g = i[f + 1], A = (c + 1) % n; A != h; A = (A + 1) % n)
                                    if (a[A]) {
                                        var x = r[A] << 1
                                          , b = i[x]
                                          , C = i[x + 1];
                                        if (e.positiveArea(v, g, d, p, b, C) && e.positiveArea(d, p, m, y, b, C) && e.positiveArea(m, y, v, g, b, C))
                                            break t
                                    }
                                break
                            }
                            if (0 == c) {
                                do {
                                    if (!a[s])
                                        break;
                                    s--
                                } while (s > 0);break
                            }
                            h = s,
                            s = c,
                            c = (c + 1) % n
                        }
                        l.push(r[(n + s - 1) % n]),
                        l.push(r[s]),
                        l.push(r[(s + 1) % n]),
                        r.splice(s, 1),
                        a.splice(s, 1);
                        var T = (--n + s - 1) % n
                          , S = s == n ? 0 : s;
                        a[T] = e.isConcave(T, n, i, r),
                        a[S] = e.isConcave(S, n, i, r)
                    }
                    return 3 == n && (l.push(r[2]),
                    l.push(r[0]),
                    l.push(r[1])),
                    l
                }
                ,
                e.prototype.decompose = function(t, i) {
                    var n = t
                      , r = this.convexPolygons;
                    this.polygonPool.freeAll(r),
                    r.length = 0;
                    var s = this.convexPolygonsIndices;
                    this.polygonIndicesPool.freeAll(s),
                    s.length = 0;
                    var a = this.polygonIndicesPool.obtain();
                    a.length = 0;
                    var o = this.polygonPool.obtain();
                    o.length = 0;
                    for (var l = -1, h = 0, c = 0, u = i.length; c < u; c += 3) {
                        var _ = i[c] << 1
                          , f = i[c + 1] << 1
                          , d = i[c + 2] << 1
                          , p = n[_]
                          , m = n[_ + 1]
                          , y = n[f]
                          , v = n[f + 1]
                          , g = n[d]
                          , A = n[d + 1]
                          , x = !1;
                        if (l == _) {
                            var b = o.length - 4
                              , C = e.winding(o[b], o[b + 1], o[b + 2], o[b + 3], g, A)
                              , T = e.winding(g, A, o[0], o[1], o[2], o[3]);
                            C == h && T == h && (o.push(g),
                            o.push(A),
                            a.push(d),
                            x = !0)
                        }
                        x || (o.length > 0 ? (r.push(o),
                        s.push(a)) : (this.polygonPool.free(o),
                        this.polygonIndicesPool.free(a)),
                        (o = this.polygonPool.obtain()).length = 0,
                        o.push(p),
                        o.push(m),
                        o.push(y),
                        o.push(v),
                        o.push(g),
                        o.push(A),
                        (a = this.polygonIndicesPool.obtain()).length = 0,
                        a.push(_),
                        a.push(f),
                        a.push(d),
                        h = e.winding(p, m, y, v, g, A),
                        l = _)
                    }
                    for (o.length > 0 && (r.push(o),
                    s.push(a)),
                    c = 0,
                    u = r.length; c < u; c++)
                        if (0 != (a = s[c]).length)
                            for (var S = a[0], w = a[a.length - 1], E = (o = r[c])[b = o.length - 4], M = o[b + 1], D = o[b + 2], B = o[b + 3], I = o[0], P = o[1], R = o[2], O = o[3], L = e.winding(E, M, D, B, I, P), F = 0; F < u; F++)
                                if (F != c) {
                                    var V = s[F];
                                    if (3 == V.length) {
                                        var N = V[0]
                                          , k = V[1]
                                          , G = V[2]
                                          , U = r[F];
                                        g = U[U.length - 2],
                                        A = U[U.length - 1],
                                        N == S && k == w && (C = e.winding(E, M, D, B, g, A),
                                        T = e.winding(g, A, I, P, R, O),
                                        C == L && T == L && (U.length = 0,
                                        V.length = 0,
                                        o.push(g),
                                        o.push(A),
                                        a.push(G),
                                        E = D,
                                        M = B,
                                        D = g,
                                        B = A,
                                        F = 0))
                                    }
                                }
                    for (c = r.length - 1; c >= 0; c--)
                        0 == (o = r[c]).length && (r.splice(c, 1),
                        this.polygonPool.free(o),
                        a = s[c],
                        s.splice(c, 1),
                        this.polygonIndicesPool.free(a));
                    return r
                }
                ,
                e.isConcave = function(t, e, i, n) {
                    var r = n[(e + t - 1) % e] << 1
                      , s = n[t] << 1
                      , a = n[(t + 1) % e] << 1;
                    return !this.positiveArea(i[r], i[r + 1], i[s], i[s + 1], i[a], i[a + 1])
                }
                ,
                e.positiveArea = function(t, e, i, n, r, s) {
                    return t * (s - n) + i * (e - s) + r * (n - e) >= 0
                }
                ,
                e.winding = function(t, e, i, n, r, s) {
                    var a = i - t
                      , o = n - e;
                    return r * o - s * a + a * e - t * o >= 0 ? 1 : -1
                }
                ,
                e
            }
            )();
            t.Triangulator = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function t() {
                    this.array = new Array
                }
                return t.prototype.add = function(t) {
                    var e = this.contains(t);
                    return this.array[0 | t] = 0 | t,
                    !e
                }
                ,
                t.prototype.contains = function(t) {
                    return null != this.array[0 | t]
                }
                ,
                t.prototype.remove = function(t) {
                    this.array[0 | t] = void 0
                }
                ,
                t.prototype.clear = function() {
                    this.array.length = 0
                }
                ,
                t
            }
            )();
            t.IntSet = e;
            var i = (function() {
                function t(t, e, i, n) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    void 0 === n && (n = 0),
                    this.r = t,
                    this.g = e,
                    this.b = i,
                    this.a = n
                }
                return t.prototype.set = function(t, e, i, n) {
                    return this.r = t,
                    this.g = e,
                    this.b = i,
                    this.a = n,
                    this.clamp(),
                    this
                }
                ,
                t.prototype.setFromColor = function(t) {
                    return this.r = t.r,
                    this.g = t.g,
                    this.b = t.b,
                    this.a = t.a,
                    this
                }
                ,
                t.prototype.setFromString = function(t) {
                    return t = "#" == t.charAt(0) ? t.substr(1) : t,
                    this.r = parseInt(t.substr(0, 2), 16) / 255,
                    this.g = parseInt(t.substr(2, 2), 16) / 255,
                    this.b = parseInt(t.substr(4, 2), 16) / 255,
                    this.a = (8 != t.length ? 255 : parseInt(t.substr(6, 2), 16)) / 255,
                    this
                }
                ,
                t.prototype.add = function(t, e, i, n) {
                    return this.r += t,
                    this.g += e,
                    this.b += i,
                    this.a += n,
                    this.clamp(),
                    this
                }
                ,
                t.prototype.clamp = function() {
                    return this.r < 0 ? this.r = 0 : this.r > 1 && (this.r = 1),
                    this.g < 0 ? this.g = 0 : this.g > 1 && (this.g = 1),
                    this.b < 0 ? this.b = 0 : this.b > 1 && (this.b = 1),
                    this.a < 0 ? this.a = 0 : this.a > 1 && (this.a = 1),
                    this
                }
                ,
                t.rgba8888ToColor = function(t, e) {
                    t.r = ((4278190080 & e) >>> 24) / 255,
                    t.g = ((16711680 & e) >>> 16) / 255,
                    t.b = ((65280 & e) >>> 8) / 255,
                    t.a = (255 & e) / 255
                }
                ,
                t.rgb888ToColor = function(t, e) {
                    t.r = ((16711680 & e) >>> 16) / 255,
                    t.g = ((65280 & e) >>> 8) / 255,
                    t.b = (255 & e) / 255
                }
                ,
                t.WHITE = new t(1,1,1,1),
                t.RED = new t(1,0,0,1),
                t.GREEN = new t(0,1,0,1),
                t.BLUE = new t(0,0,1,1),
                t.MAGENTA = new t(1,0,1,1),
                t
            }
            )();
            t.Color = i;
            var n = (function() {
                function t() {}
                return t.clamp = function(t, e, i) {
                    return t < e ? e : t > i ? i : t
                }
                ,
                t.cosDeg = function(e) {
                    return Math.cos(e * t.degRad)
                }
                ,
                t.sinDeg = function(e) {
                    return Math.sin(e * t.degRad)
                }
                ,
                t.signum = function(t) {
                    return t > 0 ? 1 : t < 0 ? -1 : 0
                }
                ,
                t.toInt = function(t) {
                    return t > 0 ? Math.floor(t) : Math.ceil(t)
                }
                ,
                t.cbrt = function(t) {
                    var e = Math.pow(Math.abs(t), 1 / 3);
                    return t < 0 ? -e : e
                }
                ,
                t.randomTriangular = function(e, i) {
                    return t.randomTriangularWith(e, i, .5 * (e + i))
                }
                ,
                t.randomTriangularWith = function(t, e, i) {
                    var n = Math.random()
                      , r = e - t;
                    return n <= (i - t) / r ? t + Math.sqrt(n * r * (i - t)) : e - Math.sqrt((1 - n) * r * (e - i))
                }
                ,
                t.PI = 3.1415927,
                t.PI2 = 2 * t.PI,
                t.radiansToDegrees = 180 / t.PI,
                t.radDeg = t.radiansToDegrees,
                t.degreesToRadians = t.PI / 180,
                t.degRad = t.degreesToRadians,
                t
            }
            )();
            t.MathUtils = n;
            var r = (function() {
                function t() {}
                return t.prototype.apply = function(t, e, i) {
                    return t + (e - t) * this.applyInternal(i)
                }
                ,
                t
            }
            )();
            t.Interpolation = r;
            var a = (function(t) {
                function e(e) {
                    var i = t.call(this) || this;
                    return i.power = 2,
                    i.power = e,
                    i
                }
                return s(e, t),
                e.prototype.applyInternal = function(t) {
                    return t <= .5 ? Math.pow(2 * t, this.power) / 2 : Math.pow(2 * (t - 1), this.power) / (this.power % 2 == 0 ? -2 : 2) + 1
                }
                ,
                e
            }
            )(r);
            t.Pow = a;
            var o = (function(t) {
                function e(e) {
                    return t.call(this, e) || this
                }
                return s(e, t),
                e.prototype.applyInternal = function(t) {
                    return Math.pow(t - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1
                }
                ,
                e
            }
            )(a);
            t.PowOut = o;
            var l = (function() {
                function t() {}
                return t.arrayCopy = function(t, e, i, n, r) {
                    for (var s = e, a = n; s < e + r; s++,
                    a++)
                        i[a] = t[s]
                }
                ,
                t.setArraySize = function(t, e, i) {
                    void 0 === i && (i = 0);
                    var n = t.length;
                    if (n == e)
                        return t;
                    if (t.length = e,
                    n < e)
                        for (var r = n; r < e; r++)
                            t[r] = i;
                    return t
                }
                ,
                t.ensureArrayCapacity = function(e, i, n) {
                    return void 0 === n && (n = 0),
                    e.length >= i ? e : t.setArraySize(e, i, n)
                }
                ,
                t.newArray = function(t, e) {
                    for (var i = new Array(t), n = 0; n < t; n++)
                        i[n] = e;
                    return i
                }
                ,
                t.newFloatArray = function(e) {
                    if (t.SUPPORTS_TYPED_ARRAYS)
                        return new Float32Array(e);
                    for (var i = new Array(e), n = 0; n < i.length; n++)
                        i[n] = 0;
                    return i
                }
                ,
                t.newShortArray = function(e) {
                    if (t.SUPPORTS_TYPED_ARRAYS)
                        return new Int16Array(e);
                    for (var i = new Array(e), n = 0; n < i.length; n++)
                        i[n] = 0;
                    return i
                }
                ,
                t.toFloatArray = function(e) {
                    return t.SUPPORTS_TYPED_ARRAYS ? new Float32Array(e) : e
                }
                ,
                t.toSinglePrecision = function(e) {
                    return t.SUPPORTS_TYPED_ARRAYS ? Math.fround(e) : e
                }
                ,
                t.webkit602BugfixHelper = function() {}
                ,
                t.contains = function(t, e, i) {
                    void 0 === i && (i = !0);
                    for (var n = 0; n < t.length; n++)
                        if (t[n] == e)
                            return !0;
                    return !1
                }
                ,
                t.SUPPORTS_TYPED_ARRAYS = "undefined" != typeof Float32Array,
                t
            }
            )();
            t.Utils = l;
            var h = (function() {
                function t() {}
                return t.logBones = function(t) {
                    for (var e = 0; e < t.bones.length; e++) {
                        var i = t.bones[e];
                        console.log(i.data.name + ", " + i.a + ", " + i.b + ", " + i.c + ", " + i.d + ", " + i.worldX + ", " + i.worldY)
                    }
                }
                ,
                t
            }
            )();
            t.DebugUtils = h;
            var c = (function() {
                function t(t) {
                    this.items = new Array,
                    this.instantiator = t
                }
                return t.prototype.obtain = function() {
                    return this.items.length > 0 ? this.items.pop() : this.instantiator()
                }
                ,
                t.prototype.free = function(t) {
                    t.reset && t.reset(),
                    this.items.push(t)
                }
                ,
                t.prototype.freeAll = function(t) {
                    for (var e = 0; e < t.length; e++)
                        t[e].reset && t[e].reset(),
                        this.items[e] = t[e]
                }
                ,
                t.prototype.clear = function() {
                    this.items.length = 0
                }
                ,
                t
            }
            )();
            t.Pool = c;
            var u = (function() {
                function t(t, e) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    this.x = t,
                    this.y = e
                }
                return t.prototype.set = function(t, e) {
                    return this.x = t,
                    this.y = e,
                    this
                }
                ,
                t.prototype.length = function() {
                    var t = this.x
                      , e = this.y;
                    return Math.sqrt(t * t + e * e)
                }
                ,
                t.prototype.normalize = function() {
                    var t = this.length();
                    return 0 != t && (this.x /= t,
                    this.y /= t),
                    this
                }
                ,
                t
            }
            )();
            t.Vector2 = u;
            var _ = (function() {
                function t() {
                    this.maxDelta = .064,
                    this.framesPerSecond = 0,
                    this.delta = 0,
                    this.totalTime = 0,
                    this.lastTime = Date.now() / 1e3,
                    this.frameCount = 0,
                    this.frameTime = 0
                }
                return t.prototype.update = function() {
                    var t = Date.now() / 1e3;
                    this.delta = t - this.lastTime,
                    this.frameTime += this.delta,
                    this.totalTime += this.delta,
                    this.delta > this.maxDelta && (this.delta = this.maxDelta),
                    this.lastTime = t,
                    this.frameCount++,
                    this.frameTime > 1 && (this.framesPerSecond = this.frameCount / this.frameTime,
                    this.frameTime = 0,
                    this.frameCount = 0)
                }
                ,
                t
            }
            )();
            t.TimeKeeper = _;
            var f = (function() {
                function t(t) {
                    void 0 === t && (t = 32),
                    this.addedValues = 0,
                    this.lastValue = 0,
                    this.mean = 0,
                    this.dirty = !0,
                    this.values = new Array(t)
                }
                return t.prototype.hasEnoughData = function() {
                    return this.addedValues >= this.values.length
                }
                ,
                t.prototype.addValue = function(t) {
                    this.addedValues < this.values.length && this.addedValues++,
                    this.values[this.lastValue++] = t,
                    this.lastValue > this.values.length - 1 && (this.lastValue = 0),
                    this.dirty = !0
                }
                ,
                t.prototype.getMean = function() {
                    if (this.hasEnoughData()) {
                        if (this.dirty) {
                            for (var t = 0, e = 0; e < this.values.length; e++)
                                t += this.values[e];
                            this.mean = t / this.values.length,
                            this.dirty = !1
                        }
                        return this.mean
                    }
                    return 0
                }
                ,
                t
            }
            )();
            t.WindowedMean = f
        }
        )(r || (r = {})),
        Math.fround || (Math.fround = (n = new Float32Array(1),
        function(t) {
            return n[0] = t,
            n[0]
        }
        )),
        (function(t) {
            var e = function(t) {
                if (null == t)
                    throw new Error("name cannot be null.");
                this.name = t
            };
            t.Attachment = e;
            var i = (function(e) {
                function i(t) {
                    var n = e.call(this, t) || this;
                    return n.id = (65535 & i.nextID++) << 11,
                    n.worldVerticesLength = 0,
                    n.deformAttachment = n,
                    n
                }
                return s(i, e),
                i.prototype.computeWorldVertices = function(t, e, i, n, r, s) {
                    i = r + (i >> 1) * s;
                    var a = t.bone.skeleton
                      , o = t.deform
                      , l = this.vertices
                      , h = this.bones;
                    if (null != h) {
                        for (var c = 0, u = 0, _ = 0; _ < e; _ += 2)
                            c += (m = h[c]) + 1,
                            u += m;
                        var f = a.bones;
                        if (0 == o.length)
                            for (M = r,
                            T = 3 * u; M < i; M += s) {
                                var d = 0
                                  , p = 0
                                  , m = h[c++];
                                for (m += c; c < m; c++,
                                T += 3) {
                                    A = f[h[c]],
                                    D = l[T],
                                    B = l[T + 1];
                                    var y = l[T + 2];
                                    d += (D * A.a + B * A.b + A.worldX) * y,
                                    p += (D * A.c + B * A.d + A.worldY) * y
                                }
                                n[M] = d,
                                n[M + 1] = p
                            }
                        else
                            for (var v = o, g = (M = r,
                            T = 3 * u,
                            u << 1); M < i; M += s) {
                                for (d = 0,
                                p = 0,
                                m = h[c++],
                                m += c; c < m; c++,
                                T += 3,
                                g += 2)
                                    A = f[h[c]],
                                    D = l[T] + v[g],
                                    B = l[T + 1] + v[g + 1],
                                    y = l[T + 2],
                                    d += (D * A.a + B * A.b + A.worldX) * y,
                                    p += (D * A.c + B * A.d + A.worldY) * y;
                                n[M] = d,
                                n[M + 1] = p
                            }
                    } else {
                        o.length > 0 && (l = o);
                        for (var A, x = (A = t.bone).worldX, b = A.worldY, C = A.a, T = A.b, S = A.c, w = A.d, E = e, M = r; M < i; E += 2,
                        M += s) {
                            var D = l[E]
                              , B = l[E + 1];
                            n[M] = D * C + B * T + x,
                            n[M + 1] = D * S + B * w + b
                        }
                    }
                }
                ,
                i.prototype.copyTo = function(e) {
                    null != this.bones ? (e.bones = new Array(this.bones.length),
                    t.Utils.arrayCopy(this.bones, 0, e.bones, 0, this.bones.length)) : e.bones = null,
                    null != this.vertices ? (e.vertices = t.Utils.newFloatArray(this.vertices.length),
                    t.Utils.arrayCopy(this.vertices, 0, e.vertices, 0, this.vertices.length)) : e.vertices = null,
                    e.worldVerticesLength = this.worldVerticesLength,
                    e.deformAttachment = this.deformAttachment
                }
                ,
                i.nextID = 0,
                i
            }
            )(e);
            t.VertexAttachment = i
        }
        )(r || (r = {})),
        (function(t) {
            (function(t) {
                t[t.Region = 0] = "Region",
                t[t.BoundingBox = 1] = "BoundingBox",
                t[t.Mesh = 2] = "Mesh",
                t[t.LinkedMesh = 3] = "LinkedMesh",
                t[t.Path = 4] = "Path",
                t[t.Point = 5] = "Point",
                t[t.Clipping = 6] = "Clipping"
            }
            )(t.AttachmentType || (t.AttachmentType = {}))
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(1,1,1,1),
                    n
                }
                return s(i, e),
                i.prototype.copy = function() {
                    var t = new i(name);
                    return this.copyTo(t),
                    t.color.setFromColor(this.color),
                    t
                }
                ,
                i
            }
            )(t.VertexAttachment);
            t.BoundingBoxAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(.2275,.2275,.8078,1),
                    n
                }
                return s(i, e),
                i.prototype.copy = function() {
                    var t = new i(name);
                    return this.copyTo(t),
                    t.endSlot = this.endSlot,
                    t.color.setFromColor(this.color),
                    t
                }
                ,
                i
            }
            )(t.VertexAttachment);
            t.ClippingAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(1,1,1,1),
                    n.tempColor = new t.Color(0,0,0,0),
                    n
                }
                return s(i, e),
                i.prototype.updateUVs = function() {
                    var e = this.regionUVs;
                    null != this.uvs && this.uvs.length == e.length || (this.uvs = t.Utils.newFloatArray(e.length));
                    var i = this.uvs
                      , n = this.uvs.length
                      , r = this.region.u
                      , s = this.region.v
                      , a = 0
                      , o = 0;
                    if (this.region instanceof t.TextureAtlasRegion) {
                        var l = this.region
                          , h = l.texture.getImage().width
                          , c = l.texture.getImage().height;
                        switch (l.degrees) {
                        case 90:
                            r -= (l.originalHeight - l.offsetY - l.height) / h,
                            s -= (l.originalWidth - l.offsetX - l.width) / c,
                            a = l.originalHeight / h,
                            o = l.originalWidth / c;
                            for (var u = 0; u < n; u += 2)
                                i[u] = r + e[u + 1] * a,
                                i[u + 1] = s + (1 - e[u]) * o;
                            return;
                        case 180:
                            for (r -= (l.originalWidth - l.offsetX - l.width) / h,
                            s -= l.offsetY / c,
                            a = l.originalWidth / h,
                            o = l.originalHeight / c,
                            u = 0; u < n; u += 2)
                                i[u] = r + (1 - e[u]) * a,
                                i[u + 1] = s + (1 - e[u + 1]) * o;
                            return;
                        case 270:
                            for (r -= l.offsetY / h,
                            s -= l.offsetX / c,
                            a = l.originalHeight / h,
                            o = l.originalWidth / c,
                            u = 0; u < n; u += 2)
                                i[u] = r + (1 - e[u + 1]) * a,
                                i[u + 1] = s + e[u] * o;
                            return
                        }
                        r -= l.offsetX / h,
                        s -= (l.originalHeight - l.offsetY - l.height) / c,
                        a = l.originalWidth / h,
                        o = l.originalHeight / c
                    } else
                        null == this.region ? (r = s = 0,
                        a = o = 1) : (a = this.region.u2 - r,
                        o = this.region.v2 - s);
                    for (u = 0; u < n; u += 2)
                        i[u] = r + e[u] * a,
                        i[u + 1] = s + e[u + 1] * o
                }
                ,
                i.prototype.getParentMesh = function() {
                    return this.parentMesh
                }
                ,
                i.prototype.setParentMesh = function(t) {
                    this.parentMesh = t,
                    null != t && (this.bones = t.bones,
                    this.vertices = t.vertices,
                    this.worldVerticesLength = t.worldVerticesLength,
                    this.regionUVs = t.regionUVs,
                    this.triangles = t.triangles,
                    this.hullLength = t.hullLength,
                    this.worldVerticesLength = t.worldVerticesLength)
                }
                ,
                i.prototype.copy = function() {
                    if (null != this.parentMesh)
                        return this.newLinkedMesh();
                    var e = new i(this.name);
                    return e.region = this.region,
                    e.path = this.path,
                    e.color.setFromColor(this.color),
                    this.copyTo(e),
                    e.regionUVs = new Array(this.regionUVs.length),
                    t.Utils.arrayCopy(this.regionUVs, 0, e.regionUVs, 0, this.regionUVs.length),
                    e.uvs = new Array(this.uvs.length),
                    t.Utils.arrayCopy(this.uvs, 0, e.uvs, 0, this.uvs.length),
                    e.triangles = new Array(this.triangles.length),
                    t.Utils.arrayCopy(this.triangles, 0, e.triangles, 0, this.triangles.length),
                    e.hullLength = this.hullLength,
                    null != this.edges && (e.edges = new Array(this.edges.length),
                    t.Utils.arrayCopy(this.edges, 0, e.edges, 0, this.edges.length)),
                    e.width = this.width,
                    e.height = this.height,
                    e
                }
                ,
                i.prototype.newLinkedMesh = function() {
                    var t = new i(this.name);
                    return t.region = this.region,
                    t.path = this.path,
                    t.color.setFromColor(this.color),
                    t.deformAttachment = this.deformAttachment,
                    t.setParentMesh(null != this.parentMesh ? this.parentMesh : this),
                    t.updateUVs(),
                    t
                }
                ,
                i
            }
            )(t.VertexAttachment);
            t.MeshAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.closed = !1,
                    n.constantSpeed = !1,
                    n.color = new t.Color(1,1,1,1),
                    n
                }
                return s(i, e),
                i.prototype.copy = function() {
                    var e = new i(name);
                    return this.copyTo(e),
                    e.lengths = new Array(this.lengths.length),
                    t.Utils.arrayCopy(this.lengths, 0, e.lengths, 0, this.lengths.length),
                    e.closed = closed,
                    e.constantSpeed = this.constantSpeed,
                    e.color.setFromColor(this.color),
                    e
                }
                ,
                i
            }
            )(t.VertexAttachment);
            t.PathAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.color = new t.Color(.38,.94,0,1),
                    n
                }
                return s(i, e),
                i.prototype.computeWorldPosition = function(t, e) {
                    return e.x = this.x * t.a + this.y * t.b + t.worldX,
                    e.y = this.x * t.c + this.y * t.d + t.worldY,
                    e
                }
                ,
                i.prototype.computeWorldRotation = function(e) {
                    var i = t.MathUtils.cosDeg(this.rotation)
                      , n = t.MathUtils.sinDeg(this.rotation)
                      , r = i * e.a + n * e.b
                      , s = i * e.c + n * e.d;
                    return Math.atan2(s, r) * t.MathUtils.radDeg
                }
                ,
                i.prototype.copy = function() {
                    var t = new i(name);
                    return t.x = this.x,
                    t.y = this.y,
                    t.rotation = this.rotation,
                    t.color.setFromColor(this.color),
                    t
                }
                ,
                i
            }
            )(t.VertexAttachment);
            t.PointAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function(e) {
                function i(i) {
                    var n = e.call(this, i) || this;
                    return n.x = 0,
                    n.y = 0,
                    n.scaleX = 1,
                    n.scaleY = 1,
                    n.rotation = 0,
                    n.width = 0,
                    n.height = 0,
                    n.color = new t.Color(1,1,1,1),
                    n.offset = t.Utils.newFloatArray(8),
                    n.uvs = t.Utils.newFloatArray(8),
                    n.tempColor = new t.Color(1,1,1,1),
                    n
                }
                return s(i, e),
                i.prototype.updateOffset = function() {
                    var t = this.width / this.region.originalWidth * this.scaleX
                      , e = this.height / this.region.originalHeight * this.scaleY
                      , n = -this.width / 2 * this.scaleX + this.region.offsetX * t
                      , r = -this.height / 2 * this.scaleY + this.region.offsetY * e
                      , s = n + this.region.width * t
                      , a = r + this.region.height * e
                      , o = this.rotation * Math.PI / 180
                      , l = Math.cos(o)
                      , h = Math.sin(o)
                      , c = n * l + this.x
                      , u = n * h
                      , _ = r * l + this.y
                      , f = r * h
                      , d = s * l + this.x
                      , p = s * h
                      , m = a * l + this.y
                      , y = a * h
                      , v = this.offset;
                    v[i.OX1] = c - f,
                    v[i.OY1] = _ + u,
                    v[i.OX2] = c - y,
                    v[i.OY2] = m + u,
                    v[i.OX3] = d - y,
                    v[i.OY3] = m + p,
                    v[i.OX4] = d - f,
                    v[i.OY4] = _ + p
                }
                ,
                i.prototype.setRegion = function(t) {
                    this.region = t;
                    var e = this.uvs;
                    t.rotate ? (e[2] = t.u,
                    e[3] = t.v2,
                    e[4] = t.u,
                    e[5] = t.v,
                    e[6] = t.u2,
                    e[7] = t.v,
                    e[0] = t.u2,
                    e[1] = t.v2) : (e[0] = t.u,
                    e[1] = t.v2,
                    e[2] = t.u,
                    e[3] = t.v,
                    e[4] = t.u2,
                    e[5] = t.v,
                    e[6] = t.u2,
                    e[7] = t.v2)
                }
                ,
                i.prototype.computeWorldVertices = function(t, e, n, r) {
                    var s = this.offset
                      , a = t.worldX
                      , o = t.worldY
                      , l = t.a
                      , h = t.b
                      , c = t.c
                      , u = t.d
                      , _ = 0
                      , f = 0;
                    _ = s[i.OX1],
                    f = s[i.OY1],
                    e[n] = _ * l + f * h + a,
                    e[n + 1] = _ * c + f * u + o,
                    n += r,
                    _ = s[i.OX2],
                    f = s[i.OY2],
                    e[n] = _ * l + f * h + a,
                    e[n + 1] = _ * c + f * u + o,
                    n += r,
                    _ = s[i.OX3],
                    f = s[i.OY3],
                    e[n] = _ * l + f * h + a,
                    e[n + 1] = _ * c + f * u + o,
                    n += r,
                    _ = s[i.OX4],
                    f = s[i.OY4],
                    e[n] = _ * l + f * h + a,
                    e[n + 1] = _ * c + f * u + o
                }
                ,
                i.prototype.copy = function() {
                    var e = new i(name);
                    return e.region = this.region,
                    e.rendererObject = this.rendererObject,
                    e.path = this.path,
                    e.x = this.x,
                    e.y = this.y,
                    e.scaleX = this.scaleX,
                    e.scaleY = this.scaleY,
                    e.rotation = this.rotation,
                    e.width = this.width,
                    e.height = this.height,
                    t.Utils.arrayCopy(this.uvs, 0, e.uvs, 0, 8),
                    t.Utils.arrayCopy(this.offset, 0, e.offset, 0, 8),
                    e.color.setFromColor(this.color),
                    e
                }
                ,
                i.OX1 = 0,
                i.OY1 = 1,
                i.OX2 = 2,
                i.OY2 = 3,
                i.OX3 = 4,
                i.OY3 = 5,
                i.OX4 = 6,
                i.OY4 = 7,
                i.X1 = 0,
                i.Y1 = 1,
                i.C1R = 2,
                i.C1G = 3,
                i.C1B = 4,
                i.C1A = 5,
                i.U1 = 6,
                i.V1 = 7,
                i.X2 = 8,
                i.Y2 = 9,
                i.C2R = 10,
                i.C2G = 11,
                i.C2B = 12,
                i.C2A = 13,
                i.U2 = 14,
                i.V2 = 15,
                i.X3 = 16,
                i.Y3 = 17,
                i.C3R = 18,
                i.C3G = 19,
                i.C3B = 20,
                i.C3A = 21,
                i.U3 = 22,
                i.V3 = 23,
                i.X4 = 24,
                i.Y4 = 25,
                i.C4R = 26,
                i.C4G = 27,
                i.C4B = 28,
                i.C4A = 29,
                i.U4 = 30,
                i.V4 = 31,
                i
            }
            )(t.Attachment);
            t.RegionAttachment = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.jitterX = 0,
                    this.jitterY = 0,
                    this.jitterX = t,
                    this.jitterY = e
                }
                return e.prototype.begin = function() {}
                ,
                e.prototype.transform = function(e) {
                    e.x += t.MathUtils.randomTriangular(-this.jitterX, this.jitterY),
                    e.y += t.MathUtils.randomTriangular(-this.jitterX, this.jitterY)
                }
                ,
                e.prototype.end = function() {}
                ,
                e
            }
            )();
            t.JitterEffect = e
        }
        )(r || (r = {})),
        (function(t) {
            var e = (function() {
                function e(t, e) {
                    this.centerX = 0,
                    this.centerY = 0,
                    this.radius = 0,
                    this.angle = 0,
                    this.worldX = 0,
                    this.worldY = 0,
                    this.radius = t,
                    this.interpolation = e
                }
                return e.prototype.begin = function(t) {
                    this.worldX = t.x + this.centerX,
                    this.worldY = t.y + this.centerY
                }
                ,
                e.prototype.transform = function(e) {
                    var i = this.angle * t.MathUtils.degreesToRadians
                      , n = e.x - this.worldX
                      , r = e.y - this.worldY
                      , s = Math.sqrt(n * n + r * r);
                    if (s < this.radius) {
                        var a = this.interpolation.apply(0, i, (this.radius - s) / this.radius)
                          , o = Math.cos(a)
                          , l = Math.sin(a);
                        e.x = o * n - l * r + this.worldX,
                        e.y = l * n + o * r + this.worldY
                    }
                }
                ,
                e.prototype.end = function() {}
                ,
                e.interpolation = new t.PowOut(2),
                e
            }
            )();
            t.SwirlEffect = e
        }
        )(r || (r = {})),
        e.exports = r
    }
    ), {}],
    371: [(function(t, e) {
        "use strict";
        var i, n, r, s, a, o, l = t("./track-entry-listeners"), h = t("./lib/spine"), c = [], u = [], _ = 0, f = 0, d = 0, p = null, m = null, y = 0, v = 0, g = 0, A = 0, x = null, b = null, C = 0, T = 0, S = new h.Color(1,1,1,1), w = new h.Color(1,1,1,1), E = [0, 1, 2, 2, 3, 0], M = cc.Class({
            ctor: function() {
                this._privateMode = !1,
                this._inited = !1,
                this._invalid = !0,
                this._enableCacheAttachedInfo = !1,
                this.frames = [],
                this.totalTime = 0,
                this._frameIdx = -1,
                this.isCompleted = !1,
                this._skeletonInfo = null,
                this._animationName = null,
                this._tempSegments = null,
                this._tempColors = null,
                this._tempBoneInfos = null
            },
            init: function(t, e) {
                this._inited = !0,
                this._animationName = e,
                this._skeletonInfo = t
            },
            clear: function() {
                this._inited = !1;
                for (var t = 0, e = this.frames.length; t < e; t++)
                    this.frames[t].segments.length = 0;
                this.invalidAllFrame()
            },
            bind: function(t) {
                var e = function(t) {
                    t && t.animation.name === this._animationName && (this.isCompleted = !0)
                }
                .bind(this);
                t.complete = e
            },
            unbind: function(t) {
                t.complete = null
            },
            begin: function() {
                if (this._invalid) {
                    var t = this._skeletonInfo
                      , e = t.curAnimationCache;
                    e && e !== this && (this._privateMode ? e.invalidAllFrame() : e.updateToFrame());
                    var i = t.skeleton
                      , n = t.listener
                      , r = t.state
                      , s = i.data.findAnimation(this._animationName);
                    r.setAnimationWith(0, s, !1),
                    this.bind(n),
                    t.curAnimationCache = this,
                    this._frameIdx = -1,
                    this.isCompleted = !1,
                    this.totalTime = 0,
                    this._invalid = !1
                }
            },
            end: function() {
                this._needToUpdate() || (this._skeletonInfo.curAnimationCache = null,
                this.frames.length = this._frameIdx + 1,
                this.isCompleted = !0,
                this.unbind(this._skeletonInfo.listener))
            },
            _needToUpdate: function(t) {
                return !this.isCompleted && this.totalTime < 30 && (null == t || this._frameIdx < t)
            },
            updateToFrame: function(t) {
                if (this._inited && (this.begin(),
                this._needToUpdate(t))) {
                    var e = this._skeletonInfo
                      , i = e.skeleton
                      , n = e.clipper
                      , r = e.state;
                    do {
                        i.update(1 / 60),
                        r.update(1 / 60),
                        r.apply(i),
                        i.updateWorldTransform(),
                        this._frameIdx++,
                        this._updateFrame(i, n, this._frameIdx),
                        this.totalTime += 1 / 60
                    } while (this._needToUpdate(t));this.end()
                }
            },
            isInited: function() {
                return this._inited
            },
            isInvalid: function() {
                return this._invalid
            },
            invalidAllFrame: function() {
                this.isCompleted = !1,
                this._invalid = !0
            },
            updateAllFrame: function() {
                this.invalidAllFrame(),
                this.updateToFrame()
            },
            enableCacheAttachedInfo: function() {
                this._enableCacheAttachedInfo || (this._enableCacheAttachedInfo = !0,
                this.invalidAllFrame())
            },
            _updateFrame: function(t, e, i) {
                d = 0,
                _ = 0,
                f = 0,
                p = null,
                m = null,
                y = 0,
                v = 0,
                g = 0,
                A = 0,
                x = null,
                b = null,
                this.frames[i] = this.frames[i] || {
                    segments: [],
                    colors: [],
                    boneInfos: [],
                    vertices: null,
                    uintVert: null,
                    indices: null
                };
                var n = this.frames[i]
                  , r = this._tempSegments = n.segments
                  , s = this._tempColors = n.colors
                  , a = this._tempBoneInfos = n.boneInfos;
                this._traverseSkeleton(t, e),
                A > 0 && (s[A - 1].vfOffset = d),
                s.length = A,
                a.length = _;
                var o = g - 1;
                if (o >= 0)
                    if (v > 0) {
                        var l = r[o];
                        l.indexCount = v,
                        l.vfCount = 6 * y,
                        l.vertexCount = y,
                        r.length = g
                    } else
                        r.length = g - 1;
                if (0 != r.length) {
                    var h = n.vertices
                      , C = n.uintVert;
                    (!h || h.length < d) && (h = n.vertices = new Float32Array(d),
                    C = n.uintVert = new Uint32Array(h.buffer));
                    for (var T = 0, S = 0; T < d; )
                        h[T++] = c[S++],
                        h[T++] = c[S++],
                        h[T++] = c[S++],
                        h[T++] = c[S++],
                        C[T++] = c[S++],
                        C[T++] = c[S++];
                    var w = n.indices;
                    (!w || w.length < f) && (w = n.indices = new Uint16Array(f));
                    for (var E = 0; E < f; E++)
                        w[E] = u[E];
                    n.vertices = h,
                    n.uintVert = C,
                    n.indices = w
                }
            },
            fillVertices: function(t, e, l, h, _) {
                if (s = l.a * e.a * t.a * 255,
                i = e.r * t.r * 255,
                n = e.g * t.g * 255,
                r = e.b * t.b * 255,
                S.r = i * l.r,
                S.g = n * l.g,
                S.b = r * l.b,
                S.a = s,
                null == _.darkColor ? w.set(0, 0, 0, 1) : (w.r = _.darkColor.r * i,
                w.g = _.darkColor.g * n,
                w.b = _.darkColor.b * r),
                w.a = 0,
                a = (S.a << 24 >>> 0) + (S.b << 16) + (S.g << 8) + S.r,
                o = (w.a << 24 >>> 0) + (w.b << 16) + (w.g << 8) + w.r,
                x !== a || b !== o) {
                    var p = this._tempColors;
                    x = a,
                    b = o,
                    A > 0 && (p[A - 1].vfOffset = d),
                    p[A++] = {
                        fr: S.r,
                        fg: S.g,
                        fb: S.b,
                        fa: S.a,
                        dr: w.r,
                        dg: w.g,
                        db: w.b,
                        da: w.a,
                        vfOffset: 0
                    }
                }
                if (h.isClipping()) {
                    h.clipTriangles(c, C, u, T, c, S, w, !0, 6, f, d, d + 2);
                    var m = h.clippedVertices
                      , y = h.clippedTriangles;
                    T = y.length,
                    C = m.length / 12 * 6;
                    for (var v = 0, g = f, E = y.length; v < E; )
                        u[g++] = y[v++];
                    for (var M = 0, D = m.length, B = d; M < D; M += 12,
                    B += 6)
                        c[B] = m[M],
                        c[B + 1] = m[M + 1],
                        c[B + 2] = m[M + 6],
                        c[B + 3] = m[M + 7],
                        c[B + 4] = a,
                        c[B + 5] = o
                } else
                    for (var I = d, P = d + C; I < P; I += 6)
                        c[I + 4] = a,
                        c[I + 5] = o
            },
            _traverseSkeleton: function(t, e) {
                var i, n, r, s, a, o, l, A, x, b, S, w, M = this._tempSegments, D = this._tempBoneInfos, B = t.color, I = t.bones;
                if (this._enableCacheAttachedInfo)
                    for (var P = 0, R = I.length; P < R; P++,
                    _++) {
                        var O = I[P]
                          , L = D[_];
                        L || (L = D[_] = {}),
                        L.a = O.a,
                        L.b = O.b,
                        L.c = O.c,
                        L.d = O.d,
                        L.worldX = O.worldX,
                        L.worldY = O.worldY
                    }
                for (var F = 0, V = t.drawOrder.length; F < V; F++)
                    if (w = t.drawOrder[F],
                    C = 0,
                    T = 0,
                    i = w.getAttachment())
                        if (o = i instanceof h.RegionAttachment,
                        l = i instanceof h.MeshAttachment,
                        i instanceof h.ClippingAttachment)
                            e.clipStart(w, i);
                        else if (o || l)
                            if (A = i.region.texture._texture)
                                if (S = w.data.blendMode,
                                p === A.nativeUrl && m === S || (p = A.nativeUrl,
                                m = S,
                                (x = g - 1) >= 0 && (v > 0 ? ((b = M[x]).indexCount = v,
                                b.vertexCount = y,
                                b.vfCount = 6 * y) : g--),
                                M[g] = {
                                    tex: A,
                                    blendMode: S,
                                    indexCount: 0,
                                    vertexCount: 0,
                                    vfCount: 0
                                },
                                g++,
                                v = 0,
                                y = 0),
                                o ? (a = E,
                                C = 24,
                                T = 6,
                                i.computeWorldVertices(w.bone, c, d, 6)) : l && (a = i.triangles,
                                C = 6 * (i.worldVerticesLength >> 1),
                                T = a.length,
                                i.computeWorldVertices(w, 0, i.worldVerticesLength, c, d, 6)),
                                0 != C && 0 != T) {
                                    for (var N = 0, k = f, G = a.length; N < G; )
                                        u[k++] = a[N++];
                                    s = i.uvs;
                                    for (var U = d, z = d + C, H = 0; U < z; U += 6,
                                    H += 2)
                                        c[U + 2] = s[H],
                                        c[U + 3] = s[H + 1];
                                    if (n = i.color,
                                    r = w.color,
                                    this.fillVertices(B, n, r, e, w),
                                    T > 0) {
                                        for (var W = f, j = f + T; W < j; W++)
                                            u[W] += y;
                                        f += T,
                                        d += C,
                                        v += T,
                                        y += C / 6
                                    }
                                    e.clipEndWithSlot(w)
                                } else
                                    e.clipEndWithSlot(w);
                            else
                                e.clipEndWithSlot(w);
                        else
                            e.clipEndWithSlot(w);
                    else
                        e.clipEndWithSlot(w);
                e.clipEnd()
            }
        }), D = cc.Class({
            ctor: function() {
                this._privateMode = !1,
                this._animationPool = {},
                this._skeletonCache = {}
            },
            enablePrivateMode: function() {
                this._privateMode = !0
            },
            clear: function() {
                this._animationPool = {},
                this._skeletonCache = {}
            },
            removeSkeleton: function(t) {
                var e = this._skeletonCache[t];
                if (e) {
                    var i = e.animationsCache;
                    for (var n in i) {
                        var r = i[n];
                        r && (this._animationPool[t + "#" + n] = r,
                        r.clear())
                    }
                    delete this._skeletonCache[t]
                }
            },
            getSkeletonCache: function(t, e) {
                var i = this._skeletonCache[t];
                if (!i) {
                    var n = new h.Skeleton(e)
                      , r = new h.SkeletonClipping
                      , s = new h.AnimationStateData(n.data)
                      , a = new h.AnimationState(s)
                      , o = new l;
                    a.addListener(o),
                    this._skeletonCache[t] = i = {
                        skeleton: n,
                        clipper: r,
                        state: a,
                        listener: o,
                        animationsCache: {},
                        curAnimationCache: null
                    }
                }
                return i
            },
            getAnimationCache: function(t, e) {
                var i = this._skeletonCache[t];
                return i ? i.animationsCache[e] : null
            },
            invalidAnimationCache: function(t) {
                var e = this._skeletonCache[t];
                if (e && e.skeleton) {
                    var i = e.animationsCache;
                    for (var n in i)
                        i[n].invalidAllFrame()
                }
            },
            initAnimationCache: function(t, e) {
                if (!e)
                    return null;
                var i = this._skeletonCache[t]
                  , n = i && i.skeleton;
                if (!n)
                    return null;
                if (!n.data.findAnimation(e))
                    return null;
                var r = i.animationsCache
                  , s = r[e];
                if (!s) {
                    var a = t + "#" + e;
                    (s = this._animationPool[a]) ? delete this._animationPool[a] : (s = new M)._privateMode = this._privateMode,
                    s.init(i, e),
                    r[e] = s
                }
                return s
            },
            updateAnimationCache: function(t, e) {
                if (e) {
                    var i = this.initAnimationCache(t, e);
                    if (!i)
                        return null;
                    i.updateAllFrame()
                } else {
                    var n = this._skeletonCache[t];
                    if (!n || !n.skeleton)
                        return;
                    var r = n.animationsCache;
                    for (var s in r)
                        r[s].updateAllFrame()
                }
            }
        });
        D.FrameTime = 1 / 60,
        D.sharedCache = new D,
        e.exports = D
    }
    ), {
        "./lib/spine": 370,
        "./track-entry-listeners": 375
    }],
    372: [(function(t, e) {
        "use strict";
        var i = t("./skeleton-cache").sharedCache
          , n = cc.Class({
            name: "sp.SkeletonData",
            extends: cc.Asset,
            ctor: function() {
                this.reset()
            },
            properties: {
                _skeletonJson: null,
                skeletonJsonStr: {
                    get: function() {
                        return this._skeletonJson ? JSON.stringify(this._skeletonJson) : ""
                    }
                },
                skeletonJson: {
                    get: function() {
                        return this._skeletonJson
                    },
                    set: function(t) {
                        this.reset(),
                        this._skeletonJson = "string" == typeof t ? JSON.parse(t) : t,
                        !this._uuid && t.skeleton && (this._uuid = t.skeleton.hash)
                    }
                },
                _atlasText: "",
                atlasText: {
                    get: function() {
                        return this._atlasText
                    },
                    set: function(t) {
                        this._atlasText = t,
                        this.reset()
                    }
                },
                textures: {
                    default: [],
                    type: [cc.Texture2D]
                },
                textureNames: {
                    default: [],
                    type: [cc.String]
                },
                scale: 1,
                _nativeAsset: {
                    get: function() {
                        return this._buffer
                    },
                    set: function(t) {
                        this._buffer = t.buffer || t,
                        this.reset()
                    },
                    override: !0
                }
            },
            statics: {
                preventDeferredLoadDependents: !0
            },
            createNode: !1,
            reset: function() {
                this._skeletonCache = null,
                this._atlasCache = null
            },
            ensureTexturesLoaded: function(t, e) {
                var i = this.textures
                  , n = i.length;
                if (0 != n)
                    for (var r = 0, s = function() {
                        ++r >= n && (t && t.call(e, !0),
                        t = null)
                    }, a = 0; a < n; a++) {
                        var o = i[a];
                        o.loaded ? s() : o.once("load", s)
                    }
                else
                    t.call(e, !1)
            },
            isTexturesLoaded: function() {
                for (var t = this.textures, e = t.length, i = 0; i < e; i++)
                    if (!t[i].loaded)
                        return !1;
                return !0
            },
            getRuntimeData: function(t) {
                if (this._skeletonCache)
                    return this._skeletonCache;
                if (!(this.textures && this.textures.length > 0) && this.textureNames && this.textureNames.length > 0)
                    return t || cc.errorID(7507, this.name),
                    null;
                var e = this._getAtlas(t);
                if (!e)
                    return null;
                var i = new sp.spine.AtlasAttachmentLoader(e)
                  , n = null
                  , r = null;
                return this.skeletonJson ? (r = new sp.spine.SkeletonJson(i),
                n = this.skeletonJson) : (r = new sp.spine.SkeletonBinary(i),
                n = new Uint8Array(this._nativeAsset)),
                r.scale = this.scale,
                this._skeletonCache = r.readSkeletonData(n),
                e.dispose(),
                this._skeletonCache
            },
            getSkinsEnum: !1,
            getAnimsEnum: !1,
            _getTexture: function(t) {
                for (var e = this.textureNames, i = 0; i < e.length; i++)
                    if (e[i] === t) {
                        var n = this.textures[i]
                          , r = new sp.SkeletonTexture({
                            width: n.width,
                            height: n.height
                        });
                        return r.setRealTexture(n),
                        r
                    }
                return cc.errorID(7506, t),
                null
            },
            _getAtlas: function(t) {
                return this._atlasCache ? this._atlasCache : this.atlasText ? this._atlasCache = new sp.spine.TextureAtlas(this.atlasText,this._getTexture.bind(this)) : (t || cc.errorID(7508, this.name),
                null)
            },
            destroy: function() {
                i.removeSkeleton(this._uuid),
                this._super()
            }
        });
        sp.SkeletonData = e.exports = n
    }
    ), {
        "./skeleton-cache": 371
    }],
    373: [(function() {
        "use strict";
        sp.SkeletonTexture = cc.Class({
            name: "sp.SkeletonTexture",
            extends: sp.spine.Texture,
            _texture: null,
            _material: null,
            setRealTexture: function(t) {
                this._texture = t
            },
            getRealTexture: function() {
                return this._texture
            },
            setFilters: function(t, e) {
                this._texture && this._texture.setFilters(t, e)
            },
            setWraps: function(t, e) {
                this._texture && this._texture.setWrapMode(t, e)
            },
            dispose: function() {}
        })
    }
    ), {}],
    374: [(function(t, e, i) {
        "use strict";
        i.__esModule = !0,
        i.default = void 0;
        var n, r = (n = t("../../cocos2d/core/renderer/assembler")) && n.__esModule ? n : {
            default: n
        };
        function s(t, e) {
            return (s = Object.setPrototypeOf || function(t, e) {
                return t.__proto__ = e,
                t
            }
            )(t, e)
        }
        var a, o, l, h, c, u, _, f, d, p, m, y, v, g, A, x, b, C = t("./Skeleton"), T = t("./lib/spine"), S = t("../../cocos2d/core/renderer/render-flow"), w = t("../../cocos2d/core/renderer/webgl/vertex-format"), E = w.vfmtPosUvColor, M = w.vfmtPosUvTwoColor, D = cc.gfx, B = 0, I = [0, 1, 2, 2, 3, 0], P = cc.color(0, 0, 255, 255), R = cc.color(255, 0, 0, 255), O = cc.color(0, 255, 0, 255), L = cc.color(255, 255, 0, 255), F = null, V = null, N = null, k = null;
        F = new T.Color(1,1,1,1),
        V = new T.Color(1,1,1,1),
        N = new T.Vector2,
        k = new T.Vector2;
        var G, U, z, H, W, j, X, Y, q, J, Z, K, Q, $, tt, et, it, nt, rt, st, at, ot, lt, ht, ct, ut, _t, ft, dt, pt = 0, mt = 0, yt = 0, vt = 0, gt = 0, At = 0, xt = 0;
        function bt(t, e) {
            var i, n;
            switch (e) {
            case T.BlendMode.Additive:
                i = a ? cc.macro.ONE : cc.macro.SRC_ALPHA,
                n = cc.macro.ONE;
                break;
            case T.BlendMode.Multiply:
                i = cc.macro.DST_COLOR,
                n = cc.macro.ONE_MINUS_SRC_ALPHA;
                break;
            case T.BlendMode.Screen:
                i = cc.macro.ONE,
                n = cc.macro.ONE_MINUS_SRC_COLOR;
                break;
            case T.BlendMode.Normal:
            default:
                i = a ? cc.macro.ONE : cc.macro.SRC_ALPHA,
                n = cc.macro.ONE_MINUS_SRC_ALPHA
            }
            var r = !ht.enableBatch
              , s = ht._materials[0];
            if (!s)
                return null;
            var o = t.getId() + i + n + c + r
              , l = ht._materialCache
              , h = l[o];
            return h || (l.baseMaterial ? h = cc.MaterialVariant.create(s) : (h = s,
            l.baseMaterial = s),
            h.define("CC_USE_MODEL", r),
            h.define("USE_TINT", c),
            h.setProperty("texture", t),
            h.setBlend(!0, D.BLEND_FUNC_ADD, i, n, D.BLEND_FUNC_ADD, i, n),
            l[o] = h),
            h
        }
        function Ct(t) {
            st = t.fa * y,
            $ = d * (o = a ? st / 255 : 1),
            tt = p * o,
            et = m * o,
            it = t.fr * $,
            nt = t.fg * tt,
            rt = t.fb * et,
            v = (st << 24 >>> 0) + (rt << 16) + (nt << 8) + it,
            at = t.dr * $,
            ot = t.dg * tt,
            lt = t.db * et,
            g = ((a ? 255 : 0) << 24 >>> 0) + (lt << 16) + (ot << 8) + at
        }
        function Tt(t) {
            return (t.a << 24 >>> 0) + (t.b << 16) + (t.g << 8) + t.r
        }
        var St = (function(t) {
            var e, i;
            function n() {
                return t.apply(this, arguments) || this
            }
            i = t,
            (e = n).prototype = Object.create(i.prototype),
            e.prototype.constructor = e,
            s(e, i);
            var r = n.prototype;
            return r.updateRenderData = function(t) {
                if (!t.isAnimationCached()) {
                    var e = t._skeleton;
                    e && e.updateWorldTransform()
                }
            }
            ,
            r.fillVertices = function(t, e, i, n, r) {
                var s, l = ct._vData, h = ct._iData, u = ct._uintVData;
                if (F.a = i.a * e.a * t.a * y * 255,
                o = a ? F.a : 255,
                G = d * e.r * t.r * o,
                U = p * e.g * t.g * o,
                z = m * e.b * t.b * o,
                F.r = G * i.r,
                F.g = U * i.g,
                F.b = z * i.b,
                null == r.darkColor ? V.set(0, 0, 0, 1) : (V.r = r.darkColor.r * G,
                V.g = r.darkColor.g * U,
                V.b = r.darkColor.b * z),
                V.a = a ? 255 : 0,
                n.isClipping()) {
                    var _ = l.subarray(yt + 2);
                    n.clipTriangles(l.subarray(yt), pt, h.subarray(At), gt, _, F, V, c, x);
                    var f = new Float32Array(n.clippedVertices)
                      , A = n.clippedTriangles;
                    if (gt = A.length,
                    pt = f.length / b * x,
                    s = ct.request(pt / x, gt),
                    At = s.indiceOffset,
                    vt = s.vertexOffset,
                    yt = s.byteOffset >> 2,
                    l = ct._vData,
                    h = ct._iData,
                    u = ct._uintVData,
                    h.set(A, At),
                    dt)
                        for (var C = 0, T = f.length, S = yt; C < T; C += b,
                        S += x)
                            N.x = f[C],
                            N.y = f[C + 1],
                            F.set(f[C + 2], f[C + 3], f[C + 4], f[C + 5]),
                            k.x = f[C + 6],
                            k.y = f[C + 7],
                            c ? V.set(f[C + 8], f[C + 9], f[C + 10], f[C + 11]) : V.set(0, 0, 0, 0),
                            dt.transform(N, k, F, V),
                            l[S] = N.x,
                            l[S + 1] = N.y,
                            l[S + 2] = k.x,
                            l[S + 3] = k.y,
                            u[S + 4] = Tt(F),
                            c && (u[S + 5] = Tt(V));
                    else
                        for (var w = 0, E = f.length, M = yt; w < E; w += b,
                        M += x)
                            l[M] = f[w],
                            l[M + 1] = f[w + 1],
                            l[M + 2] = f[w + 6],
                            l[M + 3] = f[w + 7],
                            v = (f[w + 5] << 24 >>> 0) + (f[w + 4] << 16) + (f[w + 3] << 8) + f[w + 2],
                            u[M + 4] = v,
                            c && (g = (f[w + 11] << 24 >>> 0) + (f[w + 10] << 16) + (f[w + 9] << 8) + f[w + 8],
                            u[M + 5] = g)
                } else if (dt)
                    for (var D = yt, B = yt + pt; D < B; D += x)
                        N.x = l[D],
                        N.y = l[D + 1],
                        k.x = l[D + 2],
                        k.y = l[D + 3],
                        dt.transform(N, k, F, V),
                        l[D] = N.x,
                        l[D + 1] = N.y,
                        l[D + 2] = k.x,
                        l[D + 3] = k.y,
                        u[D + 4] = Tt(F),
                        c && (u[D + 5] = Tt(V));
                else {
                    v = Tt(F),
                    g = Tt(V);
                    for (var I = yt, P = yt + pt; I < P; I += x)
                        u[I + 4] = v,
                        c && (u[I + 5] = g)
                }
            }
            ,
            r.realTimeTraverse = function(t) {
                var e, i, n, r, s, a, o, d, p, m, y, v, g = ht._skeleton, A = g.color, C = ht._debugRenderer, S = ht._clipper, w = null;
                l = ht._startSlotIndex,
                h = ht._endSlotIndex,
                H = !1,
                -1 == l && (H = !0),
                u = ht.debugSlots,
                _ = ht.debugBones,
                f = ht.debugMesh,
                C && (_ || u || f) && (C.clear(),
                C.lineWidth = 2),
                b = c ? 12 : 8,
                pt = 0,
                yt = 0,
                vt = 0,
                gt = 0,
                At = 0;
                for (var E = 0, M = g.drawOrder.length; E < M; E++)
                    if (null != (y = g.drawOrder[E]))
                        if (l >= 0 && l == y.data.index && (H = !0),
                        H)
                            if (h >= 0 && h == y.data.index && (H = !1),
                            pt = 0,
                            gt = 0,
                            n = y.getAttachment())
                                if (d = n instanceof T.RegionAttachment,
                                p = n instanceof T.MeshAttachment,
                                n instanceof T.ClippingAttachment)
                                    S.clipStart(y, n);
                                else if (d || p)
                                    if (w = bt(n.region.texture._texture, y.data.blendMode)) {
                                        if ((W || w.getHash() !== ut.material.getHash()) && (W = !1,
                                        ut._flush(),
                                        ut.node = _t,
                                        ut.material = w),
                                        d) {
                                            if (o = I,
                                            pt = 4 * x,
                                            gt = 6,
                                            m = ct.request(4, 6),
                                            At = m.indiceOffset,
                                            vt = m.vertexOffset,
                                            yt = m.byteOffset >> 2,
                                            e = ct._vData,
                                            i = ct._iData,
                                            n.computeWorldVertices(y.bone, e, yt, x),
                                            C && u) {
                                                C.strokeColor = P,
                                                C.moveTo(e[yt], e[yt + 1]);
                                                for (var D = yt + x, B = yt + pt; D < B; D += x)
                                                    C.lineTo(e[D], e[D + 1]);
                                                C.close(),
                                                C.stroke()
                                            }
                                        } else if (p && (o = n.triangles,
                                        pt = (n.worldVerticesLength >> 1) * x,
                                        gt = o.length,
                                        m = ct.request(pt / x, gt),
                                        At = m.indiceOffset,
                                        vt = m.vertexOffset,
                                        yt = m.byteOffset >> 2,
                                        e = ct._vData,
                                        i = ct._iData,
                                        n.computeWorldVertices(y, 0, n.worldVerticesLength, e, yt, x),
                                        C && f)) {
                                            C.strokeColor = L;
                                            for (var F = 0, V = o.length; F < V; F += 3) {
                                                var N = o[F] * x + yt
                                                  , k = o[F + 1] * x + yt
                                                  , G = o[F + 2] * x + yt;
                                                C.moveTo(e[N], e[N + 1]),
                                                C.lineTo(e[k], e[k + 1]),
                                                C.lineTo(e[G], e[G + 1]),
                                                C.close(),
                                                C.stroke()
                                            }
                                        }
                                        if (0 != pt && 0 != gt) {
                                            i.set(o, At),
                                            a = n.uvs;
                                            for (var U = yt, z = yt + pt, $ = 0; U < z; U += x,
                                            $ += 2)
                                                e[U + 2] = a[$],
                                                e[U + 3] = a[$ + 1];
                                            if (r = n.color,
                                            s = y.color,
                                            this.fillVertices(A, r, s, S, y),
                                            e = ct._vData,
                                            i = ct._iData,
                                            gt > 0) {
                                                for (var tt = At, et = At + gt; tt < et; tt++)
                                                    i[tt] += vt;
                                                if (t) {
                                                    v = t.m,
                                                    Y = v[0],
                                                    q = v[4],
                                                    J = v[12],
                                                    Z = v[1],
                                                    K = v[5],
                                                    Q = v[13];
                                                    for (var it = yt, nt = yt + pt; it < nt; it += x)
                                                        j = e[it],
                                                        X = e[it + 1],
                                                        e[it] = j * Y + X * q + J,
                                                        e[it + 1] = j * Z + X * K + Q
                                                }
                                                ct.adjust(pt / x, gt)
                                            }
                                            S.clipEndWithSlot(y)
                                        } else
                                            S.clipEndWithSlot(y)
                                    } else
                                        S.clipEndWithSlot(y);
                                else
                                    S.clipEndWithSlot(y);
                            else
                                S.clipEndWithSlot(y);
                        else
                            S.clipEndWithSlot(y);
                if (S.clipEnd(),
                C && _) {
                    var rt;
                    C.strokeColor = R,
                    C.fillColor = P;
                    for (var st = 0, at = g.bones.length; st < at; st++) {
                        var ot = (rt = g.bones[st]).data.length * rt.a + rt.worldX
                          , lt = rt.data.length * rt.c + rt.worldY;
                        C.moveTo(rt.worldX, rt.worldY),
                        C.lineTo(ot, lt),
                        C.stroke(),
                        C.circle(rt.worldX, rt.worldY, 1.5 * Math.PI),
                        C.fill(),
                        0 === st && (C.fillColor = O)
                    }
                }
            }
            ,
            r.cacheTraverse = function(t) {
                var e = ht._curFrame;
                if (e) {
                    var i = e.segments;
                    if (0 != i.length) {
                        var n, r, s, a, o, l, h = e.vertices, c = e.indices, u = 0, _ = 0, f = 0;
                        t && (l = t.m,
                        Y = l[0],
                        Z = l[1],
                        q = l[4],
                        K = l[5],
                        J = l[12],
                        Q = l[13]);
                        var d = 16 & B
                          , p = d && 1 === Y && 0 === Z && 0 === q && 1 === K
                          , m = 0
                          , y = e.colors
                          , A = y[m++]
                          , x = A.vfOffset;
                        Ct(A);
                        for (var b = 0, C = i.length; b < C; b++) {
                            var T = i[b];
                            if (a = bt(T.tex, T.blendMode)) {
                                (W || a.getHash() !== ut.material.getHash()) && (W = !1,
                                ut._flush(),
                                ut.node = _t,
                                ut.material = a),
                                mt = T.vertexCount,
                                gt = T.indexCount,
                                o = ct.request(mt, gt),
                                At = o.indiceOffset,
                                vt = o.vertexOffset,
                                xt = o.byteOffset >> 2,
                                n = ct._vData,
                                r = ct._iData,
                                s = ct._uintVData;
                                for (var S = At, w = At + gt; S < w; S++)
                                    r[S] = vt + c[_++];
                                if (f = T.vfCount,
                                n.set(h.subarray(u, u + f), xt),
                                u += f,
                                p)
                                    for (var E = xt, M = xt + f; E < M; E += 6)
                                        n[E] += J,
                                        n[E + 1] += Q;
                                else if (d)
                                    for (var D = xt, I = xt + f; D < I; D += 6)
                                        j = n[D],
                                        X = n[D + 1],
                                        n[D] = j * Y + X * q + J,
                                        n[D + 1] = j * Z + X * K + Q;
                                if (ct.adjust(mt, gt),
                                ft)
                                    for (var P = u - f, R = xt + 4, O = xt + 4 + f; R < O; R += 6,
                                    P += 6)
                                        P >= x && (Ct(A = y[m++]),
                                        x = A.vfOffset),
                                        s[R] = v,
                                        s[R + 1] = g
                            }
                        }
                    }
                }
            }
            ,
            r.fillBuffers = function(t, e) {
                var i = t.node;
                if (i._renderFlag |= S.FLAG_UPDATE_RENDER_DATA,
                t._skeleton) {
                    var n = i._color;
                    d = n.r / 255,
                    p = n.g / 255,
                    m = n.b / 255,
                    y = n.a / 255,
                    c = t.useTint || t.isAnimationCached(),
                    A = c ? M : E,
                    x = c ? 6 : 5,
                    _t = t.node,
                    ct = e.getBuffer("spine", A),
                    ut = e,
                    ht = t,
                    W = !0,
                    a = t.premultipliedAlpha,
                    o = 1,
                    B = 0,
                    ft = !1,
                    dt = t._effectDelegate && t._effectDelegate._vertexEffect,
                    (4294967295 !== n._val || a) && (ft = !0),
                    c && (B |= 1);
                    var r = void 0;
                    ht.enableBatch && (r = _t._worldMatrix,
                    W = !1,
                    B |= 16),
                    t.isAnimationCached() ? this.cacheTraverse(r) : (dt && dt.begin(t._skeleton),
                    this.realTimeTraverse(r),
                    dt && dt.end()),
                    e.worldMatDirty++,
                    t.attachUtil._syncAttachedNode(),
                    _t = void 0,
                    ct = void 0,
                    ut = void 0,
                    ht = void 0,
                    dt = null
                }
            }
            ,
            r.postFillBuffers = function(t, e) {
                e.worldMatDirty--
            }
            ,
            n
        }
        )(r.default);
        i.default = St,
        r.default.register(C, St),
        e.exports = i.default
    }
    ), {
        "../../cocos2d/core/renderer/assembler": 221,
        "../../cocos2d/core/renderer/render-flow": 225,
        "../../cocos2d/core/renderer/webgl/vertex-format": 256,
        "./Skeleton": 368,
        "./lib/spine": 370
    }],
    375: [(function(t, e) {
        "use strict";
        var i = function() {
            this.start = null,
            this.end = null,
            this.complete = null,
            this.event = null,
            this.interrupt = null,
            this.dispose = null
        };
        i.getListeners = function(t) {
            return t.listener || (t.listener = new i),
            t.listener
        }
        ,
        e.exports = i
    }
    ), {}],
    376: [(function(t, e) {
        "use strict";
        var i = t("./lib/spine");
        sp.VertexEffectDelegate = cc.Class({
            name: "sp.VertexEffectDelegate",
            ctor: function() {
                this._vertexEffect = null,
                this._interpolation = null,
                this._effectType = "none"
            },
            clear: function() {
                this._vertexEffect = null,
                this._interpolation = null,
                this._effectType = "none"
            },
            initJitter: function(t, e) {
                return this._effectType = "jitter",
                this._vertexEffect = new i.JitterEffect(t,e),
                this._vertexEffect
            },
            initSwirlWithPow: function(t, e) {
                return this._interpolation = new i.Pow(e),
                this._vertexEffect = new i.SwirlEffect(t,this._interpolation),
                this._vertexEffect
            },
            initSwirlWithPowOut: function(t, e) {
                return this._interpolation = new i.PowOut(e),
                this._vertexEffect = new i.SwirlEffect(t,this._interpolation),
                this._vertexEffect
            },
            getJitterVertexEffect: function() {
                return this._vertexEffect
            },
            getSwirlVertexEffect: function() {
                return this._vertexEffect
            },
            getVertexEffect: function() {
                return this._vertexEffect
            },
            getEffectType: function() {
                return this._effectType
            }
        }),
        e.exports = sp.VertexEffectDelegate
    }
    ), {
        "./lib/spine": 370
    }],
    377: [(function(t, e, i) {
        "use strict";
        var n;
        n = function(t) {
            function e(t, e) {
                return void 0 !== t ? t : e
            }
            var i = 1e37
              , n = 1e-5
              , r = n * n
              , s = 3.14159265359
              , a = 2
              , o = 8
              , l = .008
              , h = 2 / 180 * s
              , c = 2 * l
              , u = -1
              , _ = (function() {
                function t(t, e, i) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    this.major = 0,
                    this.minor = 0,
                    this.revision = 0,
                    this.major = t,
                    this.minor = e,
                    this.revision = i
                }
                return t.prototype.toString = function() {
                    return this.major + "." + this.minor + "." + this.revision
                }
                ,
                t
            }
            )()
              , f = new _(2,3,2);
            function d(t, e) {
                for (var i = [], n = 0; n < t; ++n)
                    i.push(e(n));
                return i
            }
            function p(t, e) {
                void 0 === e && (e = 0);
                for (var i = [], n = 0; n < t; ++n)
                    i.push(e);
                return i
            }
            var m = Math.abs
              , y = Math.min
              , v = Math.max;
            function g(t, e, i) {
                return t < e ? e : t > i ? i : t
            }
            var A = isFinite;
            function x(t) {
                return t * t
            }
            function b(t) {
                return 1 / Math.sqrt(t)
            }
            var C, T = Math.sqrt, S = Math.pow, w = Math.cos, E = Math.sin, M = Math.acos, D = Math.asin, B = Math.atan2, I = (function() {
                function t(t, e) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    this.x = t,
                    this.y = e
                }
                return t.prototype.Clone = function() {
                    return new t(this.x,this.y)
                }
                ,
                t.prototype.SetZero = function() {
                    return this.x = 0,
                    this.y = 0,
                    this
                }
                ,
                t.prototype.Set = function(t, e) {
                    return this.x = t,
                    this.y = e,
                    this
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.x = t.x,
                    this.y = t.y,
                    this
                }
                ,
                t.prototype.SelfAdd = function(t) {
                    return this.x += t.x,
                    this.y += t.y,
                    this
                }
                ,
                t.prototype.SelfAddXY = function(t, e) {
                    return this.x += t,
                    this.y += e,
                    this
                }
                ,
                t.prototype.SelfSub = function(t) {
                    return this.x -= t.x,
                    this.y -= t.y,
                    this
                }
                ,
                t.prototype.SelfSubXY = function(t, e) {
                    return this.x -= t,
                    this.y -= e,
                    this
                }
                ,
                t.prototype.SelfMul = function(t) {
                    return this.x *= t,
                    this.y *= t,
                    this
                }
                ,
                t.prototype.SelfMulAdd = function(t, e) {
                    return this.x += t * e.x,
                    this.y += t * e.y,
                    this
                }
                ,
                t.prototype.SelfMulSub = function(t, e) {
                    return this.x -= t * e.x,
                    this.y -= t * e.y,
                    this
                }
                ,
                t.prototype.Dot = function(t) {
                    return this.x * t.x + this.y * t.y
                }
                ,
                t.prototype.Cross = function(t) {
                    return this.x * t.y - this.y * t.x
                }
                ,
                t.prototype.Length = function() {
                    var t = this.x
                      , e = this.y;
                    return Math.sqrt(t * t + e * e)
                }
                ,
                t.prototype.LengthSquared = function() {
                    var t = this.x
                      , e = this.y;
                    return t * t + e * e
                }
                ,
                t.prototype.Normalize = function() {
                    var t = this.Length();
                    if (t >= n) {
                        var e = 1 / t;
                        this.x *= e,
                        this.y *= e
                    }
                    return t
                }
                ,
                t.prototype.SelfNormalize = function() {
                    var t = this.Length();
                    if (t >= n) {
                        var e = 1 / t;
                        this.x *= e,
                        this.y *= e
                    }
                    return this
                }
                ,
                t.prototype.SelfRotate = function(t) {
                    var e = Math.cos(t)
                      , i = Math.sin(t)
                      , n = this.x;
                    return this.x = e * n - i * this.y,
                    this.y = i * n + e * this.y,
                    this
                }
                ,
                t.prototype.IsValid = function() {
                    return isFinite(this.x) && isFinite(this.y)
                }
                ,
                t.prototype.SelfCrossVS = function(t) {
                    var e = this.x;
                    return this.x = t * this.y,
                    this.y = -t * e,
                    this
                }
                ,
                t.prototype.SelfCrossSV = function(t) {
                    var e = this.x;
                    return this.x = -t * this.y,
                    this.y = t * e,
                    this
                }
                ,
                t.prototype.SelfMinV = function(t) {
                    return this.x = y(this.x, t.x),
                    this.y = y(this.y, t.y),
                    this
                }
                ,
                t.prototype.SelfMaxV = function(t) {
                    return this.x = v(this.x, t.x),
                    this.y = v(this.y, t.y),
                    this
                }
                ,
                t.prototype.SelfAbs = function() {
                    return this.x = m(this.x),
                    this.y = m(this.y),
                    this
                }
                ,
                t.prototype.SelfNeg = function() {
                    return this.x = -this.x,
                    this.y = -this.y,
                    this
                }
                ,
                t.prototype.SelfSkew = function() {
                    var t = this.x;
                    return this.x = -this.y,
                    this.y = t,
                    this
                }
                ,
                t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t.AbsV = function(t, e) {
                    return e.x = m(t.x),
                    e.y = m(t.y),
                    e
                }
                ,
                t.MinV = function(t, e, i) {
                    return i.x = y(t.x, e.x),
                    i.y = y(t.y, e.y),
                    i
                }
                ,
                t.MaxV = function(t, e, i) {
                    return i.x = v(t.x, e.x),
                    i.y = v(t.y, e.y),
                    i
                }
                ,
                t.ClampV = function(t, e, i, n) {
                    return n.x = g(t.x, e.x, i.x),
                    n.y = g(t.y, e.y, i.y),
                    n
                }
                ,
                t.RotateV = function(t, e, i) {
                    var n = t.x
                      , r = t.y
                      , s = Math.cos(e)
                      , a = Math.sin(e);
                    return i.x = s * n - a * r,
                    i.y = a * n + s * r,
                    i
                }
                ,
                t.DotVV = function(t, e) {
                    return t.x * e.x + t.y * e.y
                }
                ,
                t.CrossVV = function(t, e) {
                    return t.x * e.y - t.y * e.x
                }
                ,
                t.CrossVS = function(t, e, i) {
                    var n = t.x;
                    return i.x = e * t.y,
                    i.y = -e * n,
                    i
                }
                ,
                t.CrossVOne = function(t, e) {
                    var i = t.x;
                    return e.x = t.y,
                    e.y = -i,
                    e
                }
                ,
                t.CrossSV = function(t, e, i) {
                    var n = e.x;
                    return i.x = -t * e.y,
                    i.y = t * n,
                    i
                }
                ,
                t.CrossOneV = function(t, e) {
                    var i = t.x;
                    return e.x = -t.y,
                    e.y = i,
                    e
                }
                ,
                t.AddVV = function(t, e, i) {
                    return i.x = t.x + e.x,
                    i.y = t.y + e.y,
                    i
                }
                ,
                t.SubVV = function(t, e, i) {
                    return i.x = t.x - e.x,
                    i.y = t.y - e.y,
                    i
                }
                ,
                t.MulSV = function(t, e, i) {
                    return i.x = e.x * t,
                    i.y = e.y * t,
                    i
                }
                ,
                t.MulVS = function(t, e, i) {
                    return i.x = t.x * e,
                    i.y = t.y * e,
                    i
                }
                ,
                t.AddVMulSV = function(t, e, i, n) {
                    return n.x = t.x + e * i.x,
                    n.y = t.y + e * i.y,
                    n
                }
                ,
                t.SubVMulSV = function(t, e, i, n) {
                    return n.x = t.x - e * i.x,
                    n.y = t.y - e * i.y,
                    n
                }
                ,
                t.AddVCrossSV = function(t, e, i, n) {
                    var r = i.x;
                    return n.x = t.x - e * i.y,
                    n.y = t.y + e * r,
                    n
                }
                ,
                t.MidVV = function(t, e, i) {
                    return i.x = .5 * (t.x + e.x),
                    i.y = .5 * (t.y + e.y),
                    i
                }
                ,
                t.ExtVV = function(t, e, i) {
                    return i.x = .5 * (e.x - t.x),
                    i.y = .5 * (e.y - t.y),
                    i
                }
                ,
                t.IsEqualToV = function(t, e) {
                    return t.x === e.x && t.y === e.y
                }
                ,
                t.DistanceVV = function(t, e) {
                    var i = t.x - e.x
                      , n = t.y - e.y;
                    return Math.sqrt(i * i + n * n)
                }
                ,
                t.DistanceSquaredVV = function(t, e) {
                    var i = t.x - e.x
                      , n = t.y - e.y;
                    return i * i + n * n
                }
                ,
                t.NegV = function(t, e) {
                    return e.x = -t.x,
                    e.y = -t.y,
                    e
                }
                ,
                t.ZERO = new t(0,0),
                t.UNITX = new t(1,0),
                t.UNITY = new t(0,1),
                t.s_t0 = new t,
                t.s_t1 = new t,
                t.s_t2 = new t,
                t.s_t3 = new t,
                t
            }
            )(), P = new I(0,0), R = (function() {
                function t(t, e, i) {
                    void 0 === t && (t = 0),
                    void 0 === e && (e = 0),
                    void 0 === i && (i = 0),
                    this.x = t,
                    this.y = e,
                    this.z = i
                }
                return t.prototype.Clone = function() {
                    return new t(this.x,this.y,this.z)
                }
                ,
                t.prototype.SetZero = function() {
                    return this.x = 0,
                    this.y = 0,
                    this.z = 0,
                    this
                }
                ,
                t.prototype.SetXYZ = function(t, e, i) {
                    return this.x = t,
                    this.y = e,
                    this.z = i,
                    this
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.x = t.x,
                    this.y = t.y,
                    this.z = t.z,
                    this
                }
                ,
                t.prototype.SelfNeg = function() {
                    return this.x = -this.x,
                    this.y = -this.y,
                    this.z = -this.z,
                    this
                }
                ,
                t.prototype.SelfAdd = function(t) {
                    return this.x += t.x,
                    this.y += t.y,
                    this.z += t.z,
                    this
                }
                ,
                t.prototype.SelfAddXYZ = function(t, e, i) {
                    return this.x += t,
                    this.y += e,
                    this.z += i,
                    this
                }
                ,
                t.prototype.SelfSub = function(t) {
                    return this.x -= t.x,
                    this.y -= t.y,
                    this.z -= t.z,
                    this
                }
                ,
                t.prototype.SelfSubXYZ = function(t, e, i) {
                    return this.x -= t,
                    this.y -= e,
                    this.z -= i,
                    this
                }
                ,
                t.prototype.SelfMul = function(t) {
                    return this.x *= t,
                    this.y *= t,
                    this.z *= t,
                    this
                }
                ,
                t.DotV3V3 = function(t, e) {
                    return t.x * e.x + t.y * e.y + t.z * e.z
                }
                ,
                t.CrossV3V3 = function(t, e, i) {
                    var n = t.x
                      , r = t.y
                      , s = t.z
                      , a = e.x
                      , o = e.y
                      , l = e.z;
                    return i.x = r * l - s * o,
                    i.y = s * a - n * l,
                    i.z = n * o - r * a,
                    i
                }
                ,
                t.ZERO = new t(0,0,0),
                t.s_t0 = new t,
                t
            }
            )(), O = (function() {
                function t() {
                    this.ex = new I(1,0),
                    this.ey = new I(0,1)
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.FromVV = function(e, i) {
                    return (new t).SetVV(e, i)
                }
                ,
                t.FromSSSS = function(e, i, n, r) {
                    return (new t).SetSSSS(e, i, n, r)
                }
                ,
                t.FromAngle = function(e) {
                    return (new t).SetAngle(e)
                }
                ,
                t.prototype.SetSSSS = function(t, e, i, n) {
                    return this.ex.Set(t, i),
                    this.ey.Set(e, n),
                    this
                }
                ,
                t.prototype.SetVV = function(t, e) {
                    return this.ex.Copy(t),
                    this.ey.Copy(e),
                    this
                }
                ,
                t.prototype.SetAngle = function(t) {
                    var e = Math.cos(t)
                      , i = Math.sin(t);
                    return this.ex.Set(e, i),
                    this.ey.Set(-i, e),
                    this
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.ex.Copy(t.ex),
                    this.ey.Copy(t.ey),
                    this
                }
                ,
                t.prototype.SetIdentity = function() {
                    return this.ex.Set(1, 0),
                    this.ey.Set(0, 1),
                    this
                }
                ,
                t.prototype.SetZero = function() {
                    return this.ex.SetZero(),
                    this.ey.SetZero(),
                    this
                }
                ,
                t.prototype.GetAngle = function() {
                    return Math.atan2(this.ex.y, this.ex.x)
                }
                ,
                t.prototype.GetInverse = function(t) {
                    var e = this.ex.x
                      , i = this.ey.x
                      , n = this.ex.y
                      , r = this.ey.y
                      , s = e * r - i * n;
                    return 0 !== s && (s = 1 / s),
                    t.ex.x = s * r,
                    t.ey.x = -s * i,
                    t.ex.y = -s * n,
                    t.ey.y = s * e,
                    t
                }
                ,
                t.prototype.Solve = function(t, e, i) {
                    var n = this.ex.x
                      , r = this.ey.x
                      , s = this.ex.y
                      , a = this.ey.y
                      , o = n * a - r * s;
                    return 0 !== o && (o = 1 / o),
                    i.x = o * (a * t - r * e),
                    i.y = o * (n * e - s * t),
                    i
                }
                ,
                t.prototype.SelfAbs = function() {
                    return this.ex.SelfAbs(),
                    this.ey.SelfAbs(),
                    this
                }
                ,
                t.prototype.SelfInv = function() {
                    return this.GetInverse(this),
                    this
                }
                ,
                t.prototype.SelfAddM = function(t) {
                    return this.ex.SelfAdd(t.ex),
                    this.ey.SelfAdd(t.ey),
                    this
                }
                ,
                t.prototype.SelfSubM = function(t) {
                    return this.ex.SelfSub(t.ex),
                    this.ey.SelfSub(t.ey),
                    this
                }
                ,
                t.AbsM = function(t, e) {
                    var i = t.ex
                      , n = t.ey;
                    return e.ex.x = m(i.x),
                    e.ex.y = m(i.y),
                    e.ey.x = m(n.x),
                    e.ey.y = m(n.y),
                    e
                }
                ,
                t.MulMV = function(t, e, i) {
                    var n = t.ex
                      , r = t.ey
                      , s = e.x
                      , a = e.y;
                    return i.x = n.x * s + r.x * a,
                    i.y = n.y * s + r.y * a,
                    i
                }
                ,
                t.MulTMV = function(t, e, i) {
                    var n = t.ex
                      , r = t.ey
                      , s = e.x
                      , a = e.y;
                    return i.x = n.x * s + n.y * a,
                    i.y = r.x * s + r.y * a,
                    i
                }
                ,
                t.AddMM = function(t, e, i) {
                    var n = t.ex
                      , r = t.ey
                      , s = e.ex
                      , a = e.ey;
                    return i.ex.x = n.x + s.x,
                    i.ex.y = n.y + s.y,
                    i.ey.x = r.x + a.x,
                    i.ey.y = r.y + a.y,
                    i
                }
                ,
                t.MulMM = function(t, e, i) {
                    var n = t.ex.x
                      , r = t.ex.y
                      , s = t.ey.x
                      , a = t.ey.y
                      , o = e.ex.x
                      , l = e.ex.y
                      , h = e.ey.x
                      , c = e.ey.y;
                    return i.ex.x = n * o + s * l,
                    i.ex.y = r * o + a * l,
                    i.ey.x = n * h + s * c,
                    i.ey.y = r * h + a * c,
                    i
                }
                ,
                t.MulTMM = function(t, e, i) {
                    var n = t.ex.x
                      , r = t.ex.y
                      , s = t.ey.x
                      , a = t.ey.y
                      , o = e.ex.x
                      , l = e.ex.y
                      , h = e.ey.x
                      , c = e.ey.y;
                    return i.ex.x = n * o + r * l,
                    i.ex.y = s * o + a * l,
                    i.ey.x = n * h + r * c,
                    i.ey.y = s * h + a * c,
                    i
                }
                ,
                t.IDENTITY = new t,
                t
            }
            )(), L = (function() {
                function t() {
                    this.ex = new R(1,0,0),
                    this.ey = new R(0,1,0),
                    this.ez = new R(0,0,1)
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.SetVVV = function(t, e, i) {
                    return this.ex.Copy(t),
                    this.ey.Copy(e),
                    this.ez.Copy(i),
                    this
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.ex.Copy(t.ex),
                    this.ey.Copy(t.ey),
                    this.ez.Copy(t.ez),
                    this
                }
                ,
                t.prototype.SetIdentity = function() {
                    return this.ex.SetXYZ(1, 0, 0),
                    this.ey.SetXYZ(0, 1, 0),
                    this.ez.SetXYZ(0, 0, 1),
                    this
                }
                ,
                t.prototype.SetZero = function() {
                    return this.ex.SetZero(),
                    this.ey.SetZero(),
                    this.ez.SetZero(),
                    this
                }
                ,
                t.prototype.SelfAddM = function(t) {
                    return this.ex.SelfAdd(t.ex),
                    this.ey.SelfAdd(t.ey),
                    this.ez.SelfAdd(t.ez),
                    this
                }
                ,
                t.prototype.Solve33 = function(t, e, i, n) {
                    var r = this.ex.x
                      , s = this.ex.y
                      , a = this.ex.z
                      , o = this.ey.x
                      , l = this.ey.y
                      , h = this.ey.z
                      , c = this.ez.x
                      , u = this.ez.y
                      , _ = this.ez.z
                      , f = r * (l * _ - h * u) + s * (h * c - o * _) + a * (o * u - l * c);
                    return 0 !== f && (f = 1 / f),
                    n.x = f * (t * (l * _ - h * u) + e * (h * c - o * _) + i * (o * u - l * c)),
                    n.y = f * (r * (e * _ - i * u) + s * (i * c - t * _) + a * (t * u - e * c)),
                    n.z = f * (r * (l * i - h * e) + s * (h * t - o * i) + a * (o * e - l * t)),
                    n
                }
                ,
                t.prototype.Solve22 = function(t, e, i) {
                    var n = this.ex.x
                      , r = this.ey.x
                      , s = this.ex.y
                      , a = this.ey.y
                      , o = n * a - r * s;
                    return 0 !== o && (o = 1 / o),
                    i.x = o * (a * t - r * e),
                    i.y = o * (n * e - s * t),
                    i
                }
                ,
                t.prototype.GetInverse22 = function(t) {
                    var e = this.ex.x
                      , i = this.ey.x
                      , n = this.ex.y
                      , r = this.ey.y
                      , s = e * r - i * n;
                    0 !== s && (s = 1 / s),
                    t.ex.x = s * r,
                    t.ey.x = -s * i,
                    t.ex.z = 0,
                    t.ex.y = -s * n,
                    t.ey.y = s * e,
                    t.ey.z = 0,
                    t.ez.x = 0,
                    t.ez.y = 0,
                    t.ez.z = 0
                }
                ,
                t.prototype.GetSymInverse33 = function(t) {
                    var e = R.DotV3V3(this.ex, R.CrossV3V3(this.ey, this.ez, R.s_t0));
                    0 !== e && (e = 1 / e);
                    var i = this.ex.x
                      , n = this.ey.x
                      , r = this.ez.x
                      , s = this.ey.y
                      , a = this.ez.y
                      , o = this.ez.z;
                    t.ex.x = e * (s * o - a * a),
                    t.ex.y = e * (r * a - n * o),
                    t.ex.z = e * (n * a - r * s),
                    t.ey.x = t.ex.y,
                    t.ey.y = e * (i * o - r * r),
                    t.ey.z = e * (r * n - i * a),
                    t.ez.x = t.ex.z,
                    t.ez.y = t.ey.z,
                    t.ez.z = e * (i * s - n * n)
                }
                ,
                t.MulM33V3 = function(t, e, i) {
                    var n = e.x
                      , r = e.y
                      , s = e.z;
                    return i.x = t.ex.x * n + t.ey.x * r + t.ez.x * s,
                    i.y = t.ex.y * n + t.ey.y * r + t.ez.y * s,
                    i.z = t.ex.z * n + t.ey.z * r + t.ez.z * s,
                    i
                }
                ,
                t.MulM33XYZ = function(t, e, i, n, r) {
                    return r.x = t.ex.x * e + t.ey.x * i + t.ez.x * n,
                    r.y = t.ex.y * e + t.ey.y * i + t.ez.y * n,
                    r.z = t.ex.z * e + t.ey.z * i + t.ez.z * n,
                    r
                }
                ,
                t.MulM33V2 = function(t, e, i) {
                    var n = e.x
                      , r = e.y;
                    return i.x = t.ex.x * n + t.ey.x * r,
                    i.y = t.ex.y * n + t.ey.y * r,
                    i
                }
                ,
                t.MulM33XY = function(t, e, i, n) {
                    return n.x = t.ex.x * e + t.ey.x * i,
                    n.y = t.ex.y * e + t.ey.y * i,
                    n
                }
                ,
                t.IDENTITY = new t,
                t
            }
            )(), F = (function() {
                function t(t) {
                    void 0 === t && (t = 0),
                    this.s = 0,
                    this.c = 1,
                    t && (this.s = Math.sin(t),
                    this.c = Math.cos(t))
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.s = t.s,
                    this.c = t.c,
                    this
                }
                ,
                t.prototype.SetAngle = function(t) {
                    return this.s = Math.sin(t),
                    this.c = Math.cos(t),
                    this
                }
                ,
                t.prototype.SetIdentity = function() {
                    return this.s = 0,
                    this.c = 1,
                    this
                }
                ,
                t.prototype.GetAngle = function() {
                    return Math.atan2(this.s, this.c)
                }
                ,
                t.prototype.GetXAxis = function(t) {
                    return t.x = this.c,
                    t.y = this.s,
                    t
                }
                ,
                t.prototype.GetYAxis = function(t) {
                    return t.x = -this.s,
                    t.y = this.c,
                    t
                }
                ,
                t.MulRR = function(t, e, i) {
                    var n = t.c
                      , r = t.s
                      , s = e.c
                      , a = e.s;
                    return i.s = r * s + n * a,
                    i.c = n * s - r * a,
                    i
                }
                ,
                t.MulTRR = function(t, e, i) {
                    var n = t.c
                      , r = t.s
                      , s = e.c
                      , a = e.s;
                    return i.s = n * a - r * s,
                    i.c = n * s + r * a,
                    i
                }
                ,
                t.MulRV = function(t, e, i) {
                    var n = t.c
                      , r = t.s
                      , s = e.x
                      , a = e.y;
                    return i.x = n * s - r * a,
                    i.y = r * s + n * a,
                    i
                }
                ,
                t.MulTRV = function(t, e, i) {
                    var n = t.c
                      , r = t.s
                      , s = e.x
                      , a = e.y;
                    return i.x = n * s + r * a,
                    i.y = -r * s + n * a,
                    i
                }
                ,
                t.IDENTITY = new t,
                t
            }
            )(), V = (function() {
                function t() {
                    this.p = new I,
                    this.q = new F
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.p.Copy(t.p),
                    this.q.Copy(t.q),
                    this
                }
                ,
                t.prototype.SetIdentity = function() {
                    return this.p.SetZero(),
                    this.q.SetIdentity(),
                    this
                }
                ,
                t.prototype.SetPositionRotation = function(t, e) {
                    return this.p.Copy(t),
                    this.q.Copy(e),
                    this
                }
                ,
                t.prototype.SetPositionAngle = function(t, e) {
                    return this.p.Copy(t),
                    this.q.SetAngle(e),
                    this
                }
                ,
                t.prototype.SetPosition = function(t) {
                    return this.p.Copy(t),
                    this
                }
                ,
                t.prototype.SetPositionXY = function(t, e) {
                    return this.p.Set(t, e),
                    this
                }
                ,
                t.prototype.SetRotation = function(t) {
                    return this.q.Copy(t),
                    this
                }
                ,
                t.prototype.SetRotationAngle = function(t) {
                    return this.q.SetAngle(t),
                    this
                }
                ,
                t.prototype.GetPosition = function() {
                    return this.p
                }
                ,
                t.prototype.GetRotation = function() {
                    return this.q
                }
                ,
                t.prototype.GetRotationAngle = function() {
                    return this.q.GetAngle()
                }
                ,
                t.prototype.GetAngle = function() {
                    return this.q.GetAngle()
                }
                ,
                t.MulXV = function(t, e, i) {
                    var n = t.q.c
                      , r = t.q.s
                      , s = e.x
                      , a = e.y;
                    return i.x = n * s - r * a + t.p.x,
                    i.y = r * s + n * a + t.p.y,
                    i
                }
                ,
                t.MulTXV = function(t, e, i) {
                    var n = t.q.c
                      , r = t.q.s
                      , s = e.x - t.p.x
                      , a = e.y - t.p.y;
                    return i.x = n * s + r * a,
                    i.y = -r * s + n * a,
                    i
                }
                ,
                t.MulXX = function(t, e, i) {
                    return F.MulRR(t.q, e.q, i.q),
                    I.AddVV(F.MulRV(t.q, e.p, i.p), t.p, i.p),
                    i
                }
                ,
                t.MulTXX = function(t, e, i) {
                    return F.MulTRR(t.q, e.q, i.q),
                    F.MulTRV(t.q, I.SubVV(e.p, t.p, i.p), i.p),
                    i
                }
                ,
                t.IDENTITY = new t,
                t
            }
            )(), N = (function() {
                function t() {
                    this.localCenter = new I,
                    this.c0 = new I,
                    this.c = new I,
                    this.a0 = 0,
                    this.a = 0,
                    this.alpha0 = 0
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.localCenter.Copy(t.localCenter),
                    this.c0.Copy(t.c0),
                    this.c.Copy(t.c),
                    this.a0 = t.a0,
                    this.a = t.a,
                    this.alpha0 = t.alpha0,
                    this
                }
                ,
                t.prototype.GetTransform = function(t, e) {
                    var i = 1 - e;
                    t.p.x = i * this.c0.x + e * this.c.x,
                    t.p.y = i * this.c0.y + e * this.c.y;
                    var n = i * this.a0 + e * this.a;
                    return t.q.SetAngle(n),
                    t.p.SelfSub(F.MulRV(t.q, this.localCenter, I.s_t0)),
                    t
                }
                ,
                t.prototype.Advance = function(t) {
                    var e = (t - this.alpha0) / (1 - this.alpha0)
                      , i = 1 - e;
                    this.c0.x = i * this.c0.x + e * this.c.x,
                    this.c0.y = i * this.c0.y + e * this.c.y,
                    this.a0 = i * this.a0 + e * this.a,
                    this.alpha0 = t
                }
                ,
                t.prototype.Normalize = function() {
                    var t = 6.28318530718 * Math.floor(this.a0 / 6.28318530718);
                    this.a0 -= t,
                    this.a -= t
                }
                ,
                t
            }
            )(), k = (function() {
                function t(t, e, i, n) {
                    void 0 === t && (t = .5),
                    void 0 === e && (e = .5),
                    void 0 === i && (i = .5),
                    void 0 === n && (n = 1),
                    this.r = t,
                    this.g = e,
                    this.b = i,
                    this.a = n
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.r = t.r,
                    this.g = t.g,
                    this.b = t.b,
                    this.a = t.a,
                    this
                }
                ,
                t.prototype.IsEqual = function(t) {
                    return this.r === t.r && this.g === t.g && this.b === t.b && this.a === t.a
                }
                ,
                t.prototype.IsZero = function() {
                    return 0 === this.r && 0 === this.g && 0 === this.b && 0 === this.a
                }
                ,
                t.prototype.Set = function(t, e, i, n) {
                    void 0 === n && (n = this.a),
                    this.SetRGBA(t, e, i, n)
                }
                ,
                t.prototype.SetByteRGB = function(t, e, i) {
                    return this.r = t / 255,
                    this.g = e / 255,
                    this.b = i / 255,
                    this
                }
                ,
                t.prototype.SetByteRGBA = function(t, e, i, n) {
                    return this.r = t / 255,
                    this.g = e / 255,
                    this.b = i / 255,
                    this.a = n / 255,
                    this
                }
                ,
                t.prototype.SetRGB = function(t, e, i) {
                    return this.r = t,
                    this.g = e,
                    this.b = i,
                    this
                }
                ,
                t.prototype.SetRGBA = function(t, e, i, n) {
                    return this.r = t,
                    this.g = e,
                    this.b = i,
                    this.a = n,
                    this
                }
                ,
                t.prototype.SelfAdd = function(t) {
                    return this.r += t.r,
                    this.g += t.g,
                    this.b += t.b,
                    this.a += t.a,
                    this
                }
                ,
                t.prototype.Add = function(t, e) {
                    return e.r = this.r + t.r,
                    e.g = this.g + t.g,
                    e.b = this.b + t.b,
                    e.a = this.a + t.a,
                    e
                }
                ,
                t.prototype.SelfSub = function(t) {
                    return this.r -= t.r,
                    this.g -= t.g,
                    this.b -= t.b,
                    this.a -= t.a,
                    this
                }
                ,
                t.prototype.Sub = function(t, e) {
                    return e.r = this.r - t.r,
                    e.g = this.g - t.g,
                    e.b = this.b - t.b,
                    e.a = this.a - t.a,
                    e
                }
                ,
                t.prototype.SelfMul = function(t) {
                    return this.r *= t,
                    this.g *= t,
                    this.b *= t,
                    this.a *= t,
                    this
                }
                ,
                t.prototype.Mul = function(t, e) {
                    return e.r = this.r * t,
                    e.g = this.g * t,
                    e.b = this.b * t,
                    e.a = this.a * t,
                    e
                }
                ,
                t.prototype.Mix = function(e, i) {
                    t.MixColors(this, e, i)
                }
                ,
                t.MixColors = function(t, e, i) {
                    var n = i * (e.r - t.r)
                      , r = i * (e.g - t.g)
                      , s = i * (e.b - t.b)
                      , a = i * (e.a - t.a);
                    t.r += n,
                    t.g += r,
                    t.b += s,
                    t.a += a,
                    e.r -= n,
                    e.g -= r,
                    e.b -= s,
                    e.a -= a
                }
                ,
                t.prototype.MakeStyleString = function(e) {
                    return void 0 === e && (e = this.a),
                    t.MakeStyleString(this.r, this.g, this.b, e)
                }
                ,
                t.MakeStyleString = function(t, e, i, n) {
                    return void 0 === n && (n = 1),
                    t *= 255,
                    e *= 255,
                    i *= 255,
                    n < 1 ? "rgba(" + t + "," + e + "," + i + "," + n + ")" : "rgb(" + t + "," + e + "," + i + ")"
                }
                ,
                t.ZERO = new t(0,0,0,0),
                t.RED = new t(1,0,0),
                t.GREEN = new t(0,1,0),
                t.BLUE = new t(0,0,1),
                t
            }
            )();
            (C = t.b2DrawFlags || (t.b2DrawFlags = {}))[C.e_none = 0] = "e_none",
            C[C.e_shapeBit = 1] = "e_shapeBit",
            C[C.e_jointBit = 2] = "e_jointBit",
            C[C.e_aabbBit = 4] = "e_aabbBit",
            C[C.e_pairBit = 8] = "e_pairBit",
            C[C.e_centerOfMassBit = 16] = "e_centerOfMassBit",
            C[C.e_particleBit = 32] = "e_particleBit",
            C[C.e_controllerBit = 64] = "e_controllerBit",
            C[C.e_all = 63] = "e_all";
            var G = (function() {
                function t() {
                    this.m_drawFlags = 0
                }
                return t.prototype.SetFlags = function(t) {
                    this.m_drawFlags = t
                }
                ,
                t.prototype.GetFlags = function() {
                    return this.m_drawFlags
                }
                ,
                t.prototype.AppendFlags = function(t) {
                    this.m_drawFlags |= t
                }
                ,
                t.prototype.ClearFlags = function(t) {
                    this.m_drawFlags &= ~t
                }
                ,
                t
            }
            )()
              , U = (function() {
                function t() {
                    this.m_start = Date.now()
                }
                return t.prototype.Reset = function() {
                    return this.m_start = Date.now(),
                    this
                }
                ,
                t.prototype.GetMilliseconds = function() {
                    return Date.now() - this.m_start
                }
                ,
                t
            }
            )()
              , z = (function() {
                function t() {
                    this.m_count = 0,
                    this.m_min_count = 0,
                    this.m_max_count = 0
                }
                return t.prototype.GetCount = function() {
                    return this.m_count
                }
                ,
                t.prototype.GetMinCount = function() {
                    return this.m_min_count
                }
                ,
                t.prototype.GetMaxCount = function() {
                    return this.m_max_count
                }
                ,
                t.prototype.ResetCount = function() {
                    var t = this.m_count;
                    return this.m_count = 0,
                    t
                }
                ,
                t.prototype.ResetMinCount = function() {
                    this.m_min_count = 0
                }
                ,
                t.prototype.ResetMaxCount = function() {
                    this.m_max_count = 0
                }
                ,
                t.prototype.Increment = function() {
                    this.m_count++,
                    this.m_max_count < this.m_count && (this.m_max_count = this.m_count)
                }
                ,
                t.prototype.Decrement = function() {
                    this.m_count--,
                    this.m_min_count > this.m_count && (this.m_min_count = this.m_count)
                }
                ,
                t
            }
            )()
              , H = (function() {
                function t(t) {
                    this.m_stack = [],
                    this.m_count = 0,
                    this.m_stack = d(t, (function() {
                        return null
                    }
                    )),
                    this.m_count = 0
                }
                return t.prototype.Reset = function() {
                    return this.m_count = 0,
                    this
                }
                ,
                t.prototype.Push = function(t) {
                    this.m_stack[this.m_count] = t,
                    this.m_count++
                }
                ,
                t.prototype.Pop = function() {
                    this.m_count--;
                    var t = this.m_stack[this.m_count];
                    if (this.m_stack[this.m_count] = null,
                    null === t)
                        throw new Error;
                    return t
                }
                ,
                t.prototype.GetCount = function() {
                    return this.m_count
                }
                ,
                t
            }
            )()
              , W = (function() {
                function t() {
                    this.m_buffer = I.MakeArray(2),
                    this.m_vertices = this.m_buffer,
                    this.m_count = 0,
                    this.m_radius = 0
                }
                return t.prototype.Copy = function(t) {
                    return t.m_vertices === t.m_buffer ? (this.m_vertices = this.m_buffer,
                    this.m_buffer[0].Copy(t.m_buffer[0]),
                    this.m_buffer[1].Copy(t.m_buffer[1])) : this.m_vertices = t.m_vertices,
                    this.m_count = t.m_count,
                    this.m_radius = t.m_radius,
                    this
                }
                ,
                t.prototype.Reset = function() {
                    return this.m_vertices = this.m_buffer,
                    this.m_count = 0,
                    this.m_radius = 0,
                    this
                }
                ,
                t.prototype.SetShape = function(t, e) {
                    t.SetupDistanceProxy(this, e)
                }
                ,
                t.prototype.SetVerticesRadius = function(t, e, i) {
                    this.m_vertices = t,
                    this.m_count = e,
                    this.m_radius = i
                }
                ,
                t.prototype.GetSupport = function(t) {
                    for (var e = 0, i = I.DotVV(this.m_vertices[0], t), n = 1; n < this.m_count; ++n) {
                        var r = I.DotVV(this.m_vertices[n], t);
                        r > i && (e = n,
                        i = r)
                    }
                    return e
                }
                ,
                t.prototype.GetSupportVertex = function(t) {
                    for (var e = 0, i = I.DotVV(this.m_vertices[0], t), n = 1; n < this.m_count; ++n) {
                        var r = I.DotVV(this.m_vertices[n], t);
                        r > i && (e = n,
                        i = r)
                    }
                    return this.m_vertices[e]
                }
                ,
                t.prototype.GetVertexCount = function() {
                    return this.m_count
                }
                ,
                t.prototype.GetVertex = function(t) {
                    return this.m_vertices[t]
                }
                ,
                t
            }
            )()
              , j = (function() {
                function t() {
                    this.metric = 0,
                    this.count = 0,
                    this.indexA = [0, 0, 0],
                    this.indexB = [0, 0, 0]
                }
                return t.prototype.Reset = function() {
                    return this.metric = 0,
                    this.count = 0,
                    this
                }
                ,
                t
            }
            )()
              , X = (function() {
                function t() {
                    this.proxyA = new W,
                    this.proxyB = new W,
                    this.transformA = new V,
                    this.transformB = new V,
                    this.useRadii = !1
                }
                return t.prototype.Reset = function() {
                    return this.proxyA.Reset(),
                    this.proxyB.Reset(),
                    this.transformA.SetIdentity(),
                    this.transformB.SetIdentity(),
                    this.useRadii = !1,
                    this
                }
                ,
                t
            }
            )()
              , Y = (function() {
                function t() {
                    this.pointA = new I,
                    this.pointB = new I,
                    this.distance = 0,
                    this.iterations = 0
                }
                return t.prototype.Reset = function() {
                    return this.pointA.SetZero(),
                    this.pointB.SetZero(),
                    this.distance = 0,
                    this.iterations = 0,
                    this
                }
                ,
                t
            }
            )();
            t.b2_gjkCalls = 0,
            t.b2_gjkIters = 0,
            t.b2_gjkMaxIters = 0;
            var q = (function() {
                function t() {
                    this.wA = new I,
                    this.wB = new I,
                    this.w = new I,
                    this.a = 0,
                    this.indexA = 0,
                    this.indexB = 0
                }
                return t.prototype.Copy = function(t) {
                    return this.wA.Copy(t.wA),
                    this.wB.Copy(t.wB),
                    this.w.Copy(t.w),
                    this.a = t.a,
                    this.indexA = t.indexA,
                    this.indexB = t.indexB,
                    this
                }
                ,
                t
            }
            )()
              , J = (function() {
                function t() {
                    this.m_v1 = new q,
                    this.m_v2 = new q,
                    this.m_v3 = new q,
                    this.m_vertices = [],
                    this.m_count = 0,
                    this.m_vertices[0] = this.m_v1,
                    this.m_vertices[1] = this.m_v2,
                    this.m_vertices[2] = this.m_v3
                }
                return t.prototype.ReadCache = function(t, e, i, r, s) {
                    this.m_count = t.count;
                    for (var a = this.m_vertices, o = 0; o < this.m_count; ++o) {
                        (_ = a[o]).indexA = t.indexA[o],
                        _.indexB = t.indexB[o];
                        var l = e.GetVertex(_.indexA)
                          , h = r.GetVertex(_.indexB);
                        V.MulXV(i, l, _.wA),
                        V.MulXV(s, h, _.wB),
                        I.SubVV(_.wB, _.wA, _.w),
                        _.a = 0
                    }
                    if (this.m_count > 1) {
                        var c = t.metric
                          , u = this.GetMetric();
                        (u < .5 * c || 2 * c < u || u < n) && (this.m_count = 0)
                    }
                    var _;
                    0 === this.m_count && ((_ = a[0]).indexA = 0,
                    _.indexB = 0,
                    l = e.GetVertex(0),
                    h = r.GetVertex(0),
                    V.MulXV(i, l, _.wA),
                    V.MulXV(s, h, _.wB),
                    I.SubVV(_.wB, _.wA, _.w),
                    _.a = 1,
                    this.m_count = 1)
                }
                ,
                t.prototype.WriteCache = function(t) {
                    t.metric = this.GetMetric(),
                    t.count = this.m_count;
                    for (var e = this.m_vertices, i = 0; i < this.m_count; ++i)
                        t.indexA[i] = e[i].indexA,
                        t.indexB[i] = e[i].indexB
                }
                ,
                t.prototype.GetSearchDirection = function(t) {
                    switch (this.m_count) {
                    case 1:
                        return I.NegV(this.m_v1.w, t);
                    case 2:
                        var e = I.SubVV(this.m_v2.w, this.m_v1.w, t);
                        return I.CrossVV(e, I.NegV(this.m_v1.w, I.s_t0)) > 0 ? I.CrossOneV(e, t) : I.CrossVOne(e, t);
                    default:
                        return t.SetZero()
                    }
                }
                ,
                t.prototype.GetClosestPoint = function(t) {
                    switch (this.m_count) {
                    case 0:
                        return t.SetZero();
                    case 1:
                        return t.Copy(this.m_v1.w);
                    case 2:
                        return t.Set(this.m_v1.a * this.m_v1.w.x + this.m_v2.a * this.m_v2.w.x, this.m_v1.a * this.m_v1.w.y + this.m_v2.a * this.m_v2.w.y);
                    case 3:
                    default:
                        return t.SetZero()
                    }
                }
                ,
                t.prototype.GetWitnessPoints = function(t, e) {
                    switch (this.m_count) {
                    case 0:
                        break;
                    case 1:
                        t.Copy(this.m_v1.wA),
                        e.Copy(this.m_v1.wB);
                        break;
                    case 2:
                        t.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x,
                        t.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y,
                        e.x = this.m_v1.a * this.m_v1.wB.x + this.m_v2.a * this.m_v2.wB.x,
                        e.y = this.m_v1.a * this.m_v1.wB.y + this.m_v2.a * this.m_v2.wB.y;
                        break;
                    case 3:
                        e.x = t.x = this.m_v1.a * this.m_v1.wA.x + this.m_v2.a * this.m_v2.wA.x + this.m_v3.a * this.m_v3.wA.x,
                        e.y = t.y = this.m_v1.a * this.m_v1.wA.y + this.m_v2.a * this.m_v2.wA.y + this.m_v3.a * this.m_v3.wA.y
                    }
                }
                ,
                t.prototype.GetMetric = function() {
                    switch (this.m_count) {
                    case 0:
                    case 1:
                        return 0;
                    case 2:
                        return I.DistanceVV(this.m_v1.w, this.m_v2.w);
                    case 3:
                        return I.CrossVV(I.SubVV(this.m_v2.w, this.m_v1.w, I.s_t0), I.SubVV(this.m_v3.w, this.m_v1.w, I.s_t1));
                    default:
                        return 0
                    }
                }
                ,
                t.prototype.Solve2 = function() {
                    var e = this.m_v1.w
                      , i = this.m_v2.w
                      , n = I.SubVV(i, e, t.s_e12)
                      , r = -I.DotVV(e, n);
                    if (r <= 0)
                        return this.m_v1.a = 1,
                        void (this.m_count = 1);
                    var s = I.DotVV(i, n);
                    if (s <= 0)
                        return this.m_v2.a = 1,
                        this.m_count = 1,
                        void this.m_v1.Copy(this.m_v2);
                    var a = 1 / (s + r);
                    this.m_v1.a = s * a,
                    this.m_v2.a = r * a,
                    this.m_count = 2
                }
                ,
                t.prototype.Solve3 = function() {
                    var e = this.m_v1.w
                      , i = this.m_v2.w
                      , n = this.m_v3.w
                      , r = I.SubVV(i, e, t.s_e12)
                      , s = I.DotVV(e, r)
                      , a = I.DotVV(i, r)
                      , o = -s
                      , l = I.SubVV(n, e, t.s_e13)
                      , h = I.DotVV(e, l)
                      , c = I.DotVV(n, l)
                      , u = -h
                      , _ = I.SubVV(n, i, t.s_e23)
                      , f = I.DotVV(i, _)
                      , d = I.DotVV(n, _)
                      , p = -f
                      , m = I.CrossVV(r, l)
                      , y = m * I.CrossVV(i, n)
                      , v = m * I.CrossVV(n, e)
                      , g = m * I.CrossVV(e, i);
                    if (o <= 0 && u <= 0)
                        return this.m_v1.a = 1,
                        void (this.m_count = 1);
                    if (a > 0 && o > 0 && g <= 0) {
                        var A = 1 / (a + o);
                        return this.m_v1.a = a * A,
                        this.m_v2.a = o * A,
                        void (this.m_count = 2)
                    }
                    if (c > 0 && u > 0 && v <= 0) {
                        var x = 1 / (c + u);
                        return this.m_v1.a = c * x,
                        this.m_v3.a = u * x,
                        this.m_count = 2,
                        void this.m_v2.Copy(this.m_v3)
                    }
                    if (a <= 0 && p <= 0)
                        return this.m_v2.a = 1,
                        this.m_count = 1,
                        void this.m_v1.Copy(this.m_v2);
                    if (c <= 0 && d <= 0)
                        return this.m_v3.a = 1,
                        this.m_count = 1,
                        void this.m_v1.Copy(this.m_v3);
                    if (d > 0 && p > 0 && y <= 0) {
                        var b = 1 / (d + p);
                        return this.m_v2.a = d * b,
                        this.m_v3.a = p * b,
                        this.m_count = 2,
                        void this.m_v1.Copy(this.m_v3)
                    }
                    var C = 1 / (y + v + g);
                    this.m_v1.a = y * C,
                    this.m_v2.a = v * C,
                    this.m_v3.a = g * C,
                    this.m_count = 3
                }
                ,
                t.s_e12 = new I,
                t.s_e13 = new I,
                t.s_e23 = new I,
                t
            }
            )()
              , Z = new J
              , K = [0, 0, 0]
              , Q = [0, 0, 0]
              , $ = new I
              , tt = new I
              , et = new I
              , it = new I
              , nt = new I;
            function rt(e, i, s) {
                ++t.b2_gjkCalls;
                var a = s.proxyA
                  , o = s.proxyB
                  , l = s.transformA
                  , h = s.transformB
                  , c = Z;
                c.ReadCache(i, a, l, o, h);
                for (var u = c.m_vertices, _ = K, f = Q, d = 0, p = 0; p < 20; ) {
                    d = c.m_count;
                    for (var m = 0; m < d; ++m)
                        _[m] = u[m].indexA,
                        f[m] = u[m].indexB;
                    switch (c.m_count) {
                    case 1:
                        break;
                    case 2:
                        c.Solve2();
                        break;
                    case 3:
                        c.Solve3()
                    }
                    if (3 === c.m_count)
                        break;
                    var y = c.GetSearchDirection(tt);
                    if (y.LengthSquared() < r)
                        break;
                    var g = u[c.m_count];
                    g.indexA = a.GetSupport(F.MulTRV(l.q, I.NegV(y, I.s_t0), it)),
                    V.MulXV(l, a.GetVertex(g.indexA), g.wA),
                    g.indexB = o.GetSupport(F.MulTRV(h.q, y, nt)),
                    V.MulXV(h, o.GetVertex(g.indexB), g.wB),
                    I.SubVV(g.wB, g.wA, g.w),
                    ++p,
                    ++t.b2_gjkIters;
                    var A = !1;
                    for (m = 0; m < d; ++m)
                        if (g.indexA === _[m] && g.indexB === f[m]) {
                            A = !0;
                            break
                        }
                    if (A)
                        break;
                    ++c.m_count
                }
                if (t.b2_gjkMaxIters = v(t.b2_gjkMaxIters, p),
                c.GetWitnessPoints(e.pointA, e.pointB),
                e.distance = I.DistanceVV(e.pointA, e.pointB),
                e.iterations = p,
                c.WriteCache(i),
                s.useRadii) {
                    var x = a.m_radius
                      , b = o.m_radius;
                    if (e.distance > x + b && e.distance > n) {
                        e.distance -= x + b;
                        var C = I.SubVV(e.pointB, e.pointA, et);
                        C.Normalize(),
                        e.pointA.SelfMulAdd(x, C),
                        e.pointB.SelfMulSub(b, C)
                    } else {
                        var T = I.MidVV(e.pointA, e.pointB, $);
                        e.pointA.Copy(T),
                        e.pointB.Copy(T),
                        e.distance = 0
                    }
                }
            }
            var st, at = new I, ot = new J, lt = new I, ht = new I, ct = new I, ut = new I, _t = new I, ft = new I;
            (st = t.b2ContactFeatureType || (t.b2ContactFeatureType = {}))[st.e_vertex = 0] = "e_vertex",
            st[st.e_face = 1] = "e_face";
            var dt, pt = (function() {
                function t() {
                    this._key = 0,
                    this._key_invalid = !1,
                    this._indexA = 0,
                    this._indexB = 0,
                    this._typeA = 0,
                    this._typeB = 0
                }
                return Object.defineProperty(t.prototype, "key", {
                    get: function() {
                        return this._key_invalid && (this._key_invalid = !1,
                        this._key = this._indexA | this._indexB << 8 | this._typeA << 16 | this._typeB << 24),
                        this._key
                    },
                    set: function(t) {
                        this._key = t,
                        this._key_invalid = !1,
                        this._indexA = 255 & this._key,
                        this._indexB = this._key >> 8 & 255,
                        this._typeA = this._key >> 16 & 255,
                        this._typeB = this._key >> 24 & 255
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(t.prototype, "indexA", {
                    get: function() {
                        return this._indexA
                    },
                    set: function(t) {
                        this._indexA = t,
                        this._key_invalid = !0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(t.prototype, "indexB", {
                    get: function() {
                        return this._indexB
                    },
                    set: function(t) {
                        this._indexB = t,
                        this._key_invalid = !0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(t.prototype, "typeA", {
                    get: function() {
                        return this._typeA
                    },
                    set: function(t) {
                        this._typeA = t,
                        this._key_invalid = !0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                Object.defineProperty(t.prototype, "typeB", {
                    get: function() {
                        return this._typeB
                    },
                    set: function(t) {
                        this._typeB = t,
                        this._key_invalid = !0
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                t
            }
            )(), mt = (function() {
                function t() {
                    this.cf = new pt
                }
                return t.prototype.Copy = function(t) {
                    return this.key = t.key,
                    this
                }
                ,
                t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                Object.defineProperty(t.prototype, "key", {
                    get: function() {
                        return this.cf.key
                    },
                    set: function(t) {
                        this.cf.key = t
                    },
                    enumerable: !0,
                    configurable: !0
                }),
                t
            }
            )(), yt = (function() {
                function t() {
                    this.localPoint = new I,
                    this.normalImpulse = 0,
                    this.tangentImpulse = 0,
                    this.id = new mt
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t.prototype.Reset = function() {
                    this.localPoint.SetZero(),
                    this.normalImpulse = 0,
                    this.tangentImpulse = 0,
                    this.id.key = 0
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.localPoint.Copy(t.localPoint),
                    this.normalImpulse = t.normalImpulse,
                    this.tangentImpulse = t.tangentImpulse,
                    this.id.Copy(t.id),
                    this
                }
                ,
                t
            }
            )();
            (dt = t.b2ManifoldType || (t.b2ManifoldType = {}))[dt.e_unknown = -1] = "e_unknown",
            dt[dt.e_circles = 0] = "e_circles",
            dt[dt.e_faceA = 1] = "e_faceA",
            dt[dt.e_faceB = 2] = "e_faceB";
            var vt, gt = (function() {
                function e() {
                    this.points = yt.MakeArray(a),
                    this.localNormal = new I,
                    this.localPoint = new I,
                    this.type = t.b2ManifoldType.e_unknown,
                    this.pointCount = 0
                }
                return e.prototype.Reset = function() {
                    for (var e = 0; e < a; ++e)
                        this.points[e].Reset();
                    this.localNormal.SetZero(),
                    this.localPoint.SetZero(),
                    this.type = t.b2ManifoldType.e_unknown,
                    this.pointCount = 0
                }
                ,
                e.prototype.Copy = function(t) {
                    this.pointCount = t.pointCount;
                    for (var e = 0; e < a; ++e)
                        this.points[e].Copy(t.points[e]);
                    return this.localNormal.Copy(t.localNormal),
                    this.localPoint.Copy(t.localPoint),
                    this.type = t.type,
                    this
                }
                ,
                e.prototype.Clone = function() {
                    return (new e).Copy(this)
                }
                ,
                e
            }
            )(), At = (function() {
                function e() {
                    this.normal = new I,
                    this.points = I.MakeArray(a),
                    this.separations = p(a)
                }
                return e.prototype.Initialize = function(i, n, s, a, o) {
                    if (0 !== i.pointCount)
                        switch (i.type) {
                        case t.b2ManifoldType.e_circles:
                            this.normal.Set(1, 0);
                            var l = V.MulXV(n, i.localPoint, e.Initialize_s_pointA)
                              , h = V.MulXV(a, i.points[0].localPoint, e.Initialize_s_pointB);
                            I.DistanceSquaredVV(l, h) > r && I.SubVV(h, l, this.normal).SelfNormalize();
                            var c = I.AddVMulSV(l, s, this.normal, e.Initialize_s_cA)
                              , u = I.SubVMulSV(h, o, this.normal, e.Initialize_s_cB);
                            I.MidVV(c, u, this.points[0]),
                            this.separations[0] = I.DotVV(I.SubVV(u, c, I.s_t0), this.normal);
                            break;
                        case t.b2ManifoldType.e_faceA:
                            F.MulRV(n.q, i.localNormal, this.normal);
                            for (var _ = V.MulXV(n, i.localPoint, e.Initialize_s_planePoint), f = 0; f < i.pointCount; ++f) {
                                var d = V.MulXV(a, i.points[f].localPoint, e.Initialize_s_clipPoint)
                                  , p = s - I.DotVV(I.SubVV(d, _, I.s_t0), this.normal);
                                c = I.AddVMulSV(d, p, this.normal, e.Initialize_s_cA),
                                u = I.SubVMulSV(d, o, this.normal, e.Initialize_s_cB),
                                I.MidVV(c, u, this.points[f]),
                                this.separations[f] = I.DotVV(I.SubVV(u, c, I.s_t0), this.normal)
                            }
                            break;
                        case t.b2ManifoldType.e_faceB:
                            for (F.MulRV(a.q, i.localNormal, this.normal),
                            _ = V.MulXV(a, i.localPoint, e.Initialize_s_planePoint),
                            f = 0; f < i.pointCount; ++f)
                                d = V.MulXV(n, i.points[f].localPoint, e.Initialize_s_clipPoint),
                                p = o - I.DotVV(I.SubVV(d, _, I.s_t0), this.normal),
                                u = I.AddVMulSV(d, p, this.normal, e.Initialize_s_cB),
                                c = I.SubVMulSV(d, s, this.normal, e.Initialize_s_cA),
                                I.MidVV(c, u, this.points[f]),
                                this.separations[f] = I.DotVV(I.SubVV(c, u, I.s_t0), this.normal);
                            this.normal.SelfNeg()
                        }
                }
                ,
                e.Initialize_s_pointA = new I,
                e.Initialize_s_pointB = new I,
                e.Initialize_s_cA = new I,
                e.Initialize_s_cB = new I,
                e.Initialize_s_planePoint = new I,
                e.Initialize_s_clipPoint = new I,
                e
            }
            )();
            (vt = t.b2PointState || (t.b2PointState = {}))[vt.b2_nullState = 0] = "b2_nullState",
            vt[vt.b2_addState = 1] = "b2_addState",
            vt[vt.b2_persistState = 2] = "b2_persistState",
            vt[vt.b2_removeState = 3] = "b2_removeState";
            var xt = (function() {
                function t() {
                    this.v = new I,
                    this.id = new mt
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.v.Copy(t.v),
                    this.id.Copy(t.id),
                    this
                }
                ,
                t
            }
            )()
              , bt = (function() {
                function t() {
                    this.p1 = new I,
                    this.p2 = new I,
                    this.maxFraction = 1
                }
                return t.prototype.Copy = function(t) {
                    return this.p1.Copy(t.p1),
                    this.p2.Copy(t.p2),
                    this.maxFraction = t.maxFraction,
                    this
                }
                ,
                t
            }
            )()
              , Ct = (function() {
                function t() {
                    this.normal = new I,
                    this.fraction = 0
                }
                return t.prototype.Copy = function(t) {
                    return this.normal.Copy(t.normal),
                    this.fraction = t.fraction,
                    this
                }
                ,
                t
            }
            )()
              , Tt = (function() {
                function t() {
                    this.lowerBound = new I,
                    this.upperBound = new I,
                    this.m_cache_center = new I,
                    this.m_cache_extent = new I
                }
                return t.prototype.Copy = function(t) {
                    return this.lowerBound.Copy(t.lowerBound),
                    this.upperBound.Copy(t.upperBound),
                    this
                }
                ,
                t.prototype.IsValid = function() {
                    var t = this.upperBound.x - this.lowerBound.x
                      , e = this.upperBound.y - this.lowerBound.y
                      , i = t >= 0 && e >= 0;
                    return i && this.lowerBound.IsValid() && this.upperBound.IsValid()
                }
                ,
                t.prototype.GetCenter = function() {
                    return I.MidVV(this.lowerBound, this.upperBound, this.m_cache_center)
                }
                ,
                t.prototype.GetExtents = function() {
                    return I.ExtVV(this.lowerBound, this.upperBound, this.m_cache_extent)
                }
                ,
                t.prototype.GetPerimeter = function() {
                    return 2 * (this.upperBound.x - this.lowerBound.x + (this.upperBound.y - this.lowerBound.y))
                }
                ,
                t.prototype.Combine1 = function(t) {
                    return this.lowerBound.x = y(this.lowerBound.x, t.lowerBound.x),
                    this.lowerBound.y = y(this.lowerBound.y, t.lowerBound.y),
                    this.upperBound.x = v(this.upperBound.x, t.upperBound.x),
                    this.upperBound.y = v(this.upperBound.y, t.upperBound.y),
                    this
                }
                ,
                t.prototype.Combine2 = function(t, e) {
                    return this.lowerBound.x = y(t.lowerBound.x, e.lowerBound.x),
                    this.lowerBound.y = y(t.lowerBound.y, e.lowerBound.y),
                    this.upperBound.x = v(t.upperBound.x, e.upperBound.x),
                    this.upperBound.y = v(t.upperBound.y, e.upperBound.y),
                    this
                }
                ,
                t.Combine = function(t, e, i) {
                    return i.Combine2(t, e),
                    i
                }
                ,
                t.prototype.Contains = function(t) {
                    var e = !0;
                    return (e = (e = (e = e && this.lowerBound.x <= t.lowerBound.x) && this.lowerBound.y <= t.lowerBound.y) && t.upperBound.x <= this.upperBound.x) && t.upperBound.y <= this.upperBound.y
                }
                ,
                t.prototype.RayCast = function(t, e) {
                    var r, s, a = -i, o = i, l = e.p1.x, h = e.p1.y, c = e.p2.x - e.p1.x, u = e.p2.y - e.p1.y, _ = m(c), f = m(u), d = t.normal;
                    if (_ < n) {
                        if (l < this.lowerBound.x || this.upperBound.x < l)
                            return !1
                    } else {
                        var p = 1 / c
                          , v = -1;
                        if ((r = (this.lowerBound.x - l) * p) > (s = (this.upperBound.x - l) * p)) {
                            var g = r;
                            r = s,
                            s = g,
                            v = 1
                        }
                        if (r > a && (d.x = v,
                        d.y = 0,
                        a = r),
                        a > (o = y(o, s)))
                            return !1
                    }
                    if (f < n) {
                        if (h < this.lowerBound.y || this.upperBound.y < h)
                            return !1
                    } else if (p = 1 / u,
                    v = -1,
                    (r = (this.lowerBound.y - h) * p) > (s = (this.upperBound.y - h) * p) && (g = r,
                    r = s,
                    s = g,
                    v = 1),
                    r > a && (d.x = 0,
                    d.y = v,
                    a = r),
                    a > (o = y(o, s)))
                        return !1;
                    return !(a < 0 || e.maxFraction < a || (t.fraction = a,
                    0))
                }
                ,
                t.prototype.TestContain = function(t) {
                    return !(t.x < this.lowerBound.x || this.upperBound.x < t.x || t.y < this.lowerBound.y || this.upperBound.y < t.y)
                }
                ,
                t.prototype.TestOverlap = function(t) {
                    var e = t.lowerBound.x - this.upperBound.x
                      , i = t.lowerBound.y - this.upperBound.y
                      , n = this.lowerBound.x - t.upperBound.x
                      , r = this.lowerBound.y - t.upperBound.y;
                    return !(e > 0 || i > 0 || n > 0 || r > 0)
                }
                ,
                t
            }
            )();
            function St(t, e) {
                var i = e.lowerBound.x - t.upperBound.x
                  , n = e.lowerBound.y - t.upperBound.y
                  , r = t.lowerBound.x - e.upperBound.x
                  , s = t.lowerBound.y - e.upperBound.y;
                return !(i > 0 || n > 0 || r > 0 || s > 0)
            }
            function wt(e, i, n, r, s) {
                var a = 0
                  , o = i[0]
                  , l = i[1]
                  , h = I.DotVV(n, o.v) - r
                  , c = I.DotVV(n, l.v) - r;
                if (h <= 0 && e[a++].Copy(o),
                c <= 0 && e[a++].Copy(l),
                h * c < 0) {
                    var u = h / (h - c)
                      , _ = e[a].v;
                    _.x = o.v.x + u * (l.v.x - o.v.x),
                    _.y = o.v.y + u * (l.v.y - o.v.y);
                    var f = e[a].id;
                    f.cf.indexA = s,
                    f.cf.indexB = o.id.cf.indexB,
                    f.cf.typeA = t.b2ContactFeatureType.e_vertex,
                    f.cf.typeB = t.b2ContactFeatureType.e_face,
                    ++a
                }
                return a
            }
            var Et = new X
              , Mt = new j
              , Dt = new Y;
            function Bt(t, e, i, r, s, a) {
                var o = Et.Reset();
                o.proxyA.SetShape(t, e),
                o.proxyB.SetShape(i, r),
                o.transformA.Copy(s),
                o.transformB.Copy(a),
                o.useRadii = !0;
                var l = Mt.Reset();
                l.count = 0;
                var h = Dt.Reset();
                return rt(h, l, o),
                h.distance < 10 * n
            }
            function It(t) {
                if (null === t)
                    throw new Error;
                return t
            }
            var Pt = (function() {
                function t(t) {
                    void 0 === t && (t = 0),
                    this.m_id = 0,
                    this.aabb = new Tt,
                    this.parent = null,
                    this.child1 = null,
                    this.child2 = null,
                    this.height = 0,
                    this.m_id = t
                }
                return t.prototype.IsLeaf = function() {
                    return null === this.child1
                }
                ,
                t
            }
            )()
              , Rt = (function() {
                function t() {
                    this.m_root = null,
                    this.m_freeList = null,
                    this.m_path = 0,
                    this.m_insertionCount = 0,
                    this.m_stack = new H(256)
                }
                return t.prototype.Query = function(t, e) {
                    if (null !== this.m_root) {
                        var i = this.m_stack.Reset();
                        for (i.Push(this.m_root); i.GetCount() > 0; ) {
                            var n = i.Pop();
                            if (n.aabb.TestOverlap(t))
                                if (n.IsLeaf()) {
                                    if (!e(n))
                                        return
                                } else
                                    i.Push(It(n.child1)),
                                    i.Push(It(n.child2))
                        }
                    }
                }
                ,
                t.prototype.QueryPoint = function(t, e) {
                    if (null !== this.m_root) {
                        var i = this.m_stack.Reset();
                        for (i.Push(this.m_root); i.GetCount() > 0; ) {
                            var n = i.Pop();
                            if (n.aabb.TestContain(t))
                                if (n.IsLeaf()) {
                                    if (!e(n))
                                        return
                                } else
                                    i.Push(It(n.child1)),
                                    i.Push(It(n.child2))
                        }
                    }
                }
                ,
                t.prototype.RayCast = function(e, i) {
                    if (null !== this.m_root) {
                        var n = e.p1
                          , r = e.p2
                          , s = I.SubVV(r, n, t.s_r);
                        s.Normalize();
                        var a = I.CrossOneV(s, t.s_v)
                          , o = I.AbsV(a, t.s_abs_v)
                          , l = e.maxFraction
                          , h = t.s_segmentAABB
                          , c = n.x + l * (r.x - n.x)
                          , u = n.y + l * (r.y - n.y);
                        h.lowerBound.x = y(n.x, c),
                        h.lowerBound.y = y(n.y, u),
                        h.upperBound.x = v(n.x, c),
                        h.upperBound.y = v(n.y, u);
                        var _ = this.m_stack.Reset();
                        for (_.Push(this.m_root); _.GetCount() > 0; ) {
                            var f = _.Pop();
                            if (St(f.aabb, h)) {
                                var d = f.aabb.GetCenter()
                                  , p = f.aabb.GetExtents();
                                if (!(m(I.DotVV(a, I.SubVV(n, d, I.s_t0))) - I.DotVV(o, p) > 0))
                                    if (f.IsLeaf()) {
                                        var g = t.s_subInput;
                                        g.p1.Copy(e.p1),
                                        g.p2.Copy(e.p2),
                                        g.maxFraction = l;
                                        var A = i(g, f);
                                        if (0 === A)
                                            return;
                                        A > 0 && (l = A,
                                        c = n.x + l * (r.x - n.x),
                                        u = n.y + l * (r.y - n.y),
                                        h.lowerBound.x = y(n.x, c),
                                        h.lowerBound.y = y(n.y, u),
                                        h.upperBound.x = v(n.x, c),
                                        h.upperBound.y = v(n.y, u))
                                    } else
                                        _.Push(It(f.child1)),
                                        _.Push(It(f.child2))
                            }
                        }
                    }
                }
                ,
                t.prototype.AllocateNode = function() {
                    if (this.m_freeList) {
                        var e = this.m_freeList;
                        return this.m_freeList = e.parent,
                        e.parent = null,
                        e.child1 = null,
                        e.child2 = null,
                        e.height = 0,
                        delete e.userData,
                        e
                    }
                    return new Pt(t.s_node_id++)
                }
                ,
                t.prototype.FreeNode = function(t) {
                    t.parent = this.m_freeList,
                    t.child1 = null,
                    t.child2 = null,
                    t.height = -1,
                    delete t.userData,
                    this.m_freeList = t
                }
                ,
                t.prototype.CreateProxy = function(t, e) {
                    var i = this.AllocateNode();
                    return i.aabb.lowerBound.x = t.lowerBound.x - .1,
                    i.aabb.lowerBound.y = t.lowerBound.y - .1,
                    i.aabb.upperBound.x = t.upperBound.x + .1,
                    i.aabb.upperBound.y = t.upperBound.y + .1,
                    i.userData = e,
                    i.height = 0,
                    this.InsertLeaf(i),
                    i
                }
                ,
                t.prototype.DestroyProxy = function(t) {
                    this.RemoveLeaf(t),
                    this.FreeNode(t)
                }
                ,
                t.prototype.MoveProxy = function(t, e, i) {
                    if (t.aabb.Contains(e))
                        return !1;
                    this.RemoveLeaf(t);
                    var n = .1 + 2 * (i.x > 0 ? i.x : -i.x)
                      , r = .1 + 2 * (i.y > 0 ? i.y : -i.y);
                    return t.aabb.lowerBound.x = e.lowerBound.x - n,
                    t.aabb.lowerBound.y = e.lowerBound.y - r,
                    t.aabb.upperBound.x = e.upperBound.x + n,
                    t.aabb.upperBound.y = e.upperBound.y + r,
                    this.InsertLeaf(t),
                    !0
                }
                ,
                t.prototype.InsertLeaf = function(e) {
                    if (++this.m_insertionCount,
                    null === this.m_root)
                        return this.m_root = e,
                        void (this.m_root.parent = null);
                    for (var i = e.aabb, n = this.m_root; !n.IsLeaf(); ) {
                        var r = It(n.child1)
                          , s = It(n.child2)
                          , a = n.aabb.GetPerimeter()
                          , o = t.s_combinedAABB;
                        o.Combine2(n.aabb, i);
                        var l = o.GetPerimeter()
                          , h = 2 * l
                          , c = 2 * (l - a)
                          , u = void 0
                          , _ = t.s_aabb
                          , f = void 0;
                        r.IsLeaf() ? (_.Combine2(i, r.aabb),
                        u = _.GetPerimeter() + c) : (_.Combine2(i, r.aabb),
                        f = r.aabb.GetPerimeter(),
                        u = _.GetPerimeter() - f + c);
                        var d = void 0;
                        if (s.IsLeaf() ? (_.Combine2(i, s.aabb),
                        d = _.GetPerimeter() + c) : (_.Combine2(i, s.aabb),
                        f = s.aabb.GetPerimeter(),
                        d = _.GetPerimeter() - f + c),
                        h < u && h < d)
                            break;
                        n = u < d ? r : s
                    }
                    var p = n
                      , m = p.parent
                      , y = this.AllocateNode();
                    y.parent = m,
                    delete y.userData,
                    y.aabb.Combine2(i, p.aabb),
                    y.height = p.height + 1,
                    m ? (m.child1 === p ? m.child1 = y : m.child2 = y,
                    y.child1 = p,
                    y.child2 = e,
                    p.parent = y,
                    e.parent = y) : (y.child1 = p,
                    y.child2 = e,
                    p.parent = y,
                    e.parent = y,
                    this.m_root = y);
                    for (var g = e.parent; null !== g; )
                        r = It((g = this.Balance(g)).child1),
                        s = It(g.child2),
                        g.height = 1 + v(r.height, s.height),
                        g.aabb.Combine2(r.aabb, s.aabb),
                        g = g.parent
                }
                ,
                t.prototype.RemoveLeaf = function(t) {
                    if (t !== this.m_root) {
                        var e, i = It(t.parent), n = i && i.parent;
                        if (e = i.child1 === t ? It(i.child2) : It(i.child1),
                        n) {
                            n.child1 === i ? n.child1 = e : n.child2 = e,
                            e.parent = n,
                            this.FreeNode(i);
                            for (var r = n; r; ) {
                                var s = It((r = this.Balance(r)).child1)
                                  , a = It(r.child2);
                                r.aabb.Combine2(s.aabb, a.aabb),
                                r.height = 1 + v(s.height, a.height),
                                r = r.parent
                            }
                        } else
                            this.m_root = e,
                            e.parent = null,
                            this.FreeNode(i)
                    } else
                        this.m_root = null
                }
                ,
                t.prototype.Balance = function(t) {
                    if (t.IsLeaf() || t.height < 2)
                        return t;
                    var e = It(t.child1)
                      , i = It(t.child2)
                      , n = i.height - e.height;
                    if (n > 1) {
                        var r = It(i.child1)
                          , s = It(i.child2);
                        return i.child1 = t,
                        i.parent = t.parent,
                        t.parent = i,
                        null !== i.parent ? i.parent.child1 === t ? i.parent.child1 = i : i.parent.child2 = i : this.m_root = i,
                        r.height > s.height ? (i.child2 = r,
                        t.child2 = s,
                        s.parent = t,
                        t.aabb.Combine2(e.aabb, s.aabb),
                        i.aabb.Combine2(t.aabb, r.aabb),
                        t.height = 1 + v(e.height, s.height),
                        i.height = 1 + v(t.height, r.height)) : (i.child2 = s,
                        t.child2 = r,
                        r.parent = t,
                        t.aabb.Combine2(e.aabb, r.aabb),
                        i.aabb.Combine2(t.aabb, s.aabb),
                        t.height = 1 + v(e.height, r.height),
                        i.height = 1 + v(t.height, s.height)),
                        i
                    }
                    if (n < -1) {
                        var a = It(e.child1)
                          , o = It(e.child2);
                        return e.child1 = t,
                        e.parent = t.parent,
                        t.parent = e,
                        null !== e.parent ? e.parent.child1 === t ? e.parent.child1 = e : e.parent.child2 = e : this.m_root = e,
                        a.height > o.height ? (e.child2 = a,
                        t.child1 = o,
                        o.parent = t,
                        t.aabb.Combine2(i.aabb, o.aabb),
                        e.aabb.Combine2(t.aabb, a.aabb),
                        t.height = 1 + v(i.height, o.height),
                        e.height = 1 + v(t.height, a.height)) : (e.child2 = o,
                        t.child1 = a,
                        a.parent = t,
                        t.aabb.Combine2(i.aabb, a.aabb),
                        e.aabb.Combine2(t.aabb, o.aabb),
                        t.height = 1 + v(i.height, a.height),
                        e.height = 1 + v(t.height, o.height)),
                        e
                    }
                    return t
                }
                ,
                t.prototype.GetHeight = function() {
                    return null === this.m_root ? 0 : this.m_root.height
                }
                ,
                t.GetAreaNode = function(e) {
                    if (null === e)
                        return 0;
                    if (e.IsLeaf())
                        return 0;
                    var i = e.aabb.GetPerimeter();
                    return (i += t.GetAreaNode(e.child1)) + t.GetAreaNode(e.child2)
                }
                ,
                t.prototype.GetAreaRatio = function() {
                    if (null === this.m_root)
                        return 0;
                    var e = this.m_root.aabb.GetPerimeter();
                    return t.GetAreaNode(this.m_root) / e
                }
                ,
                t.prototype.ComputeHeightNode = function(t) {
                    if (!t || t.IsLeaf())
                        return 0;
                    var e = this.ComputeHeightNode(t.child1)
                      , i = this.ComputeHeightNode(t.child2);
                    return 1 + v(e, i)
                }
                ,
                t.prototype.ComputeHeight = function() {
                    return this.ComputeHeightNode(this.m_root)
                }
                ,
                t.prototype.ValidateStructure = function(t) {
                    if (null !== t) {
                        this.m_root;
                        var e = t;
                        if (!e.IsLeaf()) {
                            var i = It(e.child1)
                              , n = It(e.child2);
                            this.ValidateStructure(i),
                            this.ValidateStructure(n)
                        }
                    }
                }
                ,
                t.prototype.ValidateMetrics = function(e) {
                    if (null !== e) {
                        var i = e;
                        if (!i.IsLeaf()) {
                            var n = It(i.child1)
                              , r = It(i.child2);
                            t.s_aabb.Combine2(n.aabb, r.aabb),
                            this.ValidateMetrics(n),
                            this.ValidateMetrics(r)
                        }
                    }
                }
                ,
                t.prototype.Validate = function() {}
                ,
                t.GetMaxBalanceNode = function(t, e) {
                    if (null === t)
                        return e;
                    if (t.height <= 1)
                        return e;
                    var i = It(t.child1)
                      , n = It(t.child2)
                      , r = m(n.height - i.height);
                    return v(e, r)
                }
                ,
                t.prototype.GetMaxBalance = function() {
                    return t.GetMaxBalanceNode(this.m_root, 0)
                }
                ,
                t.prototype.RebuildBottomUp = function() {
                    this.Validate()
                }
                ,
                t.ShiftOriginNode = function(e, i) {
                    if (null !== e && !(e.height <= 1)) {
                        var n = e.child1
                          , r = e.child2;
                        t.ShiftOriginNode(n, i),
                        t.ShiftOriginNode(r, i),
                        e.aabb.lowerBound.SelfSub(i),
                        e.aabb.upperBound.SelfSub(i)
                    }
                }
                ,
                t.prototype.ShiftOrigin = function(e) {
                    t.ShiftOriginNode(this.m_root, e)
                }
                ,
                t.s_r = new I,
                t.s_v = new I,
                t.s_abs_v = new I,
                t.s_segmentAABB = new Tt,
                t.s_subInput = new bt,
                t.s_combinedAABB = new Tt,
                t.s_aabb = new Tt,
                t.s_node_id = 0,
                t
            }
            )()
              , Ot = function(t, e) {
                this.proxyA = t,
                this.proxyB = e
            }
              , Lt = (function() {
                function t() {
                    this.m_tree = new Rt,
                    this.m_proxyCount = 0,
                    this.m_moveCount = 0,
                    this.m_moveBuffer = [],
                    this.m_pairCount = 0,
                    this.m_pairBuffer = []
                }
                return t.prototype.CreateProxy = function(t, e) {
                    var i = this.m_tree.CreateProxy(t, e);
                    return ++this.m_proxyCount,
                    this.BufferMove(i),
                    i
                }
                ,
                t.prototype.DestroyProxy = function(t) {
                    this.UnBufferMove(t),
                    --this.m_proxyCount,
                    this.m_tree.DestroyProxy(t)
                }
                ,
                t.prototype.MoveProxy = function(t, e, i) {
                    this.m_tree.MoveProxy(t, e, i) && this.BufferMove(t)
                }
                ,
                t.prototype.TouchProxy = function(t) {
                    this.BufferMove(t)
                }
                ,
                t.prototype.GetProxyCount = function() {
                    return this.m_proxyCount
                }
                ,
                t.prototype.UpdatePairs = function(t) {
                    var e = this;
                    this.m_pairCount = 0;
                    for (var i = function(t) {
                        var i = n.m_moveBuffer[t];
                        if (null === i)
                            return "continue";
                        var r = i.aabb;
                        n.m_tree.Query(r, (function(t) {
                            if (t.m_id === i.m_id)
                                return !0;
                            var n, r;
                            if (t.m_id < i.m_id ? (n = t,
                            r = i) : (n = i,
                            r = t),
                            e.m_pairCount === e.m_pairBuffer.length)
                                e.m_pairBuffer[e.m_pairCount] = new Ot(n,r);
                            else {
                                var s = e.m_pairBuffer[e.m_pairCount];
                                s.proxyA = n,
                                s.proxyB = r
                            }
                            return ++e.m_pairCount,
                            !0
                        }
                        ))
                    }, n = this, r = 0; r < this.m_moveCount; ++r)
                        i(r);
                    this.m_moveCount = 0,
                    this.m_pairBuffer.length = this.m_pairCount,
                    this.m_pairBuffer.sort(Ft);
                    for (var s = 0; s < this.m_pairCount; ) {
                        var a = this.m_pairBuffer[s]
                          , o = a.proxyA.userData
                          , l = a.proxyB.userData;
                        for (o && l && t(o, l),
                        ++s; s < this.m_pairCount; ) {
                            var h = this.m_pairBuffer[s];
                            if (h.proxyA.m_id !== a.proxyA.m_id || h.proxyB.m_id !== a.proxyB.m_id)
                                break;
                            ++s
                        }
                    }
                }
                ,
                t.prototype.Query = function(t, e) {
                    this.m_tree.Query(t, e)
                }
                ,
                t.prototype.QueryPoint = function(t, e) {
                    this.m_tree.QueryPoint(t, e)
                }
                ,
                t.prototype.RayCast = function(t, e) {
                    this.m_tree.RayCast(t, e)
                }
                ,
                t.prototype.GetTreeHeight = function() {
                    return this.m_tree.GetHeight()
                }
                ,
                t.prototype.GetTreeBalance = function() {
                    return this.m_tree.GetMaxBalance()
                }
                ,
                t.prototype.GetTreeQuality = function() {
                    return this.m_tree.GetAreaRatio()
                }
                ,
                t.prototype.ShiftOrigin = function(t) {
                    this.m_tree.ShiftOrigin(t)
                }
                ,
                t.prototype.BufferMove = function(t) {
                    this.m_moveBuffer[this.m_moveCount] = t,
                    ++this.m_moveCount
                }
                ,
                t.prototype.UnBufferMove = function(t) {
                    var e = this.m_moveBuffer.indexOf(t);
                    this.m_moveBuffer[e] = null
                }
                ,
                t
            }
            )();
            function Ft(t, e) {
                return t.proxyA.m_id === e.proxyA.m_id ? t.proxyB.m_id - e.proxyB.m_id : t.proxyA.m_id - e.proxyA.m_id
            }
            t.b2_toiTime = 0,
            t.b2_toiMaxTime = 0,
            t.b2_toiCalls = 0,
            t.b2_toiIters = 0,
            t.b2_toiMaxIters = 0,
            t.b2_toiRootIters = 0,
            t.b2_toiMaxRootIters = 0;
            var Vt, Nt = new V, kt = new V, Gt = new I, Ut = new I, zt = new I, Ht = new I, Wt = new I, jt = function() {
                this.proxyA = new W,
                this.proxyB = new W,
                this.sweepA = new N,
                this.sweepB = new N,
                this.tMax = 0
            };
            (Vt = t.b2TOIOutputState || (t.b2TOIOutputState = {}))[Vt.e_unknown = 0] = "e_unknown",
            Vt[Vt.e_failed = 1] = "e_failed",
            Vt[Vt.e_overlapped = 2] = "e_overlapped",
            Vt[Vt.e_touching = 3] = "e_touching",
            Vt[Vt.e_separated = 4] = "e_separated";
            var Xt, Yt = function() {
                this.state = t.b2TOIOutputState.e_unknown,
                this.t = 0
            };
            (Xt = t.b2SeparationFunctionType || (t.b2SeparationFunctionType = {}))[Xt.e_unknown = -1] = "e_unknown",
            Xt[Xt.e_points = 0] = "e_points",
            Xt[Xt.e_faceA = 1] = "e_faceA",
            Xt[Xt.e_faceB = 2] = "e_faceB";
            var qt = (function() {
                function e() {
                    this.m_sweepA = new N,
                    this.m_sweepB = new N,
                    this.m_type = t.b2SeparationFunctionType.e_unknown,
                    this.m_localPoint = new I,
                    this.m_axis = new I
                }
                return e.prototype.Initialize = function(e, i, n, r, s, a) {
                    this.m_proxyA = i,
                    this.m_proxyB = r;
                    var o = e.count;
                    this.m_sweepA.Copy(n),
                    this.m_sweepB.Copy(s);
                    var l = Nt
                      , h = kt;
                    if (this.m_sweepA.GetTransform(l, a),
                    this.m_sweepB.GetTransform(h, a),
                    1 === o) {
                        this.m_type = t.b2SeparationFunctionType.e_points;
                        var c = this.m_proxyA.GetVertex(e.indexA[0])
                          , u = this.m_proxyB.GetVertex(e.indexB[0])
                          , _ = V.MulXV(l, c, Gt)
                          , f = V.MulXV(h, u, Ut);
                        I.SubVV(f, _, this.m_axis);
                        var d = this.m_axis.Normalize();
                        return this.m_localPoint.SetZero(),
                        d
                    }
                    if (e.indexA[0] === e.indexA[1]) {
                        this.m_type = t.b2SeparationFunctionType.e_faceB;
                        var p = this.m_proxyB.GetVertex(e.indexB[0])
                          , m = this.m_proxyB.GetVertex(e.indexB[1]);
                        I.CrossVOne(I.SubVV(m, p, I.s_t0), this.m_axis).SelfNormalize();
                        var y = F.MulRV(h.q, this.m_axis, zt);
                        return I.MidVV(p, m, this.m_localPoint),
                        f = V.MulXV(h, this.m_localPoint, Ut),
                        c = this.m_proxyA.GetVertex(e.indexA[0]),
                        _ = V.MulXV(l, c, Gt),
                        (d = I.DotVV(I.SubVV(_, f, I.s_t0), y)) < 0 && (this.m_axis.SelfNeg(),
                        d = -d),
                        d
                    }
                    this.m_type = t.b2SeparationFunctionType.e_faceA;
                    var v = this.m_proxyA.GetVertex(e.indexA[0])
                      , g = this.m_proxyA.GetVertex(e.indexA[1]);
                    return I.CrossVOne(I.SubVV(g, v, I.s_t0), this.m_axis).SelfNormalize(),
                    y = F.MulRV(l.q, this.m_axis, zt),
                    I.MidVV(v, g, this.m_localPoint),
                    _ = V.MulXV(l, this.m_localPoint, Gt),
                    u = this.m_proxyB.GetVertex(e.indexB[0]),
                    f = V.MulXV(h, u, Ut),
                    (d = I.DotVV(I.SubVV(f, _, I.s_t0), y)) < 0 && (this.m_axis.SelfNeg(),
                    d = -d),
                    d
                }
                ,
                e.prototype.FindMinSeparation = function(e, i, n) {
                    var r = Nt
                      , s = kt;
                    switch (this.m_sweepA.GetTransform(r, n),
                    this.m_sweepB.GetTransform(s, n),
                    this.m_type) {
                    case t.b2SeparationFunctionType.e_points:
                        var a = F.MulTRV(r.q, this.m_axis, Ht)
                          , o = F.MulTRV(s.q, I.NegV(this.m_axis, I.s_t0), Wt);
                        e[0] = this.m_proxyA.GetSupport(a),
                        i[0] = this.m_proxyB.GetSupport(o);
                        var l = this.m_proxyA.GetVertex(e[0])
                          , h = this.m_proxyB.GetVertex(i[0])
                          , c = V.MulXV(r, l, Gt)
                          , u = V.MulXV(s, h, Ut);
                        return I.DotVV(I.SubVV(u, c, I.s_t0), this.m_axis);
                    case t.b2SeparationFunctionType.e_faceA:
                        var _ = F.MulRV(r.q, this.m_axis, zt);
                        return c = V.MulXV(r, this.m_localPoint, Gt),
                        o = F.MulTRV(s.q, I.NegV(_, I.s_t0), Wt),
                        e[0] = -1,
                        i[0] = this.m_proxyB.GetSupport(o),
                        h = this.m_proxyB.GetVertex(i[0]),
                        u = V.MulXV(s, h, Ut),
                        I.DotVV(I.SubVV(u, c, I.s_t0), _);
                    case t.b2SeparationFunctionType.e_faceB:
                        return _ = F.MulRV(s.q, this.m_axis, zt),
                        u = V.MulXV(s, this.m_localPoint, Ut),
                        a = F.MulTRV(r.q, I.NegV(_, I.s_t0), Ht),
                        i[0] = -1,
                        e[0] = this.m_proxyA.GetSupport(a),
                        l = this.m_proxyA.GetVertex(e[0]),
                        c = V.MulXV(r, l, Gt),
                        I.DotVV(I.SubVV(c, u, I.s_t0), _);
                    default:
                        return e[0] = -1,
                        i[0] = -1,
                        0
                    }
                }
                ,
                e.prototype.Evaluate = function(e, i, n) {
                    var r = Nt
                      , s = kt;
                    switch (this.m_sweepA.GetTransform(r, n),
                    this.m_sweepB.GetTransform(s, n),
                    this.m_type) {
                    case t.b2SeparationFunctionType.e_points:
                        var a = this.m_proxyA.GetVertex(e)
                          , o = this.m_proxyB.GetVertex(i)
                          , l = V.MulXV(r, a, Gt)
                          , h = V.MulXV(s, o, Ut);
                        return I.DotVV(I.SubVV(h, l, I.s_t0), this.m_axis);
                    case t.b2SeparationFunctionType.e_faceA:
                        var c = F.MulRV(r.q, this.m_axis, zt);
                        return l = V.MulXV(r, this.m_localPoint, Gt),
                        o = this.m_proxyB.GetVertex(i),
                        h = V.MulXV(s, o, Ut),
                        I.DotVV(I.SubVV(h, l, I.s_t0), c);
                    case t.b2SeparationFunctionType.e_faceB:
                        return c = F.MulRV(s.q, this.m_axis, zt),
                        h = V.MulXV(s, this.m_localPoint, Ut),
                        a = this.m_proxyA.GetVertex(e),
                        l = V.MulXV(r, a, Gt),
                        I.DotVV(I.SubVV(l, h, I.s_t0), c);
                    default:
                        return 0
                    }
                }
                ,
                e
            }
            )()
              , Jt = new U
              , Zt = new j
              , Kt = new X
              , Qt = new Y
              , $t = new qt
              , te = [0]
              , ee = [0]
              , ie = new N
              , ne = new N;
            function re(e, i) {
                var n = Jt.Reset();
                ++t.b2_toiCalls,
                e.state = t.b2TOIOutputState.e_unknown,
                e.t = i.tMax;
                var r = i.proxyA
                  , s = i.proxyB
                  , a = ie.Copy(i.sweepA)
                  , h = ne.Copy(i.sweepB);
                a.Normalize(),
                h.Normalize();
                var c = i.tMax
                  , u = r.m_radius + s.m_radius
                  , _ = v(l, u - 3 * l)
                  , f = .25 * l
                  , d = 0
                  , p = 0
                  , y = Zt;
                y.count = 0;
                var g = Kt;
                for (g.proxyA.Copy(i.proxyA),
                g.proxyB.Copy(i.proxyB),
                g.useRadii = !1; ; ) {
                    var A = Nt
                      , x = kt;
                    a.GetTransform(A, d),
                    h.GetTransform(x, d),
                    g.transformA.Copy(A),
                    g.transformB.Copy(x);
                    var b = Qt;
                    if (rt(b, y, g),
                    b.distance <= 0) {
                        e.state = t.b2TOIOutputState.e_overlapped,
                        e.t = 0;
                        break
                    }
                    if (b.distance < _ + f) {
                        e.state = t.b2TOIOutputState.e_touching,
                        e.t = d;
                        break
                    }
                    var C = $t;
                    C.Initialize(y, r, a, s, h, d);
                    for (var T = !1, S = c, w = 0; ; ) {
                        var E = te
                          , M = ee
                          , D = C.FindMinSeparation(E, M, S);
                        if (D > _ + f) {
                            e.state = t.b2TOIOutputState.e_separated,
                            e.t = c,
                            T = !0;
                            break
                        }
                        if (D > _ - f) {
                            d = S;
                            break
                        }
                        var B = C.Evaluate(E[0], M[0], d);
                        if (B < _ - f) {
                            e.state = t.b2TOIOutputState.e_failed,
                            e.t = d,
                            T = !0;
                            break
                        }
                        if (B <= _ + f) {
                            e.state = t.b2TOIOutputState.e_touching,
                            e.t = d,
                            T = !0;
                            break
                        }
                        for (var I = 0, P = d, R = S; ; ) {
                            var O;
                            O = 1 & I ? P + (_ - B) * (R - P) / (D - B) : .5 * (P + R),
                            ++I,
                            ++t.b2_toiRootIters;
                            var L = C.Evaluate(E[0], M[0], O);
                            if (m(L - _) < f) {
                                S = O;
                                break
                            }
                            if (L > _ ? (P = O,
                            B = L) : (R = O,
                            D = L),
                            50 === I)
                                break
                        }
                        if (t.b2_toiMaxRootIters = v(t.b2_toiMaxRootIters, I),
                        ++w === o)
                            break
                    }
                    if (++p,
                    ++t.b2_toiIters,
                    T)
                        break;
                    if (20 === p) {
                        e.state = t.b2TOIOutputState.e_failed,
                        e.t = d;
                        break
                    }
                }
                t.b2_toiMaxIters = v(t.b2_toiMaxIters, p);
                var F = n.GetMilliseconds();
                t.b2_toiMaxTime = v(t.b2_toiMaxTime, F),
                t.b2_toiTime += F
            }
            var se = new I
              , ae = new I;
            function oe(e, i, n, r, s) {
                e.pointCount = 0;
                var a = V.MulXV(n, i.m_p, se)
                  , o = V.MulXV(s, r.m_p, ae)
                  , l = I.DistanceSquaredVV(a, o)
                  , h = i.m_radius + r.m_radius;
                l > h * h || (e.type = t.b2ManifoldType.e_circles,
                e.localPoint.Copy(i.m_p),
                e.localNormal.SetZero(),
                e.pointCount = 1,
                e.points[0].localPoint.Copy(r.m_p),
                e.points[0].id.key = 0)
            }
            var le = new I
              , he = new I
              , ce = new I;
            function ue(e, r, s, a, o) {
                e.pointCount = 0;
                for (var l = V.MulXV(o, a.m_p, le), h = V.MulTXV(s, l, he), c = 0, u = -i, _ = r.m_radius + a.m_radius, f = r.m_count, d = r.m_vertices, p = r.m_normals, m = 0; m < f; ++m) {
                    var y = I.DotVV(p[m], I.SubVV(h, d[m], I.s_t0));
                    if (y > _)
                        return;
                    y > u && (u = y,
                    c = m)
                }
                var v = c
                  , g = (v + 1) % f
                  , A = d[v]
                  , x = d[g];
                if (u < n)
                    return e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_faceA,
                    e.localNormal.Copy(p[c]),
                    I.MidVV(A, x, e.localPoint),
                    e.points[0].localPoint.Copy(a.m_p),
                    void (e.points[0].id.key = 0);
                var b = I.DotVV(I.SubVV(h, A, I.s_t0), I.SubVV(x, A, I.s_t1))
                  , C = I.DotVV(I.SubVV(h, x, I.s_t0), I.SubVV(A, x, I.s_t1));
                if (b <= 0) {
                    if (I.DistanceSquaredVV(h, A) > _ * _)
                        return;
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_faceA,
                    I.SubVV(h, A, e.localNormal).SelfNormalize(),
                    e.localPoint.Copy(A),
                    e.points[0].localPoint.Copy(a.m_p),
                    e.points[0].id.key = 0
                } else if (C <= 0) {
                    if (I.DistanceSquaredVV(h, x) > _ * _)
                        return;
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_faceA,
                    I.SubVV(h, x, e.localNormal).SelfNormalize(),
                    e.localPoint.Copy(x),
                    e.points[0].localPoint.Copy(a.m_p),
                    e.points[0].id.key = 0
                } else {
                    var T = I.MidVV(A, x, ce);
                    if (I.DotVV(I.SubVV(h, T, I.s_t1), p[v]) > _)
                        return;
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_faceA,
                    e.localNormal.Copy(p[v]).SelfNormalize(),
                    e.localPoint.Copy(T),
                    e.points[0].localPoint.Copy(a.m_p),
                    e.points[0].id.key = 0
                }
            }
            var _e = new I
              , fe = new I
              , de = new I
              , pe = new I;
            function me(t, e, n, r, s) {
                for (var a = t.m_vertices, o = t.m_normals, l = r.m_count, h = r.m_vertices, c = F.MulRV(e.q, o[n], _e), u = F.MulTRV(s.q, c, fe), _ = 0, f = i, d = 0; d < l; ++d) {
                    var p = I.DotVV(h[d], u);
                    p < f && (f = p,
                    _ = d)
                }
                var m = V.MulXV(e, a[n], de)
                  , y = V.MulXV(s, h[_], pe);
                return I.DotVV(I.SubVV(y, m, I.s_t0), c)
            }
            var ye = new I
              , ve = new I;
            function ge(t, e, n, r, s) {
                for (var a = e.m_count, o = e.m_normals, l = I.SubVV(V.MulXV(s, r.m_centroid, I.s_t0), V.MulXV(n, e.m_centroid, I.s_t1), ye), h = F.MulTRV(n.q, l, ve), c = 0, u = -i, _ = 0; _ < a; ++_) {
                    var f = I.DotVV(o[_], h);
                    f > u && (u = f,
                    c = _)
                }
                var d = me(e, n, c, r, s)
                  , p = (c + a - 1) % a
                  , m = me(e, n, p, r, s)
                  , y = (c + 1) % a
                  , v = me(e, n, y, r, s)
                  , g = 0
                  , A = 0
                  , x = 0;
                if (m > d && m > v)
                    x = -1,
                    g = p,
                    A = m;
                else {
                    if (!(v > d))
                        return t[0] = c,
                        d;
                    x = 1,
                    g = y,
                    A = v
                }
                for (; (d = me(e, n, c = -1 === x ? (g + a - 1) % a : (g + 1) % a, r, s)) > A; )
                    g = c,
                    A = d;
                return t[0] = g,
                A
            }
            var Ae = new I;
            function xe(e, n, r, s, a, o) {
                for (var l = n.m_normals, h = a.m_count, c = a.m_vertices, u = a.m_normals, _ = F.MulTRV(o.q, F.MulRV(r.q, l[s], I.s_t0), Ae), f = 0, d = i, p = 0; p < h; ++p) {
                    var m = I.DotVV(_, u[p]);
                    m < d && (d = m,
                    f = p)
                }
                var y = f
                  , v = (y + 1) % h
                  , g = e[0];
                V.MulXV(o, c[y], g.v);
                var A = g.id.cf;
                A.indexA = s,
                A.indexB = y,
                A.typeA = t.b2ContactFeatureType.e_face,
                A.typeB = t.b2ContactFeatureType.e_vertex;
                var x = e[1];
                V.MulXV(o, c[v], x.v);
                var b = x.id.cf;
                b.indexA = s,
                b.indexB = v,
                b.typeA = t.b2ContactFeatureType.e_face,
                b.typeB = t.b2ContactFeatureType.e_vertex
            }
            var be = xt.MakeArray(2)
              , Ce = xt.MakeArray(2)
              , Te = xt.MakeArray(2)
              , Se = [0]
              , we = [0]
              , Ee = new I
              , Me = new I
              , De = new I
              , Be = new I
              , Ie = new I
              , Pe = new I
              , Re = new I
              , Oe = new I;
            function Le(e, i, n, r, s) {
                e.pointCount = 0;
                var o = i.m_radius + r.m_radius
                  , l = Se;
                l[0] = 0;
                var h = ge(l, i, n, r, s);
                if (!(h > o)) {
                    var c = we;
                    c[0] = 0;
                    var u = ge(c, r, s, i, n);
                    if (!(u > o)) {
                        var _, f, d, p, m = 0, y = 0;
                        u > .98 * h + .001 ? (_ = r,
                        f = i,
                        d = s,
                        p = n,
                        m = c[0],
                        e.type = t.b2ManifoldType.e_faceB,
                        y = 1) : (_ = i,
                        f = r,
                        d = n,
                        p = s,
                        m = l[0],
                        e.type = t.b2ManifoldType.e_faceA,
                        y = 0);
                        var v = be;
                        xe(v, _, d, m, f, p);
                        var g = _.m_count
                          , A = _.m_vertices
                          , x = m
                          , b = (m + 1) % g
                          , C = A[x]
                          , T = A[b]
                          , S = I.SubVV(T, C, Ee);
                        S.Normalize();
                        var w = I.CrossVOne(S, Me)
                          , E = I.MidVV(C, T, De)
                          , M = F.MulRV(d.q, S, Ie)
                          , D = I.CrossVOne(M, Be)
                          , B = V.MulXV(d, C, Re)
                          , P = V.MulXV(d, T, Oe)
                          , R = I.DotVV(D, B)
                          , O = -I.DotVV(M, B) + o
                          , L = I.DotVV(M, P) + o
                          , N = Ce
                          , k = Te;
                        if (!(wt(N, v, I.NegV(M, Pe), O, x) < 2 || wt(k, N, M, L, b) < 2)) {
                            e.localNormal.Copy(w),
                            e.localPoint.Copy(E);
                            for (var G = 0, U = 0; U < a; ++U) {
                                var z = k[U];
                                if (I.DotVV(D, z.v) - R <= o) {
                                    var H = e.points[G];
                                    if (V.MulTXV(p, z.v, H.localPoint),
                                    H.id.Copy(z.id),
                                    y) {
                                        var W = H.id.cf;
                                        H.id.cf.indexA = W.indexB,
                                        H.id.cf.indexB = W.indexA,
                                        H.id.cf.typeA = W.typeB,
                                        H.id.cf.typeB = W.typeA
                                    }
                                    ++G
                                }
                            }
                            e.pointCount = G
                        }
                    }
                }
            }
            var Fe = new I
              , Ve = new I
              , Ne = new I
              , ke = new I
              , Ge = new I
              , Ue = new I
              , ze = new I
              , He = new mt;
            function We(e, i, n, r, s) {
                e.pointCount = 0;
                var a = V.MulTXV(n, V.MulXV(s, r.m_p, I.s_t0), Fe)
                  , o = i.m_vertex1
                  , l = i.m_vertex2
                  , h = I.SubVV(l, o, Ve)
                  , c = I.DotVV(h, I.SubVV(l, a, I.s_t0))
                  , u = I.DotVV(h, I.SubVV(a, o, I.s_t0))
                  , _ = i.m_radius + r.m_radius
                  , f = He;
                if (f.cf.indexB = 0,
                f.cf.typeB = t.b2ContactFeatureType.e_vertex,
                u <= 0) {
                    var d = o
                      , p = I.SubVV(a, d, Ne);
                    if (I.DotVV(p, p) > _ * _)
                        return;
                    if (i.m_hasVertex0) {
                        var m = i.m_vertex0
                          , y = o
                          , v = I.SubVV(y, m, ke);
                        if (I.DotVV(v, I.SubVV(y, a, I.s_t0)) > 0)
                            return
                    }
                    return f.cf.indexA = 0,
                    f.cf.typeA = t.b2ContactFeatureType.e_vertex,
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_circles,
                    e.localNormal.SetZero(),
                    e.localPoint.Copy(d),
                    e.points[0].id.Copy(f),
                    void e.points[0].localPoint.Copy(r.m_p)
                }
                if (c <= 0) {
                    var g = l
                      , A = I.SubVV(a, g, Ne);
                    if (I.DotVV(A, A) > _ * _)
                        return;
                    if (i.m_hasVertex3) {
                        var x = i.m_vertex3
                          , b = l
                          , C = I.SubVV(x, b, Ge);
                        if (I.DotVV(C, I.SubVV(a, b, I.s_t0)) > 0)
                            return
                    }
                    return f.cf.indexA = 1,
                    f.cf.typeA = t.b2ContactFeatureType.e_vertex,
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_circles,
                    e.localNormal.SetZero(),
                    e.localPoint.Copy(g),
                    e.points[0].id.Copy(f),
                    void e.points[0].localPoint.Copy(r.m_p)
                }
                var T = I.DotVV(h, h)
                  , S = Ue;
                S.x = 1 / T * (c * o.x + u * l.x),
                S.y = 1 / T * (c * o.y + u * l.y);
                var w = I.SubVV(a, S, Ne);
                if (!(I.DotVV(w, w) > _ * _)) {
                    var E = ze.Set(-h.y, h.x);
                    I.DotVV(E, I.SubVV(a, o, I.s_t0)) < 0 && E.Set(-E.x, -E.y),
                    E.Normalize(),
                    f.cf.indexA = 0,
                    f.cf.typeA = t.b2ContactFeatureType.e_face,
                    e.pointCount = 1,
                    e.type = t.b2ManifoldType.e_faceA,
                    e.localNormal.Copy(E),
                    e.localPoint.Copy(o),
                    e.points[0].id.Copy(f),
                    e.points[0].localPoint.Copy(r.m_p)
                }
            }
            var je = function() {
                this.type = 0,
                this.index = 0,
                this.separation = 0
            }
              , Xe = function() {
                this.vertices = I.MakeArray(o),
                this.normals = I.MakeArray(o),
                this.count = 0
            }
              , Ye = function() {
                this.i1 = 0,
                this.i2 = 0,
                this.v1 = new I,
                this.v2 = new I,
                this.normal = new I,
                this.sideNormal1 = new I,
                this.sideOffset1 = 0,
                this.sideNormal2 = new I,
                this.sideOffset2 = 0
            }
              , qe = new (function() {
                function e() {
                    this.m_polygonB = new Xe,
                    this.m_xf = new V,
                    this.m_centroidB = new I,
                    this.m_v0 = new I,
                    this.m_v1 = new I,
                    this.m_v2 = new I,
                    this.m_v3 = new I,
                    this.m_normal0 = new I,
                    this.m_normal1 = new I,
                    this.m_normal2 = new I,
                    this.m_normal = new I,
                    this.m_type1 = 0,
                    this.m_type2 = 0,
                    this.m_lowerLimit = new I,
                    this.m_upperLimit = new I,
                    this.m_radius = 0,
                    this.m_front = !1
                }
                return e.prototype.Collide = function(i, n, r, s, o) {
                    V.MulTXX(r, o, this.m_xf),
                    V.MulXV(this.m_xf, s.m_centroid, this.m_centroidB),
                    this.m_v0.Copy(n.m_vertex0),
                    this.m_v1.Copy(n.m_vertex1),
                    this.m_v2.Copy(n.m_vertex2),
                    this.m_v3.Copy(n.m_vertex3);
                    var l = n.m_hasVertex0
                      , h = n.m_hasVertex3
                      , c = I.SubVV(this.m_v2, this.m_v1, e.s_edge1);
                    c.Normalize(),
                    this.m_normal1.Set(c.y, -c.x);
                    var u = I.DotVV(this.m_normal1, I.SubVV(this.m_centroidB, this.m_v1, I.s_t0))
                      , _ = 0
                      , f = 0
                      , d = !1
                      , p = !1;
                    if (l) {
                        var m = I.SubVV(this.m_v1, this.m_v0, e.s_edge0);
                        m.Normalize(),
                        this.m_normal0.Set(m.y, -m.x),
                        d = I.CrossVV(m, c) >= 0,
                        _ = I.DotVV(this.m_normal0, I.SubVV(this.m_centroidB, this.m_v0, I.s_t0))
                    }
                    if (h) {
                        var y = I.SubVV(this.m_v3, this.m_v2, e.s_edge2);
                        y.Normalize(),
                        this.m_normal2.Set(y.y, -y.x),
                        p = I.CrossVV(c, y) > 0,
                        f = I.DotVV(this.m_normal2, I.SubVV(this.m_centroidB, this.m_v2, I.s_t0))
                    }
                    l && h ? d && p ? (this.m_front = _ >= 0 || u >= 0 || f >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal0),
                    this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : d ? (this.m_front = _ >= 0 || u >= 0 && f >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal0),
                    this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : p ? (this.m_front = f >= 0 || _ >= 0 && u >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : (this.m_front = _ >= 0 && u >= 0 && f >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : l ? d ? (this.m_front = _ >= 0 || u >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal0),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg())) : (this.m_front = _ >= 0 && u >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal0).SelfNeg())) : h ? p ? (this.m_front = u >= 0 || f >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal2)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = u >= 0 && f >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1)) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal2).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1))) : (this.m_front = u >= 0,
                    this.m_front ? (this.m_normal.Copy(this.m_normal1),
                    this.m_lowerLimit.Copy(this.m_normal1).SelfNeg(),
                    this.m_upperLimit.Copy(this.m_normal1).SelfNeg()) : (this.m_normal.Copy(this.m_normal1).SelfNeg(),
                    this.m_lowerLimit.Copy(this.m_normal1),
                    this.m_upperLimit.Copy(this.m_normal1))),
                    this.m_polygonB.count = s.m_count;
                    for (var v = 0; v < s.m_count; ++v)
                        V.MulXV(this.m_xf, s.m_vertices[v], this.m_polygonB.vertices[v]),
                        F.MulRV(this.m_xf.q, s.m_normals[v], this.m_polygonB.normals[v]);
                    this.m_radius = s.m_radius + n.m_radius,
                    i.pointCount = 0;
                    var g = this.ComputeEdgeSeparation(e.s_edgeAxis);
                    if (0 !== g.type && !(g.separation > this.m_radius)) {
                        var A = this.ComputePolygonSeparation(e.s_polygonAxis);
                        if (!(0 !== A.type && A.separation > this.m_radius)) {
                            var x;
                            x = 0 === A.type ? g : A.separation > .98 * g.separation + .001 ? A : g;
                            var b = e.s_ie
                              , C = e.s_rf;
                            if (1 === x.type) {
                                i.type = t.b2ManifoldType.e_faceA;
                                var T = 0
                                  , S = I.DotVV(this.m_normal, this.m_polygonB.normals[0]);
                                for (v = 1; v < this.m_polygonB.count; ++v) {
                                    var w = I.DotVV(this.m_normal, this.m_polygonB.normals[v]);
                                    w < S && (S = w,
                                    T = v)
                                }
                                var E = T
                                  , M = (E + 1) % this.m_polygonB.count;
                                (D = b[0]).v.Copy(this.m_polygonB.vertices[E]),
                                D.id.cf.indexA = 0,
                                D.id.cf.indexB = E,
                                D.id.cf.typeA = t.b2ContactFeatureType.e_face,
                                D.id.cf.typeB = t.b2ContactFeatureType.e_vertex,
                                (B = b[1]).v.Copy(this.m_polygonB.vertices[M]),
                                B.id.cf.indexA = 0,
                                B.id.cf.indexB = M,
                                B.id.cf.typeA = t.b2ContactFeatureType.e_face,
                                B.id.cf.typeB = t.b2ContactFeatureType.e_vertex,
                                this.m_front ? (C.i1 = 0,
                                C.i2 = 1,
                                C.v1.Copy(this.m_v1),
                                C.v2.Copy(this.m_v2),
                                C.normal.Copy(this.m_normal1)) : (C.i1 = 1,
                                C.i2 = 0,
                                C.v1.Copy(this.m_v2),
                                C.v2.Copy(this.m_v1),
                                C.normal.Copy(this.m_normal1).SelfNeg())
                            } else {
                                var D, B;
                                i.type = t.b2ManifoldType.e_faceB,
                                (D = b[0]).v.Copy(this.m_v1),
                                D.id.cf.indexA = 0,
                                D.id.cf.indexB = x.index,
                                D.id.cf.typeA = t.b2ContactFeatureType.e_vertex,
                                D.id.cf.typeB = t.b2ContactFeatureType.e_face,
                                (B = b[1]).v.Copy(this.m_v2),
                                B.id.cf.indexA = 0,
                                B.id.cf.indexB = x.index,
                                B.id.cf.typeA = t.b2ContactFeatureType.e_vertex,
                                B.id.cf.typeB = t.b2ContactFeatureType.e_face,
                                C.i1 = x.index,
                                C.i2 = (C.i1 + 1) % this.m_polygonB.count,
                                C.v1.Copy(this.m_polygonB.vertices[C.i1]),
                                C.v2.Copy(this.m_polygonB.vertices[C.i2]),
                                C.normal.Copy(this.m_polygonB.normals[C.i1])
                            }
                            C.sideNormal1.Set(C.normal.y, -C.normal.x),
                            C.sideNormal2.Copy(C.sideNormal1).SelfNeg(),
                            C.sideOffset1 = I.DotVV(C.sideNormal1, C.v1),
                            C.sideOffset2 = I.DotVV(C.sideNormal2, C.v2);
                            var P = e.s_clipPoints1
                              , R = e.s_clipPoints2;
                            if (!(wt(P, b, C.sideNormal1, C.sideOffset1, C.i1) < a || wt(R, P, C.sideNormal2, C.sideOffset2, C.i2) < a)) {
                                1 === x.type ? (i.localNormal.Copy(C.normal),
                                i.localPoint.Copy(C.v1)) : (i.localNormal.Copy(s.m_normals[C.i1]),
                                i.localPoint.Copy(s.m_vertices[C.i1]));
                                var O = 0;
                                for (v = 0; v < a; ++v)
                                    if (I.DotVV(C.normal, I.SubVV(R[v].v, C.v1, I.s_t0)) <= this.m_radius) {
                                        var L = i.points[O];
                                        1 === x.type ? (V.MulTXV(this.m_xf, R[v].v, L.localPoint),
                                        L.id = R[v].id) : (L.localPoint.Copy(R[v].v),
                                        L.id.cf.typeA = R[v].id.cf.typeB,
                                        L.id.cf.typeB = R[v].id.cf.typeA,
                                        L.id.cf.indexA = R[v].id.cf.indexB,
                                        L.id.cf.indexB = R[v].id.cf.indexA),
                                        ++O
                                    }
                                i.pointCount = O
                            }
                        }
                    }
                }
                ,
                e.prototype.ComputeEdgeSeparation = function(t) {
                    var e = t;
                    e.type = 1,
                    e.index = this.m_front ? 0 : 1,
                    e.separation = i;
                    for (var n = 0; n < this.m_polygonB.count; ++n) {
                        var r = I.DotVV(this.m_normal, I.SubVV(this.m_polygonB.vertices[n], this.m_v1, I.s_t0));
                        r < e.separation && (e.separation = r)
                    }
                    return e
                }
                ,
                e.prototype.ComputePolygonSeparation = function(t) {
                    var n = t;
                    n.type = 0,
                    n.index = -1,
                    n.separation = -i;
                    for (var r = e.s_perp.Set(-this.m_normal.y, this.m_normal.x), s = 0; s < this.m_polygonB.count; ++s) {
                        var a = I.NegV(this.m_polygonB.normals[s], e.s_n)
                          , o = I.DotVV(a, I.SubVV(this.m_polygonB.vertices[s], this.m_v1, I.s_t0))
                          , l = I.DotVV(a, I.SubVV(this.m_polygonB.vertices[s], this.m_v2, I.s_t0))
                          , c = y(o, l);
                        if (c > this.m_radius)
                            return n.type = 2,
                            n.index = s,
                            n.separation = c,
                            n;
                        if (I.DotVV(a, r) >= 0) {
                            if (I.DotVV(I.SubVV(a, this.m_upperLimit, I.s_t0), this.m_normal) < -h)
                                continue
                        } else if (I.DotVV(I.SubVV(a, this.m_lowerLimit, I.s_t0), this.m_normal) < -h)
                            continue;
                        c > n.separation && (n.type = 2,
                        n.index = s,
                        n.separation = c)
                    }
                    return n
                }
                ,
                e.s_edge1 = new I,
                e.s_edge0 = new I,
                e.s_edge2 = new I,
                e.s_ie = xt.MakeArray(2),
                e.s_rf = new Ye,
                e.s_clipPoints1 = xt.MakeArray(2),
                e.s_clipPoints2 = xt.MakeArray(2),
                e.s_edgeAxis = new je,
                e.s_polygonAxis = new je,
                e.s_n = new I,
                e.s_perp = new I,
                e
            }());
            function Je(t, e, i, n, r) {
                qe.Collide(t, e, i, n, r)
            }
            var Ze, Ke = function() {
                this.mass = 0,
                this.center = new I(0,0),
                this.I = 0
            };
            (Ze = t.b2ShapeType || (t.b2ShapeType = {}))[Ze.e_unknown = -1] = "e_unknown",
            Ze[Ze.e_circleShape = 0] = "e_circleShape",
            Ze[Ze.e_edgeShape = 1] = "e_edgeShape",
            Ze[Ze.e_polygonShape = 2] = "e_polygonShape",
            Ze[Ze.e_chainShape = 3] = "e_chainShape",
            Ze[Ze.e_shapeTypeCount = 4] = "e_shapeTypeCount";
            var Qe = (function() {
                function e(e, i) {
                    this.m_type = t.b2ShapeType.e_unknown,
                    this.m_radius = 0,
                    this.m_type = e,
                    this.m_radius = i
                }
                return e.prototype.Copy = function(t) {
                    return this.m_radius = t.m_radius,
                    this
                }
                ,
                e.prototype.GetType = function() {
                    return this.m_type
                }
                ,
                e
            }
            )()
              , $e = Object.setPrototypeOf || {
                __proto__: []
            }instanceof Array && function(t, e) {
                t.__proto__ = e
            }
            || function(t, e) {
                for (var i in e)
                    e.hasOwnProperty(i) && (t[i] = e[i])
            }
            ;
            function ti(t, e) {
                function i() {
                    this.constructor = t
                }
                $e(t, e),
                t.prototype = null === e ? Object.create(e) : (i.prototype = e.prototype,
                new i)
            }
            var ei, ii = (function(e) {
                function i(i) {
                    void 0 === i && (i = 0);
                    var n = e.call(this, t.b2ShapeType.e_circleShape, i) || this;
                    return n.m_p = new I,
                    n
                }
                return ti(i, e),
                i.prototype.Set = function(t, e) {
                    return void 0 === e && (e = this.m_radius),
                    this.m_p.Copy(t),
                    this.m_radius = e,
                    this
                }
                ,
                i.prototype.Clone = function() {
                    return (new i).Copy(this)
                }
                ,
                i.prototype.Copy = function(t) {
                    return e.prototype.Copy.call(this, t),
                    this.m_p.Copy(t.m_p),
                    this
                }
                ,
                i.prototype.GetChildCount = function() {
                    return 1
                }
                ,
                i.prototype.TestPoint = function(t, e) {
                    var n = V.MulXV(t, this.m_p, i.TestPoint_s_center)
                      , r = I.SubVV(e, n, i.TestPoint_s_d);
                    return I.DotVV(r, r) <= x(this.m_radius)
                }
                ,
                i.prototype.ComputeDistance = function(t, e, n) {
                    var r = V.MulXV(t, this.m_p, i.ComputeDistance_s_center);
                    return I.SubVV(e, r, n),
                    n.Normalize() - this.m_radius
                }
                ,
                i.prototype.RayCast = function(t, e, r) {
                    var s = V.MulXV(r, this.m_p, i.RayCast_s_position)
                      , a = I.SubVV(e.p1, s, i.RayCast_s_s)
                      , o = I.DotVV(a, a) - x(this.m_radius)
                      , l = I.SubVV(e.p2, e.p1, i.RayCast_s_r)
                      , h = I.DotVV(a, l)
                      , c = I.DotVV(l, l)
                      , u = h * h - c * o;
                    if (u < 0 || c < n)
                        return !1;
                    var _ = -(h + T(u));
                    return 0 <= _ && _ <= e.maxFraction * c && (_ /= c,
                    t.fraction = _,
                    I.AddVMulSV(a, _, l, t.normal).SelfNormalize(),
                    !0)
                }
                ,
                i.prototype.ComputeAABB = function(t, e) {
                    var n = V.MulXV(e, this.m_p, i.ComputeAABB_s_p);
                    t.lowerBound.Set(n.x - this.m_radius, n.y - this.m_radius),
                    t.upperBound.Set(n.x + this.m_radius, n.y + this.m_radius)
                }
                ,
                i.prototype.ComputeMass = function(t, e) {
                    var i = x(this.m_radius);
                    t.mass = e * s * i,
                    t.center.Copy(this.m_p),
                    t.I = t.mass * (.5 * i + I.DotVV(this.m_p, this.m_p))
                }
                ,
                i.prototype.SetupDistanceProxy = function(t) {
                    t.m_vertices = t.m_buffer,
                    t.m_vertices[0].Copy(this.m_p),
                    t.m_count = 1,
                    t.m_radius = this.m_radius
                }
                ,
                i.prototype.ComputeSubmergedArea = function(t, e, i, r) {
                    var a = V.MulXV(i, this.m_p, new I)
                      , o = -(I.DotVV(t, a) - e);
                    if (o < -this.m_radius + n)
                        return 0;
                    if (o > this.m_radius)
                        return r.Copy(a),
                        s * this.m_radius * this.m_radius;
                    var l = this.m_radius * this.m_radius
                      , h = o * o
                      , c = l * (D(o / this.m_radius) + s / 2) + o * T(l - h)
                      , u = -2 / 3 * S(l - h, 1.5) / c;
                    return r.x = a.x + t.x * u,
                    r.y = a.y + t.y * u,
                    c
                }
                ,
                i.prototype.Dump = function(t) {
                    t("    const shape: b2CircleShape = new b2CircleShape();\n"),
                    t("    shape.m_radius = %.15f;\n", this.m_radius),
                    t("    shape.m_p.Set(%.15f, %.15f);\n", this.m_p.x, this.m_p.y)
                }
                ,
                i.TestPoint_s_center = new I,
                i.TestPoint_s_d = new I,
                i.ComputeDistance_s_center = new I,
                i.RayCast_s_position = new I,
                i.RayCast_s_s = new I,
                i.RayCast_s_r = new I,
                i.ComputeAABB_s_p = new I,
                i
            }
            )(Qe), ni = (function(e) {
                function r() {
                    var i = e.call(this, t.b2ShapeType.e_polygonShape, c) || this;
                    return i.m_centroid = new I(0,0),
                    i.m_vertices = [],
                    i.m_normals = [],
                    i.m_count = 0,
                    i
                }
                return ti(r, e),
                r.prototype.Clone = function() {
                    return (new r).Copy(this)
                }
                ,
                r.prototype.Copy = function(t) {
                    e.prototype.Copy.call(this, t),
                    this.m_centroid.Copy(t.m_centroid),
                    this.m_count = t.m_count,
                    this.m_vertices = I.MakeArray(this.m_count),
                    this.m_normals = I.MakeArray(this.m_count);
                    for (var i = 0; i < this.m_count; ++i)
                        this.m_vertices[i].Copy(t.m_vertices[i]),
                        this.m_normals[i].Copy(t.m_normals[i]);
                    return this
                }
                ,
                r.prototype.GetChildCount = function() {
                    return 1
                }
                ,
                r.prototype.Set = function(t, e, i) {
                    if (void 0 === e && (e = t.length),
                    void 0 === i && (i = 0),
                    e < 3)
                        return this.SetAsBox(1, 1);
                    for (var n = y(e, o), s = r.Set_s_ps, a = 0, h = 0; h < n; ++h) {
                        for (var c = t[i + h], u = !0, _ = 0; _ < a; ++_)
                            if (I.DistanceSquaredVV(c, s[_]) < .25 * l * l) {
                                u = !1;
                                break
                            }
                        u && s[a++].Copy(c)
                    }
                    if ((n = a) < 3)
                        return this.SetAsBox(1, 1);
                    var f = 0
                      , d = s[0].x;
                    for (h = 1; h < n; ++h) {
                        var p = s[h].x;
                        (p > d || p === d && s[h].y < s[f].y) && (f = h,
                        d = p)
                    }
                    for (var m = r.Set_s_hull, v = 0, g = f; ; ) {
                        m[v] = g;
                        var A = 0;
                        for (_ = 1; _ < n; ++_)
                            if (A !== g) {
                                var x = I.SubVV(s[A], s[m[v]], r.Set_s_r)
                                  , b = (c = I.SubVV(s[_], s[m[v]], r.Set_s_v),
                                I.CrossVV(x, c));
                                b < 0 && (A = _),
                                0 === b && c.LengthSquared() > x.LengthSquared() && (A = _)
                            } else
                                A = _;
                        if (++v,
                        g = A,
                        A === f)
                            break
                    }
                    for (this.m_count = v,
                    this.m_vertices = I.MakeArray(this.m_count),
                    this.m_normals = I.MakeArray(this.m_count),
                    h = 0; h < v; ++h)
                        this.m_vertices[h].Copy(s[m[h]]);
                    for (h = 0; h < v; ++h) {
                        var C = this.m_vertices[h]
                          , T = this.m_vertices[(h + 1) % v]
                          , S = I.SubVV(T, C, I.s_t0);
                        I.CrossVOne(S, this.m_normals[h]).SelfNormalize()
                    }
                    return r.ComputeCentroid(this.m_vertices, v, this.m_centroid),
                    this
                }
                ,
                r.prototype.SetAsArray = function(t, e) {
                    return void 0 === e && (e = t.length),
                    this.Set(t, e)
                }
                ,
                r.prototype.SetAsBox = function(t, e, i, n) {
                    if (void 0 === n && (n = 0),
                    this.m_count = 4,
                    this.m_vertices = I.MakeArray(this.m_count),
                    this.m_normals = I.MakeArray(this.m_count),
                    this.m_vertices[0].Set(-t, -e),
                    this.m_vertices[1].Set(t, -e),
                    this.m_vertices[2].Set(t, e),
                    this.m_vertices[3].Set(-t, e),
                    this.m_normals[0].Set(0, -1),
                    this.m_normals[1].Set(1, 0),
                    this.m_normals[2].Set(0, 1),
                    this.m_normals[3].Set(-1, 0),
                    this.m_centroid.SetZero(),
                    i) {
                        this.m_centroid.Copy(i);
                        var r = new V;
                        r.SetPosition(i),
                        r.SetRotationAngle(n);
                        for (var s = 0; s < this.m_count; ++s)
                            V.MulXV(r, this.m_vertices[s], this.m_vertices[s]),
                            F.MulRV(r.q, this.m_normals[s], this.m_normals[s])
                    }
                    return this
                }
                ,
                r.prototype.TestPoint = function(t, e) {
                    for (var i = V.MulTXV(t, e, r.TestPoint_s_pLocal), n = 0; n < this.m_count; ++n)
                        if (I.DotVV(this.m_normals[n], I.SubVV(i, this.m_vertices[n], I.s_t0)) > 0)
                            return !1;
                    return !0
                }
                ,
                r.prototype.ComputeDistance = function(t, e, n) {
                    for (var s = V.MulTXV(t, e, r.ComputeDistance_s_pLocal), a = -i, o = r.ComputeDistance_s_normalForMaxDistance.Copy(s), l = 0; l < this.m_count; ++l) {
                        var h = I.DotVV(this.m_normals[l], I.SubVV(s, this.m_vertices[l], I.s_t0));
                        h > a && (a = h,
                        o.Copy(this.m_normals[l]))
                    }
                    if (a > 0) {
                        var c = r.ComputeDistance_s_minDistance.Copy(o)
                          , u = a * a;
                        for (l = 0; l < this.m_count; ++l) {
                            var _ = I.SubVV(s, this.m_vertices[l], r.ComputeDistance_s_distance)
                              , f = _.LengthSquared();
                            u > f && (c.Copy(_),
                            u = f)
                        }
                        return F.MulRV(t.q, c, n),
                        n.Normalize(),
                        Math.sqrt(u)
                    }
                    return F.MulRV(t.q, o, n),
                    a
                }
                ,
                r.prototype.RayCast = function(t, e, i) {
                    for (var n = V.MulTXV(i, e.p1, r.RayCast_s_p1), s = V.MulTXV(i, e.p2, r.RayCast_s_p2), a = I.SubVV(s, n, r.RayCast_s_d), o = 0, l = e.maxFraction, h = -1, c = 0; c < this.m_count; ++c) {
                        var u = I.DotVV(this.m_normals[c], I.SubVV(this.m_vertices[c], n, I.s_t0))
                          , _ = I.DotVV(this.m_normals[c], a);
                        if (0 === _) {
                            if (u < 0)
                                return !1
                        } else
                            _ < 0 && u < o * _ ? (o = u / _,
                            h = c) : _ > 0 && u < l * _ && (l = u / _);
                        if (l < o)
                            return !1
                    }
                    return h >= 0 && (t.fraction = o,
                    F.MulRV(i.q, this.m_normals[h], t.normal),
                    !0)
                }
                ,
                r.prototype.ComputeAABB = function(t, e) {
                    for (var i = V.MulXV(e, this.m_vertices[0], t.lowerBound), n = t.upperBound.Copy(i), s = 0; s < this.m_count; ++s) {
                        var a = V.MulXV(e, this.m_vertices[s], r.ComputeAABB_s_v);
                        I.MinV(a, i, i),
                        I.MaxV(a, n, n)
                    }
                    var o = this.m_radius;
                    i.SelfSubXY(o, o),
                    n.SelfAddXY(o, o)
                }
                ,
                r.prototype.ComputeMass = function(t, e) {
                    for (var i = r.ComputeMass_s_center.SetZero(), n = 0, s = 0, a = r.ComputeMass_s_s.SetZero(), o = 0; o < this.m_count; ++o)
                        a.SelfAdd(this.m_vertices[o]);
                    for (a.SelfMul(1 / this.m_count),
                    o = 0; o < this.m_count; ++o) {
                        var l = I.SubVV(this.m_vertices[o], a, r.ComputeMass_s_e1)
                          , h = I.SubVV(this.m_vertices[(o + 1) % this.m_count], a, r.ComputeMass_s_e2)
                          , c = I.CrossVV(l, h)
                          , u = .5 * c;
                        n += u,
                        i.SelfAdd(I.MulSV(u * (1 / 3), I.AddVV(l, h, I.s_t0), I.s_t1));
                        var _ = l.x
                          , f = l.y
                          , d = h.x
                          , p = h.y;
                        s += 1 / 3 * .25 * c * (_ * _ + d * _ + d * d + f * f + p * f + p * p)
                    }
                    t.mass = e * n,
                    i.SelfMul(1 / n),
                    I.AddVV(i, a, t.center),
                    t.I = e * s,
                    t.I += t.mass * (I.DotVV(t.center, t.center) - I.DotVV(i, i))
                }
                ,
                r.prototype.Validate = function() {
                    for (var t = 0; t < this.m_count; ++t)
                        for (var e = t, i = (t + 1) % this.m_count, n = this.m_vertices[e], s = I.SubVV(this.m_vertices[i], n, r.Validate_s_e), a = 0; a < this.m_count; ++a)
                            if (a !== e && a !== i) {
                                var o = I.SubVV(this.m_vertices[a], n, r.Validate_s_v);
                                if (I.CrossVV(s, o) < 0)
                                    return !1
                            }
                    return !0
                }
                ,
                r.prototype.SetupDistanceProxy = function(t) {
                    t.m_vertices = this.m_vertices,
                    t.m_count = this.m_count,
                    t.m_radius = this.m_radius
                }
                ,
                r.prototype.ComputeSubmergedArea = function(t, e, i, s) {
                    for (var a = F.MulTRV(i.q, t, r.ComputeSubmergedArea_s_normalL), o = e - I.DotVV(t, i.p), l = r.ComputeSubmergedArea_s_depths, h = 0, c = -1, u = -1, _ = !1, f = 0; f < this.m_count; ++f) {
                        l[f] = I.DotVV(a, this.m_vertices[f]) - o;
                        var d = l[f] < -n;
                        f > 0 && (d ? _ || (c = f - 1,
                        h++) : _ && (u = f - 1,
                        h++)),
                        _ = d
                    }
                    switch (h) {
                    case 0:
                        if (_) {
                            var p = r.ComputeSubmergedArea_s_md;
                            return this.ComputeMass(p, 1),
                            V.MulXV(i, p.center, s),
                            p.mass
                        }
                        return 0;
                    case 1:
                        -1 === c ? c = this.m_count - 1 : u = this.m_count - 1
                    }
                    for (var m, y = (c + 1) % this.m_count, v = (u + 1) % this.m_count, g = (0 - l[c]) / (l[y] - l[c]), A = (0 - l[u]) / (l[v] - l[u]), x = r.ComputeSubmergedArea_s_intoVec.Set(this.m_vertices[c].x * (1 - g) + this.m_vertices[y].x * g, this.m_vertices[c].y * (1 - g) + this.m_vertices[y].y * g), b = r.ComputeSubmergedArea_s_outoVec.Set(this.m_vertices[u].x * (1 - A) + this.m_vertices[v].x * A, this.m_vertices[u].y * (1 - A) + this.m_vertices[v].y * A), C = 0, T = r.ComputeSubmergedArea_s_center.SetZero(), S = this.m_vertices[y], w = y; w !== v; ) {
                        m = (w = (w + 1) % this.m_count) === v ? b : this.m_vertices[w];
                        var E = .5 * ((S.x - x.x) * (m.y - x.y) - (S.y - x.y) * (m.x - x.x));
                        C += E,
                        T.x += E * (x.x + S.x + m.x) / 3,
                        T.y += E * (x.y + S.y + m.y) / 3,
                        S = m
                    }
                    return T.SelfMul(1 / C),
                    V.MulXV(i, T, s),
                    C
                }
                ,
                r.prototype.Dump = function(t) {
                    t("    const shape: b2PolygonShape = new b2PolygonShape();\n"),
                    t("    const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", o);
                    for (var e = 0; e < this.m_count; ++e)
                        t("    vs[%d].Set(%.15f, %.15f);\n", e, this.m_vertices[e].x, this.m_vertices[e].y);
                    t("    shape.Set(vs, %d);\n", this.m_count)
                }
                ,
                r.ComputeCentroid = function(t, e, i) {
                    var n = i;
                    n.SetZero();
                    for (var s = 0, a = r.ComputeCentroid_s_pRef.SetZero(), o = 0; o < e; ++o) {
                        var l = a
                          , h = t[o]
                          , c = t[(o + 1) % e]
                          , u = I.SubVV(h, l, r.ComputeCentroid_s_e1)
                          , _ = I.SubVV(c, l, r.ComputeCentroid_s_e2)
                          , f = .5 * I.CrossVV(u, _);
                        s += f,
                        n.x += f * (1 / 3) * (l.x + h.x + c.x),
                        n.y += f * (1 / 3) * (l.y + h.y + c.y)
                    }
                    return n.SelfMul(1 / s),
                    n
                }
                ,
                r.Set_s_ps = I.MakeArray(o),
                r.Set_s_hull = p(o),
                r.Set_s_r = new I,
                r.Set_s_v = new I,
                r.TestPoint_s_pLocal = new I,
                r.ComputeDistance_s_pLocal = new I,
                r.ComputeDistance_s_normalForMaxDistance = new I,
                r.ComputeDistance_s_minDistance = new I,
                r.ComputeDistance_s_distance = new I,
                r.RayCast_s_p1 = new I,
                r.RayCast_s_p2 = new I,
                r.RayCast_s_d = new I,
                r.ComputeAABB_s_v = new I,
                r.ComputeMass_s_center = new I,
                r.ComputeMass_s_s = new I,
                r.ComputeMass_s_e1 = new I,
                r.ComputeMass_s_e2 = new I,
                r.Validate_s_e = new I,
                r.Validate_s_v = new I,
                r.ComputeSubmergedArea_s_normalL = new I,
                r.ComputeSubmergedArea_s_depths = p(o),
                r.ComputeSubmergedArea_s_md = new Ke,
                r.ComputeSubmergedArea_s_intoVec = new I,
                r.ComputeSubmergedArea_s_outoVec = new I,
                r.ComputeSubmergedArea_s_center = new I,
                r.ComputeCentroid_s_pRef = new I,
                r.ComputeCentroid_s_e1 = new I,
                r.ComputeCentroid_s_e2 = new I,
                r
            }
            )(Qe), ri = (function(e) {
                function i() {
                    var i = e.call(this, t.b2ShapeType.e_edgeShape, c) || this;
                    return i.m_vertex1 = new I,
                    i.m_vertex2 = new I,
                    i.m_vertex0 = new I,
                    i.m_vertex3 = new I,
                    i.m_hasVertex0 = !1,
                    i.m_hasVertex3 = !1,
                    i
                }
                return ti(i, e),
                i.prototype.Set = function(t, e) {
                    return this.m_vertex1.Copy(t),
                    this.m_vertex2.Copy(e),
                    this.m_hasVertex0 = !1,
                    this.m_hasVertex3 = !1,
                    this
                }
                ,
                i.prototype.Clone = function() {
                    return (new i).Copy(this)
                }
                ,
                i.prototype.Copy = function(t) {
                    return e.prototype.Copy.call(this, t),
                    this.m_vertex1.Copy(t.m_vertex1),
                    this.m_vertex2.Copy(t.m_vertex2),
                    this.m_vertex0.Copy(t.m_vertex0),
                    this.m_vertex3.Copy(t.m_vertex3),
                    this.m_hasVertex0 = t.m_hasVertex0,
                    this.m_hasVertex3 = t.m_hasVertex3,
                    this
                }
                ,
                i.prototype.GetChildCount = function() {
                    return 1
                }
                ,
                i.prototype.TestPoint = function() {
                    return !1
                }
                ,
                i.prototype.ComputeDistance = function(t, e, n) {
                    var r = V.MulXV(t, this.m_vertex1, i.ComputeDistance_s_v1)
                      , s = V.MulXV(t, this.m_vertex2, i.ComputeDistance_s_v2)
                      , a = I.SubVV(e, r, i.ComputeDistance_s_d)
                      , o = I.SubVV(s, r, i.ComputeDistance_s_s)
                      , l = I.DotVV(a, o);
                    if (l > 0) {
                        var h = I.DotVV(o, o);
                        l > h ? I.SubVV(e, s, a) : a.SelfMulSub(l / h, o)
                    }
                    return n.Copy(a),
                    n.Normalize()
                }
                ,
                i.prototype.RayCast = function(t, e, n) {
                    var r = V.MulTXV(n, e.p1, i.RayCast_s_p1)
                      , s = V.MulTXV(n, e.p2, i.RayCast_s_p2)
                      , a = I.SubVV(s, r, i.RayCast_s_d)
                      , o = this.m_vertex1
                      , l = this.m_vertex2
                      , h = I.SubVV(l, o, i.RayCast_s_e)
                      , c = t.normal.Set(h.y, -h.x).SelfNormalize()
                      , u = I.DotVV(c, I.SubVV(o, r, I.s_t0))
                      , _ = I.DotVV(c, a);
                    if (0 === _)
                        return !1;
                    var f = u / _;
                    if (f < 0 || e.maxFraction < f)
                        return !1;
                    var d = I.AddVMulSV(r, f, a, i.RayCast_s_q)
                      , p = I.SubVV(l, o, i.RayCast_s_r)
                      , m = I.DotVV(p, p);
                    if (0 === m)
                        return !1;
                    var y = I.DotVV(I.SubVV(d, o, I.s_t0), p) / m;
                    return !(y < 0 || 1 < y || (t.fraction = f,
                    F.MulRV(n.q, t.normal, t.normal),
                    u > 0 && t.normal.SelfNeg(),
                    0))
                }
                ,
                i.prototype.ComputeAABB = function(t, e) {
                    var n = V.MulXV(e, this.m_vertex1, i.ComputeAABB_s_v1)
                      , r = V.MulXV(e, this.m_vertex2, i.ComputeAABB_s_v2);
                    I.MinV(n, r, t.lowerBound),
                    I.MaxV(n, r, t.upperBound);
                    var s = this.m_radius;
                    t.lowerBound.SelfSubXY(s, s),
                    t.upperBound.SelfAddXY(s, s)
                }
                ,
                i.prototype.ComputeMass = function(t) {
                    t.mass = 0,
                    I.MidVV(this.m_vertex1, this.m_vertex2, t.center),
                    t.I = 0
                }
                ,
                i.prototype.SetupDistanceProxy = function(t) {
                    t.m_vertices = t.m_buffer,
                    t.m_vertices[0].Copy(this.m_vertex1),
                    t.m_vertices[1].Copy(this.m_vertex2),
                    t.m_count = 2,
                    t.m_radius = this.m_radius
                }
                ,
                i.prototype.ComputeSubmergedArea = function(t, e, i, n) {
                    return n.SetZero(),
                    0
                }
                ,
                i.prototype.Dump = function(t) {
                    t("    const shape: b2EdgeShape = new b2EdgeShape();\n"),
                    t("    shape.m_radius = %.15f;\n", this.m_radius),
                    t("    shape.m_vertex0.Set(%.15f, %.15f);\n", this.m_vertex0.x, this.m_vertex0.y),
                    t("    shape.m_vertex1.Set(%.15f, %.15f);\n", this.m_vertex1.x, this.m_vertex1.y),
                    t("    shape.m_vertex2.Set(%.15f, %.15f);\n", this.m_vertex2.x, this.m_vertex2.y),
                    t("    shape.m_vertex3.Set(%.15f, %.15f);\n", this.m_vertex3.x, this.m_vertex3.y),
                    t("    shape.m_hasVertex0 = %s;\n", this.m_hasVertex0),
                    t("    shape.m_hasVertex3 = %s;\n", this.m_hasVertex3)
                }
                ,
                i.ComputeDistance_s_v1 = new I,
                i.ComputeDistance_s_v2 = new I,
                i.ComputeDistance_s_d = new I,
                i.ComputeDistance_s_s = new I,
                i.RayCast_s_p1 = new I,
                i.RayCast_s_p2 = new I,
                i.RayCast_s_d = new I,
                i.RayCast_s_e = new I,
                i.RayCast_s_q = new I,
                i.RayCast_s_r = new I,
                i.ComputeAABB_s_v1 = new I,
                i.ComputeAABB_s_v2 = new I,
                i
            }
            )(Qe), si = (function(e) {
                function i() {
                    var i = e.call(this, t.b2ShapeType.e_chainShape, c) || this;
                    return i.m_vertices = [],
                    i.m_count = 0,
                    i.m_prevVertex = new I,
                    i.m_nextVertex = new I,
                    i.m_hasPrevVertex = !1,
                    i.m_hasNextVertex = !1,
                    i
                }
                return ti(i, e),
                i.prototype.CreateLoop = function(t, e, i) {
                    if (void 0 === e && (e = t.length),
                    void 0 === i && (i = 0),
                    e < 3)
                        return this;
                    this.m_count = e + 1,
                    this.m_vertices = I.MakeArray(this.m_count);
                    for (var n = 0; n < e; ++n)
                        this.m_vertices[n].Copy(t[i + n]);
                    return this.m_vertices[e].Copy(this.m_vertices[0]),
                    this.m_prevVertex.Copy(this.m_vertices[this.m_count - 2]),
                    this.m_nextVertex.Copy(this.m_vertices[1]),
                    this.m_hasPrevVertex = !0,
                    this.m_hasNextVertex = !0,
                    this
                }
                ,
                i.prototype.CreateChain = function(t, e, i) {
                    void 0 === e && (e = t.length),
                    void 0 === i && (i = 0),
                    this.m_count = e,
                    this.m_vertices = I.MakeArray(e);
                    for (var n = 0; n < e; ++n)
                        this.m_vertices[n].Copy(t[i + n]);
                    return this.m_hasPrevVertex = !1,
                    this.m_hasNextVertex = !1,
                    this.m_prevVertex.SetZero(),
                    this.m_nextVertex.SetZero(),
                    this
                }
                ,
                i.prototype.SetPrevVertex = function(t) {
                    return this.m_prevVertex.Copy(t),
                    this.m_hasPrevVertex = !0,
                    this
                }
                ,
                i.prototype.SetNextVertex = function(t) {
                    return this.m_nextVertex.Copy(t),
                    this.m_hasNextVertex = !0,
                    this
                }
                ,
                i.prototype.Clone = function() {
                    return (new i).Copy(this)
                }
                ,
                i.prototype.Copy = function(t) {
                    return e.prototype.Copy.call(this, t),
                    this.CreateChain(t.m_vertices, t.m_count),
                    this.m_prevVertex.Copy(t.m_prevVertex),
                    this.m_nextVertex.Copy(t.m_nextVertex),
                    this.m_hasPrevVertex = t.m_hasPrevVertex,
                    this.m_hasNextVertex = t.m_hasNextVertex,
                    this
                }
                ,
                i.prototype.GetChildCount = function() {
                    return this.m_count - 1
                }
                ,
                i.prototype.GetChildEdge = function(e, i) {
                    e.m_type = t.b2ShapeType.e_edgeShape,
                    e.m_radius = this.m_radius,
                    e.m_vertex1.Copy(this.m_vertices[i]),
                    e.m_vertex2.Copy(this.m_vertices[i + 1]),
                    i > 0 ? (e.m_vertex0.Copy(this.m_vertices[i - 1]),
                    e.m_hasVertex0 = !0) : (e.m_vertex0.Copy(this.m_prevVertex),
                    e.m_hasVertex0 = this.m_hasPrevVertex),
                    i < this.m_count - 2 ? (e.m_vertex3.Copy(this.m_vertices[i + 2]),
                    e.m_hasVertex3 = !0) : (e.m_vertex3.Copy(this.m_nextVertex),
                    e.m_hasVertex3 = this.m_hasNextVertex)
                }
                ,
                i.prototype.TestPoint = function() {
                    return !1
                }
                ,
                i.prototype.ComputeDistance = function(t, e, n, r) {
                    var s = i.ComputeDistance_s_edgeShape;
                    return this.GetChildEdge(s, r),
                    s.ComputeDistance(t, e, n, 0)
                }
                ,
                i.prototype.RayCast = function(t, e, n, r) {
                    var s = i.RayCast_s_edgeShape;
                    return s.m_vertex1.Copy(this.m_vertices[r]),
                    s.m_vertex2.Copy(this.m_vertices[(r + 1) % this.m_count]),
                    s.RayCast(t, e, n, 0)
                }
                ,
                i.prototype.ComputeAABB = function(t, e, n) {
                    var r = this.m_vertices[n]
                      , s = this.m_vertices[(n + 1) % this.m_count]
                      , a = V.MulXV(e, r, i.ComputeAABB_s_v1)
                      , o = V.MulXV(e, s, i.ComputeAABB_s_v2);
                    I.MinV(a, o, t.lowerBound),
                    I.MaxV(a, o, t.upperBound)
                }
                ,
                i.prototype.ComputeMass = function(t) {
                    t.mass = 0,
                    t.center.SetZero(),
                    t.I = 0
                }
                ,
                i.prototype.SetupDistanceProxy = function(t, e) {
                    t.m_vertices = t.m_buffer,
                    t.m_vertices[0].Copy(this.m_vertices[e]),
                    e + 1 < this.m_count ? t.m_vertices[1].Copy(this.m_vertices[e + 1]) : t.m_vertices[1].Copy(this.m_vertices[0]),
                    t.m_count = 2,
                    t.m_radius = this.m_radius
                }
                ,
                i.prototype.ComputeSubmergedArea = function(t, e, i, n) {
                    return n.SetZero(),
                    0
                }
                ,
                i.prototype.Dump = function(t) {
                    t("    const shape: b2ChainShape = new b2ChainShape();\n"),
                    t("    const vs: b2Vec2[] = b2Vec2.MakeArray(%d);\n", o);
                    for (var e = 0; e < this.m_count; ++e)
                        t("    vs[%d].Set(%.15f, %.15f);\n", e, this.m_vertices[e].x, this.m_vertices[e].y);
                    t("    shape.CreateChain(vs, %d);\n", this.m_count),
                    t("    shape.m_prevVertex.Set(%.15f, %.15f);\n", this.m_prevVertex.x, this.m_prevVertex.y),
                    t("    shape.m_nextVertex.Set(%.15f, %.15f);\n", this.m_nextVertex.x, this.m_nextVertex.y),
                    t("    shape.m_hasPrevVertex = %s;\n", this.m_hasPrevVertex ? "true" : "false"),
                    t("    shape.m_hasNextVertex = %s;\n", this.m_hasNextVertex ? "true" : "false")
                }
                ,
                i.ComputeDistance_s_edgeShape = new ri,
                i.RayCast_s_edgeShape = new ri,
                i.ComputeAABB_s_v1 = new I,
                i.ComputeAABB_s_v2 = new I,
                i
            }
            )(Qe), ai = (function() {
                function t() {
                    this.categoryBits = 1,
                    this.maskBits = 65535,
                    this.groupIndex = 0
                }
                return t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t.prototype.Copy = function(t) {
                    return this.categoryBits = t.categoryBits,
                    this.maskBits = t.maskBits,
                    this.groupIndex = t.groupIndex || 0,
                    this
                }
                ,
                t.DEFAULT = new t,
                t
            }
            )(), oi = function() {
                this.userData = null,
                this.friction = .2,
                this.restitution = 0,
                this.density = 0,
                this.isSensor = !1,
                this.filter = new ai
            }, li = function(t) {
                this.aabb = new Tt,
                this.childIndex = 0,
                this.fixture = t
            }, hi = (function() {
                function t(t, e) {
                    this.m_density = 0,
                    this.m_next = null,
                    this.m_friction = 0,
                    this.m_restitution = 0,
                    this.m_proxies = [],
                    this.m_proxyCount = 0,
                    this.m_filter = new ai,
                    this.m_isSensor = !1,
                    this.m_userData = null,
                    this.m_body = e,
                    this.m_shape = t.shape.Clone()
                }
                return t.prototype.GetType = function() {
                    return this.m_shape.GetType()
                }
                ,
                t.prototype.GetShape = function() {
                    return this.m_shape
                }
                ,
                t.prototype.SetSensor = function(t) {
                    t !== this.m_isSensor && (this.m_body.SetAwake(!0),
                    this.m_isSensor = t)
                }
                ,
                t.prototype.IsSensor = function() {
                    return this.m_isSensor
                }
                ,
                t.prototype.SetFilterData = function(t) {
                    this.m_filter.Copy(t),
                    this.Refilter()
                }
                ,
                t.prototype.GetFilterData = function() {
                    return this.m_filter
                }
                ,
                t.prototype.Refilter = function() {
                    for (var t = this.m_body.GetContactList(); t; ) {
                        var e = t.contact
                          , i = e.GetFixtureA()
                          , n = e.GetFixtureB();
                        i !== this && n !== this || e.FlagForFiltering(),
                        t = t.next
                    }
                    var r = this.m_body.GetWorld();
                    if (null !== r)
                        for (var s = r.m_contactManager.m_broadPhase, a = 0; a < this.m_proxyCount; ++a)
                            s.TouchProxy(this.m_proxies[a].treeNode)
                }
                ,
                t.prototype.GetBody = function() {
                    return this.m_body
                }
                ,
                t.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                t.prototype.GetUserData = function() {
                    return this.m_userData
                }
                ,
                t.prototype.SetUserData = function(t) {
                    this.m_userData = t
                }
                ,
                t.prototype.TestPoint = function(t) {
                    return this.m_shape.TestPoint(this.m_body.GetTransform(), t)
                }
                ,
                t.prototype.ComputeDistance = function(t, e, i) {
                    return this.m_shape.ComputeDistance(this.m_body.GetTransform(), t, e, i)
                }
                ,
                t.prototype.RayCast = function(t, e, i) {
                    return this.m_shape.RayCast(t, e, this.m_body.GetTransform(), i)
                }
                ,
                t.prototype.GetMassData = function(t) {
                    return void 0 === t && (t = new Ke),
                    this.m_shape.ComputeMass(t, this.m_density),
                    t
                }
                ,
                t.prototype.SetDensity = function(t) {
                    this.m_density = t
                }
                ,
                t.prototype.GetDensity = function() {
                    return this.m_density
                }
                ,
                t.prototype.GetFriction = function() {
                    return this.m_friction
                }
                ,
                t.prototype.SetFriction = function(t) {
                    this.m_friction = t
                }
                ,
                t.prototype.GetRestitution = function() {
                    return this.m_restitution
                }
                ,
                t.prototype.SetRestitution = function(t) {
                    this.m_restitution = t
                }
                ,
                t.prototype.GetAABB = function(t) {
                    return this.m_proxies[t].aabb
                }
                ,
                t.prototype.Dump = function(t, e) {
                    t("    const fd: b2FixtureDef = new b2FixtureDef();\n"),
                    t("    fd.friction = %.15f;\n", this.m_friction),
                    t("    fd.restitution = %.15f;\n", this.m_restitution),
                    t("    fd.density = %.15f;\n", this.m_density),
                    t("    fd.isSensor = %s;\n", this.m_isSensor ? "true" : "false"),
                    t("    fd.filter.categoryBits = %d;\n", this.m_filter.categoryBits),
                    t("    fd.filter.maskBits = %d;\n", this.m_filter.maskBits),
                    t("    fd.filter.groupIndex = %d;\n", this.m_filter.groupIndex),
                    this.m_shape.Dump(t),
                    t("\n"),
                    t("    fd.shape = shape;\n"),
                    t("\n"),
                    t("    bodies[%d].CreateFixture(fd);\n", e)
                }
                ,
                t.prototype.Create = function(t) {
                    var i = this;
                    this.m_userData = t.userData,
                    this.m_friction = e(t.friction, .2),
                    this.m_restitution = e(t.restitution, 0),
                    this.m_next = null,
                    this.m_filter.Copy(e(t.filter, ai.DEFAULT)),
                    this.m_isSensor = e(t.isSensor, !1),
                    this.m_proxies = d(this.m_shape.GetChildCount(), (function() {
                        return new li(i)
                    }
                    )),
                    this.m_proxyCount = 0,
                    this.m_density = e(t.density, 0)
                }
                ,
                t.prototype.Destroy = function() {}
                ,
                t.prototype.CreateProxies = function(t) {
                    var e = this.m_body.m_world.m_contactManager.m_broadPhase;
                    this.m_proxyCount = this.m_shape.GetChildCount();
                    for (var i = 0; i < this.m_proxyCount; ++i) {
                        var n = this.m_proxies[i] = new li(this);
                        this.m_shape.ComputeAABB(n.aabb, t, i),
                        n.treeNode = e.CreateProxy(n.aabb, n),
                        n.childIndex = i
                    }
                }
                ,
                t.prototype.DestroyProxies = function() {
                    for (var t = this.m_body.m_world.m_contactManager.m_broadPhase, e = 0; e < this.m_proxyCount; ++e) {
                        var i = this.m_proxies[e];
                        delete i.treeNode.userData,
                        t.DestroyProxy(i.treeNode),
                        delete i.treeNode
                    }
                    this.m_proxyCount = 0
                }
                ,
                t.prototype.TouchProxies = function() {
                    for (var t = this.m_body.m_world.m_contactManager.m_broadPhase, e = this.m_proxyCount, i = 0; i < e; ++i)
                        t.TouchProxy(this.m_proxies[i].treeNode)
                }
                ,
                t.prototype.Synchronize = function(e, i) {
                    if (0 !== this.m_proxyCount)
                        for (var n = this.m_body.m_world.m_contactManager.m_broadPhase, r = 0; r < this.m_proxyCount; ++r) {
                            var s = this.m_proxies[r]
                              , a = t.Synchronize_s_aabb1
                              , o = t.Synchronize_s_aabb2;
                            this.m_shape.ComputeAABB(a, e, r),
                            this.m_shape.ComputeAABB(o, i, r),
                            s.aabb.Combine2(a, o);
                            var l = I.SubVV(i.p, e.p, t.Synchronize_s_displacement);
                            n.MoveProxy(s.treeNode, s.aabb, l)
                        }
                }
                ,
                t.Synchronize_s_aabb1 = new Tt,
                t.Synchronize_s_aabb2 = new Tt,
                t.Synchronize_s_displacement = new I,
                t
            }
            )();
            (ei = t.b2BodyType || (t.b2BodyType = {}))[ei.b2_unknown = -1] = "b2_unknown",
            ei[ei.b2_staticBody = 0] = "b2_staticBody",
            ei[ei.b2_kinematicBody = 1] = "b2_kinematicBody",
            ei[ei.b2_dynamicBody = 2] = "b2_dynamicBody";
            var ci, ui, _i = (function() {
                function i(i, n) {
                    this.m_type = t.b2BodyType.b2_staticBody,
                    this.m_islandFlag = !1,
                    this.m_awakeFlag = !1,
                    this.m_autoSleepFlag = !1,
                    this.m_bulletFlag = !1,
                    this.m_fixedRotationFlag = !1,
                    this.m_activeFlag = !1,
                    this.m_toiFlag = !1,
                    this.m_islandIndex = 0,
                    this.m_xf = new V,
                    this.m_xf0 = new V,
                    this.m_sweep = new N,
                    this.m_linearVelocity = new I,
                    this.m_angularVelocity = 0,
                    this.m_force = new I,
                    this.m_torque = 0,
                    this.m_prev = null,
                    this.m_next = null,
                    this.m_fixtureList = null,
                    this.m_fixtureCount = 0,
                    this.m_jointList = null,
                    this.m_contactList = null,
                    this.m_mass = 1,
                    this.m_invMass = 1,
                    this.m_I = 0,
                    this.m_invI = 0,
                    this.m_linearDamping = 0,
                    this.m_angularDamping = 0,
                    this.m_gravityScale = 1,
                    this.m_sleepTime = 0,
                    this.m_userData = null,
                    this.m_controllerList = null,
                    this.m_controllerCount = 0,
                    this.m_bulletFlag = e(i.bullet, !1),
                    this.m_fixedRotationFlag = e(i.fixedRotation, !1),
                    this.m_autoSleepFlag = e(i.allowSleep, !0),
                    this.m_awakeFlag = e(i.awake, !0),
                    this.m_activeFlag = e(i.active, !0),
                    this.m_world = n,
                    this.m_xf.p.Copy(e(i.position, I.ZERO)),
                    this.m_xf.q.SetAngle(e(i.angle, 0)),
                    this.m_xf0.Copy(this.m_xf),
                    this.m_sweep.localCenter.SetZero(),
                    this.m_sweep.c0.Copy(this.m_xf.p),
                    this.m_sweep.c.Copy(this.m_xf.p),
                    this.m_sweep.a0 = this.m_sweep.a = this.m_xf.q.GetAngle(),
                    this.m_sweep.alpha0 = 0,
                    this.m_linearVelocity.Copy(e(i.linearVelocity, I.ZERO)),
                    this.m_angularVelocity = e(i.angularVelocity, 0),
                    this.m_linearDamping = e(i.linearDamping, 0),
                    this.m_angularDamping = e(i.angularDamping, 0),
                    this.m_gravityScale = e(i.gravityScale, 1),
                    this.m_force.SetZero(),
                    this.m_torque = 0,
                    this.m_sleepTime = 0,
                    this.m_type = e(i.type, t.b2BodyType.b2_staticBody),
                    i.type === t.b2BodyType.b2_dynamicBody ? (this.m_mass = 1,
                    this.m_invMass = 1) : (this.m_mass = 0,
                    this.m_invMass = 0),
                    this.m_I = 0,
                    this.m_invI = 0,
                    this.m_userData = i.userData,
                    this.m_fixtureList = null,
                    this.m_fixtureCount = 0,
                    this.m_controllerList = null,
                    this.m_controllerCount = 0
                }
                return i.prototype.CreateFixture = function(t, e) {
                    return void 0 === e && (e = 0),
                    t instanceof Qe ? this.CreateFixtureShapeDensity(t, e) : this.CreateFixtureDef(t)
                }
                ,
                i.prototype.CreateFixtureDef = function(t) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    var e = new hi(t,this);
                    return e.Create(t),
                    this.m_activeFlag && e.CreateProxies(this.m_xf),
                    e.m_next = this.m_fixtureList,
                    this.m_fixtureList = e,
                    ++this.m_fixtureCount,
                    e.m_density > 0 && this.ResetMassData(),
                    this.m_world.m_newFixture = !0,
                    e
                }
                ,
                i.prototype.CreateFixtureShapeDensity = function(t, e) {
                    void 0 === e && (e = 0);
                    var n = i.CreateFixtureShapeDensity_s_def;
                    return n.shape = t,
                    n.density = e,
                    this.CreateFixtureDef(n)
                }
                ,
                i.prototype.DestroyFixture = function(t) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    for (var e = this.m_fixtureList, i = null; null !== e; ) {
                        if (e === t) {
                            i ? i.m_next = t.m_next : this.m_fixtureList = t.m_next;
                            break
                        }
                        i = e,
                        e = e.m_next
                    }
                    for (var n = this.m_contactList; n; ) {
                        var r = n.contact;
                        n = n.next;
                        var s = r.GetFixtureA()
                          , a = r.GetFixtureB();
                        t !== s && t !== a || this.m_world.m_contactManager.Destroy(r)
                    }
                    this.m_activeFlag && t.DestroyProxies(),
                    t.m_next = null,
                    t.Destroy(),
                    --this.m_fixtureCount,
                    this.ResetMassData()
                }
                ,
                i.prototype.SetTransformVec = function(t, e) {
                    this.SetTransformXY(t.x, t.y, e)
                }
                ,
                i.prototype.SetTransformXY = function(t, e, i) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    this.m_xf.q.SetAngle(i),
                    this.m_xf.p.Set(t, e),
                    this.m_xf0.Copy(this.m_xf),
                    V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c),
                    this.m_sweep.a = i,
                    this.m_sweep.c0.Copy(this.m_sweep.c),
                    this.m_sweep.a0 = i;
                    for (var n = this.m_fixtureList; n; n = n.m_next)
                        n.Synchronize(this.m_xf, this.m_xf);
                    this.m_world.m_contactManager.FindNewContacts()
                }
                ,
                i.prototype.SetTransform = function(t) {
                    this.SetTransformVec(t.p, t.GetAngle())
                }
                ,
                i.prototype.GetTransform = function() {
                    return this.m_xf
                }
                ,
                i.prototype.GetPosition = function() {
                    return this.m_xf.p
                }
                ,
                i.prototype.SetPosition = function(t) {
                    this.SetTransformVec(t, this.GetAngle())
                }
                ,
                i.prototype.SetPositionXY = function(t, e) {
                    this.SetTransformXY(t, e, this.GetAngle())
                }
                ,
                i.prototype.GetAngle = function() {
                    return this.m_sweep.a
                }
                ,
                i.prototype.SetAngle = function(t) {
                    this.SetTransformVec(this.GetPosition(), t)
                }
                ,
                i.prototype.GetWorldCenter = function() {
                    return this.m_sweep.c
                }
                ,
                i.prototype.GetLocalCenter = function() {
                    return this.m_sweep.localCenter
                }
                ,
                i.prototype.SetLinearVelocity = function(e) {
                    this.m_type !== t.b2BodyType.b2_staticBody && (I.DotVV(e, e) > 0 && this.SetAwake(!0),
                    this.m_linearVelocity.Copy(e))
                }
                ,
                i.prototype.GetLinearVelocity = function() {
                    return this.m_linearVelocity
                }
                ,
                i.prototype.SetAngularVelocity = function(e) {
                    this.m_type !== t.b2BodyType.b2_staticBody && (e * e > 0 && this.SetAwake(!0),
                    this.m_angularVelocity = e)
                }
                ,
                i.prototype.GetAngularVelocity = function() {
                    return this.m_angularVelocity
                }
                ,
                i.prototype.GetDefinition = function(t) {
                    return t.type = this.GetType(),
                    t.allowSleep = this.m_autoSleepFlag,
                    t.angle = this.GetAngle(),
                    t.angularDamping = this.m_angularDamping,
                    t.gravityScale = this.m_gravityScale,
                    t.angularVelocity = this.m_angularVelocity,
                    t.fixedRotation = this.m_fixedRotationFlag,
                    t.bullet = this.m_bulletFlag,
                    t.awake = this.m_awakeFlag,
                    t.linearDamping = this.m_linearDamping,
                    t.linearVelocity.Copy(this.GetLinearVelocity()),
                    t.position.Copy(this.GetPosition()),
                    t.userData = this.GetUserData(),
                    t
                }
                ,
                i.prototype.ApplyForce = function(e, i, n) {
                    void 0 === n && (n = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (n && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_force.x += e.x,
                    this.m_force.y += e.y,
                    this.m_torque += (i.x - this.m_sweep.c.x) * e.y - (i.y - this.m_sweep.c.y) * e.x))
                }
                ,
                i.prototype.ApplyForceToCenter = function(e, i) {
                    void 0 === i && (i = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_force.x += e.x,
                    this.m_force.y += e.y))
                }
                ,
                i.prototype.ApplyTorque = function(e, i) {
                    void 0 === i && (i = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_torque += e))
                }
                ,
                i.prototype.ApplyLinearImpulse = function(e, i, n) {
                    void 0 === n && (n = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (n && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_linearVelocity.x += this.m_invMass * e.x,
                    this.m_linearVelocity.y += this.m_invMass * e.y,
                    this.m_angularVelocity += this.m_invI * ((i.x - this.m_sweep.c.x) * e.y - (i.y - this.m_sweep.c.y) * e.x)))
                }
                ,
                i.prototype.ApplyLinearImpulseToCenter = function(e, i) {
                    void 0 === i && (i = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_linearVelocity.x += this.m_invMass * e.x,
                    this.m_linearVelocity.y += this.m_invMass * e.y))
                }
                ,
                i.prototype.ApplyAngularImpulse = function(e, i) {
                    void 0 === i && (i = !0),
                    this.m_type === t.b2BodyType.b2_dynamicBody && (i && !this.m_awakeFlag && this.SetAwake(!0),
                    this.m_awakeFlag && (this.m_angularVelocity += this.m_invI * e))
                }
                ,
                i.prototype.GetMass = function() {
                    return this.m_mass
                }
                ,
                i.prototype.GetInertia = function() {
                    return this.m_I + this.m_mass * I.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter)
                }
                ,
                i.prototype.GetMassData = function(t) {
                    return t.mass = this.m_mass,
                    t.I = this.m_I + this.m_mass * I.DotVV(this.m_sweep.localCenter, this.m_sweep.localCenter),
                    t.center.Copy(this.m_sweep.localCenter),
                    t
                }
                ,
                i.prototype.SetMassData = function(e) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    if (this.m_type === t.b2BodyType.b2_dynamicBody) {
                        this.m_invMass = 0,
                        this.m_I = 0,
                        this.m_invI = 0,
                        this.m_mass = e.mass,
                        this.m_mass <= 0 && (this.m_mass = 1),
                        this.m_invMass = 1 / this.m_mass,
                        e.I > 0 && !this.m_fixedRotationFlag && (this.m_I = e.I - this.m_mass * I.DotVV(e.center, e.center),
                        this.m_invI = 1 / this.m_I);
                        var n = i.SetMassData_s_oldCenter.Copy(this.m_sweep.c);
                        this.m_sweep.localCenter.Copy(e.center),
                        V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c),
                        this.m_sweep.c0.Copy(this.m_sweep.c),
                        I.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, I.SubVV(this.m_sweep.c, n, I.s_t0), this.m_linearVelocity)
                    }
                }
                ,
                i.prototype.ResetMassData = function() {
                    if (this.m_mass = 0,
                    this.m_invMass = 0,
                    this.m_I = 0,
                    this.m_invI = 0,
                    this.m_sweep.localCenter.SetZero(),
                    this.m_type === t.b2BodyType.b2_staticBody || this.m_type === t.b2BodyType.b2_kinematicBody)
                        return this.m_sweep.c0.Copy(this.m_xf.p),
                        this.m_sweep.c.Copy(this.m_xf.p),
                        void (this.m_sweep.a0 = this.m_sweep.a);
                    for (var e = i.ResetMassData_s_localCenter.SetZero(), n = this.m_fixtureList; n; n = n.m_next)
                        if (0 !== n.m_density) {
                            var r = n.GetMassData(i.ResetMassData_s_massData);
                            this.m_mass += r.mass,
                            e.x += r.center.x * r.mass,
                            e.y += r.center.y * r.mass,
                            this.m_I += r.I
                        }
                    this.m_mass > 0 ? (this.m_invMass = 1 / this.m_mass,
                    e.x *= this.m_invMass,
                    e.y *= this.m_invMass) : (this.m_mass = 1,
                    this.m_invMass = 1),
                    this.m_I > 0 && !this.m_fixedRotationFlag ? (this.m_I -= this.m_mass * I.DotVV(e, e),
                    this.m_invI = 1 / this.m_I) : (this.m_I = 0,
                    this.m_invI = 0);
                    var s = i.ResetMassData_s_oldCenter.Copy(this.m_sweep.c);
                    this.m_sweep.localCenter.Copy(e),
                    V.MulXV(this.m_xf, this.m_sweep.localCenter, this.m_sweep.c),
                    this.m_sweep.c0.Copy(this.m_sweep.c),
                    I.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, I.SubVV(this.m_sweep.c, s, I.s_t0), this.m_linearVelocity)
                }
                ,
                i.prototype.GetWorldPoint = function(t, e) {
                    return V.MulXV(this.m_xf, t, e)
                }
                ,
                i.prototype.GetWorldVector = function(t, e) {
                    return F.MulRV(this.m_xf.q, t, e)
                }
                ,
                i.prototype.GetLocalPoint = function(t, e) {
                    return V.MulTXV(this.m_xf, t, e)
                }
                ,
                i.prototype.GetLocalVector = function(t, e) {
                    return F.MulTRV(this.m_xf.q, t, e)
                }
                ,
                i.prototype.GetLinearVelocityFromWorldPoint = function(t, e) {
                    return I.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, I.SubVV(t, this.m_sweep.c, I.s_t0), e)
                }
                ,
                i.prototype.GetLinearVelocityFromLocalPoint = function(t, e) {
                    return this.GetLinearVelocityFromWorldPoint(this.GetWorldPoint(t, e), e)
                }
                ,
                i.prototype.GetLinearDamping = function() {
                    return this.m_linearDamping
                }
                ,
                i.prototype.SetLinearDamping = function(t) {
                    this.m_linearDamping = t
                }
                ,
                i.prototype.GetAngularDamping = function() {
                    return this.m_angularDamping
                }
                ,
                i.prototype.SetAngularDamping = function(t) {
                    this.m_angularDamping = t
                }
                ,
                i.prototype.GetGravityScale = function() {
                    return this.m_gravityScale
                }
                ,
                i.prototype.SetGravityScale = function(t) {
                    this.m_gravityScale = t
                }
                ,
                i.prototype.SetType = function(e) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    if (this.m_type !== e) {
                        this.m_type = e,
                        this.ResetMassData(),
                        this.m_type === t.b2BodyType.b2_staticBody && (this.m_linearVelocity.SetZero(),
                        this.m_angularVelocity = 0,
                        this.m_sweep.a0 = this.m_sweep.a,
                        this.m_sweep.c0.Copy(this.m_sweep.c),
                        this.SynchronizeFixtures()),
                        this.SetAwake(!0),
                        this.m_force.SetZero(),
                        this.m_torque = 0;
                        for (var i = this.m_contactList; i; ) {
                            var n = i;
                            i = i.next,
                            this.m_world.m_contactManager.Destroy(n.contact)
                        }
                        this.m_contactList = null;
                        for (var r = this.m_fixtureList; r; r = r.m_next)
                            r.TouchProxies()
                    }
                }
                ,
                i.prototype.GetType = function() {
                    return this.m_type
                }
                ,
                i.prototype.SetBullet = function(t) {
                    this.m_bulletFlag = t
                }
                ,
                i.prototype.IsBullet = function() {
                    return this.m_bulletFlag
                }
                ,
                i.prototype.SetSleepingAllowed = function(t) {
                    this.m_autoSleepFlag = t,
                    t || this.SetAwake(!0)
                }
                ,
                i.prototype.IsSleepingAllowed = function() {
                    return this.m_autoSleepFlag
                }
                ,
                i.prototype.SetAwake = function(t) {
                    t ? (this.m_awakeFlag = !0,
                    this.m_sleepTime = 0) : (this.m_awakeFlag = !1,
                    this.m_sleepTime = 0,
                    this.m_linearVelocity.SetZero(),
                    this.m_angularVelocity = 0,
                    this.m_force.SetZero(),
                    this.m_torque = 0)
                }
                ,
                i.prototype.IsAwake = function() {
                    return this.m_awakeFlag
                }
                ,
                i.prototype.SetActive = function(t) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    if (t !== this.IsActive())
                        if (this.m_activeFlag = t,
                        t)
                            for (var e = this.m_fixtureList; e; e = e.m_next)
                                e.CreateProxies(this.m_xf);
                        else {
                            for (e = this.m_fixtureList; e; e = e.m_next)
                                e.DestroyProxies();
                            for (var i = this.m_contactList; i; ) {
                                var n = i;
                                i = i.next,
                                this.m_world.m_contactManager.Destroy(n.contact)
                            }
                            this.m_contactList = null
                        }
                }
                ,
                i.prototype.IsActive = function() {
                    return this.m_activeFlag
                }
                ,
                i.prototype.SetFixedRotation = function(t) {
                    this.m_fixedRotationFlag !== t && (this.m_fixedRotationFlag = t,
                    this.m_angularVelocity = 0,
                    this.ResetMassData())
                }
                ,
                i.prototype.IsFixedRotation = function() {
                    return this.m_fixedRotationFlag
                }
                ,
                i.prototype.GetFixtureList = function() {
                    return this.m_fixtureList
                }
                ,
                i.prototype.GetJointList = function() {
                    return this.m_jointList
                }
                ,
                i.prototype.GetContactList = function() {
                    return this.m_contactList
                }
                ,
                i.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                i.prototype.GetUserData = function() {
                    return this.m_userData
                }
                ,
                i.prototype.SetUserData = function(t) {
                    this.m_userData = t
                }
                ,
                i.prototype.GetWorld = function() {
                    return this.m_world
                }
                ,
                i.prototype.Dump = function(e) {
                    var i = this.m_islandIndex;
                    e("{\n"),
                    e("  const bd: b2BodyDef = new b2BodyDef();\n");
                    var n = "";
                    switch (this.m_type) {
                    case t.b2BodyType.b2_staticBody:
                        n = "b2BodyType.b2_staticBody";
                        break;
                    case t.b2BodyType.b2_kinematicBody:
                        n = "b2BodyType.b2_kinematicBody";
                        break;
                    case t.b2BodyType.b2_dynamicBody:
                        n = "b2BodyType.b2_dynamicBody"
                    }
                    e("  bd.type = %s;\n", n),
                    e("  bd.position.Set(%.15f, %.15f);\n", this.m_xf.p.x, this.m_xf.p.y),
                    e("  bd.angle = %.15f;\n", this.m_sweep.a),
                    e("  bd.linearVelocity.Set(%.15f, %.15f);\n", this.m_linearVelocity.x, this.m_linearVelocity.y),
                    e("  bd.angularVelocity = %.15f;\n", this.m_angularVelocity),
                    e("  bd.linearDamping = %.15f;\n", this.m_linearDamping),
                    e("  bd.angularDamping = %.15f;\n", this.m_angularDamping),
                    e("  bd.allowSleep = %s;\n", this.m_autoSleepFlag ? "true" : "false"),
                    e("  bd.awake = %s;\n", this.m_awakeFlag ? "true" : "false"),
                    e("  bd.fixedRotation = %s;\n", this.m_fixedRotationFlag ? "true" : "false"),
                    e("  bd.bullet = %s;\n", this.m_bulletFlag ? "true" : "false"),
                    e("  bd.active = %s;\n", this.m_activeFlag ? "true" : "false"),
                    e("  bd.gravityScale = %.15f;\n", this.m_gravityScale),
                    e("\n"),
                    e("  bodies[%d] = this.m_world.CreateBody(bd);\n", this.m_islandIndex),
                    e("\n");
                    for (var r = this.m_fixtureList; r; r = r.m_next)
                        e("  {\n"),
                        r.Dump(e, i),
                        e("  }\n");
                    e("}\n")
                }
                ,
                i.prototype.SynchronizeFixtures = function() {
                    var t = i.SynchronizeFixtures_s_xf1;
                    t.q.SetAngle(this.m_sweep.a0),
                    F.MulRV(t.q, this.m_sweep.localCenter, t.p),
                    I.SubVV(this.m_sweep.c0, t.p, t.p);
                    for (var e = this.m_fixtureList; e; e = e.m_next)
                        e.Synchronize(t, this.m_xf)
                }
                ,
                i.prototype.SynchronizeTransform = function() {
                    this.m_xf.q.SetAngle(this.m_sweep.a),
                    F.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p),
                    I.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p)
                }
                ,
                i.prototype.ShouldCollide = function(e) {
                    return (this.m_type !== t.b2BodyType.b2_staticBody || e.m_type !== t.b2BodyType.b2_staticBody) && this.ShouldCollideConnected(e)
                }
                ,
                i.prototype.ShouldCollideConnected = function(t) {
                    for (var e = this.m_jointList; e; e = e.next)
                        if (e.other === t && !e.joint.m_collideConnected)
                            return !1;
                    return !0
                }
                ,
                i.prototype.Advance = function(t) {
                    this.m_sweep.Advance(t),
                    this.m_sweep.c.Copy(this.m_sweep.c0),
                    this.m_sweep.a = this.m_sweep.a0,
                    this.m_xf.q.SetAngle(this.m_sweep.a),
                    F.MulRV(this.m_xf.q, this.m_sweep.localCenter, this.m_xf.p),
                    I.SubVV(this.m_sweep.c, this.m_xf.p, this.m_xf.p)
                }
                ,
                i.prototype.GetControllerList = function() {
                    return this.m_controllerList
                }
                ,
                i.prototype.GetControllerCount = function() {
                    return this.m_controllerCount
                }
                ,
                i.CreateFixtureShapeDensity_s_def = new oi,
                i.SetMassData_s_oldCenter = new I,
                i.ResetMassData_s_localCenter = new I,
                i.ResetMassData_s_oldCenter = new I,
                i.ResetMassData_s_massData = new Ke,
                i.SynchronizeFixtures_s_xf1 = new V,
                i
            }
            )();
            (ci = t.b2JointType || (t.b2JointType = {}))[ci.e_unknownJoint = 0] = "e_unknownJoint",
            ci[ci.e_revoluteJoint = 1] = "e_revoluteJoint",
            ci[ci.e_prismaticJoint = 2] = "e_prismaticJoint",
            ci[ci.e_distanceJoint = 3] = "e_distanceJoint",
            ci[ci.e_pulleyJoint = 4] = "e_pulleyJoint",
            ci[ci.e_mouseJoint = 5] = "e_mouseJoint",
            ci[ci.e_gearJoint = 6] = "e_gearJoint",
            ci[ci.e_wheelJoint = 7] = "e_wheelJoint",
            ci[ci.e_weldJoint = 8] = "e_weldJoint",
            ci[ci.e_frictionJoint = 9] = "e_frictionJoint",
            ci[ci.e_ropeJoint = 10] = "e_ropeJoint",
            ci[ci.e_motorJoint = 11] = "e_motorJoint",
            ci[ci.e_areaJoint = 12] = "e_areaJoint",
            (ui = t.b2LimitState || (t.b2LimitState = {}))[ui.e_inactiveLimit = 0] = "e_inactiveLimit",
            ui[ui.e_atLowerLimit = 1] = "e_atLowerLimit",
            ui[ui.e_atUpperLimit = 2] = "e_atUpperLimit",
            ui[ui.e_equalLimits = 3] = "e_equalLimits";
            var fi = (function() {
                function t() {
                    this.linear = new I,
                    this.angularA = 0,
                    this.angularB = 0
                }
                return t.prototype.SetZero = function() {
                    return this.linear.SetZero(),
                    this.angularA = 0,
                    this.angularB = 0,
                    this
                }
                ,
                t.prototype.Set = function(t, e, i) {
                    return this.linear.Copy(t),
                    this.angularA = e,
                    this.angularB = i,
                    this
                }
                ,
                t
            }
            )()
              , di = function(t, e) {
                this.prev = null,
                this.next = null,
                this.joint = t,
                this.other = e
            }
              , pi = function(e) {
                this.type = t.b2JointType.e_unknownJoint,
                this.userData = null,
                this.collideConnected = !1,
                this.type = e
            }
              , mi = (function() {
                function i(i) {
                    this.m_type = t.b2JointType.e_unknownJoint,
                    this.m_prev = null,
                    this.m_next = null,
                    this.m_index = 0,
                    this.m_islandFlag = !1,
                    this.m_collideConnected = !1,
                    this.m_userData = null,
                    this.m_type = i.type,
                    this.m_edgeA = new di(this,i.bodyB),
                    this.m_edgeB = new di(this,i.bodyA),
                    this.m_bodyA = i.bodyA,
                    this.m_bodyB = i.bodyB,
                    this.m_collideConnected = e(i.collideConnected, !1),
                    this.m_userData = i.userData
                }
                return i.prototype.GetType = function() {
                    return this.m_type
                }
                ,
                i.prototype.GetBodyA = function() {
                    return this.m_bodyA
                }
                ,
                i.prototype.GetBodyB = function() {
                    return this.m_bodyB
                }
                ,
                i.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                i.prototype.GetUserData = function() {
                    return this.m_userData
                }
                ,
                i.prototype.SetUserData = function(t) {
                    this.m_userData = t
                }
                ,
                i.prototype.IsActive = function() {
                    return this.m_bodyA.IsActive() && this.m_bodyB.IsActive()
                }
                ,
                i.prototype.GetCollideConnected = function() {
                    return this.m_collideConnected
                }
                ,
                i.prototype.Dump = function(t) {
                    t("// Dump is not supported for this joint type.\n")
                }
                ,
                i.prototype.ShiftOrigin = function() {}
                ,
                i
            }
            )()
              , yi = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_distanceJoint) || this;
                    return i.localAnchorA = new I,
                    i.localAnchorB = new I,
                    i.length = 1,
                    i.frequencyHz = 0,
                    i.dampingRatio = 0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i, n) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(n, this.localAnchorB),
                    this.length = I.DistanceVV(i, n),
                    this.frequencyHz = 0,
                    this.dampingRatio = 0
                }
                ,
                i
            }
            )(pi)
              , vi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_frequencyHz = 0,
                    n.m_dampingRatio = 0,
                    n.m_bias = 0,
                    n.m_localAnchorA = new I,
                    n.m_localAnchorB = new I,
                    n.m_gamma = 0,
                    n.m_impulse = 0,
                    n.m_length = 0,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_u = new I,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_mass = 0,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_lalcA = new I,
                    n.m_lalcB = new I,
                    n.m_frequencyHz = e(i.frequencyHz, 0),
                    n.m_dampingRatio = e(i.dampingRatio, 0),
                    n.m_localAnchorA.Copy(i.localAnchorA),
                    n.m_localAnchorB.Copy(i.localAnchorB),
                    n.m_length = i.length,
                    n
                }
                return ti(i, t),
                i.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * this.m_impulse * this.m_u.x,
                    e.y = t * this.m_impulse * this.m_u.y,
                    e
                }
                ,
                i.prototype.GetReactionTorque = function() {
                    return 0
                }
                ,
                i.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                i.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                i.prototype.SetLength = function(t) {
                    this.m_length = t
                }
                ,
                i.prototype.Length = function() {
                    return this.m_length
                }
                ,
                i.prototype.SetFrequency = function(t) {
                    this.m_frequencyHz = t
                }
                ,
                i.prototype.GetFrequency = function() {
                    return this.m_frequencyHz
                }
                ,
                i.prototype.SetDampingRatio = function(t) {
                    this.m_dampingRatio = t
                }
                ,
                i.prototype.GetDampingRatio = function() {
                    return this.m_dampingRatio
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2DistanceJointDef = new b2DistanceJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.length = %.15f;\n", this.m_length),
                    t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz),
                    t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.velocities[this.m_indexA].v
                      , a = t.velocities[this.m_indexA].w
                      , o = t.positions[this.m_indexB].c
                      , h = t.positions[this.m_indexB].a
                      , c = t.velocities[this.m_indexB].v
                      , u = t.velocities[this.m_indexB].w
                      , _ = this.m_qA.SetAngle(n)
                      , f = this.m_qB.SetAngle(h);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA),
                    F.MulRV(_, this.m_lalcA, this.m_rA),
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(f, this.m_lalcB, this.m_rB),
                    this.m_u.x = o.x + this.m_rB.x - e.x - this.m_rA.x,
                    this.m_u.y = o.y + this.m_rB.y - e.y - this.m_rA.y;
                    var d = this.m_u.Length();
                    d > l ? this.m_u.SelfMul(1 / d) : this.m_u.SetZero();
                    var p = I.CrossVV(this.m_rA, this.m_u)
                      , m = I.CrossVV(this.m_rB, this.m_u)
                      , y = this.m_invMassA + this.m_invIA * p * p + this.m_invMassB + this.m_invIB * m * m;
                    if (this.m_mass = 0 !== y ? 1 / y : 0,
                    this.m_frequencyHz > 0) {
                        var v = d - this.m_length
                          , g = 2 * s * this.m_frequencyHz
                          , A = 2 * this.m_mass * this.m_dampingRatio * g
                          , x = this.m_mass * g * g
                          , b = t.step.dt;
                        this.m_gamma = b * (A + b * x),
                        this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0,
                        this.m_bias = v * b * x * this.m_gamma,
                        y += this.m_gamma,
                        this.m_mass = 0 !== y ? 1 / y : 0
                    } else
                        this.m_gamma = 0,
                        this.m_bias = 0;
                    if (t.step.warmStarting) {
                        this.m_impulse *= t.step.dtRatio;
                        var C = I.MulSV(this.m_impulse, this.m_u, i.InitVelocityConstraints_s_P);
                        r.SelfMulSub(this.m_invMassA, C),
                        a -= this.m_invIA * I.CrossVV(this.m_rA, C),
                        c.SelfMulAdd(this.m_invMassB, C),
                        u += this.m_invIB * I.CrossVV(this.m_rB, C)
                    } else
                        this.m_impulse = 0;
                    t.velocities[this.m_indexA].w = a,
                    t.velocities[this.m_indexB].w = u
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = I.AddVCrossSV(e, n, this.m_rA, i.SolveVelocityConstraints_s_vpA)
                      , o = I.AddVCrossSV(r, s, this.m_rB, i.SolveVelocityConstraints_s_vpB)
                      , l = I.DotVV(this.m_u, I.SubVV(o, a, I.s_t0))
                      , h = -this.m_mass * (l + this.m_bias + this.m_gamma * this.m_impulse);
                    this.m_impulse += h;
                    var c = I.MulSV(h, this.m_u, i.SolveVelocityConstraints_s_P);
                    e.SelfMulSub(this.m_invMassA, c),
                    n -= this.m_invIA * I.CrossVV(this.m_rA, c),
                    r.SelfMulAdd(this.m_invMassB, c),
                    s += this.m_invIB * I.CrossVV(this.m_rB, c),
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                i.prototype.SolvePositionConstraints = function(t) {
                    if (this.m_frequencyHz > 0)
                        return !0;
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(n)
                      , o = this.m_qB.SetAngle(s)
                      , h = F.MulRV(a, this.m_lalcA, this.m_rA)
                      , c = F.MulRV(o, this.m_lalcB, this.m_rB)
                      , u = this.m_u;
                    u.x = r.x + c.x - e.x - h.x,
                    u.y = r.y + c.y - e.y - h.y;
                    var _ = this.m_u.Normalize() - this.m_length;
                    _ = g(_, -.2, .2);
                    var f = -this.m_mass * _
                      , d = I.MulSV(f, u, i.SolvePositionConstraints_s_P);
                    return e.SelfMulSub(this.m_invMassA, d),
                    n -= this.m_invIA * I.CrossVV(h, d),
                    r.SelfMulAdd(this.m_invMassB, d),
                    s += this.m_invIB * I.CrossVV(c, d),
                    t.positions[this.m_indexA].a = n,
                    t.positions[this.m_indexB].a = s,
                    m(_) < l
                }
                ,
                i.InitVelocityConstraints_s_P = new I,
                i.SolveVelocityConstraints_s_vpA = new I,
                i.SolveVelocityConstraints_s_vpB = new I,
                i.SolveVelocityConstraints_s_P = new I,
                i.SolvePositionConstraints_s_P = new I,
                i
            }
            )(mi)
              , gi = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_areaJoint) || this;
                    return i.bodies = [],
                    i.frequencyHz = 0,
                    i.dampingRatio = 0,
                    i
                }
                return ti(i, e),
                i.prototype.AddBody = function(t) {
                    this.bodies.push(t),
                    1 === this.bodies.length ? this.bodyA = t : 2 === this.bodies.length && (this.bodyB = t)
                }
                ,
                i
            }
            )(pi)
              , Ai = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    n.m_frequencyHz = 0,
                    n.m_dampingRatio = 0,
                    n.m_impulse = 0,
                    n.m_targetArea = 0,
                    n.m_bodies = i.bodies,
                    n.m_frequencyHz = e(i.frequencyHz, 0),
                    n.m_dampingRatio = e(i.dampingRatio, 0),
                    n.m_targetLengths = p(i.bodies.length),
                    n.m_normals = I.MakeArray(i.bodies.length),
                    n.m_joints = [],
                    n.m_deltas = I.MakeArray(i.bodies.length),
                    n.m_delta = new I;
                    var r = new yi;
                    r.frequencyHz = n.m_frequencyHz,
                    r.dampingRatio = n.m_dampingRatio,
                    n.m_targetArea = 0;
                    for (var s = 0; s < n.m_bodies.length; ++s) {
                        var a = n.m_bodies[s]
                          , o = n.m_bodies[(s + 1) % n.m_bodies.length]
                          , l = a.GetWorldCenter()
                          , h = o.GetWorldCenter();
                        n.m_targetLengths[s] = I.DistanceVV(l, h),
                        n.m_targetArea += I.CrossVV(l, h),
                        r.Initialize(a, o, l, h),
                        n.m_joints[s] = a.GetWorld().CreateJoint(r)
                    }
                    return n.m_targetArea *= .5,
                    n
                }
                return ti(i, t),
                i.prototype.GetAnchorA = function(t) {
                    return t
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return t
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e
                }
                ,
                i.prototype.GetReactionTorque = function() {
                    return 0
                }
                ,
                i.prototype.SetFrequency = function(t) {
                    this.m_frequencyHz = t;
                    for (var e = 0; e < this.m_joints.length; ++e)
                        this.m_joints[e].SetFrequency(t)
                }
                ,
                i.prototype.GetFrequency = function() {
                    return this.m_frequencyHz
                }
                ,
                i.prototype.SetDampingRatio = function(t) {
                    this.m_dampingRatio = t;
                    for (var e = 0; e < this.m_joints.length; ++e)
                        this.m_joints[e].SetDampingRatio(t)
                }
                ,
                i.prototype.GetDampingRatio = function() {
                    return this.m_dampingRatio
                }
                ,
                i.prototype.Dump = function(t) {
                    t("Area joint dumping is not supported.\n")
                }
                ,
                i.prototype.InitVelocityConstraints = function(t) {
                    for (var e = 0; e < this.m_bodies.length; ++e) {
                        var i = this.m_bodies[(e + this.m_bodies.length - 1) % this.m_bodies.length]
                          , n = this.m_bodies[(e + 1) % this.m_bodies.length]
                          , r = t.positions[i.m_islandIndex].c
                          , s = t.positions[n.m_islandIndex].c
                          , a = this.m_deltas[e];
                        I.SubVV(s, r, a)
                    }
                    if (t.step.warmStarting)
                        for (this.m_impulse *= t.step.dtRatio,
                        e = 0; e < this.m_bodies.length; ++e) {
                            var o = this.m_bodies[e]
                              , l = t.velocities[o.m_islandIndex].v;
                            a = this.m_deltas[e],
                            l.x += o.m_invMass * a.y * .5 * this.m_impulse,
                            l.y += o.m_invMass * -a.x * .5 * this.m_impulse
                        }
                    else
                        this.m_impulse = 0
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    for (var e = 0, i = 0, n = 0; n < this.m_bodies.length; ++n) {
                        var r = this.m_bodies[n]
                          , s = t.velocities[r.m_islandIndex].v;
                        e += (o = this.m_deltas[n]).LengthSquared() / r.GetMass(),
                        i += I.CrossVV(s, o)
                    }
                    var a = -2 * i / e;
                    for (this.m_impulse += a,
                    n = 0; n < this.m_bodies.length; ++n) {
                        r = this.m_bodies[n],
                        s = t.velocities[r.m_islandIndex].v;
                        var o = this.m_deltas[n];
                        s.x += r.m_invMass * o.y * .5 * a,
                        s.y += r.m_invMass * -o.x * .5 * a
                    }
                }
                ,
                i.prototype.SolvePositionConstraints = function(t) {
                    for (var e = 0, i = 0, r = 0; r < this.m_bodies.length; ++r) {
                        var s = this.m_bodies[r]
                          , a = this.m_bodies[(r + 1) % this.m_bodies.length]
                          , o = t.positions[s.m_islandIndex].c
                          , h = t.positions[a.m_islandIndex].c
                          , c = (f = I.SubVV(h, o, this.m_delta)).Length();
                        c < n && (c = 1),
                        this.m_normals[r].x = f.y / c,
                        this.m_normals[r].y = -f.x / c,
                        e += c,
                        i += I.CrossVV(o, h)
                    }
                    i *= .5;
                    var u = .5 * (this.m_targetArea - i) / e
                      , _ = !0;
                    for (r = 0; r < this.m_bodies.length; ++r) {
                        s = this.m_bodies[r],
                        o = t.positions[s.m_islandIndex].c;
                        var f, d = (r + 1) % this.m_bodies.length;
                        (f = I.AddVV(this.m_normals[r], this.m_normals[d], this.m_delta)).SelfMul(u);
                        var p = f.LengthSquared();
                        p > x(.2) && f.SelfMul(.2 / T(p)),
                        p > x(l) && (_ = !1),
                        o.x += f.x,
                        o.y += f.y
                    }
                    return _
                }
                ,
                i
            }
            )(mi)
              , xi = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_frictionJoint) || this;
                    return i.localAnchorA = new I,
                    i.localAnchorB = new I,
                    i.maxForce = 0,
                    i.maxTorque = 0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(i, this.localAnchorB)
                }
                ,
                i
            }
            )(pi)
              , bi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_localAnchorA = new I,
                    n.m_localAnchorB = new I,
                    n.m_linearImpulse = new I,
                    n.m_angularImpulse = 0,
                    n.m_maxForce = 0,
                    n.m_maxTorque = 0,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_linearMass = new O,
                    n.m_angularMass = 0,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_lalcA = new I,
                    n.m_lalcB = new I,
                    n.m_K = new O,
                    n.m_localAnchorA.Copy(i.localAnchorA),
                    n.m_localAnchorB.Copy(i.localAnchorB),
                    n.m_linearImpulse.SetZero(),
                    n.m_maxForce = e(i.maxForce, 0),
                    n.m_maxTorque = e(i.maxTorque, 0),
                    n.m_linearMass.SetZero(),
                    n
                }
                return ti(i, t),
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexA].a
                      , i = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.positions[this.m_indexB].a
                      , s = t.velocities[this.m_indexB].v
                      , a = t.velocities[this.m_indexB].w
                      , o = this.m_qA.SetAngle(e)
                      , l = this.m_qB.SetAngle(r);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var h = F.MulRV(o, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var c = F.MulRV(l, this.m_lalcB, this.m_rB)
                      , u = this.m_invMassA
                      , _ = this.m_invMassB
                      , f = this.m_invIA
                      , d = this.m_invIB
                      , p = this.m_K;
                    if (p.ex.x = u + _ + f * h.y * h.y + d * c.y * c.y,
                    p.ex.y = -f * h.x * h.y - d * c.x * c.y,
                    p.ey.x = p.ex.y,
                    p.ey.y = u + _ + f * h.x * h.x + d * c.x * c.x,
                    p.GetInverse(this.m_linearMass),
                    this.m_angularMass = f + d,
                    this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass),
                    t.step.warmStarting) {
                        this.m_linearImpulse.SelfMul(t.step.dtRatio),
                        this.m_angularImpulse *= t.step.dtRatio;
                        var m = this.m_linearImpulse;
                        i.SelfMulSub(u, m),
                        n -= f * (I.CrossVV(this.m_rA, m) + this.m_angularImpulse),
                        s.SelfMulAdd(_, m),
                        a += d * (I.CrossVV(this.m_rB, m) + this.m_angularImpulse)
                    } else
                        this.m_linearImpulse.SetZero(),
                        this.m_angularImpulse = 0;
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = a
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = this.m_invMassA
                      , o = this.m_invMassB
                      , l = this.m_invIA
                      , h = this.m_invIB
                      , c = t.step.dt
                      , u = s - n
                      , _ = -this.m_angularMass * u
                      , f = this.m_angularImpulse
                      , d = c * this.m_maxTorque;
                    this.m_angularImpulse = g(this.m_angularImpulse + _, -d, d),
                    n -= l * (_ = this.m_angularImpulse - f),
                    s += h * _;
                    var p = I.SubVV(I.AddVCrossSV(r, s, this.m_rB, I.s_t0), I.AddVCrossSV(e, n, this.m_rA, I.s_t1), i.SolveVelocityConstraints_s_Cdot_v2)
                      , m = O.MulMV(this.m_linearMass, p, i.SolveVelocityConstraints_s_impulseV).SelfNeg()
                      , y = i.SolveVelocityConstraints_s_oldImpulseV.Copy(this.m_linearImpulse);
                    this.m_linearImpulse.SelfAdd(m),
                    d = c * this.m_maxForce,
                    this.m_linearImpulse.LengthSquared() > d * d && (this.m_linearImpulse.Normalize(),
                    this.m_linearImpulse.SelfMul(d)),
                    I.SubVV(this.m_linearImpulse, y, m),
                    e.SelfMulSub(a, m),
                    n -= l * I.CrossVV(this.m_rA, m),
                    r.SelfMulAdd(o, m),
                    s += h * I.CrossVV(this.m_rB, m),
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                i.prototype.SolvePositionConstraints = function() {
                    return !0
                }
                ,
                i.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * this.m_linearImpulse.x,
                    e.y = t * this.m_linearImpulse.y,
                    e
                }
                ,
                i.prototype.GetReactionTorque = function(t) {
                    return t * this.m_angularImpulse
                }
                ,
                i.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                i.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                i.prototype.SetMaxForce = function(t) {
                    this.m_maxForce = t
                }
                ,
                i.prototype.GetMaxForce = function() {
                    return this.m_maxForce
                }
                ,
                i.prototype.SetMaxTorque = function(t) {
                    this.m_maxTorque = t
                }
                ,
                i.prototype.GetMaxTorque = function() {
                    return this.m_maxTorque
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2FrictionJointDef = new b2FrictionJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.maxForce = %.15f;\n", this.m_maxForce),
                    t("  jd.maxTorque = %.15f;\n", this.m_maxTorque),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.SolveVelocityConstraints_s_Cdot_v2 = new I,
                i.SolveVelocityConstraints_s_impulseV = new I,
                i.SolveVelocityConstraints_s_oldImpulseV = new I,
                i
            }
            )(mi)
              , Ci = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_gearJoint) || this;
                    return i.ratio = 1,
                    i
                }
                return ti(i, e),
                i
            }
            )(pi)
              , Ti = (function(i) {
                function n(n) {
                    var r, s, a = i.call(this, n) || this;
                    a.m_typeA = t.b2JointType.e_unknownJoint,
                    a.m_typeB = t.b2JointType.e_unknownJoint,
                    a.m_localAnchorA = new I,
                    a.m_localAnchorB = new I,
                    a.m_localAnchorC = new I,
                    a.m_localAnchorD = new I,
                    a.m_localAxisC = new I,
                    a.m_localAxisD = new I,
                    a.m_referenceAngleA = 0,
                    a.m_referenceAngleB = 0,
                    a.m_constant = 0,
                    a.m_ratio = 0,
                    a.m_impulse = 0,
                    a.m_indexA = 0,
                    a.m_indexB = 0,
                    a.m_indexC = 0,
                    a.m_indexD = 0,
                    a.m_lcA = new I,
                    a.m_lcB = new I,
                    a.m_lcC = new I,
                    a.m_lcD = new I,
                    a.m_mA = 0,
                    a.m_mB = 0,
                    a.m_mC = 0,
                    a.m_mD = 0,
                    a.m_iA = 0,
                    a.m_iB = 0,
                    a.m_iC = 0,
                    a.m_iD = 0,
                    a.m_JvAC = new I,
                    a.m_JvBD = new I,
                    a.m_JwA = 0,
                    a.m_JwB = 0,
                    a.m_JwC = 0,
                    a.m_JwD = 0,
                    a.m_mass = 0,
                    a.m_qA = new F,
                    a.m_qB = new F,
                    a.m_qC = new F,
                    a.m_qD = new F,
                    a.m_lalcA = new I,
                    a.m_lalcB = new I,
                    a.m_lalcC = new I,
                    a.m_lalcD = new I,
                    a.m_joint1 = n.joint1,
                    a.m_joint2 = n.joint2,
                    a.m_typeA = a.m_joint1.GetType(),
                    a.m_typeB = a.m_joint2.GetType(),
                    a.m_bodyC = a.m_joint1.GetBodyA(),
                    a.m_bodyA = a.m_joint1.GetBodyB();
                    var o = a.m_bodyA.m_xf
                      , l = a.m_bodyA.m_sweep.a
                      , h = a.m_bodyC.m_xf
                      , c = a.m_bodyC.m_sweep.a;
                    if (a.m_typeA === t.b2JointType.e_revoluteJoint) {
                        var u = n.joint1;
                        a.m_localAnchorC.Copy(u.m_localAnchorA),
                        a.m_localAnchorA.Copy(u.m_localAnchorB),
                        a.m_referenceAngleA = u.m_referenceAngle,
                        a.m_localAxisC.SetZero(),
                        r = l - c - a.m_referenceAngleA
                    } else {
                        var _ = n.joint1;
                        a.m_localAnchorC.Copy(_.m_localAnchorA),
                        a.m_localAnchorA.Copy(_.m_localAnchorB),
                        a.m_referenceAngleA = _.m_referenceAngle,
                        a.m_localAxisC.Copy(_.m_localXAxisA);
                        var f = a.m_localAnchorC
                          , d = F.MulTRV(h.q, I.AddVV(F.MulRV(o.q, a.m_localAnchorA, I.s_t0), I.SubVV(o.p, h.p, I.s_t1), I.s_t0), I.s_t0);
                        r = I.DotVV(I.SubVV(d, f, I.s_t0), a.m_localAxisC)
                    }
                    a.m_bodyD = a.m_joint2.GetBodyA(),
                    a.m_bodyB = a.m_joint2.GetBodyB();
                    var p = a.m_bodyB.m_xf
                      , m = a.m_bodyB.m_sweep.a
                      , y = a.m_bodyD.m_xf
                      , v = a.m_bodyD.m_sweep.a;
                    if (a.m_typeB === t.b2JointType.e_revoluteJoint)
                        u = n.joint2,
                        a.m_localAnchorD.Copy(u.m_localAnchorA),
                        a.m_localAnchorB.Copy(u.m_localAnchorB),
                        a.m_referenceAngleB = u.m_referenceAngle,
                        a.m_localAxisD.SetZero(),
                        s = m - v - a.m_referenceAngleB;
                    else {
                        _ = n.joint2,
                        a.m_localAnchorD.Copy(_.m_localAnchorA),
                        a.m_localAnchorB.Copy(_.m_localAnchorB),
                        a.m_referenceAngleB = _.m_referenceAngle,
                        a.m_localAxisD.Copy(_.m_localXAxisA);
                        var g = a.m_localAnchorD
                          , A = F.MulTRV(y.q, I.AddVV(F.MulRV(p.q, a.m_localAnchorB, I.s_t0), I.SubVV(p.p, y.p, I.s_t1), I.s_t0), I.s_t0);
                        s = I.DotVV(I.SubVV(A, g, I.s_t0), a.m_localAxisD)
                    }
                    return a.m_ratio = e(n.ratio, 1),
                    a.m_constant = r + a.m_ratio * s,
                    a.m_impulse = 0,
                    a
                }
                return ti(n, i),
                n.prototype.InitVelocityConstraints = function(e) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_indexC = this.m_bodyC.m_islandIndex,
                    this.m_indexD = this.m_bodyD.m_islandIndex,
                    this.m_lcA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_lcB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_lcC.Copy(this.m_bodyC.m_sweep.localCenter),
                    this.m_lcD.Copy(this.m_bodyD.m_sweep.localCenter),
                    this.m_mA = this.m_bodyA.m_invMass,
                    this.m_mB = this.m_bodyB.m_invMass,
                    this.m_mC = this.m_bodyC.m_invMass,
                    this.m_mD = this.m_bodyD.m_invMass,
                    this.m_iA = this.m_bodyA.m_invI,
                    this.m_iB = this.m_bodyB.m_invI,
                    this.m_iC = this.m_bodyC.m_invI,
                    this.m_iD = this.m_bodyD.m_invI;
                    var i = e.positions[this.m_indexA].a
                      , r = e.velocities[this.m_indexA].v
                      , s = e.velocities[this.m_indexA].w
                      , a = e.positions[this.m_indexB].a
                      , o = e.velocities[this.m_indexB].v
                      , l = e.velocities[this.m_indexB].w
                      , h = e.positions[this.m_indexC].a
                      , c = e.velocities[this.m_indexC].v
                      , u = e.velocities[this.m_indexC].w
                      , _ = e.positions[this.m_indexD].a
                      , f = e.velocities[this.m_indexD].v
                      , d = e.velocities[this.m_indexD].w
                      , p = this.m_qA.SetAngle(i)
                      , m = this.m_qB.SetAngle(a)
                      , y = this.m_qC.SetAngle(h)
                      , v = this.m_qD.SetAngle(_);
                    if (this.m_mass = 0,
                    this.m_typeA === t.b2JointType.e_revoluteJoint)
                        this.m_JvAC.SetZero(),
                        this.m_JwA = 1,
                        this.m_JwC = 1,
                        this.m_mass += this.m_iA + this.m_iC;
                    else {
                        var g = F.MulRV(y, this.m_localAxisC, n.InitVelocityConstraints_s_u);
                        I.SubVV(this.m_localAnchorC, this.m_lcC, this.m_lalcC);
                        var A = F.MulRV(y, this.m_lalcC, n.InitVelocityConstraints_s_rC);
                        I.SubVV(this.m_localAnchorA, this.m_lcA, this.m_lalcA);
                        var x = F.MulRV(p, this.m_lalcA, n.InitVelocityConstraints_s_rA);
                        this.m_JvAC.Copy(g),
                        this.m_JwC = I.CrossVV(A, g),
                        this.m_JwA = I.CrossVV(x, g),
                        this.m_mass += this.m_mC + this.m_mA + this.m_iC * this.m_JwC * this.m_JwC + this.m_iA * this.m_JwA * this.m_JwA
                    }
                    if (this.m_typeB === t.b2JointType.e_revoluteJoint)
                        this.m_JvBD.SetZero(),
                        this.m_JwB = this.m_ratio,
                        this.m_JwD = this.m_ratio,
                        this.m_mass += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD);
                    else {
                        g = F.MulRV(v, this.m_localAxisD, n.InitVelocityConstraints_s_u),
                        I.SubVV(this.m_localAnchorD, this.m_lcD, this.m_lalcD);
                        var b = F.MulRV(v, this.m_lalcD, n.InitVelocityConstraints_s_rD);
                        I.SubVV(this.m_localAnchorB, this.m_lcB, this.m_lalcB);
                        var C = F.MulRV(m, this.m_lalcB, n.InitVelocityConstraints_s_rB);
                        I.MulSV(this.m_ratio, g, this.m_JvBD),
                        this.m_JwD = this.m_ratio * I.CrossVV(b, g),
                        this.m_JwB = this.m_ratio * I.CrossVV(C, g),
                        this.m_mass += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * this.m_JwD * this.m_JwD + this.m_iB * this.m_JwB * this.m_JwB
                    }
                    this.m_mass = this.m_mass > 0 ? 1 / this.m_mass : 0,
                    e.step.warmStarting ? (r.SelfMulAdd(this.m_mA * this.m_impulse, this.m_JvAC),
                    s += this.m_iA * this.m_impulse * this.m_JwA,
                    o.SelfMulAdd(this.m_mB * this.m_impulse, this.m_JvBD),
                    l += this.m_iB * this.m_impulse * this.m_JwB,
                    c.SelfMulSub(this.m_mC * this.m_impulse, this.m_JvAC),
                    u -= this.m_iC * this.m_impulse * this.m_JwC,
                    f.SelfMulSub(this.m_mD * this.m_impulse, this.m_JvBD),
                    d -= this.m_iD * this.m_impulse * this.m_JwD) : this.m_impulse = 0,
                    e.velocities[this.m_indexA].w = s,
                    e.velocities[this.m_indexB].w = l,
                    e.velocities[this.m_indexC].w = u,
                    e.velocities[this.m_indexD].w = d
                }
                ,
                n.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , i = t.velocities[this.m_indexA].w
                      , n = t.velocities[this.m_indexB].v
                      , r = t.velocities[this.m_indexB].w
                      , s = t.velocities[this.m_indexC].v
                      , a = t.velocities[this.m_indexC].w
                      , o = t.velocities[this.m_indexD].v
                      , l = t.velocities[this.m_indexD].w
                      , h = I.DotVV(this.m_JvAC, I.SubVV(e, s, I.s_t0)) + I.DotVV(this.m_JvBD, I.SubVV(n, o, I.s_t0));
                    h += this.m_JwA * i - this.m_JwC * a + (this.m_JwB * r - this.m_JwD * l);
                    var c = -this.m_mass * h;
                    this.m_impulse += c,
                    e.SelfMulAdd(this.m_mA * c, this.m_JvAC),
                    i += this.m_iA * c * this.m_JwA,
                    n.SelfMulAdd(this.m_mB * c, this.m_JvBD),
                    r += this.m_iB * c * this.m_JwB,
                    s.SelfMulSub(this.m_mC * c, this.m_JvAC),
                    a -= this.m_iC * c * this.m_JwC,
                    o.SelfMulSub(this.m_mD * c, this.m_JvBD),
                    l -= this.m_iD * c * this.m_JwD,
                    t.velocities[this.m_indexA].w = i,
                    t.velocities[this.m_indexB].w = r,
                    t.velocities[this.m_indexC].w = a,
                    t.velocities[this.m_indexD].w = l
                }
                ,
                n.prototype.SolvePositionConstraints = function(e) {
                    var i, r, s, a, o, h, c = e.positions[this.m_indexA].c, u = e.positions[this.m_indexA].a, _ = e.positions[this.m_indexB].c, f = e.positions[this.m_indexB].a, d = e.positions[this.m_indexC].c, p = e.positions[this.m_indexC].a, m = e.positions[this.m_indexD].c, y = e.positions[this.m_indexD].a, v = this.m_qA.SetAngle(u), g = this.m_qB.SetAngle(f), A = this.m_qC.SetAngle(p), x = this.m_qD.SetAngle(y), b = this.m_JvAC, C = this.m_JvBD, T = 0;
                    if (this.m_typeA === t.b2JointType.e_revoluteJoint)
                        b.SetZero(),
                        s = 1,
                        o = 1,
                        T += this.m_iA + this.m_iC,
                        i = u - p - this.m_referenceAngleA;
                    else {
                        var S = F.MulRV(A, this.m_localAxisC, n.SolvePositionConstraints_s_u)
                          , w = F.MulRV(A, this.m_lalcC, n.SolvePositionConstraints_s_rC)
                          , E = F.MulRV(v, this.m_lalcA, n.SolvePositionConstraints_s_rA);
                        b.Copy(S),
                        o = I.CrossVV(w, S),
                        s = I.CrossVV(E, S),
                        T += this.m_mC + this.m_mA + this.m_iC * o * o + this.m_iA * s * s;
                        var M = this.m_lalcC
                          , D = F.MulTRV(A, I.AddVV(E, I.SubVV(c, d, I.s_t0), I.s_t0), I.s_t0);
                        i = I.DotVV(I.SubVV(D, M, I.s_t0), this.m_localAxisC)
                    }
                    if (this.m_typeB === t.b2JointType.e_revoluteJoint)
                        C.SetZero(),
                        a = this.m_ratio,
                        h = this.m_ratio,
                        T += this.m_ratio * this.m_ratio * (this.m_iB + this.m_iD),
                        r = f - y - this.m_referenceAngleB;
                    else {
                        S = F.MulRV(x, this.m_localAxisD, n.SolvePositionConstraints_s_u);
                        var B = F.MulRV(x, this.m_lalcD, n.SolvePositionConstraints_s_rD)
                          , P = F.MulRV(g, this.m_lalcB, n.SolvePositionConstraints_s_rB);
                        I.MulSV(this.m_ratio, S, C),
                        h = this.m_ratio * I.CrossVV(B, S),
                        a = this.m_ratio * I.CrossVV(P, S),
                        T += this.m_ratio * this.m_ratio * (this.m_mD + this.m_mB) + this.m_iD * h * h + this.m_iB * a * a;
                        var R = this.m_lalcD
                          , O = F.MulTRV(x, I.AddVV(P, I.SubVV(_, m, I.s_t0), I.s_t0), I.s_t0);
                        r = I.DotVV(I.SubVV(O, R, I.s_t0), this.m_localAxisD)
                    }
                    var L = i + this.m_ratio * r - this.m_constant
                      , V = 0;
                    return T > 0 && (V = -L / T),
                    c.SelfMulAdd(this.m_mA * V, b),
                    u += this.m_iA * V * s,
                    _.SelfMulAdd(this.m_mB * V, C),
                    f += this.m_iB * V * a,
                    d.SelfMulSub(this.m_mC * V, b),
                    p -= this.m_iC * V * o,
                    m.SelfMulSub(this.m_mD * V, C),
                    y -= this.m_iD * V * h,
                    e.positions[this.m_indexA].a = u,
                    e.positions[this.m_indexB].a = f,
                    e.positions[this.m_indexC].a = p,
                    e.positions[this.m_indexD].a = y,
                    0 < l
                }
                ,
                n.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                n.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                n.prototype.GetReactionForce = function(t, e) {
                    return I.MulSV(t * this.m_impulse, this.m_JvAC, e)
                }
                ,
                n.prototype.GetReactionTorque = function(t) {
                    return t * this.m_impulse * this.m_JwA
                }
                ,
                n.prototype.GetJoint1 = function() {
                    return this.m_joint1
                }
                ,
                n.prototype.GetJoint2 = function() {
                    return this.m_joint2
                }
                ,
                n.prototype.GetRatio = function() {
                    return this.m_ratio
                }
                ,
                n.prototype.SetRatio = function(t) {
                    this.m_ratio = t
                }
                ,
                n.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex
                      , n = this.m_joint1.m_index
                      , r = this.m_joint2.m_index;
                    t("  const jd: b2GearJointDef = new b2GearJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.joint1 = joints[%d];\n", n),
                    t("  jd.joint2 = joints[%d];\n", r),
                    t("  jd.ratio = %.15f;\n", this.m_ratio),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                n.InitVelocityConstraints_s_u = new I,
                n.InitVelocityConstraints_s_rA = new I,
                n.InitVelocityConstraints_s_rB = new I,
                n.InitVelocityConstraints_s_rC = new I,
                n.InitVelocityConstraints_s_rD = new I,
                n.SolvePositionConstraints_s_u = new I,
                n.SolvePositionConstraints_s_rA = new I,
                n.SolvePositionConstraints_s_rB = new I,
                n.SolvePositionConstraints_s_rC = new I,
                n.SolvePositionConstraints_s_rD = new I,
                n
            }
            )(mi)
              , Si = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_motorJoint) || this;
                    return i.linearOffset = new I(0,0),
                    i.angularOffset = 0,
                    i.maxForce = 1,
                    i.maxTorque = 1,
                    i.correctionFactor = .3,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(this.bodyB.GetPosition(), this.linearOffset);
                    var i = this.bodyA.GetAngle()
                      , n = this.bodyB.GetAngle();
                    this.angularOffset = n - i
                }
                ,
                i
            }
            )(pi)
              , wi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_linearOffset = new I,
                    n.m_angularOffset = 0,
                    n.m_linearImpulse = new I,
                    n.m_angularImpulse = 0,
                    n.m_maxForce = 0,
                    n.m_maxTorque = 0,
                    n.m_correctionFactor = .3,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_linearError = new I,
                    n.m_angularError = 0,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_linearMass = new O,
                    n.m_angularMass = 0,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_K = new O,
                    n.m_linearOffset.Copy(e(i.linearOffset, I.ZERO)),
                    n.m_linearImpulse.SetZero(),
                    n.m_maxForce = e(i.maxForce, 0),
                    n.m_maxTorque = e(i.maxTorque, 0),
                    n.m_correctionFactor = e(i.correctionFactor, .3),
                    n
                }
                return ti(i, t),
                i.prototype.GetAnchorA = function(t) {
                    var e = this.m_bodyA.GetPosition();
                    return t.x = e.x,
                    t.y = e.y,
                    t
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    var e = this.m_bodyB.GetPosition();
                    return t.x = e.x,
                    t.y = e.y,
                    t
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return I.MulSV(t, this.m_linearImpulse, e)
                }
                ,
                i.prototype.GetReactionTorque = function(t) {
                    return t * this.m_angularImpulse
                }
                ,
                i.prototype.SetLinearOffset = function(t) {
                    I.IsEqualToV(t, this.m_linearOffset) || (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_linearOffset.Copy(t))
                }
                ,
                i.prototype.GetLinearOffset = function() {
                    return this.m_linearOffset
                }
                ,
                i.prototype.SetAngularOffset = function(t) {
                    t !== this.m_angularOffset && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_angularOffset = t)
                }
                ,
                i.prototype.GetAngularOffset = function() {
                    return this.m_angularOffset
                }
                ,
                i.prototype.SetMaxForce = function(t) {
                    this.m_maxForce = t
                }
                ,
                i.prototype.GetMaxForce = function() {
                    return this.m_maxForce
                }
                ,
                i.prototype.SetMaxTorque = function(t) {
                    this.m_maxTorque = t
                }
                ,
                i.prototype.GetMaxTorque = function() {
                    return this.m_maxTorque
                }
                ,
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexA].c
                      , i = t.positions[this.m_indexA].a
                      , n = t.velocities[this.m_indexA].v
                      , r = t.velocities[this.m_indexA].w
                      , s = t.positions[this.m_indexB].c
                      , a = t.positions[this.m_indexB].a
                      , o = t.velocities[this.m_indexB].v
                      , l = t.velocities[this.m_indexB].w
                      , h = this.m_qA.SetAngle(i)
                      , c = this.m_qB.SetAngle(a)
                      , u = F.MulRV(h, I.SubVV(this.m_linearOffset, this.m_localCenterA, I.s_t0), this.m_rA)
                      , _ = F.MulRV(c, I.NegV(this.m_localCenterB, I.s_t0), this.m_rB)
                      , f = this.m_invMassA
                      , d = this.m_invMassB
                      , p = this.m_invIA
                      , m = this.m_invIB
                      , y = this.m_K;
                    if (y.ex.x = f + d + p * u.y * u.y + m * _.y * _.y,
                    y.ex.y = -p * u.x * u.y - m * _.x * _.y,
                    y.ey.x = y.ex.y,
                    y.ey.y = f + d + p * u.x * u.x + m * _.x * _.x,
                    y.GetInverse(this.m_linearMass),
                    this.m_angularMass = p + m,
                    this.m_angularMass > 0 && (this.m_angularMass = 1 / this.m_angularMass),
                    I.SubVV(I.AddVV(s, _, I.s_t0), I.AddVV(e, u, I.s_t1), this.m_linearError),
                    this.m_angularError = a - i - this.m_angularOffset,
                    t.step.warmStarting) {
                        this.m_linearImpulse.SelfMul(t.step.dtRatio),
                        this.m_angularImpulse *= t.step.dtRatio;
                        var v = this.m_linearImpulse;
                        n.SelfMulSub(f, v),
                        r -= p * (I.CrossVV(u, v) + this.m_angularImpulse),
                        o.SelfMulAdd(d, v),
                        l += m * (I.CrossVV(_, v) + this.m_angularImpulse)
                    } else
                        this.m_linearImpulse.SetZero(),
                        this.m_angularImpulse = 0;
                    t.velocities[this.m_indexA].w = r,
                    t.velocities[this.m_indexB].w = l
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = this.m_invMassA
                      , o = this.m_invMassB
                      , l = this.m_invIA
                      , h = this.m_invIB
                      , c = t.step.dt
                      , u = t.step.inv_dt
                      , _ = s - n + u * this.m_correctionFactor * this.m_angularError
                      , f = -this.m_angularMass * _
                      , d = this.m_angularImpulse
                      , p = c * this.m_maxTorque;
                    this.m_angularImpulse = g(this.m_angularImpulse + f, -p, p),
                    n -= l * (f = this.m_angularImpulse - d),
                    s += h * f;
                    var m = this.m_rA
                      , y = this.m_rB
                      , v = I.AddVV(I.SubVV(I.AddVV(r, I.CrossSV(s, y, I.s_t0), I.s_t0), I.AddVV(e, I.CrossSV(n, m, I.s_t1), I.s_t1), I.s_t2), I.MulSV(u * this.m_correctionFactor, this.m_linearError, I.s_t3), i.SolveVelocityConstraints_s_Cdot_v2)
                      , A = O.MulMV(this.m_linearMass, v, i.SolveVelocityConstraints_s_impulse_v2).SelfNeg()
                      , x = i.SolveVelocityConstraints_s_oldImpulse_v2.Copy(this.m_linearImpulse);
                    this.m_linearImpulse.SelfAdd(A),
                    p = c * this.m_maxForce,
                    this.m_linearImpulse.LengthSquared() > p * p && (this.m_linearImpulse.Normalize(),
                    this.m_linearImpulse.SelfMul(p)),
                    I.SubVV(this.m_linearImpulse, x, A),
                    e.SelfMulSub(a, A),
                    n -= l * I.CrossVV(m, A),
                    r.SelfMulAdd(o, A),
                    s += h * I.CrossVV(y, A),
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                i.prototype.SolvePositionConstraints = function() {
                    return !0
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2MotorJointDef = new b2MotorJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.linearOffset.Set(%.15f, %.15f);\n", this.m_linearOffset.x, this.m_linearOffset.y),
                    t("  jd.angularOffset = %.15f;\n", this.m_angularOffset),
                    t("  jd.maxForce = %.15f;\n", this.m_maxForce),
                    t("  jd.maxTorque = %.15f;\n", this.m_maxTorque),
                    t("  jd.correctionFactor = %.15f;\n", this.m_correctionFactor),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.SolveVelocityConstraints_s_Cdot_v2 = new I,
                i.SolveVelocityConstraints_s_impulse_v2 = new I,
                i.SolveVelocityConstraints_s_oldImpulse_v2 = new I,
                i
            }
            )(mi)
              , Ei = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_mouseJoint) || this;
                    return i.target = new I,
                    i.maxForce = 0,
                    i.frequencyHz = 5,
                    i.dampingRatio = .7,
                    i
                }
                return ti(i, e),
                i
            }
            )(pi)
              , Mi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_localAnchorB = new I,
                    n.m_targetA = new I,
                    n.m_frequencyHz = 0,
                    n.m_dampingRatio = 0,
                    n.m_beta = 0,
                    n.m_impulse = new I,
                    n.m_maxForce = 0,
                    n.m_gamma = 0,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_rB = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassB = 0,
                    n.m_invIB = 0,
                    n.m_mass = new O,
                    n.m_C = new I,
                    n.m_qB = new F,
                    n.m_lalcB = new I,
                    n.m_K = new O,
                    n.m_targetA.Copy(e(i.target, I.ZERO)),
                    V.MulTXV(n.m_bodyB.GetTransform(), n.m_targetA, n.m_localAnchorB),
                    n.m_maxForce = e(i.maxForce, 0),
                    n.m_impulse.SetZero(),
                    n.m_frequencyHz = e(i.frequencyHz, 0),
                    n.m_dampingRatio = e(i.dampingRatio, 0),
                    n.m_beta = 0,
                    n.m_gamma = 0,
                    n
                }
                return ti(i, t),
                i.prototype.SetTarget = function(t) {
                    this.m_bodyB.IsAwake() || this.m_bodyB.SetAwake(!0),
                    this.m_targetA.Copy(t)
                }
                ,
                i.prototype.GetTarget = function() {
                    return this.m_targetA
                }
                ,
                i.prototype.SetMaxForce = function(t) {
                    this.m_maxForce = t
                }
                ,
                i.prototype.GetMaxForce = function() {
                    return this.m_maxForce
                }
                ,
                i.prototype.SetFrequency = function(t) {
                    this.m_frequencyHz = t
                }
                ,
                i.prototype.GetFrequency = function() {
                    return this.m_frequencyHz
                }
                ,
                i.prototype.SetDampingRatio = function(t) {
                    this.m_dampingRatio = t
                }
                ,
                i.prototype.GetDampingRatio = function() {
                    return this.m_dampingRatio
                }
                ,
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexB].c
                      , i = t.positions[this.m_indexB].a
                      , n = t.velocities[this.m_indexB].v
                      , r = t.velocities[this.m_indexB].w
                      , a = this.m_qB.SetAngle(i)
                      , o = this.m_bodyB.GetMass()
                      , l = 2 * s * this.m_frequencyHz
                      , h = 2 * o * this.m_dampingRatio * l
                      , c = o * l * l
                      , u = t.step.dt;
                    this.m_gamma = u * (h + u * c),
                    0 !== this.m_gamma && (this.m_gamma = 1 / this.m_gamma),
                    this.m_beta = u * c * this.m_gamma,
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(a, this.m_lalcB, this.m_rB);
                    var _ = this.m_K;
                    _.ex.x = this.m_invMassB + this.m_invIB * this.m_rB.y * this.m_rB.y + this.m_gamma,
                    _.ex.y = -this.m_invIB * this.m_rB.x * this.m_rB.y,
                    _.ey.x = _.ex.y,
                    _.ey.y = this.m_invMassB + this.m_invIB * this.m_rB.x * this.m_rB.x + this.m_gamma,
                    _.GetInverse(this.m_mass),
                    this.m_C.x = e.x + this.m_rB.x - this.m_targetA.x,
                    this.m_C.y = e.y + this.m_rB.y - this.m_targetA.y,
                    this.m_C.SelfMul(this.m_beta),
                    r *= .98,
                    t.step.warmStarting ? (this.m_impulse.SelfMul(t.step.dtRatio),
                    n.x += this.m_invMassB * this.m_impulse.x,
                    n.y += this.m_invMassB * this.m_impulse.y,
                    r += this.m_invIB * I.CrossVV(this.m_rB, this.m_impulse)) : this.m_impulse.SetZero(),
                    t.velocities[this.m_indexB].w = r
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexB].v
                      , n = t.velocities[this.m_indexB].w
                      , r = I.AddVCrossSV(e, n, this.m_rB, i.SolveVelocityConstraints_s_Cdot)
                      , s = O.MulMV(this.m_mass, I.AddVV(r, I.AddVV(this.m_C, I.MulSV(this.m_gamma, this.m_impulse, I.s_t0), I.s_t0), I.s_t0).SelfNeg(), i.SolveVelocityConstraints_s_impulse)
                      , a = i.SolveVelocityConstraints_s_oldImpulse.Copy(this.m_impulse);
                    this.m_impulse.SelfAdd(s);
                    var o = t.step.dt * this.m_maxForce;
                    this.m_impulse.LengthSquared() > o * o && this.m_impulse.SelfMul(o / this.m_impulse.Length()),
                    I.SubVV(this.m_impulse, a, s),
                    e.SelfMulAdd(this.m_invMassB, s),
                    n += this.m_invIB * I.CrossVV(this.m_rB, s),
                    t.velocities[this.m_indexB].w = n
                }
                ,
                i.prototype.SolvePositionConstraints = function() {
                    return !0
                }
                ,
                i.prototype.GetAnchorA = function(t) {
                    return t.x = this.m_targetA.x,
                    t.y = this.m_targetA.y,
                    t
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return I.MulSV(t, this.m_impulse, e)
                }
                ,
                i.prototype.GetReactionTorque = function() {
                    return 0
                }
                ,
                i.prototype.Dump = function(t) {
                    t("Mouse joint dumping is not supported.\n")
                }
                ,
                i.prototype.ShiftOrigin = function(t) {
                    this.m_targetA.SelfSub(t)
                }
                ,
                i.SolveVelocityConstraints_s_Cdot = new I,
                i.SolveVelocityConstraints_s_impulse = new I,
                i.SolveVelocityConstraints_s_oldImpulse = new I,
                i
            }
            )(mi)
              , Di = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_prismaticJoint) || this;
                    return i.localAnchorA = new I,
                    i.localAnchorB = new I,
                    i.localAxisA = new I(1,0),
                    i.referenceAngle = 0,
                    i.enableLimit = !1,
                    i.lowerTranslation = 0,
                    i.upperTranslation = 0,
                    i.enableMotor = !1,
                    i.maxMotorForce = 0,
                    i.motorSpeed = 0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i, n) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(i, this.localAnchorB),
                    this.bodyA.GetLocalVector(n, this.localAxisA),
                    this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                }
                ,
                i
            }
            )(pi)
              , Bi = (function(i) {
                function n(n) {
                    var r = i.call(this, n) || this;
                    return r.m_localAnchorA = new I,
                    r.m_localAnchorB = new I,
                    r.m_localXAxisA = new I,
                    r.m_localYAxisA = new I,
                    r.m_referenceAngle = 0,
                    r.m_impulse = new R(0,0,0),
                    r.m_motorImpulse = 0,
                    r.m_lowerTranslation = 0,
                    r.m_upperTranslation = 0,
                    r.m_maxMotorForce = 0,
                    r.m_motorSpeed = 0,
                    r.m_enableLimit = !1,
                    r.m_enableMotor = !1,
                    r.m_limitState = t.b2LimitState.e_inactiveLimit,
                    r.m_indexA = 0,
                    r.m_indexB = 0,
                    r.m_localCenterA = new I,
                    r.m_localCenterB = new I,
                    r.m_invMassA = 0,
                    r.m_invMassB = 0,
                    r.m_invIA = 0,
                    r.m_invIB = 0,
                    r.m_axis = new I(0,0),
                    r.m_perp = new I(0,0),
                    r.m_s1 = 0,
                    r.m_s2 = 0,
                    r.m_a1 = 0,
                    r.m_a2 = 0,
                    r.m_K = new L,
                    r.m_K3 = new L,
                    r.m_K2 = new O,
                    r.m_motorMass = 0,
                    r.m_qA = new F,
                    r.m_qB = new F,
                    r.m_lalcA = new I,
                    r.m_lalcB = new I,
                    r.m_rA = new I,
                    r.m_rB = new I,
                    r.m_localAnchorA.Copy(e(n.localAnchorA, I.ZERO)),
                    r.m_localAnchorB.Copy(e(n.localAnchorB, I.ZERO)),
                    r.m_localXAxisA.Copy(e(n.localAxisA, new I(1,0))).SelfNormalize(),
                    I.CrossOneV(r.m_localXAxisA, r.m_localYAxisA),
                    r.m_referenceAngle = e(n.referenceAngle, 0),
                    r.m_lowerTranslation = e(n.lowerTranslation, 0),
                    r.m_upperTranslation = e(n.upperTranslation, 0),
                    r.m_maxMotorForce = e(n.maxMotorForce, 0),
                    r.m_motorSpeed = e(n.motorSpeed, 0),
                    r.m_enableLimit = e(n.enableLimit, !1),
                    r.m_enableMotor = e(n.enableMotor, !1),
                    r
                }
                return ti(n, i),
                n.prototype.InitVelocityConstraints = function(e) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var i = e.positions[this.m_indexA].c
                      , r = e.positions[this.m_indexA].a
                      , s = e.velocities[this.m_indexA].v
                      , a = e.velocities[this.m_indexA].w
                      , o = e.positions[this.m_indexB].c
                      , h = e.positions[this.m_indexB].a
                      , c = e.velocities[this.m_indexB].v
                      , u = e.velocities[this.m_indexB].w
                      , _ = this.m_qA.SetAngle(r)
                      , f = this.m_qB.SetAngle(h);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var d = F.MulRV(_, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var p = F.MulRV(f, this.m_lalcB, this.m_rB)
                      , y = I.AddVV(I.SubVV(o, i, I.s_t0), I.SubVV(p, d, I.s_t1), n.InitVelocityConstraints_s_d)
                      , v = this.m_invMassA
                      , g = this.m_invMassB
                      , A = this.m_invIA
                      , x = this.m_invIB;
                    if (F.MulRV(_, this.m_localXAxisA, this.m_axis),
                    this.m_a1 = I.CrossVV(I.AddVV(y, d, I.s_t0), this.m_axis),
                    this.m_a2 = I.CrossVV(p, this.m_axis),
                    this.m_motorMass = v + g + A * this.m_a1 * this.m_a1 + x * this.m_a2 * this.m_a2,
                    this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass),
                    F.MulRV(_, this.m_localYAxisA, this.m_perp),
                    this.m_s1 = I.CrossVV(I.AddVV(y, d, I.s_t0), this.m_perp),
                    this.m_s2 = I.CrossVV(p, this.m_perp),
                    this.m_K.ex.x = v + g + A * this.m_s1 * this.m_s1 + x * this.m_s2 * this.m_s2,
                    this.m_K.ex.y = A * this.m_s1 + x * this.m_s2,
                    this.m_K.ex.z = A * this.m_s1 * this.m_a1 + x * this.m_s2 * this.m_a2,
                    this.m_K.ey.x = this.m_K.ex.y,
                    this.m_K.ey.y = A + x,
                    0 === this.m_K.ey.y && (this.m_K.ey.y = 1),
                    this.m_K.ey.z = A * this.m_a1 + x * this.m_a2,
                    this.m_K.ez.x = this.m_K.ex.z,
                    this.m_K.ez.y = this.m_K.ey.z,
                    this.m_K.ez.z = v + g + A * this.m_a1 * this.m_a1 + x * this.m_a2 * this.m_a2,
                    this.m_enableLimit) {
                        var b = I.DotVV(this.m_axis, y);
                        m(this.m_upperTranslation - this.m_lowerTranslation) < 2 * l ? this.m_limitState = t.b2LimitState.e_equalLimits : b <= this.m_lowerTranslation ? this.m_limitState !== t.b2LimitState.e_atLowerLimit && (this.m_limitState = t.b2LimitState.e_atLowerLimit,
                        this.m_impulse.z = 0) : b >= this.m_upperTranslation ? this.m_limitState !== t.b2LimitState.e_atUpperLimit && (this.m_limitState = t.b2LimitState.e_atUpperLimit,
                        this.m_impulse.z = 0) : (this.m_limitState = t.b2LimitState.e_inactiveLimit,
                        this.m_impulse.z = 0)
                    } else
                        this.m_limitState = t.b2LimitState.e_inactiveLimit,
                        this.m_impulse.z = 0;
                    if (this.m_enableMotor || (this.m_motorImpulse = 0),
                    e.step.warmStarting) {
                        this.m_impulse.SelfMul(e.step.dtRatio),
                        this.m_motorImpulse *= e.step.dtRatio;
                        var C = I.AddVV(I.MulSV(this.m_impulse.x, this.m_perp, I.s_t0), I.MulSV(this.m_motorImpulse + this.m_impulse.z, this.m_axis, I.s_t1), n.InitVelocityConstraints_s_P)
                          , T = this.m_impulse.x * this.m_s1 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a1
                          , S = this.m_impulse.x * this.m_s2 + this.m_impulse.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_a2;
                        s.SelfMulSub(v, C),
                        a -= A * T,
                        c.SelfMulAdd(g, C),
                        u += x * S
                    } else
                        this.m_impulse.SetZero(),
                        this.m_motorImpulse = 0;
                    e.velocities[this.m_indexA].w = a,
                    e.velocities[this.m_indexB].w = u
                }
                ,
                n.prototype.SolveVelocityConstraints = function(e) {
                    var i = e.velocities[this.m_indexA].v
                      , r = e.velocities[this.m_indexA].w
                      , s = e.velocities[this.m_indexB].v
                      , a = e.velocities[this.m_indexB].w
                      , o = this.m_invMassA
                      , l = this.m_invMassB
                      , h = this.m_invIA
                      , c = this.m_invIB;
                    if (this.m_enableMotor && this.m_limitState !== t.b2LimitState.e_equalLimits) {
                        var u = I.DotVV(this.m_axis, I.SubVV(s, i, I.s_t0)) + this.m_a2 * a - this.m_a1 * r
                          , _ = this.m_motorMass * (this.m_motorSpeed - u)
                          , f = this.m_motorImpulse
                          , d = e.step.dt * this.m_maxMotorForce;
                        this.m_motorImpulse = g(this.m_motorImpulse + _, -d, d),
                        _ = this.m_motorImpulse - f;
                        var p = I.MulSV(_, this.m_axis, n.SolveVelocityConstraints_s_P)
                          , m = _ * this.m_a1
                          , A = _ * this.m_a2;
                        i.SelfMulSub(o, p),
                        r -= h * m,
                        s.SelfMulAdd(l, p),
                        a += c * A
                    }
                    var x = I.DotVV(this.m_perp, I.SubVV(s, i, I.s_t0)) + this.m_s2 * a - this.m_s1 * r
                      , b = a - r;
                    if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit) {
                        var C = I.DotVV(this.m_axis, I.SubVV(s, i, I.s_t0)) + this.m_a2 * a - this.m_a1 * r
                          , T = n.SolveVelocityConstraints_s_f1.Copy(this.m_impulse)
                          , S = this.m_K.Solve33(-x, -b, -C, n.SolveVelocityConstraints_s_df3);
                        this.m_impulse.SelfAdd(S),
                        this.m_limitState === t.b2LimitState.e_atLowerLimit ? this.m_impulse.z = v(this.m_impulse.z, 0) : this.m_limitState === t.b2LimitState.e_atUpperLimit && (this.m_impulse.z = y(this.m_impulse.z, 0));
                        var w = -x - (this.m_impulse.z - T.z) * this.m_K.ez.x
                          , E = -b - (this.m_impulse.z - T.z) * this.m_K.ez.y
                          , M = this.m_K.Solve22(w, E, n.SolveVelocityConstraints_s_f2r);
                        M.x += T.x,
                        M.y += T.y,
                        this.m_impulse.x = M.x,
                        this.m_impulse.y = M.y,
                        S.x = this.m_impulse.x - T.x,
                        S.y = this.m_impulse.y - T.y,
                        S.z = this.m_impulse.z - T.z,
                        p = I.AddVV(I.MulSV(S.x, this.m_perp, I.s_t0), I.MulSV(S.z, this.m_axis, I.s_t1), n.SolveVelocityConstraints_s_P),
                        m = S.x * this.m_s1 + S.y + S.z * this.m_a1,
                        A = S.x * this.m_s2 + S.y + S.z * this.m_a2,
                        i.SelfMulSub(o, p),
                        r -= h * m,
                        s.SelfMulAdd(l, p),
                        a += c * A
                    } else {
                        var D = this.m_K.Solve22(-x, -b, n.SolveVelocityConstraints_s_df2);
                        this.m_impulse.x += D.x,
                        this.m_impulse.y += D.y,
                        p = I.MulSV(D.x, this.m_perp, n.SolveVelocityConstraints_s_P),
                        m = D.x * this.m_s1 + D.y,
                        A = D.x * this.m_s2 + D.y,
                        i.SelfMulSub(o, p),
                        r -= h * m,
                        s.SelfMulAdd(l, p),
                        a += c * A
                    }
                    e.velocities[this.m_indexA].w = r,
                    e.velocities[this.m_indexB].w = a
                }
                ,
                n.prototype.SolvePositionConstraints = function(t) {
                    var e = t.positions[this.m_indexA].c
                      , i = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(i)
                      , o = this.m_qB.SetAngle(s)
                      , c = this.m_invMassA
                      , u = this.m_invMassB
                      , _ = this.m_invIA
                      , f = this.m_invIB
                      , d = F.MulRV(a, this.m_lalcA, this.m_rA)
                      , p = F.MulRV(o, this.m_lalcB, this.m_rB)
                      , y = I.SubVV(I.AddVV(r, p, I.s_t0), I.AddVV(e, d, I.s_t1), n.SolvePositionConstraints_s_d)
                      , A = F.MulRV(a, this.m_localXAxisA, this.m_axis)
                      , x = I.CrossVV(I.AddVV(y, d, I.s_t0), A)
                      , b = I.CrossVV(p, A)
                      , C = F.MulRV(a, this.m_localYAxisA, this.m_perp)
                      , T = I.CrossVV(I.AddVV(y, d, I.s_t0), C)
                      , S = I.CrossVV(p, C)
                      , w = n.SolvePositionConstraints_s_impulse
                      , E = I.DotVV(C, y)
                      , M = s - i - this.m_referenceAngle
                      , D = m(E)
                      , B = m(M)
                      , P = !1
                      , R = 0;
                    if (this.m_enableLimit) {
                        var O = I.DotVV(A, y);
                        m(this.m_upperTranslation - this.m_lowerTranslation) < 2 * l ? (R = g(O, -.2, .2),
                        D = v(D, m(O)),
                        P = !0) : O <= this.m_lowerTranslation ? (R = g(O - this.m_lowerTranslation + l, -.2, 0),
                        D = v(D, this.m_lowerTranslation - O),
                        P = !0) : O >= this.m_upperTranslation && (R = g(O - this.m_upperTranslation - l, 0, .2),
                        D = v(D, O - this.m_upperTranslation),
                        P = !0)
                    }
                    if (P) {
                        var L = c + u + _ * T * T + f * S * S
                          , V = _ * T + f * S
                          , N = _ * T * x + f * S * b;
                        0 === (z = _ + f) && (z = 1);
                        var k = _ * x + f * b
                          , G = c + u + _ * x * x + f * b * b
                          , U = this.m_K3;
                        U.ex.SetXYZ(L, V, N),
                        U.ey.SetXYZ(V, z, k),
                        U.ez.SetXYZ(N, k, G),
                        w = U.Solve33(-E, -M, -R, w)
                    } else {
                        var z;
                        L = c + u + _ * T * T + f * S * S,
                        V = _ * T + f * S,
                        0 === (z = _ + f) && (z = 1);
                        var H = this.m_K2;
                        H.ex.Set(L, V),
                        H.ey.Set(V, z);
                        var W = H.Solve(-E, -M, n.SolvePositionConstraints_s_impulse1);
                        w.x = W.x,
                        w.y = W.y,
                        w.z = 0
                    }
                    var j = I.AddVV(I.MulSV(w.x, C, I.s_t0), I.MulSV(w.z, A, I.s_t1), n.SolvePositionConstraints_s_P)
                      , X = w.x * T + w.y + w.z * x
                      , Y = w.x * S + w.y + w.z * b;
                    return e.SelfMulSub(c, j),
                    i -= _ * X,
                    r.SelfMulAdd(u, j),
                    s += f * Y,
                    t.positions[this.m_indexA].a = i,
                    t.positions[this.m_indexB].a = s,
                    D <= l && B <= h
                }
                ,
                n.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                n.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                n.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * (this.m_impulse.x * this.m_perp.x + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.x),
                    e.y = t * (this.m_impulse.x * this.m_perp.y + (this.m_motorImpulse + this.m_impulse.z) * this.m_axis.y),
                    e
                }
                ,
                n.prototype.GetReactionTorque = function(t) {
                    return t * this.m_impulse.y
                }
                ,
                n.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                n.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                n.prototype.GetLocalAxisA = function() {
                    return this.m_localXAxisA
                }
                ,
                n.prototype.GetReferenceAngle = function() {
                    return this.m_referenceAngle
                }
                ,
                n.prototype.GetJointTranslation = function() {
                    var t = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, n.GetJointTranslation_s_pA)
                      , e = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, n.GetJointTranslation_s_pB)
                      , i = I.SubVV(e, t, n.GetJointTranslation_s_d)
                      , r = this.m_bodyA.GetWorldVector(this.m_localXAxisA, n.GetJointTranslation_s_axis);
                    return I.DotVV(i, r)
                }
                ,
                n.prototype.GetJointSpeed = function() {
                    var t = this.m_bodyA
                      , e = this.m_bodyB;
                    I.SubVV(this.m_localAnchorA, t.m_sweep.localCenter, this.m_lalcA);
                    var i = F.MulRV(t.m_xf.q, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, e.m_sweep.localCenter, this.m_lalcB);
                    var n = F.MulRV(e.m_xf.q, this.m_lalcB, this.m_rB)
                      , r = I.AddVV(t.m_sweep.c, i, I.s_t0)
                      , s = I.AddVV(e.m_sweep.c, n, I.s_t1)
                      , a = I.SubVV(s, r, I.s_t2)
                      , o = t.GetWorldVector(this.m_localXAxisA, this.m_axis)
                      , l = t.m_linearVelocity
                      , h = e.m_linearVelocity
                      , c = t.m_angularVelocity
                      , u = e.m_angularVelocity;
                    return I.DotVV(a, I.CrossSV(c, o, I.s_t0)) + I.DotVV(o, I.SubVV(I.AddVCrossSV(h, u, n, I.s_t0), I.AddVCrossSV(l, c, i, I.s_t1), I.s_t0))
                }
                ,
                n.prototype.IsLimitEnabled = function() {
                    return this.m_enableLimit
                }
                ,
                n.prototype.EnableLimit = function(t) {
                    t !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_enableLimit = t,
                    this.m_impulse.z = 0)
                }
                ,
                n.prototype.GetLowerLimit = function() {
                    return this.m_lowerTranslation
                }
                ,
                n.prototype.GetUpperLimit = function() {
                    return this.m_upperTranslation
                }
                ,
                n.prototype.SetLimits = function(t, e) {
                    t === this.m_lowerTranslation && e === this.m_upperTranslation || (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_lowerTranslation = t,
                    this.m_upperTranslation = e,
                    this.m_impulse.z = 0)
                }
                ,
                n.prototype.IsMotorEnabled = function() {
                    return this.m_enableMotor
                }
                ,
                n.prototype.EnableMotor = function(t) {
                    t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_enableMotor = t)
                }
                ,
                n.prototype.SetMotorSpeed = function(t) {
                    t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_motorSpeed = t)
                }
                ,
                n.prototype.GetMotorSpeed = function() {
                    return this.m_motorSpeed
                }
                ,
                n.prototype.SetMaxMotorForce = function(t) {
                    t !== this.m_maxMotorForce && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_maxMotorForce = t)
                }
                ,
                n.prototype.GetMaxMotorForce = function() {
                    return this.m_maxMotorForce
                }
                ,
                n.prototype.GetMotorForce = function(t) {
                    return t * this.m_motorImpulse
                }
                ,
                n.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2PrismaticJointDef = new b2PrismaticJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y),
                    t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle),
                    t("  jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"),
                    t("  jd.lowerTranslation = %.15f;\n", this.m_lowerTranslation),
                    t("  jd.upperTranslation = %.15f;\n", this.m_upperTranslation),
                    t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"),
                    t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed),
                    t("  jd.maxMotorForce = %.15f;\n", this.m_maxMotorForce),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                n.InitVelocityConstraints_s_d = new I,
                n.InitVelocityConstraints_s_P = new I,
                n.SolveVelocityConstraints_s_P = new I,
                n.SolveVelocityConstraints_s_f2r = new I,
                n.SolveVelocityConstraints_s_f1 = new R,
                n.SolveVelocityConstraints_s_df3 = new R,
                n.SolveVelocityConstraints_s_df2 = new I,
                n.SolvePositionConstraints_s_d = new I,
                n.SolvePositionConstraints_s_impulse = new R,
                n.SolvePositionConstraints_s_impulse1 = new I,
                n.SolvePositionConstraints_s_P = new I,
                n.GetJointTranslation_s_pA = new I,
                n.GetJointTranslation_s_pB = new I,
                n.GetJointTranslation_s_d = new I,
                n.GetJointTranslation_s_axis = new I,
                n
            }
            )(mi)
              , Ii = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_pulleyJoint) || this;
                    return i.groundAnchorA = new I(-1,1),
                    i.groundAnchorB = new I(1,1),
                    i.localAnchorA = new I(-1,0),
                    i.localAnchorB = new I(1,0),
                    i.lengthA = 0,
                    i.lengthB = 0,
                    i.ratio = 1,
                    i.collideConnected = !0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i, n, r, s, a) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.groundAnchorA.Copy(i),
                    this.groundAnchorB.Copy(n),
                    this.bodyA.GetLocalPoint(r, this.localAnchorA),
                    this.bodyB.GetLocalPoint(s, this.localAnchorB),
                    this.lengthA = I.DistanceVV(r, i),
                    this.lengthB = I.DistanceVV(s, n),
                    this.ratio = a
                }
                ,
                i
            }
            )(pi)
              , Pi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_groundAnchorA = new I,
                    n.m_groundAnchorB = new I,
                    n.m_lengthA = 0,
                    n.m_lengthB = 0,
                    n.m_localAnchorA = new I,
                    n.m_localAnchorB = new I,
                    n.m_constant = 0,
                    n.m_ratio = 0,
                    n.m_impulse = 0,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_uA = new I,
                    n.m_uB = new I,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_mass = 0,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_lalcA = new I,
                    n.m_lalcB = new I,
                    n.m_groundAnchorA.Copy(e(i.groundAnchorA, new I(-1,1))),
                    n.m_groundAnchorB.Copy(e(i.groundAnchorB, new I(1,0))),
                    n.m_localAnchorA.Copy(e(i.localAnchorA, new I(-1,0))),
                    n.m_localAnchorB.Copy(e(i.localAnchorB, new I(1,0))),
                    n.m_lengthA = e(i.lengthA, 0),
                    n.m_lengthB = e(i.lengthB, 0),
                    n.m_ratio = e(i.ratio, 1),
                    n.m_constant = e(i.lengthA, 0) + n.m_ratio * e(i.lengthB, 0),
                    n.m_impulse = 0,
                    n
                }
                return ti(i, t),
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.velocities[this.m_indexA].v
                      , s = t.velocities[this.m_indexA].w
                      , a = t.positions[this.m_indexB].c
                      , o = t.positions[this.m_indexB].a
                      , h = t.velocities[this.m_indexB].v
                      , c = t.velocities[this.m_indexB].w
                      , u = this.m_qA.SetAngle(n)
                      , _ = this.m_qB.SetAngle(o);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA),
                    F.MulRV(u, this.m_lalcA, this.m_rA),
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(_, this.m_lalcB, this.m_rB),
                    this.m_uA.Copy(e).SelfAdd(this.m_rA).SelfSub(this.m_groundAnchorA),
                    this.m_uB.Copy(a).SelfAdd(this.m_rB).SelfSub(this.m_groundAnchorB);
                    var f = this.m_uA.Length()
                      , d = this.m_uB.Length();
                    f > 10 * l ? this.m_uA.SelfMul(1 / f) : this.m_uA.SetZero(),
                    d > 10 * l ? this.m_uB.SelfMul(1 / d) : this.m_uB.SetZero();
                    var p = I.CrossVV(this.m_rA, this.m_uA)
                      , m = I.CrossVV(this.m_rB, this.m_uB)
                      , y = this.m_invMassA + this.m_invIA * p * p
                      , v = this.m_invMassB + this.m_invIB * m * m;
                    if (this.m_mass = y + this.m_ratio * this.m_ratio * v,
                    this.m_mass > 0 && (this.m_mass = 1 / this.m_mass),
                    t.step.warmStarting) {
                        this.m_impulse *= t.step.dtRatio;
                        var g = I.MulSV(-this.m_impulse, this.m_uA, i.InitVelocityConstraints_s_PA)
                          , A = I.MulSV(-this.m_ratio * this.m_impulse, this.m_uB, i.InitVelocityConstraints_s_PB);
                        r.SelfMulAdd(this.m_invMassA, g),
                        s += this.m_invIA * I.CrossVV(this.m_rA, g),
                        h.SelfMulAdd(this.m_invMassB, A),
                        c += this.m_invIB * I.CrossVV(this.m_rB, A)
                    } else
                        this.m_impulse = 0;
                    t.velocities[this.m_indexA].w = s,
                    t.velocities[this.m_indexB].w = c
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = I.AddVCrossSV(e, n, this.m_rA, i.SolveVelocityConstraints_s_vpA)
                      , o = I.AddVCrossSV(r, s, this.m_rB, i.SolveVelocityConstraints_s_vpB)
                      , l = -I.DotVV(this.m_uA, a) - this.m_ratio * I.DotVV(this.m_uB, o)
                      , h = -this.m_mass * l;
                    this.m_impulse += h;
                    var c = I.MulSV(-h, this.m_uA, i.SolveVelocityConstraints_s_PA)
                      , u = I.MulSV(-this.m_ratio * h, this.m_uB, i.SolveVelocityConstraints_s_PB);
                    e.SelfMulAdd(this.m_invMassA, c),
                    n += this.m_invIA * I.CrossVV(this.m_rA, c),
                    r.SelfMulAdd(this.m_invMassB, u),
                    s += this.m_invIB * I.CrossVV(this.m_rB, u),
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                i.prototype.SolvePositionConstraints = function(t) {
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(n)
                      , o = this.m_qB.SetAngle(s);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var h = F.MulRV(a, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var c = F.MulRV(o, this.m_lalcB, this.m_rB)
                      , u = this.m_uA.Copy(e).SelfAdd(h).SelfSub(this.m_groundAnchorA)
                      , _ = this.m_uB.Copy(r).SelfAdd(c).SelfSub(this.m_groundAnchorB)
                      , f = u.Length()
                      , d = _.Length();
                    f > 10 * l ? u.SelfMul(1 / f) : u.SetZero(),
                    d > 10 * l ? _.SelfMul(1 / d) : _.SetZero();
                    var p = I.CrossVV(h, u)
                      , y = I.CrossVV(c, _)
                      , v = this.m_invMassA + this.m_invIA * p * p
                      , g = this.m_invMassB + this.m_invIB * y * y
                      , A = v + this.m_ratio * this.m_ratio * g;
                    A > 0 && (A = 1 / A);
                    var x = this.m_constant - f - this.m_ratio * d
                      , b = m(x)
                      , C = -A * x
                      , T = I.MulSV(-C, u, i.SolvePositionConstraints_s_PA)
                      , S = I.MulSV(-this.m_ratio * C, _, i.SolvePositionConstraints_s_PB);
                    return e.SelfMulAdd(this.m_invMassA, T),
                    n += this.m_invIA * I.CrossVV(h, T),
                    r.SelfMulAdd(this.m_invMassB, S),
                    s += this.m_invIB * I.CrossVV(c, S),
                    t.positions[this.m_indexA].a = n,
                    t.positions[this.m_indexB].a = s,
                    b < l
                }
                ,
                i.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * this.m_impulse * this.m_uB.x,
                    e.y = t * this.m_impulse * this.m_uB.y,
                    e
                }
                ,
                i.prototype.GetReactionTorque = function() {
                    return 0
                }
                ,
                i.prototype.GetGroundAnchorA = function() {
                    return this.m_groundAnchorA
                }
                ,
                i.prototype.GetGroundAnchorB = function() {
                    return this.m_groundAnchorB
                }
                ,
                i.prototype.GetLengthA = function() {
                    return this.m_lengthA
                }
                ,
                i.prototype.GetLengthB = function() {
                    return this.m_lengthB
                }
                ,
                i.prototype.GetRatio = function() {
                    return this.m_ratio
                }
                ,
                i.prototype.GetCurrentLengthA = function() {
                    var t = this.m_bodyA.GetWorldPoint(this.m_localAnchorA, i.GetCurrentLengthA_s_p)
                      , e = this.m_groundAnchorA;
                    return I.DistanceVV(t, e)
                }
                ,
                i.prototype.GetCurrentLengthB = function() {
                    var t = this.m_bodyB.GetWorldPoint(this.m_localAnchorB, i.GetCurrentLengthB_s_p)
                      , e = this.m_groundAnchorB;
                    return I.DistanceVV(t, e)
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2PulleyJointDef = new b2PulleyJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.groundAnchorA.Set(%.15f, %.15f);\n", this.m_groundAnchorA.x, this.m_groundAnchorA.y),
                    t("  jd.groundAnchorB.Set(%.15f, %.15f);\n", this.m_groundAnchorB.x, this.m_groundAnchorB.y),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.lengthA = %.15f;\n", this.m_lengthA),
                    t("  jd.lengthB = %.15f;\n", this.m_lengthB),
                    t("  jd.ratio = %.15f;\n", this.m_ratio),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.prototype.ShiftOrigin = function(t) {
                    this.m_groundAnchorA.SelfSub(t),
                    this.m_groundAnchorB.SelfSub(t)
                }
                ,
                i.InitVelocityConstraints_s_PA = new I,
                i.InitVelocityConstraints_s_PB = new I,
                i.SolveVelocityConstraints_s_vpA = new I,
                i.SolveVelocityConstraints_s_vpB = new I,
                i.SolveVelocityConstraints_s_PA = new I,
                i.SolveVelocityConstraints_s_PB = new I,
                i.SolvePositionConstraints_s_PA = new I,
                i.SolvePositionConstraints_s_PB = new I,
                i.GetCurrentLengthA_s_p = new I,
                i.GetCurrentLengthB_s_p = new I,
                i
            }
            )(mi)
              , Ri = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_revoluteJoint) || this;
                    return i.localAnchorA = new I(0,0),
                    i.localAnchorB = new I(0,0),
                    i.referenceAngle = 0,
                    i.enableLimit = !1,
                    i.lowerAngle = 0,
                    i.upperAngle = 0,
                    i.enableMotor = !1,
                    i.motorSpeed = 0,
                    i.maxMotorTorque = 0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(i, this.localAnchorB),
                    this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                }
                ,
                i
            }
            )(pi)
              , Oi = (function(i) {
                function n(n) {
                    var r = i.call(this, n) || this;
                    return r.m_localAnchorA = new I,
                    r.m_localAnchorB = new I,
                    r.m_impulse = new R,
                    r.m_motorImpulse = 0,
                    r.m_enableMotor = !1,
                    r.m_maxMotorTorque = 0,
                    r.m_motorSpeed = 0,
                    r.m_enableLimit = !1,
                    r.m_referenceAngle = 0,
                    r.m_lowerAngle = 0,
                    r.m_upperAngle = 0,
                    r.m_indexA = 0,
                    r.m_indexB = 0,
                    r.m_rA = new I,
                    r.m_rB = new I,
                    r.m_localCenterA = new I,
                    r.m_localCenterB = new I,
                    r.m_invMassA = 0,
                    r.m_invMassB = 0,
                    r.m_invIA = 0,
                    r.m_invIB = 0,
                    r.m_mass = new L,
                    r.m_motorMass = 0,
                    r.m_limitState = t.b2LimitState.e_inactiveLimit,
                    r.m_qA = new F,
                    r.m_qB = new F,
                    r.m_lalcA = new I,
                    r.m_lalcB = new I,
                    r.m_K = new O,
                    r.m_localAnchorA.Copy(e(n.localAnchorA, I.ZERO)),
                    r.m_localAnchorB.Copy(e(n.localAnchorB, I.ZERO)),
                    r.m_referenceAngle = e(n.referenceAngle, 0),
                    r.m_impulse.SetZero(),
                    r.m_motorImpulse = 0,
                    r.m_lowerAngle = e(n.lowerAngle, 0),
                    r.m_upperAngle = e(n.upperAngle, 0),
                    r.m_maxMotorTorque = e(n.maxMotorTorque, 0),
                    r.m_motorSpeed = e(n.motorSpeed, 0),
                    r.m_enableLimit = e(n.enableLimit, !1),
                    r.m_enableMotor = e(n.enableMotor, !1),
                    r.m_limitState = t.b2LimitState.e_inactiveLimit,
                    r
                }
                return ti(n, i),
                n.prototype.InitVelocityConstraints = function(e) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var i = e.positions[this.m_indexA].a
                      , r = e.velocities[this.m_indexA].v
                      , s = e.velocities[this.m_indexA].w
                      , a = e.positions[this.m_indexB].a
                      , o = e.velocities[this.m_indexB].v
                      , l = e.velocities[this.m_indexB].w
                      , c = this.m_qA.SetAngle(i)
                      , u = this.m_qB.SetAngle(a);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA),
                    F.MulRV(c, this.m_lalcA, this.m_rA),
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(u, this.m_lalcB, this.m_rB);
                    var _ = this.m_invMassA
                      , f = this.m_invMassB
                      , d = this.m_invIA
                      , p = this.m_invIB
                      , y = d + p === 0;
                    if (this.m_mass.ex.x = _ + f + this.m_rA.y * this.m_rA.y * d + this.m_rB.y * this.m_rB.y * p,
                    this.m_mass.ey.x = -this.m_rA.y * this.m_rA.x * d - this.m_rB.y * this.m_rB.x * p,
                    this.m_mass.ez.x = -this.m_rA.y * d - this.m_rB.y * p,
                    this.m_mass.ex.y = this.m_mass.ey.x,
                    this.m_mass.ey.y = _ + f + this.m_rA.x * this.m_rA.x * d + this.m_rB.x * this.m_rB.x * p,
                    this.m_mass.ez.y = this.m_rA.x * d + this.m_rB.x * p,
                    this.m_mass.ex.z = this.m_mass.ez.x,
                    this.m_mass.ey.z = this.m_mass.ez.y,
                    this.m_mass.ez.z = d + p,
                    this.m_motorMass = d + p,
                    this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass),
                    this.m_enableMotor && !y || (this.m_motorImpulse = 0),
                    this.m_enableLimit && !y) {
                        var v = a - i - this.m_referenceAngle;
                        m(this.m_upperAngle - this.m_lowerAngle) < 2 * h ? this.m_limitState = t.b2LimitState.e_equalLimits : v <= this.m_lowerAngle ? (this.m_limitState !== t.b2LimitState.e_atLowerLimit && (this.m_impulse.z = 0),
                        this.m_limitState = t.b2LimitState.e_atLowerLimit) : v >= this.m_upperAngle ? (this.m_limitState !== t.b2LimitState.e_atUpperLimit && (this.m_impulse.z = 0),
                        this.m_limitState = t.b2LimitState.e_atUpperLimit) : (this.m_limitState = t.b2LimitState.e_inactiveLimit,
                        this.m_impulse.z = 0)
                    } else
                        this.m_limitState = t.b2LimitState.e_inactiveLimit;
                    if (e.step.warmStarting) {
                        this.m_impulse.SelfMul(e.step.dtRatio),
                        this.m_motorImpulse *= e.step.dtRatio;
                        var g = n.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y);
                        r.SelfMulSub(_, g),
                        s -= d * (I.CrossVV(this.m_rA, g) + this.m_motorImpulse + this.m_impulse.z),
                        o.SelfMulAdd(f, g),
                        l += p * (I.CrossVV(this.m_rB, g) + this.m_motorImpulse + this.m_impulse.z)
                    } else
                        this.m_impulse.SetZero(),
                        this.m_motorImpulse = 0;
                    e.velocities[this.m_indexA].w = s,
                    e.velocities[this.m_indexB].w = l
                }
                ,
                n.prototype.SolveVelocityConstraints = function(e) {
                    var i = e.velocities[this.m_indexA].v
                      , r = e.velocities[this.m_indexA].w
                      , s = e.velocities[this.m_indexB].v
                      , a = e.velocities[this.m_indexB].w
                      , o = this.m_invMassA
                      , l = this.m_invMassB
                      , h = this.m_invIA
                      , c = this.m_invIB
                      , u = h + c === 0;
                    if (this.m_enableMotor && this.m_limitState !== t.b2LimitState.e_equalLimits && !u) {
                        var _ = a - r - this.m_motorSpeed
                          , f = -this.m_motorMass * _
                          , d = this.m_motorImpulse
                          , p = e.step.dt * this.m_maxMotorTorque;
                        this.m_motorImpulse = g(this.m_motorImpulse + f, -p, p),
                        r -= h * (f = this.m_motorImpulse - d),
                        a += c * f
                    }
                    if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit && !u) {
                        var m = I.SubVV(I.AddVCrossSV(s, a, this.m_rB, I.s_t0), I.AddVCrossSV(i, r, this.m_rA, I.s_t1), n.SolveVelocityConstraints_s_Cdot1)
                          , y = a - r
                          , v = this.m_mass.Solve33(m.x, m.y, y, n.SolveVelocityConstraints_s_impulse_v3).SelfNeg();
                        if (this.m_limitState === t.b2LimitState.e_equalLimits)
                            this.m_impulse.SelfAdd(v);
                        else if (this.m_limitState === t.b2LimitState.e_atLowerLimit)
                            if (this.m_impulse.z + v.z < 0) {
                                var A = -m.x + this.m_impulse.z * this.m_mass.ez.x
                                  , x = -m.y + this.m_impulse.z * this.m_mass.ez.y
                                  , b = this.m_mass.Solve22(A, x, n.SolveVelocityConstraints_s_reduced_v2);
                                v.x = b.x,
                                v.y = b.y,
                                v.z = -this.m_impulse.z,
                                this.m_impulse.x += b.x,
                                this.m_impulse.y += b.y,
                                this.m_impulse.z = 0
                            } else
                                this.m_impulse.SelfAdd(v);
                        else
                            this.m_limitState === t.b2LimitState.e_atUpperLimit && (this.m_impulse.z + v.z > 0 ? (A = -m.x + this.m_impulse.z * this.m_mass.ez.x,
                            x = -m.y + this.m_impulse.z * this.m_mass.ez.y,
                            b = this.m_mass.Solve22(A, x, n.SolveVelocityConstraints_s_reduced_v2),
                            v.x = b.x,
                            v.y = b.y,
                            v.z = -this.m_impulse.z,
                            this.m_impulse.x += b.x,
                            this.m_impulse.y += b.y,
                            this.m_impulse.z = 0) : this.m_impulse.SelfAdd(v));
                        var C = n.SolveVelocityConstraints_s_P.Set(v.x, v.y);
                        i.SelfMulSub(o, C),
                        r -= h * (I.CrossVV(this.m_rA, C) + v.z),
                        s.SelfMulAdd(l, C),
                        a += c * (I.CrossVV(this.m_rB, C) + v.z)
                    } else {
                        var T = I.SubVV(I.AddVCrossSV(s, a, this.m_rB, I.s_t0), I.AddVCrossSV(i, r, this.m_rA, I.s_t1), n.SolveVelocityConstraints_s_Cdot_v2)
                          , S = this.m_mass.Solve22(-T.x, -T.y, n.SolveVelocityConstraints_s_impulse_v2);
                        this.m_impulse.x += S.x,
                        this.m_impulse.y += S.y,
                        i.SelfMulSub(o, S),
                        r -= h * I.CrossVV(this.m_rA, S),
                        s.SelfMulAdd(l, S),
                        a += c * I.CrossVV(this.m_rB, S)
                    }
                    e.velocities[this.m_indexA].w = r,
                    e.velocities[this.m_indexB].w = a
                }
                ,
                n.prototype.SolvePositionConstraints = function(e) {
                    var i, r = e.positions[this.m_indexA].c, s = e.positions[this.m_indexA].a, a = e.positions[this.m_indexB].c, o = e.positions[this.m_indexB].a, c = this.m_qA.SetAngle(s), u = this.m_qB.SetAngle(o), _ = 0, f = this.m_invIA + this.m_invIB === 0;
                    if (this.m_enableLimit && this.m_limitState !== t.b2LimitState.e_inactiveLimit && !f) {
                        var d = o - s - this.m_referenceAngle
                          , p = 0;
                        if (this.m_limitState === t.b2LimitState.e_equalLimits) {
                            var y = g(d - this.m_lowerAngle, -.13962634015955555, .13962634015955555);
                            p = -this.m_motorMass * y,
                            _ = m(y)
                        } else
                            this.m_limitState === t.b2LimitState.e_atLowerLimit ? (_ = -(y = d - this.m_lowerAngle),
                            y = g(y + h, -.13962634015955555, 0),
                            p = -this.m_motorMass * y) : this.m_limitState === t.b2LimitState.e_atUpperLimit && (_ = y = d - this.m_upperAngle,
                            y = g(y - h, 0, .13962634015955555),
                            p = -this.m_motorMass * y);
                        s -= this.m_invIA * p,
                        o += this.m_invIB * p
                    }
                    c.SetAngle(s),
                    u.SetAngle(o),
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var v = F.MulRV(c, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var A = F.MulRV(u, this.m_lalcB, this.m_rB)
                      , x = I.SubVV(I.AddVV(a, A, I.s_t0), I.AddVV(r, v, I.s_t1), n.SolvePositionConstraints_s_C_v2);
                    i = x.Length();
                    var b = this.m_invMassA
                      , C = this.m_invMassB
                      , T = this.m_invIA
                      , S = this.m_invIB
                      , w = this.m_K;
                    w.ex.x = b + C + T * v.y * v.y + S * A.y * A.y,
                    w.ex.y = -T * v.x * v.y - S * A.x * A.y,
                    w.ey.x = w.ex.y,
                    w.ey.y = b + C + T * v.x * v.x + S * A.x * A.x;
                    var E = w.Solve(x.x, x.y, n.SolvePositionConstraints_s_impulse).SelfNeg();
                    return r.SelfMulSub(b, E),
                    s -= T * I.CrossVV(v, E),
                    a.SelfMulAdd(C, E),
                    o += S * I.CrossVV(A, E),
                    e.positions[this.m_indexA].a = s,
                    e.positions[this.m_indexB].a = o,
                    i <= l && _ <= h
                }
                ,
                n.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                n.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                n.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * this.m_impulse.x,
                    e.y = t * this.m_impulse.y,
                    e
                }
                ,
                n.prototype.GetReactionTorque = function(t) {
                    return t * this.m_impulse.z
                }
                ,
                n.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                n.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                n.prototype.GetReferenceAngle = function() {
                    return this.m_referenceAngle
                }
                ,
                n.prototype.GetJointAngle = function() {
                    return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a - this.m_referenceAngle
                }
                ,
                n.prototype.GetJointSpeed = function() {
                    return this.m_bodyB.m_angularVelocity - this.m_bodyA.m_angularVelocity
                }
                ,
                n.prototype.IsMotorEnabled = function() {
                    return this.m_enableMotor
                }
                ,
                n.prototype.EnableMotor = function(t) {
                    t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_enableMotor = t)
                }
                ,
                n.prototype.GetMotorTorque = function(t) {
                    return t * this.m_motorImpulse
                }
                ,
                n.prototype.GetMotorSpeed = function() {
                    return this.m_motorSpeed
                }
                ,
                n.prototype.SetMaxMotorTorque = function(t) {
                    t !== this.m_maxMotorTorque && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_maxMotorTorque = t)
                }
                ,
                n.prototype.GetMaxMotorTorque = function() {
                    return this.m_maxMotorTorque
                }
                ,
                n.prototype.IsLimitEnabled = function() {
                    return this.m_enableLimit
                }
                ,
                n.prototype.EnableLimit = function(t) {
                    t !== this.m_enableLimit && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_enableLimit = t,
                    this.m_impulse.z = 0)
                }
                ,
                n.prototype.GetLowerLimit = function() {
                    return this.m_lowerAngle
                }
                ,
                n.prototype.GetUpperLimit = function() {
                    return this.m_upperAngle
                }
                ,
                n.prototype.SetLimits = function(t, e) {
                    t === this.m_lowerAngle && e === this.m_upperAngle || (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_impulse.z = 0,
                    this.m_lowerAngle = t,
                    this.m_upperAngle = e)
                }
                ,
                n.prototype.SetMotorSpeed = function(t) {
                    t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_motorSpeed = t)
                }
                ,
                n.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2RevoluteJointDef = new b2RevoluteJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle),
                    t("  jd.enableLimit = %s;\n", this.m_enableLimit ? "true" : "false"),
                    t("  jd.lowerAngle = %.15f;\n", this.m_lowerAngle),
                    t("  jd.upperAngle = %.15f;\n", this.m_upperAngle),
                    t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"),
                    t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed),
                    t("  jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                n.InitVelocityConstraints_s_P = new I,
                n.SolveVelocityConstraints_s_P = new I,
                n.SolveVelocityConstraints_s_Cdot_v2 = new I,
                n.SolveVelocityConstraints_s_Cdot1 = new I,
                n.SolveVelocityConstraints_s_impulse_v3 = new R,
                n.SolveVelocityConstraints_s_reduced_v2 = new I,
                n.SolveVelocityConstraints_s_impulse_v2 = new I,
                n.SolvePositionConstraints_s_C_v2 = new I,
                n.SolvePositionConstraints_s_impulse = new I,
                n
            }
            )(mi)
              , Li = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_ropeJoint) || this;
                    return i.localAnchorA = new I(-1,0),
                    i.localAnchorB = new I(1,0),
                    i.maxLength = 0,
                    i
                }
                return ti(i, e),
                i
            }
            )(pi)
              , Fi = (function(i) {
                function n(n) {
                    var r = i.call(this, n) || this;
                    return r.m_localAnchorA = new I,
                    r.m_localAnchorB = new I,
                    r.m_maxLength = 0,
                    r.m_length = 0,
                    r.m_impulse = 0,
                    r.m_indexA = 0,
                    r.m_indexB = 0,
                    r.m_u = new I,
                    r.m_rA = new I,
                    r.m_rB = new I,
                    r.m_localCenterA = new I,
                    r.m_localCenterB = new I,
                    r.m_invMassA = 0,
                    r.m_invMassB = 0,
                    r.m_invIA = 0,
                    r.m_invIB = 0,
                    r.m_mass = 0,
                    r.m_state = t.b2LimitState.e_inactiveLimit,
                    r.m_qA = new F,
                    r.m_qB = new F,
                    r.m_lalcA = new I,
                    r.m_lalcB = new I,
                    r.m_localAnchorA.Copy(e(n.localAnchorA, new I(-1,0))),
                    r.m_localAnchorB.Copy(e(n.localAnchorB, new I(1,0))),
                    r.m_maxLength = e(n.maxLength, 0),
                    r
                }
                return ti(n, i),
                n.prototype.InitVelocityConstraints = function(e) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var i = e.positions[this.m_indexA].c
                      , r = e.positions[this.m_indexA].a
                      , s = e.velocities[this.m_indexA].v
                      , a = e.velocities[this.m_indexA].w
                      , o = e.positions[this.m_indexB].c
                      , h = e.positions[this.m_indexB].a
                      , c = e.velocities[this.m_indexB].v
                      , u = e.velocities[this.m_indexB].w
                      , _ = this.m_qA.SetAngle(r)
                      , f = this.m_qB.SetAngle(h);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA),
                    F.MulRV(_, this.m_lalcA, this.m_rA),
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(f, this.m_lalcB, this.m_rB),
                    this.m_u.Copy(o).SelfAdd(this.m_rB).SelfSub(i).SelfSub(this.m_rA),
                    this.m_length = this.m_u.Length();
                    var d = this.m_length - this.m_maxLength;
                    if (this.m_state = d > 0 ? t.b2LimitState.e_atUpperLimit : t.b2LimitState.e_inactiveLimit,
                    !(this.m_length > l))
                        return this.m_u.SetZero(),
                        this.m_mass = 0,
                        void (this.m_impulse = 0);
                    this.m_u.SelfMul(1 / this.m_length);
                    var p = I.CrossVV(this.m_rA, this.m_u)
                      , m = I.CrossVV(this.m_rB, this.m_u)
                      , y = this.m_invMassA + this.m_invIA * p * p + this.m_invMassB + this.m_invIB * m * m;
                    if (this.m_mass = 0 !== y ? 1 / y : 0,
                    e.step.warmStarting) {
                        this.m_impulse *= e.step.dtRatio;
                        var v = I.MulSV(this.m_impulse, this.m_u, n.InitVelocityConstraints_s_P);
                        s.SelfMulSub(this.m_invMassA, v),
                        a -= this.m_invIA * I.CrossVV(this.m_rA, v),
                        c.SelfMulAdd(this.m_invMassB, v),
                        u += this.m_invIB * I.CrossVV(this.m_rB, v)
                    } else
                        this.m_impulse = 0;
                    e.velocities[this.m_indexA].w = a,
                    e.velocities[this.m_indexB].w = u
                }
                ,
                n.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , i = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = I.AddVCrossSV(e, i, this.m_rA, n.SolveVelocityConstraints_s_vpA)
                      , o = I.AddVCrossSV(r, s, this.m_rB, n.SolveVelocityConstraints_s_vpB)
                      , l = this.m_length - this.m_maxLength
                      , h = I.DotVV(this.m_u, I.SubVV(o, a, I.s_t0));
                    l < 0 && (h += t.step.inv_dt * l);
                    var c = -this.m_mass * h
                      , u = this.m_impulse;
                    this.m_impulse = y(0, this.m_impulse + c),
                    c = this.m_impulse - u;
                    var _ = I.MulSV(c, this.m_u, n.SolveVelocityConstraints_s_P);
                    e.SelfMulSub(this.m_invMassA, _),
                    i -= this.m_invIA * I.CrossVV(this.m_rA, _),
                    r.SelfMulAdd(this.m_invMassB, _),
                    s += this.m_invIB * I.CrossVV(this.m_rB, _),
                    t.velocities[this.m_indexA].w = i,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                n.prototype.SolvePositionConstraints = function(t) {
                    var e = t.positions[this.m_indexA].c
                      , i = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(i)
                      , o = this.m_qB.SetAngle(s);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var h = F.MulRV(a, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var c = F.MulRV(o, this.m_lalcB, this.m_rB)
                      , u = this.m_u.Copy(r).SelfAdd(c).SelfSub(e).SelfSub(h)
                      , _ = u.Normalize()
                      , f = _ - this.m_maxLength;
                    f = g(f, 0, .2);
                    var d = -this.m_mass * f
                      , p = I.MulSV(d, u, n.SolvePositionConstraints_s_P);
                    return e.SelfMulSub(this.m_invMassA, p),
                    i -= this.m_invIA * I.CrossVV(h, p),
                    r.SelfMulAdd(this.m_invMassB, p),
                    s += this.m_invIB * I.CrossVV(c, p),
                    t.positions[this.m_indexA].a = i,
                    t.positions[this.m_indexB].a = s,
                    _ - this.m_maxLength < l
                }
                ,
                n.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                n.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                n.prototype.GetReactionForce = function(t, e) {
                    return I.MulSV(t * this.m_impulse, this.m_u, e)
                }
                ,
                n.prototype.GetReactionTorque = function() {
                    return 0
                }
                ,
                n.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                n.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                n.prototype.SetMaxLength = function(t) {
                    this.m_maxLength = t
                }
                ,
                n.prototype.GetMaxLength = function() {
                    return this.m_maxLength
                }
                ,
                n.prototype.GetLimitState = function() {
                    return this.m_state
                }
                ,
                n.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2RopeJointDef = new b2RopeJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.maxLength = %.15f;\n", this.m_maxLength),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                n.InitVelocityConstraints_s_P = new I,
                n.SolveVelocityConstraints_s_vpA = new I,
                n.SolveVelocityConstraints_s_vpB = new I,
                n.SolveVelocityConstraints_s_P = new I,
                n.SolvePositionConstraints_s_P = new I,
                n
            }
            )(mi)
              , Vi = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_weldJoint) || this;
                    return i.localAnchorA = new I,
                    i.localAnchorB = new I,
                    i.referenceAngle = 0,
                    i.frequencyHz = 0,
                    i.dampingRatio = 0,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(i, this.localAnchorB),
                    this.referenceAngle = this.bodyB.GetAngle() - this.bodyA.GetAngle()
                }
                ,
                i
            }
            )(pi)
              , Ni = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_frequencyHz = 0,
                    n.m_dampingRatio = 0,
                    n.m_bias = 0,
                    n.m_localAnchorA = new I,
                    n.m_localAnchorB = new I,
                    n.m_referenceAngle = 0,
                    n.m_gamma = 0,
                    n.m_impulse = new R(0,0,0),
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_mass = new L,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_lalcA = new I,
                    n.m_lalcB = new I,
                    n.m_K = new L,
                    n.m_frequencyHz = e(i.frequencyHz, 0),
                    n.m_dampingRatio = e(i.dampingRatio, 0),
                    n.m_localAnchorA.Copy(e(i.localAnchorA, I.ZERO)),
                    n.m_localAnchorB.Copy(e(i.localAnchorB, I.ZERO)),
                    n.m_referenceAngle = e(i.referenceAngle, 0),
                    n.m_impulse.SetZero(),
                    n
                }
                return ti(i, t),
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = t.positions[this.m_indexA].a
                      , n = t.velocities[this.m_indexA].v
                      , r = t.velocities[this.m_indexA].w
                      , a = t.positions[this.m_indexB].a
                      , o = t.velocities[this.m_indexB].v
                      , l = t.velocities[this.m_indexB].w
                      , h = this.m_qA.SetAngle(e)
                      , c = this.m_qB.SetAngle(a);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA),
                    F.MulRV(h, this.m_lalcA, this.m_rA),
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB),
                    F.MulRV(c, this.m_lalcB, this.m_rB);
                    var u = this.m_invMassA
                      , _ = this.m_invMassB
                      , f = this.m_invIA
                      , d = this.m_invIB
                      , p = this.m_K;
                    if (p.ex.x = u + _ + this.m_rA.y * this.m_rA.y * f + this.m_rB.y * this.m_rB.y * d,
                    p.ey.x = -this.m_rA.y * this.m_rA.x * f - this.m_rB.y * this.m_rB.x * d,
                    p.ez.x = -this.m_rA.y * f - this.m_rB.y * d,
                    p.ex.y = p.ey.x,
                    p.ey.y = u + _ + this.m_rA.x * this.m_rA.x * f + this.m_rB.x * this.m_rB.x * d,
                    p.ez.y = this.m_rA.x * f + this.m_rB.x * d,
                    p.ex.z = p.ez.x,
                    p.ey.z = p.ez.y,
                    p.ez.z = f + d,
                    this.m_frequencyHz > 0) {
                        p.GetInverse22(this.m_mass);
                        var m = f + d
                          , y = m > 0 ? 1 / m : 0
                          , v = a - e - this.m_referenceAngle
                          , g = 2 * s * this.m_frequencyHz
                          , A = 2 * y * this.m_dampingRatio * g
                          , x = y * g * g
                          , b = t.step.dt;
                        this.m_gamma = b * (A + b * x),
                        this.m_gamma = 0 !== this.m_gamma ? 1 / this.m_gamma : 0,
                        this.m_bias = v * b * x * this.m_gamma,
                        m += this.m_gamma,
                        this.m_mass.ez.z = 0 !== m ? 1 / m : 0
                    } else
                        p.GetSymInverse33(this.m_mass),
                        this.m_gamma = 0,
                        this.m_bias = 0;
                    if (t.step.warmStarting) {
                        this.m_impulse.SelfMul(t.step.dtRatio);
                        var C = i.InitVelocityConstraints_s_P.Set(this.m_impulse.x, this.m_impulse.y);
                        n.SelfMulSub(u, C),
                        r -= f * (I.CrossVV(this.m_rA, C) + this.m_impulse.z),
                        o.SelfMulAdd(_, C),
                        l += d * (I.CrossVV(this.m_rB, C) + this.m_impulse.z)
                    } else
                        this.m_impulse.SetZero();
                    t.velocities[this.m_indexA].w = r,
                    t.velocities[this.m_indexB].w = l
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = t.velocities[this.m_indexA].v
                      , n = t.velocities[this.m_indexA].w
                      , r = t.velocities[this.m_indexB].v
                      , s = t.velocities[this.m_indexB].w
                      , a = this.m_invMassA
                      , o = this.m_invMassB
                      , l = this.m_invIA
                      , h = this.m_invIB;
                    if (this.m_frequencyHz > 0) {
                        var c = s - n
                          , u = -this.m_mass.ez.z * (c + this.m_bias + this.m_gamma * this.m_impulse.z);
                        this.m_impulse.z += u,
                        n -= l * u,
                        s += h * u;
                        var _ = I.SubVV(I.AddVCrossSV(r, s, this.m_rB, I.s_t0), I.AddVCrossSV(e, n, this.m_rA, I.s_t1), i.SolveVelocityConstraints_s_Cdot1)
                          , f = L.MulM33XY(this.m_mass, _.x, _.y, i.SolveVelocityConstraints_s_impulse1).SelfNeg();
                        this.m_impulse.x += f.x,
                        this.m_impulse.y += f.y;
                        var d = f;
                        e.SelfMulSub(a, d),
                        n -= l * I.CrossVV(this.m_rA, d),
                        r.SelfMulAdd(o, d),
                        s += h * I.CrossVV(this.m_rB, d)
                    } else {
                        _ = I.SubVV(I.AddVCrossSV(r, s, this.m_rB, I.s_t0), I.AddVCrossSV(e, n, this.m_rA, I.s_t1), i.SolveVelocityConstraints_s_Cdot1),
                        c = s - n;
                        var p = L.MulM33XYZ(this.m_mass, _.x, _.y, c, i.SolveVelocityConstraints_s_impulse).SelfNeg();
                        this.m_impulse.SelfAdd(p),
                        d = i.SolveVelocityConstraints_s_P.Set(p.x, p.y),
                        e.SelfMulSub(a, d),
                        n -= l * (I.CrossVV(this.m_rA, d) + p.z),
                        r.SelfMulAdd(o, d),
                        s += h * (I.CrossVV(this.m_rB, d) + p.z)
                    }
                    t.velocities[this.m_indexA].w = n,
                    t.velocities[this.m_indexB].w = s
                }
                ,
                i.prototype.SolvePositionConstraints = function(t) {
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(n)
                      , o = this.m_qB.SetAngle(s)
                      , c = this.m_invMassA
                      , u = this.m_invMassB
                      , _ = this.m_invIA
                      , f = this.m_invIB;
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var d = F.MulRV(a, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var p, y, v = F.MulRV(o, this.m_lalcB, this.m_rB), g = this.m_K;
                    if (g.ex.x = c + u + d.y * d.y * _ + v.y * v.y * f,
                    g.ey.x = -d.y * d.x * _ - v.y * v.x * f,
                    g.ez.x = -d.y * _ - v.y * f,
                    g.ex.y = g.ey.x,
                    g.ey.y = c + u + d.x * d.x * _ + v.x * v.x * f,
                    g.ez.y = d.x * _ + v.x * f,
                    g.ex.z = g.ez.x,
                    g.ey.z = g.ez.y,
                    g.ez.z = _ + f,
                    this.m_frequencyHz > 0) {
                        p = (x = I.SubVV(I.AddVV(r, v, I.s_t0), I.AddVV(e, d, I.s_t1), i.SolvePositionConstraints_s_C1)).Length(),
                        y = 0;
                        var A = g.Solve22(x.x, x.y, i.SolvePositionConstraints_s_P).SelfNeg();
                        e.SelfMulSub(c, A),
                        n -= _ * I.CrossVV(d, A),
                        r.SelfMulAdd(u, A),
                        s += f * I.CrossVV(v, A)
                    } else {
                        var x = I.SubVV(I.AddVV(r, v, I.s_t0), I.AddVV(e, d, I.s_t1), i.SolvePositionConstraints_s_C1)
                          , b = s - n - this.m_referenceAngle;
                        p = x.Length(),
                        y = m(b);
                        var C = g.Solve33(x.x, x.y, b, i.SolvePositionConstraints_s_impulse).SelfNeg();
                        A = i.SolvePositionConstraints_s_P.Set(C.x, C.y),
                        e.SelfMulSub(c, A),
                        n -= _ * (I.CrossVV(this.m_rA, A) + C.z),
                        r.SelfMulAdd(u, A),
                        s += f * (I.CrossVV(this.m_rB, A) + C.z)
                    }
                    return t.positions[this.m_indexA].a = n,
                    t.positions[this.m_indexB].a = s,
                    p <= l && y <= h
                }
                ,
                i.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * this.m_impulse.x,
                    e.y = t * this.m_impulse.y,
                    e
                }
                ,
                i.prototype.GetReactionTorque = function(t) {
                    return t * this.m_impulse.z
                }
                ,
                i.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                i.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                i.prototype.GetReferenceAngle = function() {
                    return this.m_referenceAngle
                }
                ,
                i.prototype.SetFrequency = function(t) {
                    this.m_frequencyHz = t
                }
                ,
                i.prototype.GetFrequency = function() {
                    return this.m_frequencyHz
                }
                ,
                i.prototype.SetDampingRatio = function(t) {
                    this.m_dampingRatio = t
                }
                ,
                i.prototype.GetDampingRatio = function() {
                    return this.m_dampingRatio
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2WeldJointDef = new b2WeldJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.referenceAngle = %.15f;\n", this.m_referenceAngle),
                    t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz),
                    t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.InitVelocityConstraints_s_P = new I,
                i.SolveVelocityConstraints_s_Cdot1 = new I,
                i.SolveVelocityConstraints_s_impulse1 = new I,
                i.SolveVelocityConstraints_s_impulse = new R,
                i.SolveVelocityConstraints_s_P = new I,
                i.SolvePositionConstraints_s_C1 = new I,
                i.SolvePositionConstraints_s_P = new I,
                i.SolvePositionConstraints_s_impulse = new R,
                i
            }
            )(mi)
              , ki = (function(e) {
                function i() {
                    var i = e.call(this, t.b2JointType.e_wheelJoint) || this;
                    return i.localAnchorA = new I(0,0),
                    i.localAnchorB = new I(0,0),
                    i.localAxisA = new I(1,0),
                    i.enableMotor = !1,
                    i.maxMotorTorque = 0,
                    i.motorSpeed = 0,
                    i.frequencyHz = 2,
                    i.dampingRatio = .7,
                    i
                }
                return ti(i, e),
                i.prototype.Initialize = function(t, e, i, n) {
                    this.bodyA = t,
                    this.bodyB = e,
                    this.bodyA.GetLocalPoint(i, this.localAnchorA),
                    this.bodyB.GetLocalPoint(i, this.localAnchorB),
                    this.bodyA.GetLocalVector(n, this.localAxisA)
                }
                ,
                i
            }
            )(pi)
              , Gi = (function(t) {
                function i(i) {
                    var n = t.call(this, i) || this;
                    return n.m_frequencyHz = 0,
                    n.m_dampingRatio = 0,
                    n.m_localAnchorA = new I,
                    n.m_localAnchorB = new I,
                    n.m_localXAxisA = new I,
                    n.m_localYAxisA = new I,
                    n.m_impulse = 0,
                    n.m_motorImpulse = 0,
                    n.m_springImpulse = 0,
                    n.m_maxMotorTorque = 0,
                    n.m_motorSpeed = 0,
                    n.m_enableMotor = !1,
                    n.m_indexA = 0,
                    n.m_indexB = 0,
                    n.m_localCenterA = new I,
                    n.m_localCenterB = new I,
                    n.m_invMassA = 0,
                    n.m_invMassB = 0,
                    n.m_invIA = 0,
                    n.m_invIB = 0,
                    n.m_ax = new I,
                    n.m_ay = new I,
                    n.m_sAx = 0,
                    n.m_sBx = 0,
                    n.m_sAy = 0,
                    n.m_sBy = 0,
                    n.m_mass = 0,
                    n.m_motorMass = 0,
                    n.m_springMass = 0,
                    n.m_bias = 0,
                    n.m_gamma = 0,
                    n.m_qA = new F,
                    n.m_qB = new F,
                    n.m_lalcA = new I,
                    n.m_lalcB = new I,
                    n.m_rA = new I,
                    n.m_rB = new I,
                    n.m_frequencyHz = e(i.frequencyHz, 2),
                    n.m_dampingRatio = e(i.dampingRatio, .7),
                    n.m_localAnchorA.Copy(e(i.localAnchorA, I.ZERO)),
                    n.m_localAnchorB.Copy(e(i.localAnchorB, I.ZERO)),
                    n.m_localXAxisA.Copy(e(i.localAxisA, I.UNITX)),
                    I.CrossOneV(n.m_localXAxisA, n.m_localYAxisA),
                    n.m_maxMotorTorque = e(i.maxMotorTorque, 0),
                    n.m_motorSpeed = e(i.motorSpeed, 0),
                    n.m_enableMotor = e(i.enableMotor, !1),
                    n.m_ax.SetZero(),
                    n.m_ay.SetZero(),
                    n
                }
                return ti(i, t),
                i.prototype.GetMotorSpeed = function() {
                    return this.m_motorSpeed
                }
                ,
                i.prototype.GetMaxMotorTorque = function() {
                    return this.m_maxMotorTorque
                }
                ,
                i.prototype.SetSpringFrequencyHz = function(t) {
                    this.m_frequencyHz = t
                }
                ,
                i.prototype.GetSpringFrequencyHz = function() {
                    return this.m_frequencyHz
                }
                ,
                i.prototype.SetSpringDampingRatio = function(t) {
                    this.m_dampingRatio = t
                }
                ,
                i.prototype.GetSpringDampingRatio = function() {
                    return this.m_dampingRatio
                }
                ,
                i.prototype.InitVelocityConstraints = function(t) {
                    this.m_indexA = this.m_bodyA.m_islandIndex,
                    this.m_indexB = this.m_bodyB.m_islandIndex,
                    this.m_localCenterA.Copy(this.m_bodyA.m_sweep.localCenter),
                    this.m_localCenterB.Copy(this.m_bodyB.m_sweep.localCenter),
                    this.m_invMassA = this.m_bodyA.m_invMass,
                    this.m_invMassB = this.m_bodyB.m_invMass,
                    this.m_invIA = this.m_bodyA.m_invI,
                    this.m_invIB = this.m_bodyB.m_invI;
                    var e = this.m_invMassA
                      , n = this.m_invMassB
                      , r = this.m_invIA
                      , a = this.m_invIB
                      , o = t.positions[this.m_indexA].c
                      , l = t.positions[this.m_indexA].a
                      , h = t.velocities[this.m_indexA].v
                      , c = t.velocities[this.m_indexA].w
                      , u = t.positions[this.m_indexB].c
                      , _ = t.positions[this.m_indexB].a
                      , f = t.velocities[this.m_indexB].v
                      , d = t.velocities[this.m_indexB].w
                      , p = this.m_qA.SetAngle(l)
                      , m = this.m_qB.SetAngle(_);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var y = F.MulRV(p, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var v = F.MulRV(m, this.m_lalcB, this.m_rB)
                      , g = I.SubVV(I.AddVV(u, v, I.s_t0), I.AddVV(o, y, I.s_t1), i.InitVelocityConstraints_s_d);
                    if (F.MulRV(p, this.m_localYAxisA, this.m_ay),
                    this.m_sAy = I.CrossVV(I.AddVV(g, y, I.s_t0), this.m_ay),
                    this.m_sBy = I.CrossVV(v, this.m_ay),
                    this.m_mass = e + n + r * this.m_sAy * this.m_sAy + a * this.m_sBy * this.m_sBy,
                    this.m_mass > 0 && (this.m_mass = 1 / this.m_mass),
                    this.m_springMass = 0,
                    this.m_bias = 0,
                    this.m_gamma = 0,
                    this.m_frequencyHz > 0) {
                        F.MulRV(p, this.m_localXAxisA, this.m_ax),
                        this.m_sAx = I.CrossVV(I.AddVV(g, y, I.s_t0), this.m_ax),
                        this.m_sBx = I.CrossVV(v, this.m_ax);
                        var A = e + n + r * this.m_sAx * this.m_sAx + a * this.m_sBx * this.m_sBx;
                        if (A > 0) {
                            this.m_springMass = 1 / A;
                            var x = I.DotVV(g, this.m_ax)
                              , b = 2 * s * this.m_frequencyHz
                              , C = 2 * this.m_springMass * this.m_dampingRatio * b
                              , T = this.m_springMass * b * b
                              , S = t.step.dt;
                            this.m_gamma = S * (C + S * T),
                            this.m_gamma > 0 && (this.m_gamma = 1 / this.m_gamma),
                            this.m_bias = x * S * T * this.m_gamma,
                            this.m_springMass = A + this.m_gamma,
                            this.m_springMass > 0 && (this.m_springMass = 1 / this.m_springMass)
                        }
                    } else
                        this.m_springImpulse = 0;
                    if (this.m_enableMotor ? (this.m_motorMass = r + a,
                    this.m_motorMass > 0 && (this.m_motorMass = 1 / this.m_motorMass)) : (this.m_motorMass = 0,
                    this.m_motorImpulse = 0),
                    t.step.warmStarting) {
                        this.m_impulse *= t.step.dtRatio,
                        this.m_springImpulse *= t.step.dtRatio,
                        this.m_motorImpulse *= t.step.dtRatio;
                        var w = I.AddVV(I.MulSV(this.m_impulse, this.m_ay, I.s_t0), I.MulSV(this.m_springImpulse, this.m_ax, I.s_t1), i.InitVelocityConstraints_s_P)
                          , E = this.m_impulse * this.m_sAy + this.m_springImpulse * this.m_sAx + this.m_motorImpulse
                          , M = this.m_impulse * this.m_sBy + this.m_springImpulse * this.m_sBx + this.m_motorImpulse;
                        h.SelfMulSub(this.m_invMassA, w),
                        c -= this.m_invIA * E,
                        f.SelfMulAdd(this.m_invMassB, w),
                        d += this.m_invIB * M
                    } else
                        this.m_impulse = 0,
                        this.m_springImpulse = 0,
                        this.m_motorImpulse = 0;
                    t.velocities[this.m_indexA].w = c,
                    t.velocities[this.m_indexB].w = d
                }
                ,
                i.prototype.SolveVelocityConstraints = function(t) {
                    var e = this.m_invMassA
                      , n = this.m_invMassB
                      , r = this.m_invIA
                      , s = this.m_invIB
                      , a = t.velocities[this.m_indexA].v
                      , o = t.velocities[this.m_indexA].w
                      , l = t.velocities[this.m_indexB].v
                      , h = t.velocities[this.m_indexB].w
                      , c = I.DotVV(this.m_ax, I.SubVV(l, a, I.s_t0)) + this.m_sBx * h - this.m_sAx * o
                      , u = -this.m_springMass * (c + this.m_bias + this.m_gamma * this.m_springImpulse);
                    this.m_springImpulse += u;
                    var _ = I.MulSV(u, this.m_ax, i.SolveVelocityConstraints_s_P)
                      , f = u * this.m_sAx
                      , d = u * this.m_sBx;
                    a.SelfMulSub(e, _),
                    o -= r * f,
                    l.SelfMulAdd(n, _),
                    c = (h += s * d) - o - this.m_motorSpeed,
                    u = -this.m_motorMass * c;
                    var p = this.m_motorImpulse
                      , m = t.step.dt * this.m_maxMotorTorque;
                    this.m_motorImpulse = g(this.m_motorImpulse + u, -m, m),
                    o -= r * (u = this.m_motorImpulse - p),
                    h += s * u,
                    c = I.DotVV(this.m_ay, I.SubVV(l, a, I.s_t0)) + this.m_sBy * h - this.m_sAy * o,
                    u = -this.m_mass * c,
                    this.m_impulse += u,
                    _ = I.MulSV(u, this.m_ay, i.SolveVelocityConstraints_s_P),
                    f = u * this.m_sAy,
                    d = u * this.m_sBy,
                    a.SelfMulSub(e, _),
                    o -= r * f,
                    l.SelfMulAdd(n, _),
                    h += s * d,
                    t.velocities[this.m_indexA].w = o,
                    t.velocities[this.m_indexB].w = h
                }
                ,
                i.prototype.SolvePositionConstraints = function(t) {
                    var e = t.positions[this.m_indexA].c
                      , n = t.positions[this.m_indexA].a
                      , r = t.positions[this.m_indexB].c
                      , s = t.positions[this.m_indexB].a
                      , a = this.m_qA.SetAngle(n)
                      , o = this.m_qB.SetAngle(s);
                    I.SubVV(this.m_localAnchorA, this.m_localCenterA, this.m_lalcA);
                    var h = F.MulRV(a, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, this.m_localCenterB, this.m_lalcB);
                    var c, u = F.MulRV(o, this.m_lalcB, this.m_rB), _ = I.AddVV(I.SubVV(r, e, I.s_t0), I.SubVV(u, h, I.s_t1), i.SolvePositionConstraints_s_d), f = F.MulRV(a, this.m_localYAxisA, this.m_ay), d = I.CrossVV(I.AddVV(_, h, I.s_t0), f), p = I.CrossVV(u, f), y = I.DotVV(_, this.m_ay), v = this.m_invMassA + this.m_invMassB + this.m_invIA * this.m_sAy * this.m_sAy + this.m_invIB * this.m_sBy * this.m_sBy;
                    c = 0 !== v ? -y / v : 0;
                    var g = I.MulSV(c, f, i.SolvePositionConstraints_s_P)
                      , A = c * d
                      , x = c * p;
                    return e.SelfMulSub(this.m_invMassA, g),
                    n -= this.m_invIA * A,
                    r.SelfMulAdd(this.m_invMassB, g),
                    s += this.m_invIB * x,
                    t.positions[this.m_indexA].a = n,
                    t.positions[this.m_indexB].a = s,
                    m(y) <= l
                }
                ,
                i.prototype.GetDefinition = function(t) {
                    return t
                }
                ,
                i.prototype.GetAnchorA = function(t) {
                    return this.m_bodyA.GetWorldPoint(this.m_localAnchorA, t)
                }
                ,
                i.prototype.GetAnchorB = function(t) {
                    return this.m_bodyB.GetWorldPoint(this.m_localAnchorB, t)
                }
                ,
                i.prototype.GetReactionForce = function(t, e) {
                    return e.x = t * (this.m_impulse * this.m_ay.x + this.m_springImpulse * this.m_ax.x),
                    e.y = t * (this.m_impulse * this.m_ay.y + this.m_springImpulse * this.m_ax.y),
                    e
                }
                ,
                i.prototype.GetReactionTorque = function(t) {
                    return t * this.m_motorImpulse
                }
                ,
                i.prototype.GetLocalAnchorA = function() {
                    return this.m_localAnchorA
                }
                ,
                i.prototype.GetLocalAnchorB = function() {
                    return this.m_localAnchorB
                }
                ,
                i.prototype.GetLocalAxisA = function() {
                    return this.m_localXAxisA
                }
                ,
                i.prototype.GetJointTranslation = function() {
                    return this.GetPrismaticJointTranslation()
                }
                ,
                i.prototype.GetJointLinearSpeed = function() {
                    return this.GetPrismaticJointSpeed()
                }
                ,
                i.prototype.GetJointAngle = function() {
                    return this.GetRevoluteJointAngle()
                }
                ,
                i.prototype.GetJointAngularSpeed = function() {
                    return this.GetRevoluteJointSpeed()
                }
                ,
                i.prototype.GetPrismaticJointTranslation = function() {
                    var t = this.m_bodyA
                      , e = this.m_bodyB
                      , i = t.GetWorldPoint(this.m_localAnchorA, new I)
                      , n = e.GetWorldPoint(this.m_localAnchorB, new I)
                      , r = I.SubVV(n, i, new I)
                      , s = t.GetWorldVector(this.m_localXAxisA, new I);
                    return I.DotVV(r, s)
                }
                ,
                i.prototype.GetPrismaticJointSpeed = function() {
                    var t = this.m_bodyA
                      , e = this.m_bodyB;
                    I.SubVV(this.m_localAnchorA, t.m_sweep.localCenter, this.m_lalcA);
                    var i = F.MulRV(t.m_xf.q, this.m_lalcA, this.m_rA);
                    I.SubVV(this.m_localAnchorB, e.m_sweep.localCenter, this.m_lalcB);
                    var n = F.MulRV(e.m_xf.q, this.m_lalcB, this.m_rB)
                      , r = I.AddVV(t.m_sweep.c, i, I.s_t0)
                      , s = I.AddVV(e.m_sweep.c, n, I.s_t1)
                      , a = I.SubVV(s, r, I.s_t2)
                      , o = t.GetWorldVector(this.m_localXAxisA, new I)
                      , l = t.m_linearVelocity
                      , h = e.m_linearVelocity
                      , c = t.m_angularVelocity
                      , u = e.m_angularVelocity;
                    return I.DotVV(a, I.CrossSV(c, o, I.s_t0)) + I.DotVV(o, I.SubVV(I.AddVCrossSV(h, u, n, I.s_t0), I.AddVCrossSV(l, c, i, I.s_t1), I.s_t0))
                }
                ,
                i.prototype.GetRevoluteJointAngle = function() {
                    return this.m_bodyB.m_sweep.a - this.m_bodyA.m_sweep.a
                }
                ,
                i.prototype.GetRevoluteJointSpeed = function() {
                    var t = this.m_bodyA.m_angularVelocity;
                    return this.m_bodyB.m_angularVelocity - t
                }
                ,
                i.prototype.IsMotorEnabled = function() {
                    return this.m_enableMotor
                }
                ,
                i.prototype.EnableMotor = function(t) {
                    t !== this.m_enableMotor && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_enableMotor = t)
                }
                ,
                i.prototype.SetMotorSpeed = function(t) {
                    t !== this.m_motorSpeed && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_motorSpeed = t)
                }
                ,
                i.prototype.SetMaxMotorTorque = function(t) {
                    t !== this.m_maxMotorTorque && (this.m_bodyA.SetAwake(!0),
                    this.m_bodyB.SetAwake(!0),
                    this.m_maxMotorTorque = t)
                }
                ,
                i.prototype.GetMotorTorque = function(t) {
                    return t * this.m_motorImpulse
                }
                ,
                i.prototype.Dump = function(t) {
                    var e = this.m_bodyA.m_islandIndex
                      , i = this.m_bodyB.m_islandIndex;
                    t("  const jd: b2WheelJointDef = new b2WheelJointDef();\n"),
                    t("  jd.bodyA = bodies[%d];\n", e),
                    t("  jd.bodyB = bodies[%d];\n", i),
                    t("  jd.collideConnected = %s;\n", this.m_collideConnected ? "true" : "false"),
                    t("  jd.localAnchorA.Set(%.15f, %.15f);\n", this.m_localAnchorA.x, this.m_localAnchorA.y),
                    t("  jd.localAnchorB.Set(%.15f, %.15f);\n", this.m_localAnchorB.x, this.m_localAnchorB.y),
                    t("  jd.localAxisA.Set(%.15f, %.15f);\n", this.m_localXAxisA.x, this.m_localXAxisA.y),
                    t("  jd.enableMotor = %s;\n", this.m_enableMotor ? "true" : "false"),
                    t("  jd.motorSpeed = %.15f;\n", this.m_motorSpeed),
                    t("  jd.maxMotorTorque = %.15f;\n", this.m_maxMotorTorque),
                    t("  jd.frequencyHz = %.15f;\n", this.m_frequencyHz),
                    t("  jd.dampingRatio = %.15f;\n", this.m_dampingRatio),
                    t("  joints[%d] = this.m_world.CreateJoint(jd);\n", this.m_index)
                }
                ,
                i.InitVelocityConstraints_s_d = new I,
                i.InitVelocityConstraints_s_P = new I,
                i.SolveVelocityConstraints_s_P = new I,
                i.SolvePositionConstraints_s_d = new I,
                i.SolvePositionConstraints_s_P = new I,
                i
            }
            )(mi);
            function Ui(t, e) {
                return T(t * e)
            }
            function zi(t, e) {
                return t > e ? t : e
            }
            var Hi, Wi = function(t) {
                this.prev = null,
                this.next = null,
                this.contact = t
            }, ji = (function() {
                function t() {
                    this.m_islandFlag = !1,
                    this.m_touchingFlag = !1,
                    this.m_enabledFlag = !1,
                    this.m_filterFlag = !1,
                    this.m_bulletHitFlag = !1,
                    this.m_toiFlag = !1,
                    this.m_prev = null,
                    this.m_next = null,
                    this.m_indexA = 0,
                    this.m_indexB = 0,
                    this.m_manifold = new gt,
                    this.m_toiCount = 0,
                    this.m_toi = 0,
                    this.m_friction = 0,
                    this.m_restitution = 0,
                    this.m_tangentSpeed = 0,
                    this.m_oldManifold = new gt,
                    this.m_nodeA = new Wi(this),
                    this.m_nodeB = new Wi(this)
                }
                return t.prototype.GetManifold = function() {
                    return this.m_manifold
                }
                ,
                t.prototype.GetWorldManifold = function(t) {
                    var e = this.m_fixtureA.GetBody()
                      , i = this.m_fixtureB.GetBody()
                      , n = this.m_fixtureA.GetShape()
                      , r = this.m_fixtureB.GetShape();
                    t.Initialize(this.m_manifold, e.GetTransform(), n.m_radius, i.GetTransform(), r.m_radius)
                }
                ,
                t.prototype.IsTouching = function() {
                    return this.m_touchingFlag
                }
                ,
                t.prototype.SetEnabled = function(t) {
                    this.m_enabledFlag = t
                }
                ,
                t.prototype.IsEnabled = function() {
                    return this.m_enabledFlag
                }
                ,
                t.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                t.prototype.GetFixtureA = function() {
                    return this.m_fixtureA
                }
                ,
                t.prototype.GetChildIndexA = function() {
                    return this.m_indexA
                }
                ,
                t.prototype.GetFixtureB = function() {
                    return this.m_fixtureB
                }
                ,
                t.prototype.GetChildIndexB = function() {
                    return this.m_indexB
                }
                ,
                t.prototype.FlagForFiltering = function() {
                    this.m_filterFlag = !0
                }
                ,
                t.prototype.SetFriction = function(t) {
                    this.m_friction = t
                }
                ,
                t.prototype.GetFriction = function() {
                    return this.m_friction
                }
                ,
                t.prototype.ResetFriction = function() {
                    this.m_friction = Ui(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction)
                }
                ,
                t.prototype.SetRestitution = function(t) {
                    this.m_restitution = t
                }
                ,
                t.prototype.GetRestitution = function() {
                    return this.m_restitution
                }
                ,
                t.prototype.ResetRestitution = function() {
                    this.m_restitution = zi(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution)
                }
                ,
                t.prototype.SetTangentSpeed = function(t) {
                    this.m_tangentSpeed = t
                }
                ,
                t.prototype.GetTangentSpeed = function() {
                    return this.m_tangentSpeed
                }
                ,
                t.prototype.Reset = function(t, e, i, n) {
                    this.m_islandFlag = !1,
                    this.m_touchingFlag = !1,
                    this.m_enabledFlag = !0,
                    this.m_filterFlag = !1,
                    this.m_bulletHitFlag = !1,
                    this.m_toiFlag = !1,
                    this.m_fixtureA = t,
                    this.m_fixtureB = i,
                    this.m_indexA = e,
                    this.m_indexB = n,
                    this.m_manifold.pointCount = 0,
                    this.m_prev = null,
                    this.m_next = null,
                    delete this.m_nodeA.contact,
                    this.m_nodeA.prev = null,
                    this.m_nodeA.next = null,
                    delete this.m_nodeA.other,
                    delete this.m_nodeB.contact,
                    this.m_nodeB.prev = null,
                    this.m_nodeB.next = null,
                    delete this.m_nodeB.other,
                    this.m_toiCount = 0,
                    this.m_friction = Ui(this.m_fixtureA.m_friction, this.m_fixtureB.m_friction),
                    this.m_restitution = zi(this.m_fixtureA.m_restitution, this.m_fixtureB.m_restitution)
                }
                ,
                t.prototype.Update = function(t) {
                    var e = this.m_oldManifold;
                    this.m_oldManifold = this.m_manifold,
                    this.m_manifold = e,
                    this.m_enabledFlag = !0;
                    var i = !1
                      , n = this.m_touchingFlag
                      , r = this.m_fixtureA.IsSensor()
                      , s = this.m_fixtureB.IsSensor()
                      , a = r || s
                      , o = this.m_fixtureA.GetBody()
                      , l = this.m_fixtureB.GetBody()
                      , h = o.GetTransform()
                      , c = l.GetTransform();
                    if (a) {
                        var u = this.m_fixtureA.GetShape()
                          , _ = this.m_fixtureB.GetShape();
                        i = Bt(u, this.m_indexA, _, this.m_indexB, h, c),
                        this.m_manifold.pointCount = 0
                    } else {
                        this.Evaluate(this.m_manifold, h, c),
                        i = this.m_manifold.pointCount > 0;
                        for (var f = 0; f < this.m_manifold.pointCount; ++f) {
                            var d = this.m_manifold.points[f];
                            d.normalImpulse = 0,
                            d.tangentImpulse = 0;
                            for (var p = d.id, m = 0; m < this.m_oldManifold.pointCount; ++m) {
                                var y = this.m_oldManifold.points[m];
                                if (y.id.key === p.key) {
                                    d.normalImpulse = y.normalImpulse,
                                    d.tangentImpulse = y.tangentImpulse;
                                    break
                                }
                            }
                        }
                        i !== n && (o.SetAwake(!0),
                        l.SetAwake(!0))
                    }
                    this.m_touchingFlag = i,
                    !n && i && t && t.BeginContact(this),
                    n && !i && t && t.EndContact(this),
                    !a && i && t && t.PreSolve(this, this.m_oldManifold)
                }
                ,
                t.prototype.ComputeTOI = function(e, i) {
                    var n = t.ComputeTOI_s_input;
                    n.proxyA.SetShape(this.m_fixtureA.GetShape(), this.m_indexA),
                    n.proxyB.SetShape(this.m_fixtureB.GetShape(), this.m_indexB),
                    n.sweepA.Copy(e),
                    n.sweepB.Copy(i),
                    n.tMax = l;
                    var r = t.ComputeTOI_s_output;
                    return re(r, n),
                    r.t
                }
                ,
                t.ComputeTOI_s_input = new jt,
                t.ComputeTOI_s_output = new Yt,
                t
            }
            )(), Xi = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, e, i) {
                    oe(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                }
                ,
                e
            }
            )(ji), Yi = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, e, i) {
                    Le(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                }
                ,
                e
            }
            )(ji), qi = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, e, i) {
                    ue(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                }
                ,
                e
            }
            )(ji), Ji = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, e, i) {
                    We(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                }
                ,
                e
            }
            )(ji), Zi = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, e, i) {
                    Je(t, this.m_fixtureA.GetShape(), e, this.m_fixtureB.GetShape(), i)
                }
                ,
                e
            }
            )(ji), Ki = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, i, n) {
                    var r = this.m_fixtureA.GetShape()
                      , s = this.m_fixtureB.GetShape()
                      , a = r
                      , o = e.Evaluate_s_edge;
                    a.GetChildEdge(o, this.m_indexA),
                    We(t, o, i, s, n)
                }
                ,
                e.Evaluate_s_edge = new ri,
                e
            }
            )(ji), Qi = (function(t) {
                function e() {
                    return t.call(this) || this
                }
                return ti(e, t),
                e.Create = function() {
                    return new e
                }
                ,
                e.Destroy = function() {}
                ,
                e.prototype.Reset = function(e, i, n, r) {
                    t.prototype.Reset.call(this, e, i, n, r)
                }
                ,
                e.prototype.Evaluate = function(t, i, n) {
                    var r = this.m_fixtureA.GetShape()
                      , s = this.m_fixtureB.GetShape()
                      , a = r
                      , o = e.Evaluate_s_edge;
                    a.GetChildEdge(o, this.m_indexA),
                    Je(t, o, i, s, n)
                }
                ,
                e.Evaluate_s_edge = new ri,
                e
            }
            )(ji), $i = function() {
                this.createFcn = null,
                this.destroyFcn = null,
                this.primary = !1
            }, tn = (function() {
                function e(t) {
                    this.m_allocator = null,
                    this.m_allocator = t,
                    this.InitializeRegisters()
                }
                return e.prototype.AddType = function(t, e, i, n) {
                    var r = this
                      , s = d(256, (function() {
                        return t(r.m_allocator)
                    }
                    ));
                    function a(e) {
                        return s.pop() || t(e)
                    }
                    function o(t) {
                        s.push(t)
                    }
                    this.m_registers[i][n].createFcn = a,
                    this.m_registers[i][n].destroyFcn = o,
                    this.m_registers[i][n].primary = !0,
                    i !== n && (this.m_registers[n][i].createFcn = a,
                    this.m_registers[n][i].destroyFcn = o,
                    this.m_registers[n][i].primary = !1)
                }
                ,
                e.prototype.InitializeRegisters = function() {
                    this.m_registers = [];
                    for (var e = 0; e < t.b2ShapeType.e_shapeTypeCount; e++) {
                        this.m_registers[e] = [];
                        for (var i = 0; i < t.b2ShapeType.e_shapeTypeCount; i++)
                            this.m_registers[e][i] = new $i
                    }
                    this.AddType(Xi.Create, Xi.Destroy, t.b2ShapeType.e_circleShape, t.b2ShapeType.e_circleShape),
                    this.AddType(qi.Create, qi.Destroy, t.b2ShapeType.e_polygonShape, t.b2ShapeType.e_circleShape),
                    this.AddType(Yi.Create, Yi.Destroy, t.b2ShapeType.e_polygonShape, t.b2ShapeType.e_polygonShape),
                    this.AddType(Ji.Create, Ji.Destroy, t.b2ShapeType.e_edgeShape, t.b2ShapeType.e_circleShape),
                    this.AddType(Zi.Create, Zi.Destroy, t.b2ShapeType.e_edgeShape, t.b2ShapeType.e_polygonShape),
                    this.AddType(Ki.Create, Ki.Destroy, t.b2ShapeType.e_chainShape, t.b2ShapeType.e_circleShape),
                    this.AddType(Qi.Create, Qi.Destroy, t.b2ShapeType.e_chainShape, t.b2ShapeType.e_polygonShape)
                }
                ,
                e.prototype.Create = function(t, e, i, n) {
                    var r = t.GetType()
                      , s = i.GetType()
                      , a = this.m_registers[r][s];
                    if (a.createFcn) {
                        var o = a.createFcn(this.m_allocator);
                        return a.primary ? o.Reset(t, e, i, n) : o.Reset(i, n, t, e),
                        o
                    }
                    return null
                }
                ,
                e.prototype.Destroy = function(t) {
                    var e = t.m_fixtureA
                      , i = t.m_fixtureB;
                    t.m_manifold.pointCount > 0 && !e.IsSensor() && !i.IsSensor() && (e.GetBody().SetAwake(!0),
                    i.GetBody().SetAwake(!0));
                    var n = e.GetType()
                      , r = i.GetType()
                      , s = this.m_registers[n][r];
                    s.destroyFcn && s.destroyFcn(t, this.m_allocator)
                }
                ,
                e
            }
            )(), en = (function() {
                function t() {}
                return t.prototype.SayGoodbyeJoint = function() {}
                ,
                t.prototype.SayGoodbyeFixture = function() {}
                ,
                t.prototype.SayGoodbyeParticleGroup = function() {}
                ,
                t.prototype.SayGoodbyeParticle = function() {}
                ,
                t
            }
            )(), nn = (function() {
                function e() {}
                return e.prototype.ShouldCollide = function(e, i) {
                    var n = e.GetBody()
                      , r = i.GetBody();
                    if (r.GetType() === t.b2BodyType.b2_staticBody && n.GetType() === t.b2BodyType.b2_staticBody)
                        return !1;
                    if (!r.ShouldCollideConnected(n))
                        return !1;
                    var s = e.GetFilterData()
                      , a = i.GetFilterData();
                    return s.groupIndex === a.groupIndex && 0 !== s.groupIndex ? s.groupIndex > 0 : 0 != (s.maskBits & a.categoryBits) && 0 != (s.categoryBits & a.maskBits)
                }
                ,
                e.prototype.ShouldCollideFixtureParticle = function() {
                    return !0
                }
                ,
                e.prototype.ShouldCollideParticleParticle = function() {
                    return !0
                }
                ,
                e.b2_defaultFilter = new e,
                e
            }
            )(), rn = function() {
                this.normalImpulses = p(a),
                this.tangentImpulses = p(a),
                this.count = 0
            }, sn = (function() {
                function t() {}
                return t.prototype.BeginContact = function() {}
                ,
                t.prototype.EndContact = function() {}
                ,
                t.prototype.BeginContactFixtureParticle = function() {}
                ,
                t.prototype.EndContactFixtureParticle = function() {}
                ,
                t.prototype.BeginContactParticleParticle = function() {}
                ,
                t.prototype.EndContactParticleParticle = function() {}
                ,
                t.prototype.PreSolve = function() {}
                ,
                t.prototype.PostSolve = function() {}
                ,
                t.b2_defaultListener = new t,
                t
            }
            )(), an = (function() {
                function t() {}
                return t.prototype.ReportFixture = function() {
                    return !0
                }
                ,
                t.prototype.ReportParticle = function() {
                    return !1
                }
                ,
                t.prototype.ShouldQueryParticleSystem = function() {
                    return !0
                }
                ,
                t
            }
            )(), on = (function() {
                function t() {}
                return t.prototype.ReportFixture = function(t, e, i, n) {
                    return n
                }
                ,
                t.prototype.ReportParticle = function() {
                    return 0
                }
                ,
                t.prototype.ShouldQueryParticleSystem = function() {
                    return !0
                }
                ,
                t
            }
            )(), ln = (function() {
                function e() {
                    this.m_broadPhase = new Lt,
                    this.m_contactList = null,
                    this.m_contactCount = 0,
                    this.m_contactFilter = nn.b2_defaultFilter,
                    this.m_contactListener = sn.b2_defaultListener,
                    this.m_allocator = null,
                    this.m_contactFactory = new tn(this.m_allocator)
                }
                return e.prototype.AddPair = function(t, e) {
                    var i = t.fixture
                      , n = e.fixture
                      , r = t.childIndex
                      , s = e.childIndex
                      , a = i.GetBody()
                      , o = n.GetBody();
                    if (a !== o) {
                        for (var l = o.GetContactList(); l; ) {
                            if (l.other === a) {
                                var h = l.contact.GetFixtureA()
                                  , c = l.contact.GetFixtureB()
                                  , u = l.contact.GetChildIndexA()
                                  , _ = l.contact.GetChildIndexB();
                                if (h === i && c === n && u === r && _ === s)
                                    return;
                                if (h === n && c === i && u === s && _ === r)
                                    return
                            }
                            l = l.next
                        }
                        if (!this.m_contactFilter || this.m_contactFilter.ShouldCollide(i, n)) {
                            var f = this.m_contactFactory.Create(i, r, n, s);
                            null !== f && (i = f.GetFixtureA(),
                            n = f.GetFixtureB(),
                            r = f.GetChildIndexA(),
                            s = f.GetChildIndexB(),
                            a = i.m_body,
                            o = n.m_body,
                            f.m_prev = null,
                            f.m_next = this.m_contactList,
                            null !== this.m_contactList && (this.m_contactList.m_prev = f),
                            this.m_contactList = f,
                            f.m_nodeA.contact = f,
                            f.m_nodeA.other = o,
                            f.m_nodeA.prev = null,
                            f.m_nodeA.next = a.m_contactList,
                            null !== a.m_contactList && (a.m_contactList.prev = f.m_nodeA),
                            a.m_contactList = f.m_nodeA,
                            f.m_nodeB.contact = f,
                            f.m_nodeB.other = a,
                            f.m_nodeB.prev = null,
                            f.m_nodeB.next = o.m_contactList,
                            null !== o.m_contactList && (o.m_contactList.prev = f.m_nodeB),
                            o.m_contactList = f.m_nodeB,
                            i.IsSensor() || n.IsSensor() || (a.SetAwake(!0),
                            o.SetAwake(!0)),
                            ++this.m_contactCount)
                        }
                    }
                }
                ,
                e.prototype.FindNewContacts = function() {
                    var t = this;
                    this.m_broadPhase.UpdatePairs((function(e, i) {
                        t.AddPair(e, i)
                    }
                    ))
                }
                ,
                e.prototype.Destroy = function(t) {
                    var e = t.GetFixtureA()
                      , i = t.GetFixtureB()
                      , n = e.GetBody()
                      , r = i.GetBody();
                    this.m_contactListener && t.IsTouching() && this.m_contactListener.EndContact(t),
                    t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    t === this.m_contactList && (this.m_contactList = t.m_next),
                    t.m_nodeA.prev && (t.m_nodeA.prev.next = t.m_nodeA.next),
                    t.m_nodeA.next && (t.m_nodeA.next.prev = t.m_nodeA.prev),
                    t.m_nodeA === n.m_contactList && (n.m_contactList = t.m_nodeA.next),
                    t.m_nodeB.prev && (t.m_nodeB.prev.next = t.m_nodeB.next),
                    t.m_nodeB.next && (t.m_nodeB.next.prev = t.m_nodeB.prev),
                    t.m_nodeB === r.m_contactList && (r.m_contactList = t.m_nodeB.next),
                    this.m_contactFactory.Destroy(t),
                    --this.m_contactCount
                }
                ,
                e.prototype.Collide = function() {
                    for (var e = this.m_contactList; e; ) {
                        var i = e.GetFixtureA()
                          , n = e.GetFixtureB()
                          , r = e.GetChildIndexA()
                          , s = e.GetChildIndexB()
                          , a = i.GetBody()
                          , o = n.GetBody();
                        if (e.m_filterFlag) {
                            if (this.m_contactFilter && !this.m_contactFilter.ShouldCollide(i, n)) {
                                e = (c = e).m_next,
                                this.Destroy(c);
                                continue
                            }
                            e.m_filterFlag = !1
                        }
                        var l = a.IsAwake() && a.m_type !== t.b2BodyType.b2_staticBody
                          , h = o.IsAwake() && o.m_type !== t.b2BodyType.b2_staticBody;
                        if (l || h) {
                            var c, u = i.m_proxies[r].treeNode, _ = n.m_proxies[s].treeNode;
                            St(u.aabb, _.aabb) ? (e.Update(this.m_contactListener),
                            e = e.m_next) : (e = (c = e).m_next,
                            this.Destroy(c))
                        } else
                            e = e.m_next
                    }
                }
                ,
                e
            }
            )(), hn = (function() {
                function t() {
                    this.step = 0,
                    this.collide = 0,
                    this.solve = 0,
                    this.solveInit = 0,
                    this.solveVelocity = 0,
                    this.solvePosition = 0,
                    this.broadphase = 0,
                    this.solveTOI = 0
                }
                return t.prototype.Reset = function() {
                    return this.step = 0,
                    this.collide = 0,
                    this.solve = 0,
                    this.solveInit = 0,
                    this.solveVelocity = 0,
                    this.solvePosition = 0,
                    this.broadphase = 0,
                    this.solveTOI = 0,
                    this
                }
                ,
                t
            }
            )(), cn = (function() {
                function t() {
                    this.dt = 0,
                    this.inv_dt = 0,
                    this.dtRatio = 0,
                    this.velocityIterations = 0,
                    this.positionIterations = 0,
                    this.particleIterations = 0,
                    this.warmStarting = !1
                }
                return t.prototype.Copy = function(t) {
                    return this.dt = t.dt,
                    this.inv_dt = t.inv_dt,
                    this.dtRatio = t.dtRatio,
                    this.positionIterations = t.positionIterations,
                    this.velocityIterations = t.velocityIterations,
                    this.particleIterations = t.particleIterations,
                    this.warmStarting = t.warmStarting,
                    this
                }
                ,
                t
            }
            )(), un = (function() {
                function t() {
                    this.c = new I,
                    this.a = 0
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t
            }
            )(), _n = (function() {
                function t() {
                    this.v = new I,
                    this.w = 0
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t
            }
            )(), fn = function() {
                this.step = new cn
            }, dn = (function() {
                function t() {
                    this.rA = new I,
                    this.rB = new I,
                    this.normalImpulse = 0,
                    this.tangentImpulse = 0,
                    this.normalMass = 0,
                    this.tangentMass = 0,
                    this.velocityBias = 0
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t
            }
            )(), pn = (function() {
                function t() {
                    this.points = dn.MakeArray(a),
                    this.normal = new I,
                    this.tangent = new I,
                    this.normalMass = new O,
                    this.K = new O,
                    this.indexA = 0,
                    this.indexB = 0,
                    this.invMassA = 0,
                    this.invMassB = 0,
                    this.invIA = 0,
                    this.invIB = 0,
                    this.friction = 0,
                    this.restitution = 0,
                    this.tangentSpeed = 0,
                    this.pointCount = 0,
                    this.contactIndex = 0
                }
                return t.MakeArray = function(e) {
                    return d(e, (function() {
                        return new t
                    }
                    ))
                }
                ,
                t
            }
            )(), mn = (function() {
                function e() {
                    this.localPoints = I.MakeArray(a),
                    this.localNormal = new I,
                    this.localPoint = new I,
                    this.indexA = 0,
                    this.indexB = 0,
                    this.invMassA = 0,
                    this.invMassB = 0,
                    this.localCenterA = new I,
                    this.localCenterB = new I,
                    this.invIA = 0,
                    this.invIB = 0,
                    this.type = t.b2ManifoldType.e_unknown,
                    this.radiusA = 0,
                    this.radiusB = 0,
                    this.pointCount = 0
                }
                return e.MakeArray = function(t) {
                    return d(t, (function() {
                        return new e
                    }
                    ))
                }
                ,
                e
            }
            )(), yn = function() {
                this.step = new cn,
                this.count = 0,
                this.allocator = null
            }, vn = (function() {
                function e() {
                    this.normal = new I,
                    this.point = new I,
                    this.separation = 0
                }
                return e.prototype.Initialize = function(i, n, r, s) {
                    var a = e.Initialize_s_pointA
                      , o = e.Initialize_s_pointB
                      , l = e.Initialize_s_planePoint
                      , h = e.Initialize_s_clipPoint;
                    switch (i.type) {
                    case t.b2ManifoldType.e_circles:
                        V.MulXV(n, i.localPoint, a),
                        V.MulXV(r, i.localPoints[0], o),
                        I.SubVV(o, a, this.normal).SelfNormalize(),
                        I.MidVV(a, o, this.point),
                        this.separation = I.DotVV(I.SubVV(o, a, I.s_t0), this.normal) - i.radiusA - i.radiusB;
                        break;
                    case t.b2ManifoldType.e_faceA:
                        F.MulRV(n.q, i.localNormal, this.normal),
                        V.MulXV(n, i.localPoint, l),
                        V.MulXV(r, i.localPoints[s], h),
                        this.separation = I.DotVV(I.SubVV(h, l, I.s_t0), this.normal) - i.radiusA - i.radiusB,
                        this.point.Copy(h);
                        break;
                    case t.b2ManifoldType.e_faceB:
                        F.MulRV(r.q, i.localNormal, this.normal),
                        V.MulXV(r, i.localPoint, l),
                        V.MulXV(n, i.localPoints[s], h),
                        this.separation = I.DotVV(I.SubVV(h, l, I.s_t0), this.normal) - i.radiusA - i.radiusB,
                        this.point.Copy(h),
                        this.normal.SelfNeg()
                    }
                }
                ,
                e.Initialize_s_pointA = new I,
                e.Initialize_s_pointB = new I,
                e.Initialize_s_planePoint = new I,
                e.Initialize_s_clipPoint = new I,
                e
            }
            )(), gn = (function() {
                function t() {
                    this.m_step = new cn,
                    this.m_allocator = null,
                    this.m_positionConstraints = mn.MakeArray(1024),
                    this.m_velocityConstraints = pn.MakeArray(1024),
                    this.m_count = 0
                }
                return t.prototype.Initialize = function(t) {
                    if (this.m_step.Copy(t.step),
                    this.m_allocator = t.allocator,
                    this.m_count = t.count,
                    this.m_positionConstraints.length < this.m_count)
                        for (var e = v(2 * this.m_positionConstraints.length, this.m_count); this.m_positionConstraints.length < e; )
                            this.m_positionConstraints[this.m_positionConstraints.length] = new mn;
                    if (this.m_velocityConstraints.length < this.m_count)
                        for (e = v(2 * this.m_velocityConstraints.length, this.m_count); this.m_velocityConstraints.length < e; )
                            this.m_velocityConstraints[this.m_velocityConstraints.length] = new pn;
                    this.m_positions = t.positions,
                    this.m_velocities = t.velocities,
                    this.m_contacts = t.contacts;
                    for (var i = 0; i < this.m_count; ++i) {
                        var n = this.m_contacts[i]
                          , r = n.m_fixtureA
                          , s = n.m_fixtureB
                          , a = r.GetShape()
                          , o = s.GetShape()
                          , l = a.m_radius
                          , h = o.m_radius
                          , c = r.GetBody()
                          , u = s.GetBody()
                          , _ = n.GetManifold()
                          , f = _.pointCount
                          , d = this.m_velocityConstraints[i];
                        d.friction = n.m_friction,
                        d.restitution = n.m_restitution,
                        d.tangentSpeed = n.m_tangentSpeed,
                        d.indexA = c.m_islandIndex,
                        d.indexB = u.m_islandIndex,
                        d.invMassA = c.m_invMass,
                        d.invMassB = u.m_invMass,
                        d.invIA = c.m_invI,
                        d.invIB = u.m_invI,
                        d.contactIndex = i,
                        d.pointCount = f,
                        d.K.SetZero(),
                        d.normalMass.SetZero();
                        var p = this.m_positionConstraints[i];
                        p.indexA = c.m_islandIndex,
                        p.indexB = u.m_islandIndex,
                        p.invMassA = c.m_invMass,
                        p.invMassB = u.m_invMass,
                        p.localCenterA.Copy(c.m_sweep.localCenter),
                        p.localCenterB.Copy(u.m_sweep.localCenter),
                        p.invIA = c.m_invI,
                        p.invIB = u.m_invI,
                        p.localNormal.Copy(_.localNormal),
                        p.localPoint.Copy(_.localPoint),
                        p.pointCount = f,
                        p.radiusA = l,
                        p.radiusB = h,
                        p.type = _.type;
                        for (var m = 0; m < f; ++m) {
                            var y = _.points[m]
                              , g = d.points[m];
                            this.m_step.warmStarting ? (g.normalImpulse = this.m_step.dtRatio * y.normalImpulse,
                            g.tangentImpulse = this.m_step.dtRatio * y.tangentImpulse) : (g.normalImpulse = 0,
                            g.tangentImpulse = 0),
                            g.rA.SetZero(),
                            g.rB.SetZero(),
                            g.normalMass = 0,
                            g.tangentMass = 0,
                            g.velocityBias = 0,
                            p.localPoints[m].Copy(y.localPoint)
                        }
                    }
                    return this
                }
                ,
                t.prototype.InitializeVelocityConstraints = function() {
                    for (var e = t.InitializeVelocityConstraints_s_xfA, i = t.InitializeVelocityConstraints_s_xfB, n = t.InitializeVelocityConstraints_s_worldManifold, r = 0; r < this.m_count; ++r) {
                        var s = this.m_velocityConstraints[r]
                          , a = this.m_positionConstraints[r]
                          , o = a.radiusA
                          , l = a.radiusB
                          , h = this.m_contacts[s.contactIndex].GetManifold()
                          , c = s.indexA
                          , u = s.indexB
                          , _ = s.invMassA
                          , f = s.invMassB
                          , d = s.invIA
                          , p = s.invIB
                          , m = a.localCenterA
                          , y = a.localCenterB
                          , v = this.m_positions[c].c
                          , g = this.m_positions[c].a
                          , A = this.m_velocities[c].v
                          , x = this.m_velocities[c].w
                          , b = this.m_positions[u].c
                          , C = this.m_positions[u].a
                          , T = this.m_velocities[u].v
                          , S = this.m_velocities[u].w;
                        e.q.SetAngle(g),
                        i.q.SetAngle(C),
                        I.SubVV(v, F.MulRV(e.q, m, I.s_t0), e.p),
                        I.SubVV(b, F.MulRV(i.q, y, I.s_t0), i.p),
                        n.Initialize(h, e, o, i, l),
                        s.normal.Copy(n.normal),
                        I.CrossVOne(s.normal, s.tangent);
                        for (var w = s.pointCount, E = 0; E < w; ++E) {
                            var M = s.points[E];
                            I.SubVV(n.points[E], v, M.rA),
                            I.SubVV(n.points[E], b, M.rB);
                            var D = I.CrossVV(M.rA, s.normal)
                              , B = I.CrossVV(M.rB, s.normal)
                              , P = _ + f + d * D * D + p * B * B;
                            M.normalMass = P > 0 ? 1 / P : 0;
                            var R = s.tangent
                              , O = I.CrossVV(M.rA, R)
                              , L = I.CrossVV(M.rB, R)
                              , V = _ + f + d * O * O + p * L * L;
                            M.tangentMass = V > 0 ? 1 / V : 0,
                            M.velocityBias = 0;
                            var N = I.DotVV(s.normal, I.SubVV(I.AddVCrossSV(T, S, M.rB, I.s_t0), I.AddVCrossSV(A, x, M.rA, I.s_t1), I.s_t0));
                            N < -1 && (M.velocityBias += -s.restitution * N)
                        }
                        s.pointCount
                    }
                }
                ,
                t.prototype.WarmStart = function() {
                    for (var e = t.WarmStart_s_P, i = 0; i < this.m_count; ++i) {
                        for (var n = this.m_velocityConstraints[i], r = n.indexA, s = n.indexB, a = n.invMassA, o = n.invIA, l = n.invMassB, h = n.invIB, c = n.pointCount, u = this.m_velocities[r].v, _ = this.m_velocities[r].w, f = this.m_velocities[s].v, d = this.m_velocities[s].w, p = n.normal, m = n.tangent, y = 0; y < c; ++y) {
                            var v = n.points[y];
                            I.AddVV(I.MulSV(v.normalImpulse, p, I.s_t0), I.MulSV(v.tangentImpulse, m, I.s_t1), e),
                            _ -= o * I.CrossVV(v.rA, e),
                            u.SelfMulSub(a, e),
                            d += h * I.CrossVV(v.rB, e),
                            f.SelfMulAdd(l, e)
                        }
                        this.m_velocities[r].w = _,
                        this.m_velocities[s].w = d
                    }
                }
                ,
                t.prototype.SolveVelocityConstraints = function() {
                    for (var e = t.SolveVelocityConstraints_s_dv, i = (t.SolveVelocityConstraints_s_dv1,
                    t.SolveVelocityConstraints_s_dv2,
                    t.SolveVelocityConstraints_s_P), n = (t.SolveVelocityConstraints_s_a,
                    t.SolveVelocityConstraints_s_b,
                    t.SolveVelocityConstraints_s_x,
                    t.SolveVelocityConstraints_s_d,
                    t.SolveVelocityConstraints_s_P1,
                    t.SolveVelocityConstraints_s_P2,
                    t.SolveVelocityConstraints_s_P1P2,
                    0); n < this.m_count; ++n) {
                        for (var r = this.m_velocityConstraints[n], s = r.indexA, a = r.indexB, o = r.invMassA, l = r.invIA, h = r.invMassB, c = r.invIB, u = r.pointCount, _ = this.m_velocities[s].v, f = this.m_velocities[s].w, d = this.m_velocities[a].v, p = this.m_velocities[a].w, m = r.normal, y = r.tangent, A = r.friction, x = 0; x < u; ++x) {
                            var b = r.points[x];
                            I.SubVV(I.AddVCrossSV(d, p, b.rB, I.s_t0), I.AddVCrossSV(_, f, b.rA, I.s_t1), e);
                            var C = I.DotVV(e, y) - r.tangentSpeed
                              , T = b.tangentMass * -C
                              , S = A * b.normalImpulse;
                            T = (w = g(b.tangentImpulse + T, -S, S)) - b.tangentImpulse,
                            b.tangentImpulse = w,
                            I.MulSV(T, y, i),
                            _.SelfMulSub(o, i),
                            f -= l * I.CrossVV(b.rA, i),
                            d.SelfMulAdd(h, i),
                            p += c * I.CrossVV(b.rB, i)
                        }
                        for (r.pointCount,
                        x = 0; x < u; ++x) {
                            b = r.points[x],
                            I.SubVV(I.AddVCrossSV(d, p, b.rB, I.s_t0), I.AddVCrossSV(_, f, b.rA, I.s_t1), e);
                            var w, E = I.DotVV(e, m);
                            T = -b.normalMass * (E - b.velocityBias),
                            T = (w = v(b.normalImpulse + T, 0)) - b.normalImpulse,
                            b.normalImpulse = w,
                            I.MulSV(T, m, i),
                            _.SelfMulSub(o, i),
                            f -= l * I.CrossVV(b.rA, i),
                            d.SelfMulAdd(h, i),
                            p += c * I.CrossVV(b.rB, i)
                        }
                        this.m_velocities[s].w = f,
                        this.m_velocities[a].w = p
                    }
                }
                ,
                t.prototype.StoreImpulses = function() {
                    for (var t = 0; t < this.m_count; ++t)
                        for (var e = this.m_velocityConstraints[t], i = this.m_contacts[e.contactIndex].GetManifold(), n = 0; n < e.pointCount; ++n)
                            i.points[n].normalImpulse = e.points[n].normalImpulse,
                            i.points[n].tangentImpulse = e.points[n].tangentImpulse
                }
                ,
                t.prototype.SolvePositionConstraints = function() {
                    for (var e = t.SolvePositionConstraints_s_xfA, i = t.SolvePositionConstraints_s_xfB, n = t.SolvePositionConstraints_s_psm, r = t.SolvePositionConstraints_s_rA, s = t.SolvePositionConstraints_s_rB, a = t.SolvePositionConstraints_s_P, o = 0, h = 0; h < this.m_count; ++h) {
                        for (var c = this.m_positionConstraints[h], u = c.indexA, _ = c.indexB, f = c.localCenterA, d = c.invMassA, p = c.invIA, m = c.localCenterB, v = c.invMassB, A = c.invIB, x = c.pointCount, b = this.m_positions[u].c, C = this.m_positions[u].a, T = this.m_positions[_].c, S = this.m_positions[_].a, w = 0; w < x; ++w) {
                            e.q.SetAngle(C),
                            i.q.SetAngle(S),
                            I.SubVV(b, F.MulRV(e.q, f, I.s_t0), e.p),
                            I.SubVV(T, F.MulRV(i.q, m, I.s_t0), i.p),
                            n.Initialize(c, e, i, w);
                            var E = n.normal
                              , M = n.point
                              , D = n.separation;
                            I.SubVV(M, b, r),
                            I.SubVV(M, T, s),
                            o = y(o, D);
                            var B = g(.2 * (D + l), -.2, 0)
                              , P = I.CrossVV(r, E)
                              , R = I.CrossVV(s, E)
                              , O = d + v + p * P * P + A * R * R
                              , L = O > 0 ? -B / O : 0;
                            I.MulSV(L, E, a),
                            b.SelfMulSub(d, a),
                            C -= p * I.CrossVV(r, a),
                            T.SelfMulAdd(v, a),
                            S += A * I.CrossVV(s, a)
                        }
                        this.m_positions[u].a = C,
                        this.m_positions[_].a = S
                    }
                    return o > -3 * l
                }
                ,
                t.prototype.SolveTOIPositionConstraints = function(e, i) {
                    for (var n = t.SolveTOIPositionConstraints_s_xfA, r = t.SolveTOIPositionConstraints_s_xfB, s = t.SolveTOIPositionConstraints_s_psm, a = t.SolveTOIPositionConstraints_s_rA, o = t.SolveTOIPositionConstraints_s_rB, h = t.SolveTOIPositionConstraints_s_P, c = 0, u = 0; u < this.m_count; ++u) {
                        var _ = this.m_positionConstraints[u]
                          , f = _.indexA
                          , d = _.indexB
                          , p = _.localCenterA
                          , m = _.localCenterB
                          , v = _.pointCount
                          , A = 0
                          , x = 0;
                        f !== e && f !== i || (A = _.invMassA,
                        x = _.invIA);
                        var b = 0
                          , C = 0;
                        d !== e && d !== i || (b = _.invMassB,
                        C = _.invIB);
                        for (var T = this.m_positions[f].c, S = this.m_positions[f].a, w = this.m_positions[d].c, E = this.m_positions[d].a, M = 0; M < v; ++M) {
                            n.q.SetAngle(S),
                            r.q.SetAngle(E),
                            I.SubVV(T, F.MulRV(n.q, p, I.s_t0), n.p),
                            I.SubVV(w, F.MulRV(r.q, m, I.s_t0), r.p),
                            s.Initialize(_, n, r, M);
                            var D = s.normal
                              , B = s.point
                              , P = s.separation;
                            I.SubVV(B, T, a),
                            I.SubVV(B, w, o),
                            c = y(c, P);
                            var R = g(.75 * (P + l), -.2, 0)
                              , O = I.CrossVV(a, D)
                              , L = I.CrossVV(o, D)
                              , V = A + b + x * O * O + C * L * L
                              , N = V > 0 ? -R / V : 0;
                            I.MulSV(N, D, h),
                            T.SelfMulSub(A, h),
                            S -= x * I.CrossVV(a, h),
                            w.SelfMulAdd(b, h),
                            E += C * I.CrossVV(o, h)
                        }
                        this.m_positions[f].a = S,
                        this.m_positions[d].a = E
                    }
                    return c >= -1.5 * l
                }
                ,
                t.InitializeVelocityConstraints_s_xfA = new V,
                t.InitializeVelocityConstraints_s_xfB = new V,
                t.InitializeVelocityConstraints_s_worldManifold = new At,
                t.WarmStart_s_P = new I,
                t.SolveVelocityConstraints_s_dv = new I,
                t.SolveVelocityConstraints_s_dv1 = new I,
                t.SolveVelocityConstraints_s_dv2 = new I,
                t.SolveVelocityConstraints_s_P = new I,
                t.SolveVelocityConstraints_s_a = new I,
                t.SolveVelocityConstraints_s_b = new I,
                t.SolveVelocityConstraints_s_x = new I,
                t.SolveVelocityConstraints_s_d = new I,
                t.SolveVelocityConstraints_s_P1 = new I,
                t.SolveVelocityConstraints_s_P2 = new I,
                t.SolveVelocityConstraints_s_P1P2 = new I,
                t.SolvePositionConstraints_s_xfA = new V,
                t.SolvePositionConstraints_s_xfB = new V,
                t.SolvePositionConstraints_s_psm = new vn,
                t.SolvePositionConstraints_s_rA = new I,
                t.SolvePositionConstraints_s_rB = new I,
                t.SolvePositionConstraints_s_P = new I,
                t.SolveTOIPositionConstraints_s_xfA = new V,
                t.SolveTOIPositionConstraints_s_xfB = new V,
                t.SolveTOIPositionConstraints_s_psm = new vn,
                t.SolveTOIPositionConstraints_s_rA = new I,
                t.SolveTOIPositionConstraints_s_rB = new I,
                t.SolveTOIPositionConstraints_s_P = new I,
                t
            }
            )(), An = (function() {
                function e() {
                    this.m_allocator = null,
                    this.m_bodies = [],
                    this.m_contacts = [],
                    this.m_joints = [],
                    this.m_positions = un.MakeArray(1024),
                    this.m_velocities = _n.MakeArray(1024),
                    this.m_bodyCount = 0,
                    this.m_jointCount = 0,
                    this.m_contactCount = 0,
                    this.m_bodyCapacity = 0,
                    this.m_contactCapacity = 0,
                    this.m_jointCapacity = 0
                }
                return e.prototype.Initialize = function(t, e, i, n, r) {
                    if (this.m_bodyCapacity = t,
                    this.m_contactCapacity = e,
                    this.m_jointCapacity = i,
                    this.m_bodyCount = 0,
                    this.m_contactCount = 0,
                    this.m_jointCount = 0,
                    this.m_allocator = n,
                    this.m_listener = r,
                    this.m_positions.length < t)
                        for (var s = v(2 * this.m_positions.length, t); this.m_positions.length < s; )
                            this.m_positions[this.m_positions.length] = new un;
                    if (this.m_velocities.length < t)
                        for (s = v(2 * this.m_velocities.length, t); this.m_velocities.length < s; )
                            this.m_velocities[this.m_velocities.length] = new _n
                }
                ,
                e.prototype.Clear = function() {
                    this.m_bodyCount = 0,
                    this.m_contactCount = 0,
                    this.m_jointCount = 0
                }
                ,
                e.prototype.AddBody = function(t) {
                    t.m_islandIndex = this.m_bodyCount,
                    this.m_bodies[this.m_bodyCount++] = t
                }
                ,
                e.prototype.AddContact = function(t) {
                    this.m_contacts[this.m_contactCount++] = t
                }
                ,
                e.prototype.AddJoint = function(t) {
                    this.m_joints[this.m_jointCount++] = t
                }
                ,
                e.prototype.Solve = function(n, r, s, a) {
                    for (var o = e.s_timer.Reset(), l = r.dt, h = 0; h < this.m_bodyCount; ++h) {
                        var c = this.m_bodies[h];
                        this.m_positions[h].c.Copy(c.m_sweep.c);
                        var u = c.m_sweep.a
                          , _ = this.m_velocities[h].v.Copy(c.m_linearVelocity)
                          , f = c.m_angularVelocity;
                        c.m_sweep.c0.Copy(c.m_sweep.c),
                        c.m_sweep.a0 = c.m_sweep.a,
                        c.m_type === t.b2BodyType.b2_dynamicBody && (_.x += l * (c.m_gravityScale * s.x + c.m_invMass * c.m_force.x),
                        _.y += l * (c.m_gravityScale * s.y + c.m_invMass * c.m_force.y),
                        f += l * c.m_invI * c.m_torque,
                        _.SelfMul(1 / (1 + l * c.m_linearDamping)),
                        f *= 1 / (1 + l * c.m_angularDamping)),
                        this.m_positions[h].a = u,
                        this.m_velocities[h].w = f
                    }
                    o.Reset();
                    var d = e.s_solverData;
                    d.step.Copy(r),
                    d.positions = this.m_positions,
                    d.velocities = this.m_velocities;
                    var p = e.s_contactSolverDef;
                    p.step.Copy(r),
                    p.contacts = this.m_contacts,
                    p.count = this.m_contactCount,
                    p.positions = this.m_positions,
                    p.velocities = this.m_velocities,
                    p.allocator = this.m_allocator;
                    var v = e.s_contactSolver.Initialize(p);
                    for (v.InitializeVelocityConstraints(),
                    r.warmStarting && v.WarmStart(),
                    h = 0; h < this.m_jointCount; ++h)
                        this.m_joints[h].InitVelocityConstraints(d);
                    for (n.solveInit = o.GetMilliseconds(),
                    o.Reset(),
                    h = 0; h < r.velocityIterations; ++h) {
                        for (var g = 0; g < this.m_jointCount; ++g)
                            this.m_joints[g].SolveVelocityConstraints(d);
                        v.SolveVelocityConstraints()
                    }
                    for (v.StoreImpulses(),
                    n.solveVelocity = o.GetMilliseconds(),
                    h = 0; h < this.m_bodyCount; ++h) {
                        var A = this.m_positions[h].c
                          , x = (u = this.m_positions[h].a,
                        _ = this.m_velocities[h].v,
                        f = this.m_velocities[h].w,
                        I.MulSV(l, _, e.s_translation));
                        if (I.DotVV(x, x) > 4) {
                            var b = 2 / x.Length();
                            _.SelfMul(b)
                        }
                        var C = l * f;
                        C * C > 2.4674011002726646 && (f *= b = 1.570796326795 / m(C)),
                        A.x += l * _.x,
                        A.y += l * _.y,
                        u += l * f,
                        this.m_positions[h].a = u,
                        this.m_velocities[h].w = f
                    }
                    o.Reset();
                    var T = !1;
                    for (h = 0; h < r.positionIterations; ++h) {
                        var S = v.SolvePositionConstraints()
                          , w = !0;
                        for (g = 0; g < this.m_jointCount; ++g) {
                            var E = this.m_joints[g].SolvePositionConstraints(d);
                            w = w && E
                        }
                        if (S && w) {
                            T = !0;
                            break
                        }
                    }
                    for (h = 0; h < this.m_bodyCount; ++h) {
                        var M = this.m_bodies[h];
                        M.m_sweep.c.Copy(this.m_positions[h].c),
                        M.m_sweep.a = this.m_positions[h].a,
                        M.m_linearVelocity.Copy(this.m_velocities[h].v),
                        M.m_angularVelocity = this.m_velocities[h].w,
                        M.SynchronizeTransform()
                    }
                    if (n.solvePosition = o.GetMilliseconds(),
                    this.Report(v.m_velocityConstraints),
                    a) {
                        var D = i;
                        for (h = 0; h < this.m_bodyCount; ++h)
                            (c = this.m_bodies[h]).GetType() !== t.b2BodyType.b2_staticBody && (!c.m_autoSleepFlag || c.m_angularVelocity * c.m_angularVelocity > .0012184696791469947 || I.DotVV(c.m_linearVelocity, c.m_linearVelocity) > 1e-4 ? (c.m_sleepTime = 0,
                            D = 0) : (c.m_sleepTime += l,
                            D = y(D, c.m_sleepTime)));
                        if (D >= .5 && T)
                            for (h = 0; h < this.m_bodyCount; ++h)
                                (c = this.m_bodies[h]).SetAwake(!1)
                    }
                }
                ,
                e.prototype.SolveTOI = function(t, i, n) {
                    for (var r = 0; r < this.m_bodyCount; ++r) {
                        var s = this.m_bodies[r];
                        this.m_positions[r].c.Copy(s.m_sweep.c),
                        this.m_positions[r].a = s.m_sweep.a,
                        this.m_velocities[r].v.Copy(s.m_linearVelocity),
                        this.m_velocities[r].w = s.m_angularVelocity
                    }
                    var a = e.s_contactSolverDef;
                    a.contacts = this.m_contacts,
                    a.count = this.m_contactCount,
                    a.allocator = this.m_allocator,
                    a.step.Copy(t),
                    a.positions = this.m_positions,
                    a.velocities = this.m_velocities;
                    var o = e.s_contactSolver.Initialize(a);
                    for (r = 0; r < t.positionIterations && !o.SolveTOIPositionConstraints(i, n); ++r)
                        ;
                    for (this.m_bodies[i].m_sweep.c0.Copy(this.m_positions[i].c),
                    this.m_bodies[i].m_sweep.a0 = this.m_positions[i].a,
                    this.m_bodies[n].m_sweep.c0.Copy(this.m_positions[n].c),
                    this.m_bodies[n].m_sweep.a0 = this.m_positions[n].a,
                    o.InitializeVelocityConstraints(),
                    r = 0; r < t.velocityIterations; ++r)
                        o.SolveVelocityConstraints();
                    var l = t.dt;
                    for (r = 0; r < this.m_bodyCount; ++r) {
                        var h = this.m_positions[r].c
                          , c = this.m_positions[r].a
                          , u = this.m_velocities[r].v
                          , _ = this.m_velocities[r].w
                          , f = I.MulSV(l, u, e.s_translation);
                        if (I.DotVV(f, f) > 4) {
                            var d = 2 / f.Length();
                            u.SelfMul(d)
                        }
                        var p = l * _;
                        p * p > 2.4674011002726646 && (_ *= d = 1.570796326795 / m(p)),
                        h.SelfMulAdd(l, u),
                        c += l * _,
                        this.m_positions[r].a = c,
                        this.m_velocities[r].w = _;
                        var y = this.m_bodies[r];
                        y.m_sweep.c.Copy(h),
                        y.m_sweep.a = c,
                        y.m_linearVelocity.Copy(u),
                        y.m_angularVelocity = _,
                        y.SynchronizeTransform()
                    }
                    this.Report(o.m_velocityConstraints)
                }
                ,
                e.prototype.Report = function(t) {
                    if (null !== this.m_listener)
                        for (var i = 0; i < this.m_contactCount; ++i) {
                            var n = this.m_contacts[i];
                            if (n) {
                                var r = t[i]
                                  , s = e.s_impulse;
                                s.count = r.pointCount;
                                for (var a = 0; a < r.pointCount; ++a)
                                    s.normalImpulses[a] = r.points[a].normalImpulse,
                                    s.tangentImpulses[a] = r.points[a].tangentImpulse;
                                this.m_listener.PostSolve(n, s)
                            }
                        }
                }
                ,
                e.s_timer = new U,
                e.s_solverData = new fn,
                e.s_contactSolverDef = new yn,
                e.s_contactSolver = new gn,
                e.s_translation = new I,
                e.s_impulse = new rn,
                e
            }
            )();
            (Hi = t.b2ParticleFlag || (t.b2ParticleFlag = {}))[Hi.b2_waterParticle = 0] = "b2_waterParticle",
            Hi[Hi.b2_zombieParticle = 2] = "b2_zombieParticle",
            Hi[Hi.b2_wallParticle = 4] = "b2_wallParticle",
            Hi[Hi.b2_springParticle = 8] = "b2_springParticle",
            Hi[Hi.b2_elasticParticle = 16] = "b2_elasticParticle",
            Hi[Hi.b2_viscousParticle = 32] = "b2_viscousParticle",
            Hi[Hi.b2_powderParticle = 64] = "b2_powderParticle",
            Hi[Hi.b2_tensileParticle = 128] = "b2_tensileParticle",
            Hi[Hi.b2_colorMixingParticle = 256] = "b2_colorMixingParticle",
            Hi[Hi.b2_destructionListenerParticle = 512] = "b2_destructionListenerParticle",
            Hi[Hi.b2_barrierParticle = 1024] = "b2_barrierParticle",
            Hi[Hi.b2_staticPressureParticle = 2048] = "b2_staticPressureParticle",
            Hi[Hi.b2_reactiveParticle = 4096] = "b2_reactiveParticle",
            Hi[Hi.b2_repulsiveParticle = 8192] = "b2_repulsiveParticle",
            Hi[Hi.b2_fixtureContactListenerParticle = 16384] = "b2_fixtureContactListenerParticle",
            Hi[Hi.b2_particleContactListenerParticle = 32768] = "b2_particleContactListenerParticle",
            Hi[Hi.b2_fixtureContactFilterParticle = 65536] = "b2_fixtureContactFilterParticle",
            Hi[Hi.b2_particleContactFilterParticle = 131072] = "b2_particleContactFilterParticle";
            var xn = function() {
                this.flags = 0,
                this.position = new I,
                this.velocity = new I,
                this.color = new k(0,0,0,0),
                this.lifetime = 0,
                this.userData = null,
                this.group = null
            };
            function bn(t, e, i) {
                return g(Math.ceil(Math.sqrt(t / (.01 * e)) * i), 1, 8)
            }
            var Cn, Tn = (function() {
                function t() {
                    this.m_index = u
                }
                return t.prototype.GetIndex = function() {
                    return this.m_index
                }
                ,
                t.prototype.SetIndex = function(t) {
                    this.m_index = t
                }
                ,
                t
            }
            )();
            (Cn = t.b2ParticleGroupFlag || (t.b2ParticleGroupFlag = {}))[Cn.b2_solidParticleGroup = 1] = "b2_solidParticleGroup",
            Cn[Cn.b2_rigidParticleGroup = 2] = "b2_rigidParticleGroup",
            Cn[Cn.b2_particleGroupCanBeEmpty = 4] = "b2_particleGroupCanBeEmpty",
            Cn[Cn.b2_particleGroupWillBeDestroyed = 8] = "b2_particleGroupWillBeDestroyed",
            Cn[Cn.b2_particleGroupNeedsUpdateDepth = 16] = "b2_particleGroupNeedsUpdateDepth",
            Cn[Cn.b2_particleGroupInternalMask = 24] = "b2_particleGroupInternalMask";
            var Sn = function() {
                this.flags = 0,
                this.groupFlags = 0,
                this.position = new I,
                this.angle = 0,
                this.linearVelocity = new I,
                this.angularVelocity = 0,
                this.color = new k,
                this.strength = 1,
                this.shapeCount = 0,
                this.stride = 0,
                this.particleCount = 0,
                this.lifetime = 0,
                this.userData = null,
                this.group = null
            }
              , wn = (function() {
                function e(t) {
                    this.m_firstIndex = 0,
                    this.m_lastIndex = 0,
                    this.m_groupFlags = 0,
                    this.m_strength = 1,
                    this.m_prev = null,
                    this.m_next = null,
                    this.m_timestamp = -1,
                    this.m_mass = 0,
                    this.m_inertia = 0,
                    this.m_center = new I,
                    this.m_linearVelocity = new I,
                    this.m_angularVelocity = 0,
                    this.m_transform = new V,
                    this.m_userData = null,
                    this.m_system = t
                }
                return e.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                e.prototype.GetParticleSystem = function() {
                    return this.m_system
                }
                ,
                e.prototype.GetParticleCount = function() {
                    return this.m_lastIndex - this.m_firstIndex
                }
                ,
                e.prototype.GetBufferIndex = function() {
                    return this.m_firstIndex
                }
                ,
                e.prototype.ContainsParticle = function(t) {
                    return this.m_firstIndex <= t && t < this.m_lastIndex
                }
                ,
                e.prototype.GetAllParticleFlags = function() {
                    if (!this.m_system.m_flagsBuffer.data)
                        throw new Error;
                    for (var t = 0, e = this.m_firstIndex; e < this.m_lastIndex; e++)
                        t |= this.m_system.m_flagsBuffer.data[e];
                    return t
                }
                ,
                e.prototype.GetGroupFlags = function() {
                    return this.m_groupFlags
                }
                ,
                e.prototype.SetGroupFlags = function(e) {
                    e |= this.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupInternalMask,
                    this.m_system.SetGroupFlags(this, e)
                }
                ,
                e.prototype.GetMass = function() {
                    return this.UpdateStatistics(),
                    this.m_mass
                }
                ,
                e.prototype.GetInertia = function() {
                    return this.UpdateStatistics(),
                    this.m_inertia
                }
                ,
                e.prototype.GetCenter = function() {
                    return this.UpdateStatistics(),
                    this.m_center
                }
                ,
                e.prototype.GetLinearVelocity = function() {
                    return this.UpdateStatistics(),
                    this.m_linearVelocity
                }
                ,
                e.prototype.GetAngularVelocity = function() {
                    return this.UpdateStatistics(),
                    this.m_angularVelocity
                }
                ,
                e.prototype.GetTransform = function() {
                    return this.m_transform
                }
                ,
                e.prototype.GetPosition = function() {
                    return this.m_transform.p
                }
                ,
                e.prototype.GetAngle = function() {
                    return this.m_transform.q.GetAngle()
                }
                ,
                e.prototype.GetLinearVelocityFromWorldPoint = function(t, i) {
                    var n = e.GetLinearVelocityFromWorldPoint_s_t0;
                    return this.UpdateStatistics(),
                    I.AddVCrossSV(this.m_linearVelocity, this.m_angularVelocity, I.SubVV(t, this.m_center, n), i)
                }
                ,
                e.prototype.GetUserData = function() {
                    return this.m_userData
                }
                ,
                e.prototype.SetUserData = function(t) {
                    this.m_userData = t
                }
                ,
                e.prototype.ApplyForce = function(t) {
                    this.m_system.ApplyForce(this.m_firstIndex, this.m_lastIndex, t)
                }
                ,
                e.prototype.ApplyLinearImpulse = function(t) {
                    this.m_system.ApplyLinearImpulse(this.m_firstIndex, this.m_lastIndex, t)
                }
                ,
                e.prototype.DestroyParticles = function(t) {
                    if (this.m_system.m_world.IsLocked())
                        throw new Error;
                    for (var e = this.m_firstIndex; e < this.m_lastIndex; e++)
                        this.m_system.DestroyParticle(e, t)
                }
                ,
                e.prototype.UpdateStatistics = function() {
                    if (!this.m_system.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_system.m_velocityBuffer.data)
                        throw new Error;
                    var t = new I
                      , e = new I;
                    if (this.m_timestamp !== this.m_system.m_timestamp) {
                        var i = this.m_system.GetParticleMass();
                        this.m_mass = i * (this.m_lastIndex - this.m_firstIndex),
                        this.m_center.SetZero(),
                        this.m_linearVelocity.SetZero();
                        for (var n = this.m_firstIndex; n < this.m_lastIndex; n++)
                            this.m_center.SelfMulAdd(i, this.m_system.m_positionBuffer.data[n]),
                            this.m_linearVelocity.SelfMulAdd(i, this.m_system.m_velocityBuffer.data[n]);
                        if (this.m_mass > 0) {
                            var r = 1 / this.m_mass;
                            this.m_center.SelfMul(r),
                            this.m_linearVelocity.SelfMul(r)
                        }
                        for (this.m_inertia = 0,
                        this.m_angularVelocity = 0,
                        n = this.m_firstIndex; n < this.m_lastIndex; n++)
                            I.SubVV(this.m_system.m_positionBuffer.data[n], this.m_center, t),
                            I.SubVV(this.m_system.m_velocityBuffer.data[n], this.m_linearVelocity, e),
                            this.m_inertia += i * I.DotVV(t, t),
                            this.m_angularVelocity += i * I.CrossVV(t, e);
                        this.m_inertia > 0 && (this.m_angularVelocity *= 1 / this.m_inertia),
                        this.m_timestamp = this.m_system.m_timestamp
                    }
                }
                ,
                e.GetLinearVelocityFromWorldPoint_s_t0 = new I,
                e
            }
            )()
              , En = (function() {
                function t(t) {
                    this.m_front = 0,
                    this.m_back = 0,
                    this.m_capacity = 0,
                    this.m_buffer = d(t, (function() {
                        return null
                    }
                    )),
                    this.m_capacity = t
                }
                return t.prototype.Push = function(t) {
                    if (this.m_back >= this.m_capacity) {
                        for (var e = this.m_front; e < this.m_back; e++)
                            this.m_buffer[e - this.m_front] = this.m_buffer[e];
                        this.m_back -= this.m_front,
                        this.m_front = 0,
                        this.m_back >= this.m_capacity && (this.m_capacity > 0 ? (this.m_buffer.concat(d(this.m_capacity, (function() {
                            return null
                        }
                        ))),
                        this.m_capacity *= 2) : (this.m_buffer.concat(d(1, (function() {
                            return null
                        }
                        ))),
                        this.m_capacity = 1))
                    }
                    this.m_buffer[this.m_back] = t,
                    this.m_back++
                }
                ,
                t.prototype.Pop = function() {
                    this.m_buffer[this.m_front] = null,
                    this.m_front++
                }
                ,
                t.prototype.Empty = function() {
                    return this.m_front === this.m_back
                }
                ,
                t.prototype.Front = function() {
                    var t = this.m_buffer[this.m_front];
                    if (!t)
                        throw new Error;
                    return t
                }
                ,
                t
            }
            )()
              , Mn = (function() {
                function t(e) {
                    this.m_generatorCapacity = 0,
                    this.m_generatorCount = 0,
                    this.m_countX = 0,
                    this.m_countY = 0,
                    this.m_diagram = [],
                    this.m_generatorBuffer = d(e, (function() {
                        return new t.Generator
                    }
                    )),
                    this.m_generatorCapacity = e
                }
                return t.prototype.AddGenerator = function(t, e, i) {
                    var n = this.m_generatorBuffer[this.m_generatorCount++];
                    n.center.Copy(t),
                    n.tag = e,
                    n.necessary = i
                }
                ,
                t.prototype.Generate = function(e, n) {
                    for (var r = 1 / e, s = new I(+i,+i), a = new I(-i,-i), o = 0, l = 0; l < this.m_generatorCount; l++)
                        (f = this.m_generatorBuffer[l]).necessary && (I.MinV(s, f.center, s),
                        I.MaxV(a, f.center, a),
                        ++o);
                    if (0 === o)
                        return this.m_countX = 0,
                        void (this.m_countY = 0);
                    s.x -= n,
                    s.y -= n,
                    a.x += n,
                    a.y += n,
                    this.m_countX = 1 + Math.floor(r * (a.x - s.x)),
                    this.m_countY = 1 + Math.floor(r * (a.y - s.y)),
                    this.m_diagram = [];
                    var h = new En(4 * this.m_countX * this.m_countY);
                    for (l = 0; l < this.m_generatorCount; l++) {
                        (f = this.m_generatorBuffer[l]).center.SelfSub(s).SelfMul(r);
                        var c = Math.floor(f.center.x)
                          , u = Math.floor(f.center.y);
                        c >= 0 && u >= 0 && c < this.m_countX && u < this.m_countY && h.Push(new t.Task(c,u,c + u * this.m_countX,f))
                    }
                    for (; !h.Empty(); ) {
                        c = (d = h.Front()).m_x,
                        u = d.m_y;
                        var _ = d.m_i
                          , f = d.m_generator;
                        h.Pop(),
                        this.m_diagram[_] || (this.m_diagram[_] = f,
                        c > 0 && h.Push(new t.Task(c - 1,u,_ - 1,f)),
                        u > 0 && h.Push(new t.Task(c,u - 1,_ - this.m_countX,f)),
                        c < this.m_countX - 1 && h.Push(new t.Task(c + 1,u,_ + 1,f)),
                        u < this.m_countY - 1 && h.Push(new t.Task(c,u + 1,_ + this.m_countX,f)))
                    }
                    for (u = 0; u < this.m_countY; u++)
                        for (c = 0; c < this.m_countX - 1; c++)
                            _ = c + u * this.m_countX,
                            (p = this.m_diagram[_]) !== (m = this.m_diagram[_ + 1]) && (h.Push(new t.Task(c,u,_,m)),
                            h.Push(new t.Task(c + 1,u,_ + 1,p)));
                    for (u = 0; u < this.m_countY - 1; u++)
                        for (c = 0; c < this.m_countX; c++)
                            _ = c + u * this.m_countX,
                            (p = this.m_diagram[_]) !== (m = this.m_diagram[_ + this.m_countX]) && (h.Push(new t.Task(c,u,_,m)),
                            h.Push(new t.Task(c,u + 1,_ + this.m_countX,p)));
                    for (; !h.Empty(); ) {
                        var d, p, m;
                        if (c = (d = h.Front()).m_x,
                        u = d.m_y,
                        _ = d.m_i,
                        l = d.m_generator,
                        h.Pop(),
                        (p = this.m_diagram[_]) !== (m = l)) {
                            var y = p.center.x - c
                              , v = p.center.y - u
                              , g = m.center.x - c
                              , A = m.center.y - u;
                            y * y + v * v > g * g + A * A && (this.m_diagram[_] = m,
                            c > 0 && h.Push(new t.Task(c - 1,u,_ - 1,m)),
                            u > 0 && h.Push(new t.Task(c,u - 1,_ - this.m_countX,m)),
                            c < this.m_countX - 1 && h.Push(new t.Task(c + 1,u,_ + 1,m)),
                            u < this.m_countY - 1 && h.Push(new t.Task(c,u + 1,_ + this.m_countX,m)))
                        }
                    }
                }
                ,
                t.prototype.GetNodes = function(t) {
                    for (var e = 0; e < this.m_countY - 1; e++)
                        for (var i = 0; i < this.m_countX - 1; i++) {
                            var n = i + e * this.m_countX
                              , r = this.m_diagram[n]
                              , s = this.m_diagram[n + 1]
                              , a = this.m_diagram[n + this.m_countX]
                              , o = this.m_diagram[n + 1 + this.m_countX];
                            s !== a && (r !== s && r !== a && (r.necessary || s.necessary || a.necessary) && t(r.tag, s.tag, a.tag),
                            o !== s && o !== a && (r.necessary || s.necessary || a.necessary) && t(s.tag, o.tag, a.tag))
                        }
                }
                ,
                t
            }
            )();
            function Dn(t, e, i) {
                var n = t[e];
                t[e] = t[i],
                t[i] = n
            }
            function Bn(t, e) {
                return t < e
            }
            function In(t, e, i, n) {
                void 0 === e && (e = 0),
                void 0 === i && (i = t.length - e),
                void 0 === n && (n = Bn);
                for (var r = e, s = [], a = 0; ; ) {
                    for (; r + 1 < i; i++) {
                        var o = t[r + Math.floor(Math.random() * (i - r))];
                        s[a++] = i;
                        for (var l = r - 1; ; ) {
                            for (; n(t[++l], o); )
                                ;
                            for (; n(o, t[--i]); )
                                ;
                            if (l >= i)
                                break;
                            Dn(t, l, i)
                        }
                    }
                    if (0 === a)
                        break;
                    r = i,
                    i = s[--a]
                }
                return t
            }
            function Pn(t, e, i, n) {
                return void 0 === e && (e = 0),
                void 0 === i && (i = t.length - e),
                void 0 === n && (n = Bn),
                In(t, e, i, n)
            }
            function Rn(t, e, i) {
                void 0 === i && (i = t.length);
                for (var n = 0, r = 0; r < i; ++r)
                    e(t[r]) || (r !== n ? Dn(t, n++, r) : ++n);
                return n
            }
            function On(t, e, i, n, r) {
                void 0 === r && (r = Bn);
                for (var s = i - e; s > 0; ) {
                    var a = Math.floor(s / 2)
                      , o = e + a;
                    r(t[o], n) ? (e = ++o,
                    s -= a + 1) : s = a
                }
                return e
            }
            function Ln(t, e, i, n, r) {
                void 0 === r && (r = Bn);
                for (var s = i - e; s > 0; ) {
                    var a = Math.floor(s / 2)
                      , o = e + a;
                    r(n, t[o]) ? s = a : (e = ++o,
                    s -= a + 1)
                }
                return e
            }
            function Fn(t, e, i, n) {
                for (var r = i; e !== r; )
                    Dn(t, e++, r++),
                    r === n ? r = i : e === i && (i = r)
            }
            function Vn(t, e, i, n) {
                if (e === i)
                    return i;
                for (var r = e; ++e !== i; )
                    n(t[r], t[e]) || Dn(t, ++r, e);
                return ++r
            }
            (function(t) {
                t.Generator = function() {
                    this.center = new I,
                    this.tag = 0,
                    this.necessary = !1
                }
                ;
                t.Task = function(t, e, i, n) {
                    this.m_x = t,
                    this.m_y = e,
                    this.m_i = i,
                    this.m_generator = n
                }
            }
            )(Mn || (Mn = {}));
            var Nn = (function() {
                function t(t) {
                    this.data = [],
                    this.count = 0,
                    this.capacity = 0,
                    this.allocator = t
                }
                return t.prototype.Append = function() {
                    return this.count >= this.capacity && this.Grow(),
                    this.count++
                }
                ,
                t.prototype.Reserve = function(t) {
                    if (!(this.capacity >= t)) {
                        for (var e = this.capacity; e < t; ++e)
                            this.data[e] = this.allocator();
                        this.capacity = t
                    }
                }
                ,
                t.prototype.Grow = function() {
                    var t = this.capacity ? 2 * this.capacity : 256;
                    this.Reserve(t)
                }
                ,
                t.prototype.Free = function() {
                    0 !== this.data.length && (this.data = [],
                    this.capacity = 0,
                    this.count = 0)
                }
                ,
                t.prototype.Shorten = function() {}
                ,
                t.prototype.Data = function() {
                    return this.data
                }
                ,
                t.prototype.GetCount = function() {
                    return this.count
                }
                ,
                t.prototype.SetCount = function(t) {
                    this.count = t
                }
                ,
                t.prototype.GetCapacity = function() {
                    return this.capacity
                }
                ,
                t.prototype.RemoveIf = function(t) {
                    this.count = Rn(this.data, t, this.count)
                }
                ,
                t.prototype.Unique = function(t) {
                    this.count = Vn(this.data, 0, this.count, t)
                }
                ,
                t
            }
            )()
              , kn = (function(t) {
                function e(e) {
                    var i = t.call(this) || this;
                    return i.m_system = e,
                    i
                }
                return ti(e, t),
                e.prototype.ShouldQueryParticleSystem = function() {
                    return !1
                }
                ,
                e.prototype.ReportFixture = function(t) {
                    if (t.IsSensor())
                        return !0;
                    for (var e = t.GetShape().GetChildCount(), i = 0; i < e; i++)
                        for (var n = t.GetAABB(i), r = this.m_system.GetInsideBoundsEnumerator(n), s = void 0; (s = r.GetNext()) >= 0; )
                            this.ReportFixtureAndParticle(t, i, s);
                    return !0
                }
                ,
                e.prototype.ReportParticle = function() {
                    return !1
                }
                ,
                e.prototype.ReportFixtureAndParticle = function() {}
                ,
                e
            }
            )(an)
              , Gn = (function() {
                function t() {
                    this.indexA = 0,
                    this.indexB = 0,
                    this.weight = 0,
                    this.normal = new I,
                    this.flags = 0
                }
                return t.prototype.SetIndices = function(t, e) {
                    this.indexA = t,
                    this.indexB = e
                }
                ,
                t.prototype.SetWeight = function(t) {
                    this.weight = t
                }
                ,
                t.prototype.SetNormal = function(t) {
                    this.normal.Copy(t)
                }
                ,
                t.prototype.SetFlags = function(t) {
                    this.flags = t
                }
                ,
                t.prototype.GetIndexA = function() {
                    return this.indexA
                }
                ,
                t.prototype.GetIndexB = function() {
                    return this.indexB
                }
                ,
                t.prototype.GetWeight = function() {
                    return this.weight
                }
                ,
                t.prototype.GetNormal = function() {
                    return this.normal
                }
                ,
                t.prototype.GetFlags = function() {
                    return this.flags
                }
                ,
                t.prototype.IsEqual = function(t) {
                    return this.indexA === t.indexA && this.indexB === t.indexB && this.flags === t.flags && this.weight === t.weight && this.normal.x === t.normal.x && this.normal.y === t.normal.y
                }
                ,
                t.prototype.IsNotEqual = function(t) {
                    return !this.IsEqual(t)
                }
                ,
                t.prototype.ApproximatelyEqual = function(t) {
                    return this.indexA === t.indexA && this.indexB === t.indexB && this.flags === t.flags && m(this.weight - t.weight) < .01 && I.DistanceSquaredVV(this.normal, t.normal) < 1e-4
                }
                ,
                t
            }
            )()
              , Un = function() {
                this.index = 0,
                this.weight = 0,
                this.normal = new I,
                this.mass = 0
            }
              , zn = function() {
                this.indexA = 0,
                this.indexB = 0,
                this.flags = 0,
                this.strength = 0,
                this.distance = 0
            }
              , Hn = function() {
                this.indexA = 0,
                this.indexB = 0,
                this.indexC = 0,
                this.flags = 0,
                this.strength = 0,
                this.pa = new I(0,0),
                this.pb = new I(0,0),
                this.pc = new I(0,0),
                this.ka = 0,
                this.kb = 0,
                this.kc = 0,
                this.s = 0
            }
              , Wn = (function() {
                function t() {
                    this.strictContactCheck = !1,
                    this.density = 1,
                    this.gravityScale = 1,
                    this.radius = 1,
                    this.maxCount = 0,
                    this.pressureStrength = .005,
                    this.dampingStrength = 1,
                    this.elasticStrength = .25,
                    this.springStrength = .25,
                    this.viscousStrength = .25,
                    this.surfaceTensionPressureStrength = .2,
                    this.surfaceTensionNormalStrength = .2,
                    this.repulsiveStrength = 1,
                    this.powderStrength = .5,
                    this.ejectionStrength = .5,
                    this.staticPressureStrength = .2,
                    this.staticPressureRelaxation = .2,
                    this.staticPressureIterations = 8,
                    this.colorMixingStrength = .5,
                    this.destroyByAge = !0,
                    this.lifetimeGranularity = 1 / 60
                }
                return t.prototype.Copy = function(t) {
                    return this.strictContactCheck = t.strictContactCheck,
                    this.density = t.density,
                    this.gravityScale = t.gravityScale,
                    this.radius = t.radius,
                    this.maxCount = t.maxCount,
                    this.pressureStrength = t.pressureStrength,
                    this.dampingStrength = t.dampingStrength,
                    this.elasticStrength = t.elasticStrength,
                    this.springStrength = t.springStrength,
                    this.viscousStrength = t.viscousStrength,
                    this.surfaceTensionPressureStrength = t.surfaceTensionPressureStrength,
                    this.surfaceTensionNormalStrength = t.surfaceTensionNormalStrength,
                    this.repulsiveStrength = t.repulsiveStrength,
                    this.powderStrength = t.powderStrength,
                    this.ejectionStrength = t.ejectionStrength,
                    this.staticPressureStrength = t.staticPressureStrength,
                    this.staticPressureRelaxation = t.staticPressureRelaxation,
                    this.staticPressureIterations = t.staticPressureIterations,
                    this.colorMixingStrength = t.colorMixingStrength,
                    this.destroyByAge = t.destroyByAge,
                    this.lifetimeGranularity = t.lifetimeGranularity,
                    this
                }
                ,
                t.prototype.Clone = function() {
                    return (new t).Copy(this)
                }
                ,
                t
            }
            )();
            t.b2ParticleSystem = (function() {
                function n(t, e) {
                    this.m_paused = !1,
                    this.m_timestamp = 0,
                    this.m_allParticleFlags = 0,
                    this.m_needsUpdateAllParticleFlags = !1,
                    this.m_allGroupFlags = 0,
                    this.m_needsUpdateAllGroupFlags = !1,
                    this.m_hasForce = !1,
                    this.m_iterationIndex = 0,
                    this.m_inverseDensity = 0,
                    this.m_particleDiameter = 0,
                    this.m_inverseDiameter = 0,
                    this.m_squaredDiameter = 0,
                    this.m_count = 0,
                    this.m_internalAllocatedCapacity = 0,
                    this.m_handleIndexBuffer = new n.UserOverridableBuffer,
                    this.m_flagsBuffer = new n.UserOverridableBuffer,
                    this.m_positionBuffer = new n.UserOverridableBuffer,
                    this.m_velocityBuffer = new n.UserOverridableBuffer,
                    this.m_forceBuffer = [],
                    this.m_weightBuffer = [],
                    this.m_staticPressureBuffer = [],
                    this.m_accumulationBuffer = [],
                    this.m_accumulation2Buffer = [],
                    this.m_depthBuffer = [],
                    this.m_colorBuffer = new n.UserOverridableBuffer,
                    this.m_groupBuffer = [],
                    this.m_userDataBuffer = new n.UserOverridableBuffer,
                    this.m_stuckThreshold = 0,
                    this.m_lastBodyContactStepBuffer = new n.UserOverridableBuffer,
                    this.m_bodyContactCountBuffer = new n.UserOverridableBuffer,
                    this.m_consecutiveContactStepsBuffer = new n.UserOverridableBuffer,
                    this.m_stuckParticleBuffer = new Nn(function() {
                        return 0
                    }
                    ),
                    this.m_proxyBuffer = new Nn(function() {
                        return new n.Proxy
                    }
                    ),
                    this.m_contactBuffer = new Nn(function() {
                        return new Gn
                    }
                    ),
                    this.m_bodyContactBuffer = new Nn(function() {
                        return new Un
                    }
                    ),
                    this.m_pairBuffer = new Nn(function() {
                        return new zn
                    }
                    ),
                    this.m_triadBuffer = new Nn(function() {
                        return new Hn
                    }
                    ),
                    this.m_expirationTimeBuffer = new n.UserOverridableBuffer,
                    this.m_indexByExpirationTimeBuffer = new n.UserOverridableBuffer,
                    this.m_timeElapsed = 0,
                    this.m_expirationTimeBufferRequiresSorting = !1,
                    this.m_groupCount = 0,
                    this.m_groupList = null,
                    this.m_def = new Wn,
                    this.m_prev = null,
                    this.m_next = null,
                    this.SetStrictContactCheck(t.strictContactCheck),
                    this.SetDensity(t.density),
                    this.SetGravityScale(t.gravityScale),
                    this.SetRadius(t.radius),
                    this.SetMaxParticleCount(t.maxCount),
                    this.m_def = t.Clone(),
                    this.m_world = e,
                    this.SetDestructionByAge(this.m_def.destroyByAge)
                }
                return n.computeTag = function(t, e) {
                    return (e + n.yOffset >>> 0 << n.yShift) + (n.xScale * t + n.xOffset >>> 0) >>> 0
                }
                ,
                n.computeRelativeTag = function(t, e, i) {
                    return t + (i << n.yShift) + (e << n.xShift) >>> 0
                }
                ,
                n.prototype.Drop = function() {
                    for (; this.m_groupList; )
                        this.DestroyParticleGroup(this.m_groupList);
                    this.FreeUserOverridableBuffer(this.m_handleIndexBuffer),
                    this.FreeUserOverridableBuffer(this.m_flagsBuffer),
                    this.FreeUserOverridableBuffer(this.m_lastBodyContactStepBuffer),
                    this.FreeUserOverridableBuffer(this.m_bodyContactCountBuffer),
                    this.FreeUserOverridableBuffer(this.m_consecutiveContactStepsBuffer),
                    this.FreeUserOverridableBuffer(this.m_positionBuffer),
                    this.FreeUserOverridableBuffer(this.m_velocityBuffer),
                    this.FreeUserOverridableBuffer(this.m_colorBuffer),
                    this.FreeUserOverridableBuffer(this.m_userDataBuffer),
                    this.FreeUserOverridableBuffer(this.m_expirationTimeBuffer),
                    this.FreeUserOverridableBuffer(this.m_indexByExpirationTimeBuffer),
                    this.FreeBuffer(this.m_forceBuffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_weightBuffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_staticPressureBuffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_accumulationBuffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_accumulation2Buffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_depthBuffer, this.m_internalAllocatedCapacity),
                    this.FreeBuffer(this.m_groupBuffer, this.m_internalAllocatedCapacity)
                }
                ,
                n.prototype.CreateParticle = function(t) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    if (this.m_count >= this.m_internalAllocatedCapacity) {
                        var i = this.m_count ? 2 * this.m_count : 256;
                        this.ReallocateInternalAllocatedBuffers(i)
                    }
                    if (this.m_count >= this.m_internalAllocatedCapacity) {
                        if (!this.m_def.destroyByAge)
                            return u;
                        this.DestroyOldestParticle(0, !1),
                        this.SolveZombie()
                    }
                    var n = this.m_count++;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (this.m_flagsBuffer.data[n] = 0,
                    this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[n] = 0),
                    this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[n] = 0),
                    this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[n] = 0),
                    !this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    this.m_positionBuffer.data[n] = (this.m_positionBuffer.data[n] || new I).Copy(e(t.position, I.ZERO)),
                    this.m_velocityBuffer.data[n] = (this.m_velocityBuffer.data[n] || new I).Copy(e(t.velocity, I.ZERO)),
                    this.m_weightBuffer[n] = 0,
                    this.m_forceBuffer[n] = (this.m_forceBuffer[n] || new I).SetZero(),
                    this.m_staticPressureBuffer && (this.m_staticPressureBuffer[n] = 0),
                    this.m_depthBuffer && (this.m_depthBuffer[n] = 0);
                    var r = (new k).Copy(e(t.color, k.ZERO));
                    !this.m_colorBuffer.data && r.IsZero() || (this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data),
                    this.m_colorBuffer.data[n] = (this.m_colorBuffer.data[n] || new k).Copy(r)),
                    (this.m_userDataBuffer.data || t.userData) && (this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data),
                    this.m_userDataBuffer.data[n] = t.userData),
                    this.m_handleIndexBuffer.data && (this.m_handleIndexBuffer.data[n] = null);
                    var s = this.m_proxyBuffer.data[this.m_proxyBuffer.Append()]
                      , a = e(t.lifetime, 0)
                      , o = a > 0;
                    if (this.m_expirationTimeBuffer.data || o) {
                        if (this.SetParticleLifetime(n, o ? a : this.ExpirationTimeToLifetime(-this.GetQuantizedTimeElapsed())),
                        !this.m_indexByExpirationTimeBuffer.data)
                            throw new Error;
                        this.m_indexByExpirationTimeBuffer.data[n] = n
                    }
                    s.index = n;
                    var l = e(t.group, null);
                    return this.m_groupBuffer[n] = l,
                    l && (l.m_firstIndex < l.m_lastIndex ? (this.RotateBuffer(l.m_firstIndex, l.m_lastIndex, n),
                    l.m_lastIndex = n + 1) : (l.m_firstIndex = n,
                    l.m_lastIndex = n + 1)),
                    this.SetParticleFlags(n, e(t.flags, 0)),
                    n
                }
                ,
                n.prototype.GetParticleHandleFromIndex = function(t) {
                    this.m_handleIndexBuffer.data = this.RequestBuffer(this.m_handleIndexBuffer.data);
                    var e = this.m_handleIndexBuffer.data[t];
                    return e || ((e = new Tn).SetIndex(t),
                    this.m_handleIndexBuffer.data[t] = e,
                    e)
                }
                ,
                n.prototype.DestroyParticle = function(e, i) {
                    if (void 0 === i && (i = !1),
                    !this.m_flagsBuffer.data)
                        throw new Error;
                    var n = t.b2ParticleFlag.b2_zombieParticle;
                    i && (n |= t.b2ParticleFlag.b2_destructionListenerParticle),
                    this.SetParticleFlags(e, this.m_flagsBuffer.data[e] | n)
                }
                ,
                n.prototype.DestroyOldestParticle = function(t, e) {
                    void 0 === e && (e = !1);
                    var i = this.GetParticleCount();
                    if (!this.m_indexByExpirationTimeBuffer.data)
                        throw new Error;
                    if (!this.m_expirationTimeBuffer.data)
                        throw new Error;
                    var n = this.m_indexByExpirationTimeBuffer.data[i - (t + 1)]
                      , r = this.m_indexByExpirationTimeBuffer.data[t];
                    this.DestroyParticle(this.m_expirationTimeBuffer.data[n] > 0 ? n : r, e)
                }
                ,
                n.prototype.DestroyParticlesInShape = function(t, e, i) {
                    void 0 === i && (i = !1);
                    var r = n.DestroyParticlesInShape_s_aabb;
                    if (this.m_world.IsLocked())
                        throw new Error;
                    var s = new n.DestroyParticlesInShapeCallback(this,t,e,i)
                      , a = r;
                    return t.ComputeAABB(a, e, 0),
                    this.m_world.QueryAABB(s, a),
                    s.Destroyed()
                }
                ,
                n.prototype.CreateParticleGroup = function(t) {
                    var i = n.CreateParticleGroup_s_transform;
                    if (this.m_world.IsLocked())
                        throw new Error;
                    var r = i;
                    r.SetPositionAngle(e(t.position, I.ZERO), e(t.angle, 0));
                    var s = this.m_count;
                    if (t.shape && this.CreateParticlesWithShapeForGroup(t.shape, t, r),
                    t.shapes && this.CreateParticlesWithShapesForGroup(t.shapes, e(t.shapeCount, t.shapes.length), t, r),
                    t.positionData)
                        for (var a = e(t.particleCount, t.positionData.length), o = 0; o < a; o++) {
                            var l = t.positionData[o];
                            this.CreateParticleForGroup(t, r, l)
                        }
                    var h = this.m_count
                      , c = new wn(this);
                    for (c.m_firstIndex = s,
                    c.m_lastIndex = h,
                    c.m_strength = e(t.strength, 1),
                    c.m_userData = t.userData,
                    c.m_transform.Copy(r),
                    c.m_prev = null,
                    c.m_next = this.m_groupList,
                    this.m_groupList && (this.m_groupList.m_prev = c),
                    this.m_groupList = c,
                    ++this.m_groupCount,
                    o = s; o < h; o++)
                        this.m_groupBuffer[o] = c;
                    this.SetGroupFlags(c, e(t.groupFlags, 0));
                    var u = new n.ConnectionFilter;
                    return this.UpdateContacts(!0),
                    this.UpdatePairsAndTriads(s, h, u),
                    t.group && (this.JoinParticleGroups(t.group, c),
                    c = t.group),
                    c
                }
                ,
                n.prototype.JoinParticleGroups = function(t, e) {
                    if (this.m_world.IsLocked())
                        throw new Error;
                    this.RotateBuffer(e.m_firstIndex, e.m_lastIndex, this.m_count),
                    this.RotateBuffer(t.m_firstIndex, t.m_lastIndex, e.m_firstIndex);
                    var i = new n.JoinParticleGroupsFilter(e.m_firstIndex);
                    this.UpdateContacts(!0),
                    this.UpdatePairsAndTriads(t.m_firstIndex, e.m_lastIndex, i);
                    for (var r = e.m_firstIndex; r < e.m_lastIndex; r++)
                        this.m_groupBuffer[r] = t;
                    var s = t.m_groupFlags | e.m_groupFlags;
                    this.SetGroupFlags(t, s),
                    t.m_lastIndex = e.m_lastIndex,
                    e.m_firstIndex = e.m_lastIndex,
                    this.DestroyParticleGroup(e)
                }
                ,
                n.prototype.SplitParticleGroup = function(t) {
                    this.UpdateContacts(!0);
                    var e = d(t.GetParticleCount(), (function() {
                        return new n.ParticleListNode
                    }
                    ));
                    n.InitializeParticleLists(t, e),
                    this.MergeParticleListsInContact(t, e);
                    var i = n.FindLongestParticleList(t, e);
                    this.MergeZombieParticleListNodes(t, e, i),
                    this.CreateParticleGroupsFromParticleList(t, e, i),
                    this.UpdatePairsAndTriadsWithParticleList(t, e)
                }
                ,
                n.prototype.GetParticleGroupList = function() {
                    return this.m_groupList
                }
                ,
                n.prototype.GetParticleGroupCount = function() {
                    return this.m_groupCount
                }
                ,
                n.prototype.GetParticleCount = function() {
                    return this.m_count
                }
                ,
                n.prototype.GetMaxParticleCount = function() {
                    return this.m_def.maxCount
                }
                ,
                n.prototype.SetMaxParticleCount = function(t) {
                    this.m_def.maxCount = t
                }
                ,
                n.prototype.GetAllParticleFlags = function() {
                    return this.m_allParticleFlags
                }
                ,
                n.prototype.GetAllGroupFlags = function() {
                    return this.m_allGroupFlags
                }
                ,
                n.prototype.SetPaused = function(t) {
                    this.m_paused = t
                }
                ,
                n.prototype.GetPaused = function() {
                    return this.m_paused
                }
                ,
                n.prototype.SetDensity = function(t) {
                    this.m_def.density = t,
                    this.m_inverseDensity = 1 / this.m_def.density
                }
                ,
                n.prototype.GetDensity = function() {
                    return this.m_def.density
                }
                ,
                n.prototype.SetGravityScale = function(t) {
                    this.m_def.gravityScale = t
                }
                ,
                n.prototype.GetGravityScale = function() {
                    return this.m_def.gravityScale
                }
                ,
                n.prototype.SetDamping = function(t) {
                    this.m_def.dampingStrength = t
                }
                ,
                n.prototype.GetDamping = function() {
                    return this.m_def.dampingStrength
                }
                ,
                n.prototype.SetStaticPressureIterations = function(t) {
                    this.m_def.staticPressureIterations = t
                }
                ,
                n.prototype.GetStaticPressureIterations = function() {
                    return this.m_def.staticPressureIterations
                }
                ,
                n.prototype.SetRadius = function(t) {
                    this.m_particleDiameter = 2 * t,
                    this.m_squaredDiameter = this.m_particleDiameter * this.m_particleDiameter,
                    this.m_inverseDiameter = 1 / this.m_particleDiameter
                }
                ,
                n.prototype.GetRadius = function() {
                    return this.m_particleDiameter / 2
                }
                ,
                n.prototype.GetPositionBuffer = function() {
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    return this.m_positionBuffer.data
                }
                ,
                n.prototype.GetVelocityBuffer = function() {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    return this.m_velocityBuffer.data
                }
                ,
                n.prototype.GetColorBuffer = function() {
                    return this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data),
                    this.m_colorBuffer.data
                }
                ,
                n.prototype.GetGroupBuffer = function() {
                    return this.m_groupBuffer
                }
                ,
                n.prototype.GetWeightBuffer = function() {
                    return this.m_weightBuffer
                }
                ,
                n.prototype.GetUserDataBuffer = function() {
                    return this.m_userDataBuffer.data = this.RequestBuffer(this.m_userDataBuffer.data),
                    this.m_userDataBuffer.data
                }
                ,
                n.prototype.GetFlagsBuffer = function() {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    return this.m_flagsBuffer.data
                }
                ,
                n.prototype.SetParticleFlags = function(e, i) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    this.m_flagsBuffer.data[e] & ~i && (this.m_needsUpdateAllParticleFlags = !0),
                    ~this.m_allParticleFlags & i && (i & t.b2ParticleFlag.b2_tensileParticle && (this.m_accumulation2Buffer = this.RequestBuffer(this.m_accumulation2Buffer)),
                    i & t.b2ParticleFlag.b2_colorMixingParticle && (this.m_colorBuffer.data = this.RequestBuffer(this.m_colorBuffer.data)),
                    this.m_allParticleFlags |= i),
                    this.m_flagsBuffer.data[e] = i
                }
                ,
                n.prototype.GetParticleFlags = function(t) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    return this.m_flagsBuffer.data[t]
                }
                ,
                n.prototype.SetFlagsBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_flagsBuffer, t, e)
                }
                ,
                n.prototype.SetPositionBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_positionBuffer, t, e)
                }
                ,
                n.prototype.SetVelocityBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_velocityBuffer, t, e)
                }
                ,
                n.prototype.SetColorBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_colorBuffer, t, e)
                }
                ,
                n.prototype.SetUserDataBuffer = function(t, e) {
                    this.SetUserOverridableBuffer(this.m_userDataBuffer, t, e)
                }
                ,
                n.prototype.GetContacts = function() {
                    return this.m_contactBuffer.data
                }
                ,
                n.prototype.GetContactCount = function() {
                    return this.m_contactBuffer.count
                }
                ,
                n.prototype.GetBodyContacts = function() {
                    return this.m_bodyContactBuffer.data
                }
                ,
                n.prototype.GetBodyContactCount = function() {
                    return this.m_bodyContactBuffer.count
                }
                ,
                n.prototype.GetPairs = function() {
                    return this.m_pairBuffer.data
                }
                ,
                n.prototype.GetPairCount = function() {
                    return this.m_pairBuffer.count
                }
                ,
                n.prototype.GetTriads = function() {
                    return this.m_triadBuffer.data
                }
                ,
                n.prototype.GetTriadCount = function() {
                    return this.m_triadBuffer.count
                }
                ,
                n.prototype.SetStuckThreshold = function(t) {
                    this.m_stuckThreshold = t,
                    t > 0 && (this.m_lastBodyContactStepBuffer.data = this.RequestBuffer(this.m_lastBodyContactStepBuffer.data),
                    this.m_bodyContactCountBuffer.data = this.RequestBuffer(this.m_bodyContactCountBuffer.data),
                    this.m_consecutiveContactStepsBuffer.data = this.RequestBuffer(this.m_consecutiveContactStepsBuffer.data))
                }
                ,
                n.prototype.GetStuckCandidates = function() {
                    return this.m_stuckParticleBuffer.Data()
                }
                ,
                n.prototype.GetStuckCandidateCount = function() {
                    return this.m_stuckParticleBuffer.GetCount()
                }
                ,
                n.prototype.ComputeCollisionEnergy = function() {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var t = n.ComputeCollisionEnergy_s_v, e = this.m_velocityBuffer.data, i = 0, r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = this.m_contactBuffer.data[r]
                          , a = s.indexA
                          , o = s.indexB
                          , l = s.normal
                          , h = I.SubVV(e[o], e[a], t)
                          , c = I.DotVV(h, l);
                        c < 0 && (i += c * c)
                    }
                    return .5 * this.GetParticleMass() * i
                }
                ,
                n.prototype.SetStrictContactCheck = function(t) {
                    this.m_def.strictContactCheck = t
                }
                ,
                n.prototype.GetStrictContactCheck = function() {
                    return this.m_def.strictContactCheck
                }
                ,
                n.prototype.SetParticleLifetime = function(t, e) {
                    var i = null === this.m_indexByExpirationTimeBuffer.data;
                    if (this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data),
                    this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data),
                    i)
                        for (var n = this.GetParticleCount(), r = 0; r < n; ++r)
                            this.m_indexByExpirationTimeBuffer.data[r] = r;
                    var s = e / this.m_def.lifetimeGranularity
                      , a = s > 0 ? this.GetQuantizedTimeElapsed() + s : s;
                    a !== this.m_expirationTimeBuffer.data[t] && (this.m_expirationTimeBuffer.data[t] = a,
                    this.m_expirationTimeBufferRequiresSorting = !0)
                }
                ,
                n.prototype.GetParticleLifetime = function(t) {
                    return this.ExpirationTimeToLifetime(this.GetExpirationTimeBuffer()[t])
                }
                ,
                n.prototype.SetDestructionByAge = function(t) {
                    t && this.GetExpirationTimeBuffer(),
                    this.m_def.destroyByAge = t
                }
                ,
                n.prototype.GetDestructionByAge = function() {
                    return this.m_def.destroyByAge
                }
                ,
                n.prototype.GetExpirationTimeBuffer = function() {
                    return this.m_expirationTimeBuffer.data = this.RequestBuffer(this.m_expirationTimeBuffer.data),
                    this.m_expirationTimeBuffer.data
                }
                ,
                n.prototype.ExpirationTimeToLifetime = function(t) {
                    return (t > 0 ? t - this.GetQuantizedTimeElapsed() : t) * this.m_def.lifetimeGranularity
                }
                ,
                n.prototype.GetIndexByExpirationTimeBuffer = function() {
                    if (this.GetParticleCount() ? this.SetParticleLifetime(0, this.GetParticleLifetime(0)) : this.m_indexByExpirationTimeBuffer.data = this.RequestBuffer(this.m_indexByExpirationTimeBuffer.data),
                    !this.m_indexByExpirationTimeBuffer.data)
                        throw new Error;
                    return this.m_indexByExpirationTimeBuffer.data
                }
                ,
                n.prototype.ParticleApplyLinearImpulse = function(t, e) {
                    this.ApplyLinearImpulse(t, t + 1, e)
                }
                ,
                n.prototype.ApplyLinearImpulse = function(t, e, i) {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var n = this.m_velocityBuffer.data, r = (e - t) * this.GetParticleMass(), s = (new I).Copy(i).SelfMul(1 / r), a = t; a < e; a++)
                        n[a].SelfAdd(s)
                }
                ,
                n.IsSignificantForce = function(t) {
                    return 0 !== t.x || 0 !== t.y
                }
                ,
                n.prototype.ParticleApplyForce = function(t, e) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    n.IsSignificantForce(e) && this.ForceCanBeApplied(this.m_flagsBuffer.data[t]) && (this.PrepareForceBuffer(),
                    this.m_forceBuffer[t].SelfAdd(e))
                }
                ,
                n.prototype.ApplyForce = function(t, e, i) {
                    var r = (new I).Copy(i).SelfMul(1 / (e - t));
                    if (n.IsSignificantForce(r)) {
                        this.PrepareForceBuffer();
                        for (var s = t; s < e; s++)
                            this.m_forceBuffer[s].SelfAdd(r)
                    }
                }
                ,
                n.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                n.prototype.QueryAABB = function(t, e) {
                    if (0 !== this.m_proxyBuffer.count) {
                        var i = this.m_proxyBuffer.count
                          , r = On(this.m_proxyBuffer.data, 0, i, n.computeTag(this.m_inverseDiameter * e.lowerBound.x, this.m_inverseDiameter * e.lowerBound.y), n.Proxy.CompareProxyTag)
                          , s = Ln(this.m_proxyBuffer.data, r, i, n.computeTag(this.m_inverseDiameter * e.upperBound.x, this.m_inverseDiameter * e.upperBound.y), n.Proxy.CompareTagProxy);
                        if (!this.m_positionBuffer.data)
                            throw new Error;
                        for (var a = this.m_positionBuffer.data, o = r; o < s; ++o) {
                            var l = this.m_proxyBuffer.data[o].index
                              , h = a[l];
                            if (e.lowerBound.x < h.x && h.x < e.upperBound.x && e.lowerBound.y < h.y && h.y < e.upperBound.y && !t.ReportParticle(this, l))
                                break
                        }
                    }
                }
                ,
                n.prototype.QueryShapeAABB = function(t, e, i, r) {
                    void 0 === r && (r = 0);
                    var s = n.QueryShapeAABB_s_aabb;
                    e.ComputeAABB(s, i, r),
                    this.QueryAABB(t, s)
                }
                ,
                n.prototype.QueryPointAABB = function(t, e, i) {
                    void 0 === i && (i = l);
                    var r = n.QueryPointAABB_s_aabb;
                    r.lowerBound.Set(e.x - i, e.y - i),
                    r.upperBound.Set(e.x + i, e.y + i),
                    this.QueryAABB(t, r)
                }
                ,
                n.prototype.RayCast = function(t, e, i) {
                    var r = n.RayCast_s_aabb
                      , s = n.RayCast_s_p
                      , a = n.RayCast_s_v
                      , o = n.RayCast_s_n
                      , l = n.RayCast_s_point;
                    if (0 !== this.m_proxyBuffer.count) {
                        if (!this.m_positionBuffer.data)
                            throw new Error;
                        var h = this.m_positionBuffer.data
                          , c = r;
                        I.MinV(e, i, c.lowerBound),
                        I.MaxV(e, i, c.upperBound);
                        for (var u, _ = 1, f = I.SubVV(i, e, a), d = I.DotVV(f, f), p = this.GetInsideBoundsEnumerator(c); (u = p.GetNext()) >= 0; ) {
                            var m = I.SubVV(e, h[u], s)
                              , v = I.DotVV(m, f)
                              , g = v * v - d * (I.DotVV(m, m) - this.m_squaredDiameter);
                            if (g >= 0) {
                                var A = T(g)
                                  , x = (-v - A) / d;
                                if (x > _)
                                    continue;
                                if (x < 0 && ((x = (-v + A) / d) < 0 || x > _))
                                    continue;
                                var b = I.AddVMulSV(m, x, f, o);
                                b.Normalize();
                                var C = t.ReportParticle(this, u, I.AddVMulSV(e, x, f, l), b, x);
                                if ((_ = y(_, C)) <= 0)
                                    break
                            }
                        }
                    }
                }
                ,
                n.prototype.ComputeAABB = function(t) {
                    var e = this.GetParticleCount();
                    if (t.lowerBound.x = +i,
                    t.lowerBound.y = +i,
                    t.upperBound.x = -i,
                    t.upperBound.y = -i,
                    !this.m_positionBuffer.data)
                        throw new Error;
                    for (var n = this.m_positionBuffer.data, r = 0; r < e; r++) {
                        var s = n[r];
                        I.MinV(t.lowerBound, s, t.lowerBound),
                        I.MaxV(t.upperBound, s, t.upperBound)
                    }
                    t.lowerBound.x -= this.m_particleDiameter,
                    t.lowerBound.y -= this.m_particleDiameter,
                    t.upperBound.x += this.m_particleDiameter,
                    t.upperBound.y += this.m_particleDiameter
                }
                ,
                n.prototype.FreeBuffer = function(t) {
                    null !== t && (t.length = 0)
                }
                ,
                n.prototype.FreeUserOverridableBuffer = function(t) {
                    0 === t.userSuppliedCapacity && this.FreeBuffer(t.data, this.m_internalAllocatedCapacity)
                }
                ,
                n.prototype.ReallocateBuffer3 = function(t, e, i) {
                    if (i <= e)
                        throw new Error;
                    var n = t ? t.slice() : [];
                    return n.length = i,
                    n
                }
                ,
                n.prototype.ReallocateBuffer5 = function(t, e, i, n, r) {
                    if (n <= i)
                        throw new Error;
                    if (e && !(n <= e))
                        throw new Error;
                    return r && !t || e || (t = this.ReallocateBuffer3(t, i, n)),
                    t
                }
                ,
                n.prototype.ReallocateBuffer4 = function(t, e, i, n) {
                    return this.ReallocateBuffer5(t.data, t.userSuppliedCapacity, e, i, n)
                }
                ,
                n.prototype.RequestBuffer = function(t) {
                    return t || (0 === this.m_internalAllocatedCapacity && this.ReallocateInternalAllocatedBuffers(256),
                    (t = []).length = this.m_internalAllocatedCapacity),
                    t
                }
                ,
                n.prototype.ReallocateHandleBuffers = function(t) {
                    this.m_handleIndexBuffer.data = this.ReallocateBuffer4(this.m_handleIndexBuffer, this.m_internalAllocatedCapacity, t, !0)
                }
                ,
                n.prototype.ReallocateInternalAllocatedBuffers = function(t) {
                    function e(t, e) {
                        return e && t > e ? e : t
                    }
                    if (t = e(t, this.m_def.maxCount),
                    t = e(t, this.m_flagsBuffer.userSuppliedCapacity),
                    t = e(t, this.m_positionBuffer.userSuppliedCapacity),
                    t = e(t, this.m_velocityBuffer.userSuppliedCapacity),
                    t = e(t, this.m_colorBuffer.userSuppliedCapacity),
                    t = e(t, this.m_userDataBuffer.userSuppliedCapacity),
                    this.m_internalAllocatedCapacity < t) {
                        this.ReallocateHandleBuffers(t),
                        this.m_flagsBuffer.data = this.ReallocateBuffer4(this.m_flagsBuffer, this.m_internalAllocatedCapacity, t, !1);
                        var i = this.m_stuckThreshold > 0;
                        this.m_lastBodyContactStepBuffer.data = this.ReallocateBuffer4(this.m_lastBodyContactStepBuffer, this.m_internalAllocatedCapacity, t, i),
                        this.m_bodyContactCountBuffer.data = this.ReallocateBuffer4(this.m_bodyContactCountBuffer, this.m_internalAllocatedCapacity, t, i),
                        this.m_consecutiveContactStepsBuffer.data = this.ReallocateBuffer4(this.m_consecutiveContactStepsBuffer, this.m_internalAllocatedCapacity, t, i),
                        this.m_positionBuffer.data = this.ReallocateBuffer4(this.m_positionBuffer, this.m_internalAllocatedCapacity, t, !1),
                        this.m_velocityBuffer.data = this.ReallocateBuffer4(this.m_velocityBuffer, this.m_internalAllocatedCapacity, t, !1),
                        this.m_forceBuffer = this.ReallocateBuffer5(this.m_forceBuffer, 0, this.m_internalAllocatedCapacity, t, !1),
                        this.m_weightBuffer = this.ReallocateBuffer5(this.m_weightBuffer, 0, this.m_internalAllocatedCapacity, t, !1),
                        this.m_staticPressureBuffer = this.ReallocateBuffer5(this.m_staticPressureBuffer, 0, this.m_internalAllocatedCapacity, t, !0),
                        this.m_accumulationBuffer = this.ReallocateBuffer5(this.m_accumulationBuffer, 0, this.m_internalAllocatedCapacity, t, !1),
                        this.m_accumulation2Buffer = this.ReallocateBuffer5(this.m_accumulation2Buffer, 0, this.m_internalAllocatedCapacity, t, !0),
                        this.m_depthBuffer = this.ReallocateBuffer5(this.m_depthBuffer, 0, this.m_internalAllocatedCapacity, t, !0),
                        this.m_colorBuffer.data = this.ReallocateBuffer4(this.m_colorBuffer, this.m_internalAllocatedCapacity, t, !0),
                        this.m_groupBuffer = this.ReallocateBuffer5(this.m_groupBuffer, 0, this.m_internalAllocatedCapacity, t, !1),
                        this.m_userDataBuffer.data = this.ReallocateBuffer4(this.m_userDataBuffer, this.m_internalAllocatedCapacity, t, !0),
                        this.m_expirationTimeBuffer.data = this.ReallocateBuffer4(this.m_expirationTimeBuffer, this.m_internalAllocatedCapacity, t, !0),
                        this.m_indexByExpirationTimeBuffer.data = this.ReallocateBuffer4(this.m_indexByExpirationTimeBuffer, this.m_internalAllocatedCapacity, t, !1),
                        this.m_internalAllocatedCapacity = t
                    }
                }
                ,
                n.prototype.CreateParticleForGroup = function(t, i, n) {
                    var r = new xn;
                    r.flags = e(t.flags, 0),
                    V.MulXV(i, n, r.position),
                    I.AddVV(e(t.linearVelocity, I.ZERO), I.CrossSV(e(t.angularVelocity, 0), I.SubVV(r.position, e(t.position, I.ZERO), I.s_t0), I.s_t0), r.velocity),
                    r.color.Copy(e(t.color, k.ZERO)),
                    r.lifetime = e(t.lifetime, 0),
                    r.userData = t.userData,
                    this.CreateParticle(r)
                }
                ,
                n.prototype.CreateParticlesStrokeShapeForGroup = function(i, r, s) {
                    var a = n.CreateParticlesStrokeShapeForGroup_s_edge
                      , o = n.CreateParticlesStrokeShapeForGroup_s_d
                      , l = n.CreateParticlesStrokeShapeForGroup_s_p
                      , h = e(r.stride, 0);
                    0 === h && (h = this.GetParticleStride());
                    for (var c = 0, u = i.GetChildCount(), _ = 0; _ < u; _++) {
                        var f = null;
                        i.GetType() === t.b2ShapeType.e_edgeShape ? f = i : (f = a,
                        i.GetChildEdge(f, _));
                        for (var d = I.SubVV(f.m_vertex2, f.m_vertex1, o), p = d.Length(); c < p; ) {
                            var m = I.AddVMulSV(f.m_vertex1, c / p, d, l);
                            this.CreateParticleForGroup(r, s, m),
                            c += h
                        }
                        c -= p
                    }
                }
                ,
                n.prototype.CreateParticlesFillShapeForGroup = function(t, i, r) {
                    var s = n.CreateParticlesFillShapeForGroup_s_aabb
                      , a = n.CreateParticlesFillShapeForGroup_s_p
                      , o = e(i.stride, 0);
                    0 === o && (o = this.GetParticleStride());
                    var l = V.IDENTITY
                      , h = s;
                    t.ComputeAABB(h, l, 0);
                    for (var c = Math.floor(h.lowerBound.y / o) * o; c < h.upperBound.y; c += o)
                        for (var u = Math.floor(h.lowerBound.x / o) * o; u < h.upperBound.x; u += o) {
                            var _ = a.Set(u, c);
                            t.TestPoint(l, _) && this.CreateParticleForGroup(i, r, _)
                        }
                }
                ,
                n.prototype.CreateParticlesWithShapeForGroup = function(e, i, n) {
                    switch (e.GetType()) {
                    case t.b2ShapeType.e_edgeShape:
                    case t.b2ShapeType.e_chainShape:
                        this.CreateParticlesStrokeShapeForGroup(e, i, n);
                        break;
                    case t.b2ShapeType.e_polygonShape:
                    case t.b2ShapeType.e_circleShape:
                        this.CreateParticlesFillShapeForGroup(e, i, n)
                    }
                }
                ,
                n.prototype.CreateParticlesWithShapesForGroup = function(t, e, i, r) {
                    var s = new n.CompositeShape(t,e);
                    this.CreateParticlesFillShapeForGroup(s, i, r)
                }
                ,
                n.prototype.CloneParticle = function(t, e) {
                    var i = new xn;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    i.flags = this.m_flagsBuffer.data[t],
                    i.position.Copy(this.m_positionBuffer.data[t]),
                    i.velocity.Copy(this.m_velocityBuffer.data[t]),
                    this.m_colorBuffer.data && i.color.Copy(this.m_colorBuffer.data[t]),
                    this.m_userDataBuffer.data && (i.userData = this.m_userDataBuffer.data[t]),
                    i.group = e;
                    var n = this.CreateParticle(i);
                    if (this.m_handleIndexBuffer.data) {
                        var r = this.m_handleIndexBuffer.data[t];
                        r && r.SetIndex(n),
                        this.m_handleIndexBuffer.data[n] = r,
                        this.m_handleIndexBuffer.data[t] = null
                    }
                    return this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[n] = this.m_lastBodyContactStepBuffer.data[t]),
                    this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[n] = this.m_bodyContactCountBuffer.data[t]),
                    this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[n] = this.m_consecutiveContactStepsBuffer.data[t]),
                    this.m_hasForce && this.m_forceBuffer[n].Copy(this.m_forceBuffer[t]),
                    this.m_staticPressureBuffer && (this.m_staticPressureBuffer[n] = this.m_staticPressureBuffer[t]),
                    this.m_depthBuffer && (this.m_depthBuffer[n] = this.m_depthBuffer[t]),
                    this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[n] = this.m_expirationTimeBuffer.data[t]),
                    n
                }
                ,
                n.prototype.DestroyParticlesInGroup = function(t, e) {
                    void 0 === e && (e = !1);
                    for (var i = t.m_firstIndex; i < t.m_lastIndex; i++)
                        this.DestroyParticle(i, e)
                }
                ,
                n.prototype.DestroyParticleGroup = function(t) {
                    this.m_world.m_destructionListener && this.m_world.m_destructionListener.SayGoodbyeParticleGroup(t),
                    this.SetGroupFlags(t, 0);
                    for (var e = t.m_firstIndex; e < t.m_lastIndex; e++)
                        this.m_groupBuffer[e] = null;
                    t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    t === this.m_groupList && (this.m_groupList = t.m_next),
                    --this.m_groupCount
                }
                ,
                n.ParticleCanBeConnected = function(e, i) {
                    return 0 != (e & (t.b2ParticleFlag.b2_wallParticle | t.b2ParticleFlag.b2_springParticle | t.b2ParticleFlag.b2_elasticParticle)) || null !== i && 0 != (i.GetGroupFlags() & t.b2ParticleGroupFlag.b2_rigidParticleGroup)
                }
                ,
                n.prototype.UpdatePairsAndTriads = function(e, i, r) {
                    var s = n.UpdatePairsAndTriads_s_dab
                      , a = n.UpdatePairsAndTriads_s_dbc
                      , o = n.UpdatePairsAndTriads_s_dca;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var l = this.m_positionBuffer.data, h = 0, c = e; c < i; c++)
                        h |= this.m_flagsBuffer.data[c];
                    if (h & n.k_pairFlags)
                        for (var u = 0; u < this.m_contactBuffer.count; u++) {
                            var _ = this.m_contactBuffer.data[u]
                              , f = _.indexA
                              , d = _.indexB
                              , p = this.m_flagsBuffer.data[f]
                              , m = this.m_flagsBuffer.data[d]
                              , v = this.m_groupBuffer[f]
                              , g = this.m_groupBuffer[d];
                            if (f >= e && f < i && d >= e && d < i && !((p | m) & t.b2ParticleFlag.b2_zombieParticle) && (p | m) & n.k_pairFlags && (r.IsNecessary(f) || r.IsNecessary(d)) && n.ParticleCanBeConnected(p, v) && n.ParticleCanBeConnected(m, g) && r.ShouldCreatePair(f, d)) {
                                var A = this.m_pairBuffer.data[this.m_pairBuffer.Append()];
                                A.indexA = f,
                                A.indexB = d,
                                A.flags = _.flags,
                                A.strength = y(v ? v.m_strength : 1, g ? g.m_strength : 1),
                                A.distance = I.DistanceVV(l[f], l[d])
                            }
                            Pn(this.m_pairBuffer.data, 0, this.m_pairBuffer.count, n.ComparePairIndices),
                            this.m_pairBuffer.Unique(n.MatchPairIndices)
                        }
                    if (h & n.k_triadFlags) {
                        var x = new Mn(i - e);
                        for (c = e; c < i; c++) {
                            var b = this.m_flagsBuffer.data[c]
                              , C = this.m_groupBuffer[c];
                            b & t.b2ParticleFlag.b2_zombieParticle || !n.ParticleCanBeConnected(b, C) || x.AddGenerator(l[c], c, r.IsNecessary(c))
                        }
                        var T = this.GetParticleStride();
                        x.Generate(T / 2, 2 * T);
                        var S = this;
                        x.GetNodes((function(t, e, i) {
                            if (!S.m_flagsBuffer.data)
                                throw new Error;
                            var h = S.m_flagsBuffer.data[t]
                              , c = S.m_flagsBuffer.data[e]
                              , u = S.m_flagsBuffer.data[i];
                            if ((h | c | u) & n.k_triadFlags && r.ShouldCreateTriad(t, e, i)) {
                                var _ = l[t]
                                  , f = l[e]
                                  , d = l[i]
                                  , p = I.SubVV(_, f, s)
                                  , m = I.SubVV(f, d, a)
                                  , v = I.SubVV(d, _, o)
                                  , g = 4 * S.m_squaredDiameter;
                                if (I.DotVV(p, p) > g || I.DotVV(m, m) > g || I.DotVV(v, v) > g)
                                    return;
                                var A = S.m_groupBuffer[t]
                                  , x = S.m_groupBuffer[e]
                                  , b = S.m_groupBuffer[i]
                                  , C = S.m_triadBuffer.data[S.m_triadBuffer.Append()];
                                C.indexA = t,
                                C.indexB = e,
                                C.indexC = i,
                                C.flags = h | c | u,
                                C.strength = y(y(A ? A.m_strength : 1, x ? x.m_strength : 1), b ? b.m_strength : 1);
                                var T = (_.x + f.x + d.x) / 3
                                  , w = (_.y + f.y + d.y) / 3;
                                C.pa.x = _.x - T,
                                C.pa.y = _.y - w,
                                C.pb.x = f.x - T,
                                C.pb.y = f.y - w,
                                C.pc.x = d.x - T,
                                C.pc.y = d.y - w,
                                C.ka = -I.DotVV(v, p),
                                C.kb = -I.DotVV(p, m),
                                C.kc = -I.DotVV(m, v),
                                C.s = I.CrossVV(_, f) + I.CrossVV(f, d) + I.CrossVV(d, _)
                            }
                        }
                        )),
                        Pn(this.m_triadBuffer.data, 0, this.m_triadBuffer.count, n.CompareTriadIndices),
                        this.m_triadBuffer.Unique(n.MatchTriadIndices)
                    }
                }
                ,
                n.prototype.UpdatePairsAndTriadsWithReactiveParticles = function() {
                    var e = new n.ReactiveFilter(this.m_flagsBuffer);
                    if (this.UpdatePairsAndTriads(0, this.m_count, e),
                    !this.m_flagsBuffer.data)
                        throw new Error;
                    for (var i = 0; i < this.m_count; i++)
                        this.m_flagsBuffer.data[i] &= ~t.b2ParticleFlag.b2_reactiveParticle;
                    this.m_allParticleFlags &= ~t.b2ParticleFlag.b2_reactiveParticle
                }
                ,
                n.ComparePairIndices = function(t, e) {
                    var i = t.indexA - e.indexA;
                    return 0 !== i ? i < 0 : t.indexB < e.indexB
                }
                ,
                n.MatchPairIndices = function(t, e) {
                    return t.indexA === e.indexA && t.indexB === e.indexB
                }
                ,
                n.CompareTriadIndices = function(t, e) {
                    var i = t.indexA - e.indexA;
                    if (0 !== i)
                        return i < 0;
                    var n = t.indexB - e.indexB;
                    return 0 !== n ? n < 0 : t.indexC < e.indexC
                }
                ,
                n.MatchTriadIndices = function(t, e) {
                    return t.indexA === e.indexA && t.indexB === e.indexB && t.indexC === e.indexC
                }
                ,
                n.InitializeParticleLists = function(t, e) {
                    for (var i = t.GetBufferIndex(), n = t.GetParticleCount(), r = 0; r < n; r++) {
                        var s = e[r];
                        s.list = s,
                        s.next = null,
                        s.count = 1,
                        s.index = r + i
                    }
                }
                ,
                n.prototype.MergeParticleListsInContact = function(t, e) {
                    for (var i = t.GetBufferIndex(), r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = this.m_contactBuffer.data[r]
                          , a = s.indexA
                          , o = s.indexB;
                        if (t.ContainsParticle(a) && t.ContainsParticle(o)) {
                            var l = e[a - i].list
                              , h = e[o - i].list;
                            if (l !== h) {
                                if (l.count < h.count) {
                                    var c = l;
                                    l = h,
                                    h = c
                                }
                                n.MergeParticleLists(l, h)
                            }
                        }
                    }
                }
                ,
                n.MergeParticleLists = function(t, e) {
                    for (var i = e; ; ) {
                        i.list = t;
                        var n = i.next;
                        if (!n) {
                            i.next = t.next;
                            break
                        }
                        i = n
                    }
                    t.next = e,
                    t.count += e.count,
                    e.count = 0
                }
                ,
                n.FindLongestParticleList = function(t, e) {
                    for (var i = t.GetParticleCount(), n = e[0], r = 0; r < i; r++) {
                        var s = e[r];
                        n.count < s.count && (n = s)
                    }
                    return n
                }
                ,
                n.prototype.MergeZombieParticleListNodes = function(e, i, r) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    for (var s = e.GetParticleCount(), a = 0; a < s; a++) {
                        var o = i[a];
                        o !== r && this.m_flagsBuffer.data[o.index] & t.b2ParticleFlag.b2_zombieParticle && n.MergeParticleListAndNode(r, o)
                    }
                }
                ,
                n.MergeParticleListAndNode = function(t, e) {
                    e.list = t,
                    e.next = t.next,
                    t.next = e,
                    t.count++,
                    e.count = 0
                }
                ,
                n.prototype.CreateParticleGroupsFromParticleList = function(e, i, n) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    var r = e.GetParticleCount()
                      , s = new Sn;
                    s.groupFlags = e.GetGroupFlags(),
                    s.userData = e.GetUserData();
                    for (var a = 0; a < r; a++) {
                        var o = i[a];
                        if (o.count && o !== n)
                            for (var l = this.CreateParticleGroup(s), h = o; h; h = h.next) {
                                var c = h.index
                                  , u = this.CloneParticle(c, l);
                                this.m_flagsBuffer.data[c] |= t.b2ParticleFlag.b2_zombieParticle,
                                h.index = u
                            }
                    }
                }
                ,
                n.prototype.UpdatePairsAndTriadsWithParticleList = function(t, e) {
                    for (var i = t.GetBufferIndex(), n = 0; n < this.m_pairBuffer.count; n++) {
                        var r = this.m_pairBuffer.data[n]
                          , s = r.indexA
                          , a = r.indexB;
                        t.ContainsParticle(s) && (r.indexA = e[s - i].index),
                        t.ContainsParticle(a) && (r.indexB = e[a - i].index)
                    }
                    for (n = 0; n < this.m_triadBuffer.count; n++) {
                        var o = this.m_triadBuffer.data[n]
                          , l = (s = o.indexA,
                        a = o.indexB,
                        o.indexC);
                        t.ContainsParticle(s) && (o.indexA = e[s - i].index),
                        t.ContainsParticle(a) && (o.indexB = e[a - i].index),
                        t.ContainsParticle(l) && (o.indexC = e[l - i].index)
                    }
                }
                ,
                n.prototype.ComputeDepth = function() {
                    for (var e = [], n = 0, r = 0; r < this.m_contactBuffer.count; r++) {
                        var s = (v = this.m_contactBuffer.data[r]).indexA
                          , a = v.indexB
                          , o = this.m_groupBuffer[s]
                          , l = this.m_groupBuffer[a];
                        o && o === l && o.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && (e[n++] = v)
                    }
                    for (var h = [], c = 0, u = this.m_groupList; u; u = u.GetNext())
                        if (u.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth) {
                            h[c++] = u,
                            this.SetGroupFlags(u, u.m_groupFlags & ~t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth);
                            for (var _ = u.m_firstIndex; _ < u.m_lastIndex; _++)
                                this.m_accumulationBuffer[_] = 0
                        }
                    for (r = 0; r < n; r++) {
                        s = (v = e[r]).indexA,
                        a = v.indexB;
                        var f = v.weight;
                        this.m_accumulationBuffer[s] += f,
                        this.m_accumulationBuffer[a] += f
                    }
                    for (_ = 0; _ < c; _++)
                        for (var d = (u = h[_]).m_firstIndex; d < u.m_lastIndex; d++)
                            f = this.m_accumulationBuffer[d],
                            this.m_depthBuffer[d] = f < .8 ? 0 : i;
                    for (var p = T(this.m_count) >> 0, m = 0; m < p; m++) {
                        var y = !1;
                        for (r = 0; r < n; r++) {
                            s = (v = e[r]).indexA,
                            a = v.indexB;
                            var v, g = 1 - v.weight, A = this.m_depthBuffer[s], x = this.m_depthBuffer[a], b = x + g, C = A + g;
                            A > b && (this.m_depthBuffer[s] = b,
                            y = !0),
                            x > C && (this.m_depthBuffer[a] = C,
                            y = !0)
                        }
                        if (!y)
                            break
                    }
                    for (_ = 0; _ < c; _++)
                        for (var S = (u = h[_]).m_firstIndex; S < u.m_lastIndex; S++)
                            this.m_depthBuffer[S] < i ? this.m_depthBuffer[S] *= this.m_particleDiameter : this.m_depthBuffer[S] = 0
                }
                ,
                n.prototype.GetInsideBoundsEnumerator = function(t) {
                    var e = n.computeTag(this.m_inverseDiameter * t.lowerBound.x - 1, this.m_inverseDiameter * t.lowerBound.y - 1)
                      , i = n.computeTag(this.m_inverseDiameter * t.upperBound.x + 1, this.m_inverseDiameter * t.upperBound.y + 1)
                      , r = this.m_proxyBuffer.count
                      , s = On(this.m_proxyBuffer.data, 0, r, e, n.Proxy.CompareProxyTag)
                      , a = Ln(this.m_proxyBuffer.data, 0, r, i, n.Proxy.CompareTagProxy);
                    return new n.InsideBoundsEnumerator(this,e,i,s,a)
                }
                ,
                n.prototype.UpdateAllParticleFlags = function() {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    this.m_allParticleFlags = 0;
                    for (var t = 0; t < this.m_count; t++)
                        this.m_allParticleFlags |= this.m_flagsBuffer.data[t];
                    this.m_needsUpdateAllParticleFlags = !1
                }
                ,
                n.prototype.UpdateAllGroupFlags = function() {
                    this.m_allGroupFlags = 0;
                    for (var t = this.m_groupList; t; t = t.GetNext())
                        this.m_allGroupFlags |= t.m_groupFlags;
                    this.m_needsUpdateAllGroupFlags = !1
                }
                ,
                n.prototype.AddContact = function(t, e) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    var i = n.AddContact_s_d
                      , r = this.m_positionBuffer.data
                      , s = I.SubVV(r[e], r[t], i)
                      , a = I.DotVV(s, s);
                    if (a < this.m_squaredDiameter) {
                        var o = b(a);
                        isFinite(o) || (o = 198177537e11);
                        var l = this.m_contactBuffer.data[this.m_contactBuffer.Append()];
                        l.indexA = t,
                        l.indexB = e,
                        l.flags = this.m_flagsBuffer.data[t] | this.m_flagsBuffer.data[e],
                        l.weight = 1 - a * o * this.m_inverseDiameter,
                        I.MulSV(o, s, l.normal)
                    }
                }
                ,
                n.prototype.FindContacts_Reference = function() {
                    var t = this.m_proxyBuffer.count;
                    this.m_contactBuffer.count = 0;
                    for (var e = 0, i = 0; e < t; e++) {
                        for (var r = n.computeRelativeTag(this.m_proxyBuffer.data[e].tag, 1, 0), s = e + 1; s < t && !(r < this.m_proxyBuffer.data[s].tag); s++)
                            this.AddContact(this.m_proxyBuffer.data[e].index, this.m_proxyBuffer.data[s].index, this.m_contactBuffer);
                        for (var a = n.computeRelativeTag(this.m_proxyBuffer.data[e].tag, -1, 1); i < t && !(a <= this.m_proxyBuffer.data[i].tag); i++)
                            ;
                        var o = n.computeRelativeTag(this.m_proxyBuffer.data[e].tag, 1, 1);
                        for (s = i; s < t && !(o < this.m_proxyBuffer.data[s].tag); s++)
                            this.AddContact(this.m_proxyBuffer.data[e].index, this.m_proxyBuffer.data[s].index, this.m_contactBuffer)
                    }
                }
                ,
                n.prototype.FindContacts = function(t) {
                    this.FindContacts_Reference(t)
                }
                ,
                n.prototype.UpdateProxies_Reference = function() {
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    for (var t = this.m_positionBuffer.data, e = this.m_inverseDiameter, i = 0; i < this.m_proxyBuffer.count; ++i) {
                        var r = this.m_proxyBuffer.data[i]
                          , s = t[r.index];
                        r.tag = n.computeTag(e * s.x, e * s.y)
                    }
                }
                ,
                n.prototype.UpdateProxies = function(t) {
                    this.UpdateProxies_Reference(t)
                }
                ,
                n.prototype.SortProxies = function() {
                    In(this.m_proxyBuffer.data, 0, this.m_proxyBuffer.count, n.Proxy.CompareProxyProxy)
                }
                ,
                n.prototype.FilterContacts = function() {
                    var e = this.GetParticleContactFilter();
                    if (null !== e) {
                        var i = this;
                        this.m_contactBuffer.RemoveIf((function(n) {
                            return 0 != (n.flags & t.b2ParticleFlag.b2_particleContactFilterParticle) && !e.ShouldCollideParticleParticle(i, n.indexA, n.indexB)
                        }
                        ))
                    }
                }
                ,
                n.prototype.NotifyContactListenerPreContact = function(t) {
                    if (null !== this.GetParticleContactListener())
                        throw t.Initialize(this.m_contactBuffer, this.m_flagsBuffer),
                        new Error
                }
                ,
                n.prototype.NotifyContactListenerPostContact = function() {
                    var t = this.GetParticleContactListener();
                    if (null !== t) {
                        for (var e = 0; e < this.m_contactBuffer.count; ++e) {
                            var i = this.m_contactBuffer.data[e];
                            t.BeginContactParticleParticle(this, i)
                        }
                        throw new Error
                    }
                }
                ,
                n.b2ParticleContactIsZombie = function(e) {
                    return (e.flags & t.b2ParticleFlag.b2_zombieParticle) === t.b2ParticleFlag.b2_zombieParticle
                }
                ,
                n.prototype.UpdateContacts = function(t) {
                    this.UpdateProxies(this.m_proxyBuffer),
                    this.SortProxies(this.m_proxyBuffer);
                    var e = new n.b2ParticlePairSet;
                    this.NotifyContactListenerPreContact(e),
                    this.FindContacts(this.m_contactBuffer),
                    this.FilterContacts(this.m_contactBuffer),
                    this.NotifyContactListenerPostContact(e),
                    t && this.m_contactBuffer.RemoveIf(n.b2ParticleContactIsZombie)
                }
                ,
                n.prototype.NotifyBodyContactListenerPreContact = function(t) {
                    if (null !== this.GetFixtureContactListener())
                        throw t.Initialize(this.m_bodyContactBuffer, this.m_flagsBuffer),
                        new Error
                }
                ,
                n.prototype.NotifyBodyContactListenerPostContact = function() {
                    var t = this.GetFixtureContactListener();
                    if (null !== t) {
                        for (var e = 0; e < this.m_bodyContactBuffer.count; e++) {
                            var i = this.m_bodyContactBuffer.data[e];
                            t.BeginContactFixtureParticle(this, i)
                        }
                        throw new Error
                    }
                }
                ,
                n.prototype.UpdateBodyContacts = function() {
                    var t = n.UpdateBodyContacts_s_aabb
                      , e = new n.FixtureParticleSet;
                    if (this.NotifyBodyContactListenerPreContact(e),
                    this.m_stuckThreshold > 0) {
                        if (!this.m_bodyContactCountBuffer.data)
                            throw new Error;
                        if (!this.m_lastBodyContactStepBuffer.data)
                            throw new Error;
                        if (!this.m_consecutiveContactStepsBuffer.data)
                            throw new Error;
                        for (var i = this.GetParticleCount(), r = 0; r < i; r++)
                            this.m_bodyContactCountBuffer.data[r] = 0,
                            this.m_timestamp > this.m_lastBodyContactStepBuffer.data[r] + 1 && (this.m_consecutiveContactStepsBuffer.data[r] = 0)
                    }
                    this.m_bodyContactBuffer.SetCount(0),
                    this.m_stuckParticleBuffer.SetCount(0);
                    var s = t;
                    this.ComputeAABB(s);
                    var a = new n.UpdateBodyContactsCallback(this,this.GetFixtureContactFilter());
                    this.m_world.QueryAABB(a, s),
                    this.m_def.strictContactCheck && this.RemoveSpuriousBodyContacts(),
                    this.NotifyBodyContactListenerPostContact(e)
                }
                ,
                n.prototype.Solve = function(e) {
                    var i = n.Solve_s_subStep;
                    if (0 !== this.m_count && (this.m_expirationTimeBuffer.data && this.SolveLifetimes(e),
                    this.m_allParticleFlags & t.b2ParticleFlag.b2_zombieParticle && this.SolveZombie(),
                    this.m_needsUpdateAllParticleFlags && this.UpdateAllParticleFlags(),
                    this.m_needsUpdateAllGroupFlags && this.UpdateAllGroupFlags(),
                    !this.m_paused))
                        for (this.m_iterationIndex = 0; this.m_iterationIndex < e.particleIterations; this.m_iterationIndex++) {
                            ++this.m_timestamp;
                            var r = i.Copy(e);
                            if (r.dt /= e.particleIterations,
                            r.inv_dt *= e.particleIterations,
                            this.UpdateContacts(!1),
                            this.UpdateBodyContacts(),
                            this.ComputeWeight(),
                            this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth && this.ComputeDepth(),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_reactiveParticle && this.UpdatePairsAndTriadsWithReactiveParticles(),
                            this.m_hasForce && this.SolveForce(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_viscousParticle && this.SolveViscous(),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_repulsiveParticle && this.SolveRepulsive(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_powderParticle && this.SolvePowder(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_tensileParticle && this.SolveTensile(r),
                            this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_solidParticleGroup && this.SolveSolid(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_colorMixingParticle && this.SolveColorMixing(),
                            this.SolveGravity(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_staticPressureParticle && this.SolveStaticPressure(r),
                            this.SolvePressure(r),
                            this.SolveDamping(r),
                            this.m_allParticleFlags & n.k_extraDampingFlags && this.SolveExtraDamping(),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_elasticParticle && this.SolveElastic(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_springParticle && this.SolveSpring(r),
                            this.LimitVelocity(r),
                            this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigidDamping(),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_barrierParticle && this.SolveBarrier(r),
                            this.SolveCollision(r),
                            this.m_allGroupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup && this.SolveRigid(r),
                            this.m_allParticleFlags & t.b2ParticleFlag.b2_wallParticle && this.SolveWall(),
                            !this.m_positionBuffer.data)
                                throw new Error;
                            if (!this.m_velocityBuffer.data)
                                throw new Error;
                            for (var s = 0; s < this.m_count; s++)
                                this.m_positionBuffer.data[s].SelfMulAdd(r.dt, this.m_velocityBuffer.data[s])
                        }
                }
                ,
                n.prototype.SolveCollision = function(t) {
                    var e = n.SolveCollision_s_aabb;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    var r = this.m_positionBuffer.data
                      , s = this.m_velocityBuffer.data
                      , a = e;
                    a.lowerBound.x = +i,
                    a.lowerBound.y = +i,
                    a.upperBound.x = -i,
                    a.upperBound.y = -i;
                    for (var o = 0; o < this.m_count; o++) {
                        var l = s[o]
                          , h = r[o]
                          , c = h.x + t.dt * l.x
                          , u = h.y + t.dt * l.y;
                        a.lowerBound.x = y(a.lowerBound.x, y(h.x, c)),
                        a.lowerBound.y = y(a.lowerBound.y, y(h.y, u)),
                        a.upperBound.x = v(a.upperBound.x, v(h.x, c)),
                        a.upperBound.y = v(a.upperBound.y, v(h.y, u))
                    }
                    var _ = new n.SolveCollisionCallback(this,t);
                    this.m_world.QueryAABB(_, a)
                }
                ,
                n.prototype.LimitVelocity = function(t) {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = this.GetCriticalVelocitySquared(t), n = 0; n < this.m_count; n++) {
                        var r = e[n]
                          , s = I.DotVV(r, r);
                        s > i && r.SelfMul(T(i / s))
                    }
                }
                ,
                n.prototype.SolveGravity = function(t) {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var e = n.SolveGravity_s_gravity, i = this.m_velocityBuffer.data, r = I.MulSV(t.dt * this.m_def.gravityScale, this.m_world.GetGravity(), e), s = 0; s < this.m_count; s++)
                        i[s].SelfAdd(r)
                }
                ,
                n.prototype.SolveBarrier = function(e) {
                    var i = n.SolveBarrier_s_aabb
                      , r = n.SolveBarrier_s_va
                      , s = n.SolveBarrier_s_vb
                      , a = n.SolveBarrier_s_pba
                      , o = n.SolveBarrier_s_vba
                      , l = n.SolveBarrier_s_vc
                      , h = n.SolveBarrier_s_pca
                      , c = n.SolveBarrier_s_vca
                      , u = n.SolveBarrier_s_qba
                      , _ = n.SolveBarrier_s_qca
                      , f = n.SolveBarrier_s_dv
                      , d = n.SolveBarrier_s_f;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var p = this.m_positionBuffer.data, m = this.m_velocityBuffer.data, y = 0; y < this.m_count; y++)
                        0 != (this.m_flagsBuffer.data[y] & n.k_barrierWallFlags) && m[y].SetZero();
                    for (var v = 2.5 * e.dt, g = this.GetParticleMass(), A = 0; A < this.m_pairBuffer.count; A++) {
                        var x = this.m_pairBuffer.data[A];
                        if (x.flags & t.b2ParticleFlag.b2_barrierParticle) {
                            var b = x.indexA
                              , C = x.indexB
                              , S = p[b]
                              , w = p[C]
                              , E = i;
                            I.MinV(S, w, E.lowerBound),
                            I.MaxV(S, w, E.upperBound);
                            for (var M = this.m_groupBuffer[b], D = this.m_groupBuffer[C], B = this.GetLinearVelocity(M, b, S, r), P = this.GetLinearVelocity(D, C, w, s), R = I.SubVV(w, S, a), O = I.SubVV(P, B, o), L = this.GetInsideBoundsEnumerator(E), F = void 0; (F = L.GetNext()) >= 0; ) {
                                var V = p[F]
                                  , N = this.m_groupBuffer[F];
                                if (M !== N && D !== N) {
                                    var k = this.GetLinearVelocity(N, F, V, l)
                                      , G = I.SubVV(V, S, h)
                                      , U = I.SubVV(k, B, c)
                                      , z = I.CrossVV(O, U)
                                      , H = I.CrossVV(R, U) - I.CrossVV(G, O)
                                      , W = I.CrossVV(R, G)
                                      , j = void 0
                                      , X = void 0
                                      , Y = u
                                      , q = _;
                                    if (0 === z) {
                                        if (0 === H)
                                            continue;
                                        if (!((X = -W / H) >= 0 && X < v))
                                            continue;
                                        if (I.AddVMulSV(R, X, O, Y),
                                        I.AddVMulSV(G, X, U, q),
                                        !((j = I.DotVV(Y, q) / I.DotVV(Y, Y)) >= 0 && j <= 1))
                                            continue
                                    } else {
                                        var J = H * H - 4 * W * z;
                                        if (J < 0)
                                            continue;
                                        var Z = T(J)
                                          , K = (-H - Z) / (2 * z)
                                          , Q = (-H + Z) / (2 * z);
                                        if (K > Q) {
                                            var $ = K;
                                            K = Q,
                                            Q = $
                                        }
                                        if (X = K,
                                        I.AddVMulSV(R, X, O, Y),
                                        I.AddVMulSV(G, X, U, q),
                                        j = I.DotVV(Y, q) / I.DotVV(Y, Y),
                                        !(X >= 0 && X < v && j >= 0 && j <= 1)) {
                                            if (!((X = Q) >= 0 && X < v))
                                                continue;
                                            if (I.AddVMulSV(R, X, O, Y),
                                            I.AddVMulSV(G, X, U, q),
                                            !((j = I.DotVV(Y, q) / I.DotVV(Y, Y)) >= 0 && j <= 1))
                                                continue
                                        }
                                    }
                                    var tt = f;
                                    tt.x = B.x + j * O.x - k.x,
                                    tt.y = B.y + j * O.y - k.y;
                                    var et = I.MulSV(g, tt, d);
                                    if (N && this.IsRigidGroup(N)) {
                                        var it = N.GetMass()
                                          , nt = N.GetInertia();
                                        it > 0 && N.m_linearVelocity.SelfMulAdd(1 / it, et),
                                        nt > 0 && (N.m_angularVelocity += I.CrossVV(I.SubVV(V, N.GetCenter(), I.s_t0), et) / nt)
                                    } else
                                        m[F].SelfAdd(tt);
                                    this.ParticleApplyForce(F, et.SelfMul(-e.inv_dt))
                                }
                            }
                        }
                    }
                }
                ,
                n.prototype.SolveStaticPressure = function(e) {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    this.m_staticPressureBuffer = this.RequestBuffer(this.m_staticPressureBuffer);
                    for (var i = this.GetCriticalPressure(e), n = this.m_def.staticPressureStrength * i, r = .25 * i, s = this.m_def.staticPressureRelaxation, a = 0; a < this.m_def.staticPressureIterations; a++) {
                        for (var o = 0; o < this.m_count; o++)
                            this.m_accumulationBuffer[o] = 0;
                        for (var l = 0; l < this.m_contactBuffer.count; l++) {
                            var h = this.m_contactBuffer.data[l];
                            if (h.flags & t.b2ParticleFlag.b2_staticPressureParticle) {
                                var c = h.indexA
                                  , u = h.indexB
                                  , _ = h.weight;
                                this.m_accumulationBuffer[c] += _ * this.m_staticPressureBuffer[u],
                                this.m_accumulationBuffer[u] += _ * this.m_staticPressureBuffer[c]
                            }
                        }
                        for (o = 0; o < this.m_count; o++)
                            if (_ = this.m_weightBuffer[o],
                            this.m_flagsBuffer.data[o] & t.b2ParticleFlag.b2_staticPressureParticle) {
                                var f = (this.m_accumulationBuffer[o] + n * (_ - 1)) / (_ + s);
                                this.m_staticPressureBuffer[o] = g(f, 0, r)
                            } else
                                this.m_staticPressureBuffer[o] = 0
                    }
                }
                ,
                n.prototype.ComputeWeight = function() {
                    for (var t = 0; t < this.m_count; t++)
                        this.m_weightBuffer[t] = 0;
                    for (t = 0; t < this.m_bodyContactBuffer.count; t++) {
                        var e = (n = this.m_bodyContactBuffer.data[t]).index
                          , i = n.weight;
                        this.m_weightBuffer[e] += i
                    }
                    for (t = 0; t < this.m_contactBuffer.count; t++) {
                        e = (n = this.m_contactBuffer.data[t]).indexA;
                        var n, r = n.indexB;
                        i = n.weight,
                        this.m_weightBuffer[e] += i,
                        this.m_weightBuffer[r] += i
                    }
                }
                ,
                n.prototype.SolvePressure = function(e) {
                    var i = n.SolvePressure_s_f;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, a = this.GetCriticalPressure(e), o = this.m_def.pressureStrength * a, l = .25 * a, h = 0; h < this.m_count; h++) {
                        var c = this.m_weightBuffer[h]
                          , u = o * v(0, c - 1);
                        this.m_accumulationBuffer[h] = y(u, l)
                    }
                    if (this.m_allParticleFlags & n.k_noPressureFlags)
                        for (h = 0; h < this.m_count; h++)
                            this.m_flagsBuffer.data[h] & n.k_noPressureFlags && (this.m_accumulationBuffer[h] = 0);
                    if (this.m_allParticleFlags & t.b2ParticleFlag.b2_staticPressureParticle)
                        for (h = 0; h < this.m_count; h++)
                            this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_staticPressureParticle && (this.m_accumulationBuffer[h] += this.m_staticPressureBuffer[h]);
                    for (var _ = e.dt / (this.m_def.density * this.m_particleDiameter), f = this.GetParticleInvMass(), d = 0; d < this.m_bodyContactBuffer.count; d++) {
                        var p = (C = this.m_bodyContactBuffer.data[d]).index
                          , m = C.body
                          , g = (c = C.weight,
                        C.mass)
                          , A = C.normal
                          , x = r[p]
                          , b = (u = this.m_accumulationBuffer[p] + o * c,
                        I.MulSV(_ * c * g * u, A, i));
                        s[p].SelfMulSub(f, b),
                        m.ApplyLinearImpulse(b, x, !0)
                    }
                    for (d = 0; d < this.m_contactBuffer.count; d++) {
                        var C;
                        p = (C = this.m_contactBuffer.data[d]).indexA,
                        m = C.indexB,
                        c = C.weight,
                        A = C.normal,
                        u = this.m_accumulationBuffer[p] + this.m_accumulationBuffer[m],
                        b = I.MulSV(_ * c * u, A, i),
                        s[p].SelfSub(b),
                        s[m].SelfAdd(b)
                    }
                }
                ,
                n.prototype.SolveDamping = function(t) {
                    var e = n.SolveDamping_s_v
                      , i = n.SolveDamping_s_f;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, a = this.m_def.dampingStrength, o = 1 / this.GetCriticalVelocity(t), l = this.GetParticleInvMass(), h = 0; h < this.m_bodyContactBuffer.count; h++) {
                        var c = (x = this.m_bodyContactBuffer.data[h]).index
                          , u = x.body
                          , _ = x.weight
                          , f = x.mass
                          , d = x.normal
                          , p = r[c]
                          , m = I.SubVV(u.GetLinearVelocityFromWorldPoint(p, I.s_t0), s[c], e);
                        if ((b = I.DotVV(m, d)) < 0) {
                            var g = v(a * _, y(-o * b, .5))
                              , A = I.MulSV(g * f * b, d, i);
                            s[c].SelfMulAdd(l, A),
                            u.ApplyLinearImpulse(A.SelfNeg(), p, !0)
                        }
                    }
                    for (h = 0; h < this.m_contactBuffer.count; h++) {
                        var x, b;
                        c = (x = this.m_contactBuffer.data[h]).indexA,
                        u = x.indexB,
                        _ = x.weight,
                        d = x.normal,
                        m = I.SubVV(s[u], s[c], e),
                        (b = I.DotVV(m, d)) < 0 && (g = v(a * _, y(-o * b, .5)),
                        A = I.MulSV(g * b, d, i),
                        s[c].SelfAdd(A),
                        s[u].SelfSub(A))
                    }
                }
                ,
                n.prototype.SolveRigidDamping = function() {
                    var t = n.SolveRigidDamping_s_t0
                      , e = n.SolveRigidDamping_s_t1
                      , i = n.SolveRigidDamping_s_p
                      , r = n.SolveRigidDamping_s_v
                      , s = [0]
                      , a = [0]
                      , o = [0]
                      , l = [0]
                      , h = [0]
                      , c = [0];
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    for (var u = this.m_positionBuffer.data, _ = this.m_def.dampingStrength, f = 0; f < this.m_bodyContactBuffer.count; f++) {
                        var d = (b = this.m_bodyContactBuffer.data[f]).index;
                        if ((T = this.m_groupBuffer[d]) && this.IsRigidGroup(T)) {
                            var p = b.body
                              , m = b.normal
                              , v = b.weight
                              , g = u[d]
                              , A = I.SubVV(p.GetLinearVelocityFromWorldPoint(g, t), T.GetLinearVelocityFromWorldPoint(g, e), r);
                            if ((C = I.DotVV(A, m)) < 0) {
                                this.InitDampingParameterWithRigidGroupOrParticle(s, a, o, !0, T, d, g, m),
                                this.InitDampingParameter(l, h, c, p.GetMass(), p.GetInertia() - p.GetMass() * p.GetLocalCenter().LengthSquared(), p.GetWorldCenter(), g, m);
                                var x = _ * y(v, 1) * this.ComputeDampingImpulse(s[0], a[0], o[0], l[0], h[0], c[0], C);
                                this.ApplyDamping(s[0], a[0], o[0], !0, T, d, x, m),
                                p.ApplyLinearImpulse(I.MulSV(-x, m, I.s_t0), g, !0)
                            }
                        }
                    }
                    for (f = 0; f < this.m_contactBuffer.count; f++) {
                        d = (b = this.m_contactBuffer.data[f]).indexA,
                        p = b.indexB,
                        m = b.normal,
                        v = b.weight;
                        var b, C, T = this.m_groupBuffer[d], S = this.m_groupBuffer[p], w = this.IsRigidGroup(T), E = this.IsRigidGroup(S);
                        T !== S && (w || E) && (g = I.MidVV(u[d], u[p], i),
                        A = I.SubVV(this.GetLinearVelocity(S, p, g, t), this.GetLinearVelocity(T, d, g, e), r),
                        (C = I.DotVV(A, m)) < 0 && (this.InitDampingParameterWithRigidGroupOrParticle(s, a, o, w, T, d, g, m),
                        this.InitDampingParameterWithRigidGroupOrParticle(l, h, c, E, S, p, g, m),
                        x = _ * v * this.ComputeDampingImpulse(s[0], a[0], o[0], l[0], h[0], c[0], C),
                        this.ApplyDamping(s[0], a[0], o[0], w, T, d, x, m),
                        this.ApplyDamping(l[0], h[0], c[0], E, S, p, -x, m)))
                    }
                }
                ,
                n.prototype.SolveExtraDamping = function() {
                    var t = n.SolveExtraDamping_s_v
                      , e = n.SolveExtraDamping_s_f;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var i = this.m_velocityBuffer.data, r = this.m_positionBuffer.data, s = this.GetParticleInvMass(), a = 0; a < this.m_bodyContactBuffer.count; a++) {
                        var o = this.m_bodyContactBuffer.data[a]
                          , l = o.index;
                        if (this.m_flagsBuffer.data[l] & n.k_extraDampingFlags) {
                            var h = o.body
                              , c = o.mass
                              , u = o.normal
                              , _ = r[l]
                              , f = I.SubVV(h.GetLinearVelocityFromWorldPoint(_, I.s_t0), i[l], t)
                              , d = I.DotVV(f, u);
                            if (d < 0) {
                                var p = I.MulSV(.5 * c * d, u, e);
                                i[l].SelfMulAdd(s, p),
                                h.ApplyLinearImpulse(p.SelfNeg(), _, !0)
                            }
                        }
                    }
                }
                ,
                n.prototype.SolveWall = function() {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = 0; i < this.m_count; i++)
                        this.m_flagsBuffer.data[i] & t.b2ParticleFlag.b2_wallParticle && e[i].SetZero()
                }
                ,
                n.prototype.SolveRigid = function(e) {
                    var i = n.SolveRigid_s_position
                      , r = n.SolveRigid_s_rotation
                      , s = n.SolveRigid_s_transform
                      , a = n.SolveRigid_s_velocityTransform;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var o = this.m_positionBuffer.data, l = this.m_velocityBuffer.data, h = this.m_groupList; h; h = h.GetNext())
                        if (h.m_groupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup) {
                            h.UpdateStatistics();
                            var c = r;
                            c.SetAngle(e.dt * h.m_angularVelocity);
                            var u = I.AddVV(h.m_center, I.SubVV(I.MulSV(e.dt, h.m_linearVelocity, I.s_t0), F.MulRV(c, h.m_center, I.s_t1), I.s_t0), i)
                              , _ = s;
                            _.SetPositionRotation(u, c),
                            V.MulXX(_, h.m_transform, h.m_transform);
                            var f = a;
                            f.p.x = e.inv_dt * _.p.x,
                            f.p.y = e.inv_dt * _.p.y,
                            f.q.s = e.inv_dt * _.q.s,
                            f.q.c = e.inv_dt * (_.q.c - 1);
                            for (var d = h.m_firstIndex; d < h.m_lastIndex; d++)
                                V.MulXV(f, o[d], l[d])
                        }
                }
                ,
                n.prototype.SolveElastic = function(e) {
                    var i = n.SolveElastic_s_pa
                      , r = n.SolveElastic_s_pb
                      , s = n.SolveElastic_s_pc
                      , a = n.SolveElastic_s_r
                      , o = n.SolveElastic_s_t0;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var l = this.m_positionBuffer.data, h = this.m_velocityBuffer.data, c = e.inv_dt * this.m_def.elasticStrength, u = 0; u < this.m_triadBuffer.count; u++) {
                        var _ = this.m_triadBuffer.data[u];
                        if (_.flags & t.b2ParticleFlag.b2_elasticParticle) {
                            var f = _.indexA
                              , d = _.indexB
                              , p = _.indexC
                              , m = _.pa
                              , y = _.pb
                              , v = _.pc
                              , g = i.Copy(l[f])
                              , A = r.Copy(l[d])
                              , x = s.Copy(l[p])
                              , C = h[f]
                              , T = h[d]
                              , S = h[p];
                            g.SelfMulAdd(e.dt, C),
                            A.SelfMulAdd(e.dt, T),
                            x.SelfMulAdd(e.dt, S);
                            var w = (g.x + A.x + x.x) / 3
                              , E = (g.y + A.y + x.y) / 3;
                            g.x -= w,
                            g.y -= E,
                            A.x -= w,
                            A.y -= E,
                            x.x -= w,
                            x.y -= E;
                            var M = a;
                            M.s = I.CrossVV(m, g) + I.CrossVV(y, A) + I.CrossVV(v, x),
                            M.c = I.DotVV(m, g) + I.DotVV(y, A) + I.DotVV(v, x);
                            var D = b(M.s * M.s + M.c * M.c);
                            isFinite(D) || (D = 198177537e11),
                            M.s *= D,
                            M.c *= D;
                            var B = c * _.strength;
                            F.MulRV(M, m, o),
                            I.SubVV(o, g, o),
                            I.MulSV(B, o, o),
                            C.SelfAdd(o),
                            F.MulRV(M, y, o),
                            I.SubVV(o, A, o),
                            I.MulSV(B, o, o),
                            T.SelfAdd(o),
                            F.MulRV(M, v, o),
                            I.SubVV(o, x, o),
                            I.MulSV(B, o, o),
                            S.SelfAdd(o)
                        }
                    }
                }
                ,
                n.prototype.SolveSpring = function(e) {
                    var i = n.SolveSpring_s_pa
                      , r = n.SolveSpring_s_pb
                      , s = n.SolveSpring_s_d
                      , a = n.SolveSpring_s_f;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var o = this.m_positionBuffer.data, l = this.m_velocityBuffer.data, h = e.inv_dt * this.m_def.springStrength, c = 0; c < this.m_pairBuffer.count; c++) {
                        var u = this.m_pairBuffer.data[c];
                        if (u.flags & t.b2ParticleFlag.b2_springParticle) {
                            var _ = u.indexA
                              , f = u.indexB
                              , d = i.Copy(o[_])
                              , p = r.Copy(o[f])
                              , m = l[_]
                              , y = l[f];
                            d.SelfMulAdd(e.dt, m),
                            p.SelfMulAdd(e.dt, y);
                            var v = I.SubVV(p, d, s)
                              , g = u.distance
                              , A = v.Length()
                              , x = h * u.strength
                              , b = I.MulSV(x * (g - A) / A, v, a);
                            m.SelfSub(b),
                            y.SelfAdd(b)
                        }
                    }
                }
                ,
                n.prototype.SolveTensile = function(e) {
                    var i = n.SolveTensile_s_weightedNormal
                      , r = n.SolveTensile_s_s
                      , s = n.SolveTensile_s_f;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var a = this.m_velocityBuffer.data, o = 0; o < this.m_count; o++)
                        this.m_accumulation2Buffer[o] = new I,
                        this.m_accumulation2Buffer[o].SetZero();
                    for (var l = 0; l < this.m_contactBuffer.count; l++)
                        if ((g = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_tensileParticle) {
                            var h = g.indexA
                              , c = g.indexB
                              , u = g.weight
                              , _ = g.normal
                              , f = I.MulSV((1 - u) * u, _, i);
                            this.m_accumulation2Buffer[h].SelfSub(f),
                            this.m_accumulation2Buffer[c].SelfAdd(f)
                        }
                    var d = this.GetCriticalVelocity(e)
                      , p = this.m_def.surfaceTensionPressureStrength * d
                      , m = this.m_def.surfaceTensionNormalStrength * d
                      , v = .5 * d;
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var g;
                        if ((g = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_tensileParticle) {
                            h = g.indexA,
                            c = g.indexB,
                            u = g.weight,
                            _ = g.normal;
                            var A = this.m_weightBuffer[h] + this.m_weightBuffer[c]
                              , x = I.SubVV(this.m_accumulation2Buffer[c], this.m_accumulation2Buffer[h], r)
                              , b = y(p * (A - 2) + m * I.DotVV(x, _), v) * u
                              , C = I.MulSV(b, _, s);
                            a[h].SelfSub(C),
                            a[c].SelfAdd(C)
                        }
                    }
                }
                ,
                n.prototype.SolveViscous = function() {
                    var e = n.SolveViscous_s_v
                      , i = n.SolveViscous_s_f;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, a = this.m_def.viscousStrength, o = this.GetParticleInvMass(), l = 0; l < this.m_bodyContactBuffer.count; l++) {
                        var h = (m = this.m_bodyContactBuffer.data[l]).index;
                        if (this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_viscousParticle) {
                            var c = m.body
                              , u = m.weight
                              , _ = m.mass
                              , f = r[h]
                              , d = I.SubVV(c.GetLinearVelocityFromWorldPoint(f, I.s_t0), s[h], e)
                              , p = I.MulSV(a * _ * u, d, i);
                            s[h].SelfMulAdd(o, p),
                            c.ApplyLinearImpulse(p.SelfNeg(), f, !0)
                        }
                    }
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var m;
                        (m = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_viscousParticle && (h = m.indexA,
                        c = m.indexB,
                        u = m.weight,
                        d = I.SubVV(s[c], s[h], e),
                        p = I.MulSV(a * u, d, i),
                        s[h].SelfAdd(p),
                        s[c].SelfSub(p))
                    }
                }
                ,
                n.prototype.SolveRepulsive = function(e) {
                    var i = n.SolveRepulsive_s_f;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var r = this.m_velocityBuffer.data, s = this.m_def.repulsiveStrength * this.GetCriticalVelocity(e), a = 0; a < this.m_contactBuffer.count; a++) {
                        var o = this.m_contactBuffer.data[a];
                        if (o.flags & t.b2ParticleFlag.b2_repulsiveParticle) {
                            var l = o.indexA
                              , h = o.indexB;
                            if (this.m_groupBuffer[l] !== this.m_groupBuffer[h]) {
                                var c = o.weight
                                  , u = o.normal
                                  , _ = I.MulSV(s * c, u, i);
                                r[l].SelfSub(_),
                                r[h].SelfAdd(_)
                            }
                        }
                    }
                }
                ,
                n.prototype.SolvePowder = function(e) {
                    var i = n.SolvePowder_s_f;
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var r = this.m_positionBuffer.data, s = this.m_velocityBuffer.data, a = this.m_def.powderStrength * this.GetCriticalVelocity(e), o = this.GetParticleInvMass(), l = 0; l < this.m_bodyContactBuffer.count; l++) {
                        var h = (p = this.m_bodyContactBuffer.data[l]).index;
                        if (this.m_flagsBuffer.data[h] & t.b2ParticleFlag.b2_powderParticle && (m = p.weight) > .25) {
                            var c = p.body
                              , u = p.mass
                              , _ = r[h]
                              , f = p.normal
                              , d = I.MulSV(a * u * (m - .25), f, i);
                            s[h].SelfMulSub(o, d),
                            c.ApplyLinearImpulse(d, _, !0)
                        }
                    }
                    for (l = 0; l < this.m_contactBuffer.count; l++) {
                        var p, m;
                        (p = this.m_contactBuffer.data[l]).flags & t.b2ParticleFlag.b2_powderParticle && (m = p.weight) > .25 && (h = p.indexA,
                        c = p.indexB,
                        f = p.normal,
                        d = I.MulSV(a * (m - .25), f, i),
                        s[h].SelfSub(d),
                        s[c].SelfAdd(d))
                    }
                }
                ,
                n.prototype.SolveSolid = function(t) {
                    var e = n.SolveSolid_s_f;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    var i = this.m_velocityBuffer.data;
                    this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer);
                    for (var r = t.inv_dt * this.m_def.ejectionStrength, s = 0; s < this.m_contactBuffer.count; s++) {
                        var a = this.m_contactBuffer.data[s]
                          , o = a.indexA
                          , l = a.indexB;
                        if (this.m_groupBuffer[o] !== this.m_groupBuffer[l]) {
                            var h = a.weight
                              , c = a.normal
                              , u = this.m_depthBuffer[o] + this.m_depthBuffer[l]
                              , _ = I.MulSV(r * u * h, c, e);
                            i[o].SelfSub(_),
                            i[l].SelfAdd(_)
                        }
                    }
                }
                ,
                n.prototype.SolveForce = function(t) {
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var e = this.m_velocityBuffer.data, i = t.dt * this.GetParticleInvMass(), n = 0; n < this.m_count; n++)
                        e[n].SelfMulAdd(i, this.m_forceBuffer[n]);
                    this.m_hasForce = !1
                }
                ,
                n.prototype.SolveColorMixing = function() {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_colorBuffer.data)
                        throw new Error;
                    var e = .5 * this.m_def.colorMixingStrength;
                    if (e)
                        for (var i = 0; i < this.m_contactBuffer.count; i++) {
                            var n = this.m_contactBuffer.data[i]
                              , r = n.indexA
                              , s = n.indexB;
                            if (this.m_flagsBuffer.data[r] & this.m_flagsBuffer.data[s] & t.b2ParticleFlag.b2_colorMixingParticle) {
                                var a = this.m_colorBuffer.data[r]
                                  , o = this.m_colorBuffer.data[s];
                                k.MixColors(a, o, e)
                            }
                        }
                }
                ,
                n.prototype.SolveZombie = function() {
                    if (!this.m_flagsBuffer.data)
                        throw new Error;
                    if (!this.m_positionBuffer.data)
                        throw new Error;
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    for (var e = 0, i = [], n = 0; n < this.m_count; n++)
                        i[n] = u;
                    var r = 0;
                    for (n = 0; n < this.m_count; n++) {
                        var s = this.m_flagsBuffer.data[n];
                        if (s & t.b2ParticleFlag.b2_zombieParticle) {
                            var a = this.m_world.m_destructionListener;
                            s & t.b2ParticleFlag.b2_destructionListenerParticle && a && a.SayGoodbyeParticle(this, n),
                            this.m_handleIndexBuffer.data && (o = this.m_handleIndexBuffer.data[n]) && (o.SetIndex(u),
                            this.m_handleIndexBuffer.data[n] = null),
                            i[n] = u
                        } else {
                            var o;
                            i[n] = e,
                            n !== e && (this.m_handleIndexBuffer.data && ((o = this.m_handleIndexBuffer.data[n]) && o.SetIndex(e),
                            this.m_handleIndexBuffer.data[e] = o),
                            this.m_flagsBuffer.data[e] = this.m_flagsBuffer.data[n],
                            this.m_lastBodyContactStepBuffer.data && (this.m_lastBodyContactStepBuffer.data[e] = this.m_lastBodyContactStepBuffer.data[n]),
                            this.m_bodyContactCountBuffer.data && (this.m_bodyContactCountBuffer.data[e] = this.m_bodyContactCountBuffer.data[n]),
                            this.m_consecutiveContactStepsBuffer.data && (this.m_consecutiveContactStepsBuffer.data[e] = this.m_consecutiveContactStepsBuffer.data[n]),
                            this.m_positionBuffer.data[e].Copy(this.m_positionBuffer.data[n]),
                            this.m_velocityBuffer.data[e].Copy(this.m_velocityBuffer.data[n]),
                            this.m_groupBuffer[e] = this.m_groupBuffer[n],
                            this.m_hasForce && this.m_forceBuffer[e].Copy(this.m_forceBuffer[n]),
                            this.m_staticPressureBuffer && (this.m_staticPressureBuffer[e] = this.m_staticPressureBuffer[n]),
                            this.m_depthBuffer && (this.m_depthBuffer[e] = this.m_depthBuffer[n]),
                            this.m_colorBuffer.data && this.m_colorBuffer.data[e].Copy(this.m_colorBuffer.data[n]),
                            this.m_userDataBuffer.data && (this.m_userDataBuffer.data[e] = this.m_userDataBuffer.data[n]),
                            this.m_expirationTimeBuffer.data && (this.m_expirationTimeBuffer.data[e] = this.m_expirationTimeBuffer.data[n])),
                            e++,
                            r |= s
                        }
                    }
                    for (var l = 0; l < this.m_proxyBuffer.count; l++) {
                        var h = this.m_proxyBuffer.data[l];
                        h.index = i[h.index]
                    }
                    for (this.m_proxyBuffer.RemoveIf((function(t) {
                        return t.index < 0
                    }
                    )),
                    l = 0; l < this.m_contactBuffer.count; l++)
                        (c = this.m_contactBuffer.data[l]).indexA = i[c.indexA],
                        c.indexB = i[c.indexB];
                    for (this.m_contactBuffer.RemoveIf((function(t) {
                        return t.indexA < 0 || t.indexB < 0
                    }
                    )),
                    l = 0; l < this.m_bodyContactBuffer.count; l++) {
                        var c;
                        (c = this.m_bodyContactBuffer.data[l]).index = i[c.index]
                    }
                    for (this.m_bodyContactBuffer.RemoveIf((function(t) {
                        return t.index < 0
                    }
                    )),
                    l = 0; l < this.m_pairBuffer.count; l++) {
                        var _ = this.m_pairBuffer.data[l];
                        _.indexA = i[_.indexA],
                        _.indexB = i[_.indexB]
                    }
                    for (this.m_pairBuffer.RemoveIf((function(t) {
                        return t.indexA < 0 || t.indexB < 0
                    }
                    )),
                    l = 0; l < this.m_triadBuffer.count; l++) {
                        var f = this.m_triadBuffer.data[l];
                        f.indexA = i[f.indexA],
                        f.indexB = i[f.indexB],
                        f.indexC = i[f.indexC]
                    }
                    if (this.m_triadBuffer.RemoveIf((function(t) {
                        return t.indexA < 0 || t.indexB < 0 || t.indexC < 0
                    }
                    )),
                    this.m_indexByExpirationTimeBuffer.data)
                        for (var d = 0, p = 0; p < this.m_count; p++) {
                            var m = i[this.m_indexByExpirationTimeBuffer.data[p]];
                            m !== u && (this.m_indexByExpirationTimeBuffer.data[d++] = m)
                        }
                    for (var g = this.m_groupList; g; g = g.GetNext()) {
                        var A = e
                          , x = 0
                          , b = !1;
                        for (n = g.m_firstIndex; n < g.m_lastIndex; n++) {
                            var C = i[n];
                            C >= 0 ? (A = y(A, C),
                            x = v(x, C + 1)) : b = !0
                        }
                        A < x ? (g.m_firstIndex = A,
                        g.m_lastIndex = x,
                        b && g.m_groupFlags & t.b2ParticleGroupFlag.b2_solidParticleGroup && this.SetGroupFlags(g, g.m_groupFlags | t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth)) : (g.m_firstIndex = 0,
                        g.m_lastIndex = 0,
                        g.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupCanBeEmpty || this.SetGroupFlags(g, g.m_groupFlags | t.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed))
                    }
                    for (this.m_count = e,
                    this.m_allParticleFlags = r,
                    this.m_needsUpdateAllParticleFlags = !1,
                    g = this.m_groupList; g; ) {
                        var T = g.GetNext();
                        g.m_groupFlags & t.b2ParticleGroupFlag.b2_particleGroupWillBeDestroyed && this.DestroyParticleGroup(g),
                        g = T
                    }
                }
                ,
                n.prototype.SolveLifetimes = function(t) {
                    if (!this.m_expirationTimeBuffer.data)
                        throw new Error;
                    if (!this.m_indexByExpirationTimeBuffer.data)
                        throw new Error;
                    this.m_timeElapsed = this.LifetimeToExpirationTime(t.dt);
                    var e = this.GetQuantizedTimeElapsed()
                      , i = this.m_expirationTimeBuffer.data
                      , n = this.m_indexByExpirationTimeBuffer.data
                      , r = this.GetParticleCount();
                    this.m_expirationTimeBufferRequiresSorting && (In(n, 0, r, (function(t, e) {
                        var n = i[t]
                          , r = i[e]
                          , s = n <= 0;
                        return s === r <= 0 ? n > r : s
                    }
                    )),
                    this.m_expirationTimeBufferRequiresSorting = !1);
                    for (var s = r - 1; s >= 0; --s) {
                        var a = n[s]
                          , o = i[a];
                        if (e < o || o <= 0)
                            break;
                        this.DestroyParticle(a)
                    }
                }
                ,
                n.prototype.RotateBuffer = function(t, e, i) {
                    if (t !== e && e !== i) {
                        if (!this.m_flagsBuffer.data)
                            throw new Error;
                        if (!this.m_positionBuffer.data)
                            throw new Error;
                        if (!this.m_velocityBuffer.data)
                            throw new Error;
                        if (Fn(this.m_flagsBuffer.data, t, e, i),
                        this.m_lastBodyContactStepBuffer.data && Fn(this.m_lastBodyContactStepBuffer.data, t, e, i),
                        this.m_bodyContactCountBuffer.data && Fn(this.m_bodyContactCountBuffer.data, t, e, i),
                        this.m_consecutiveContactStepsBuffer.data && Fn(this.m_consecutiveContactStepsBuffer.data, t, e, i),
                        Fn(this.m_positionBuffer.data, t, e, i),
                        Fn(this.m_velocityBuffer.data, t, e, i),
                        Fn(this.m_groupBuffer, t, e, i),
                        this.m_hasForce && Fn(this.m_forceBuffer, t, e, i),
                        this.m_staticPressureBuffer && Fn(this.m_staticPressureBuffer, t, e, i),
                        this.m_depthBuffer && Fn(this.m_depthBuffer, t, e, i),
                        this.m_colorBuffer.data && Fn(this.m_colorBuffer.data, t, e, i),
                        this.m_userDataBuffer.data && Fn(this.m_userDataBuffer.data, t, e, i),
                        this.m_handleIndexBuffer.data) {
                            Fn(this.m_handleIndexBuffer.data, t, e, i);
                            for (var n = t; n < i; ++n) {
                                var r = this.m_handleIndexBuffer.data[n];
                                r && r.SetIndex(f(r.GetIndex()))
                            }
                        }
                        if (this.m_expirationTimeBuffer.data) {
                            Fn(this.m_expirationTimeBuffer.data, t, e, i);
                            var s = this.GetParticleCount();
                            if (!this.m_indexByExpirationTimeBuffer.data)
                                throw new Error;
                            var a = this.m_indexByExpirationTimeBuffer.data;
                            for (n = 0; n < s; ++n)
                                a[n] = f(a[n])
                        }
                        for (var o = 0; o < this.m_proxyBuffer.count; o++) {
                            var l = this.m_proxyBuffer.data[o];
                            l.index = f(l.index)
                        }
                        for (o = 0; o < this.m_contactBuffer.count; o++)
                            (h = this.m_contactBuffer.data[o]).indexA = f(h.indexA),
                            h.indexB = f(h.indexB);
                        for (o = 0; o < this.m_bodyContactBuffer.count; o++) {
                            var h;
                            (h = this.m_bodyContactBuffer.data[o]).index = f(h.index)
                        }
                        for (o = 0; o < this.m_pairBuffer.count; o++) {
                            var c = this.m_pairBuffer.data[o];
                            c.indexA = f(c.indexA),
                            c.indexB = f(c.indexB)
                        }
                        for (o = 0; o < this.m_triadBuffer.count; o++) {
                            var u = this.m_triadBuffer.data[o];
                            u.indexA = f(u.indexA),
                            u.indexB = f(u.indexB),
                            u.indexC = f(u.indexC)
                        }
                        for (var _ = this.m_groupList; _; _ = _.GetNext())
                            _.m_firstIndex = f(_.m_firstIndex),
                            _.m_lastIndex = f(_.m_lastIndex - 1) + 1
                    }
                    function f(n) {
                        return n < t ? n : n < e ? n + i - e : n < i ? n + t - e : n
                    }
                }
                ,
                n.prototype.GetCriticalVelocity = function(t) {
                    return this.m_particleDiameter * t.inv_dt
                }
                ,
                n.prototype.GetCriticalVelocitySquared = function(t) {
                    var e = this.GetCriticalVelocity(t);
                    return e * e
                }
                ,
                n.prototype.GetCriticalPressure = function(t) {
                    return this.m_def.density * this.GetCriticalVelocitySquared(t)
                }
                ,
                n.prototype.GetParticleStride = function() {
                    return .75 * this.m_particleDiameter
                }
                ,
                n.prototype.GetParticleMass = function() {
                    var t = this.GetParticleStride();
                    return this.m_def.density * t * t
                }
                ,
                n.prototype.GetParticleInvMass = function() {
                    var t = this.m_inverseDiameter * (1 / .75);
                    return this.m_inverseDensity * t * t
                }
                ,
                n.prototype.GetFixtureContactFilter = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_fixtureContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null
                }
                ,
                n.prototype.GetParticleContactFilter = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_particleContactFilterParticle ? this.m_world.m_contactManager.m_contactFilter : null
                }
                ,
                n.prototype.GetFixtureContactListener = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_fixtureContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null
                }
                ,
                n.prototype.GetParticleContactListener = function() {
                    return this.m_allParticleFlags & t.b2ParticleFlag.b2_particleContactListenerParticle ? this.m_world.m_contactManager.m_contactListener : null
                }
                ,
                n.prototype.SetUserOverridableBuffer = function(t, e, i) {
                    t.data = e,
                    t.userSuppliedCapacity = i
                }
                ,
                n.prototype.SetGroupFlags = function(e, i) {
                    var n = e.m_groupFlags;
                    (n ^ i) & t.b2ParticleGroupFlag.b2_solidParticleGroup && (i |= t.b2ParticleGroupFlag.b2_particleGroupNeedsUpdateDepth),
                    n & ~i && (this.m_needsUpdateAllGroupFlags = !0),
                    ~this.m_allGroupFlags & i && (i & t.b2ParticleGroupFlag.b2_solidParticleGroup && (this.m_depthBuffer = this.RequestBuffer(this.m_depthBuffer)),
                    this.m_allGroupFlags |= i),
                    e.m_groupFlags = i
                }
                ,
                n.BodyContactCompare = function(t, e) {
                    return t.index === e.index ? t.weight > e.weight : t.index < e.index
                }
                ,
                n.prototype.RemoveSpuriousBodyContacts = function() {
                    In(this.m_bodyContactBuffer.data, 0, this.m_bodyContactBuffer.count, n.BodyContactCompare);
                    var t = n.RemoveSpuriousBodyContacts_s_n
                      , e = n.RemoveSpuriousBodyContacts_s_pos
                      , i = n.RemoveSpuriousBodyContacts_s_normal
                      , r = this
                      , s = -1
                      , a = 0;
                    this.m_bodyContactBuffer.count = Rn(this.m_bodyContactBuffer.data, (function(n) {
                        if (n.index !== s && (a = 0,
                        s = n.index),
                        a++ > 3)
                            return !0;
                        var o = t.Copy(n.normal);
                        if (o.SelfMul(r.m_particleDiameter * (1 - n.weight)),
                        !r.m_positionBuffer.data)
                            throw new Error;
                        var h = I.AddVV(r.m_positionBuffer.data[n.index], o, e);
                        if (!n.fixture.TestPoint(h)) {
                            for (var c = n.fixture.GetShape().GetChildCount(), u = 0; u < c; u++) {
                                var _ = i;
                                if (n.fixture.ComputeDistance(h, _, u) < l)
                                    return !1
                            }
                            return !0
                        }
                        return !1
                    }
                    ), this.m_bodyContactBuffer.count)
                }
                ,
                n.prototype.DetectStuckParticle = function(t) {
                    if (!(this.m_stuckThreshold <= 0)) {
                        if (!this.m_bodyContactCountBuffer.data)
                            throw new Error;
                        if (!this.m_consecutiveContactStepsBuffer.data)
                            throw new Error;
                        if (!this.m_lastBodyContactStepBuffer.data)
                            throw new Error;
                        ++this.m_bodyContactCountBuffer.data[t],
                        2 === this.m_bodyContactCountBuffer.data[t] && (++this.m_consecutiveContactStepsBuffer.data[t],
                        this.m_consecutiveContactStepsBuffer.data[t] > this.m_stuckThreshold && (this.m_stuckParticleBuffer.data[this.m_stuckParticleBuffer.Append()] = t)),
                        this.m_lastBodyContactStepBuffer.data[t] = this.m_timestamp
                    }
                }
                ,
                n.prototype.ValidateParticleIndex = function(t) {
                    return t >= 0 && t < this.GetParticleCount() && t !== u
                }
                ,
                n.prototype.GetQuantizedTimeElapsed = function() {
                    return Math.floor(this.m_timeElapsed / 4294967296)
                }
                ,
                n.prototype.LifetimeToExpirationTime = function(t) {
                    return this.m_timeElapsed + Math.floor(t / this.m_def.lifetimeGranularity * 4294967296)
                }
                ,
                n.prototype.ForceCanBeApplied = function(e) {
                    return !(e & t.b2ParticleFlag.b2_wallParticle)
                }
                ,
                n.prototype.PrepareForceBuffer = function() {
                    if (!this.m_hasForce) {
                        for (var t = 0; t < this.m_count; t++)
                            this.m_forceBuffer[t].SetZero();
                        this.m_hasForce = !0
                    }
                }
                ,
                n.prototype.IsRigidGroup = function(e) {
                    return null !== e && 0 != (e.m_groupFlags & t.b2ParticleGroupFlag.b2_rigidParticleGroup)
                }
                ,
                n.prototype.GetLinearVelocity = function(t, e, i, n) {
                    if (t && this.IsRigidGroup(t))
                        return t.GetLinearVelocityFromWorldPoint(i, n);
                    if (!this.m_velocityBuffer.data)
                        throw new Error;
                    return n.Copy(this.m_velocityBuffer.data[e])
                }
                ,
                n.prototype.InitDampingParameter = function(t, e, i, n, r, s, a, o) {
                    t[0] = n > 0 ? 1 / n : 0,
                    e[0] = r > 0 ? 1 / r : 0,
                    i[0] = I.CrossVV(I.SubVV(a, s, I.s_t0), o)
                }
                ,
                n.prototype.InitDampingParameterWithRigidGroupOrParticle = function(e, i, n, r, s, a, o, l) {
                    if (s && r)
                        this.InitDampingParameter(e, i, n, s.GetMass(), s.GetInertia(), s.GetCenter(), o, l);
                    else {
                        if (!this.m_flagsBuffer.data)
                            throw new Error;
                        var h = this.m_flagsBuffer.data[a];
                        this.InitDampingParameter(e, i, n, h & t.b2ParticleFlag.b2_wallParticle ? 0 : this.GetParticleMass(), 0, o, o, l)
                    }
                }
                ,
                n.prototype.ComputeDampingImpulse = function(t, e, i, n, r, s, a) {
                    var o = t + e * i * i + n + r * s * s;
                    return o > 0 ? a / o : 0
                }
                ,
                n.prototype.ApplyDamping = function(t, e, i, n, r, s, a, o) {
                    if (r && n)
                        r.m_linearVelocity.SelfMulAdd(a * t, o),
                        r.m_angularVelocity += a * i * e;
                    else {
                        if (!this.m_velocityBuffer.data)
                            throw new Error;
                        this.m_velocityBuffer.data[s].SelfMulAdd(a * t, o)
                    }
                }
                ,
                n.xTruncBits = 12,
                n.yTruncBits = 12,
                n.tagBits = 32,
                n.yOffset = 1 << n.yTruncBits - 1,
                n.yShift = n.tagBits - n.yTruncBits,
                n.xShift = n.tagBits - n.yTruncBits - n.xTruncBits,
                n.xScale = 1 << n.xShift,
                n.xOffset = n.xScale * (1 << n.xTruncBits - 1),
                n.yMask = (1 << n.yTruncBits) - 1 << n.yShift,
                n.xMask = ~n.yMask,
                n.DestroyParticlesInShape_s_aabb = new Tt,
                n.CreateParticleGroup_s_transform = new V,
                n.ComputeCollisionEnergy_s_v = new I,
                n.QueryShapeAABB_s_aabb = new Tt,
                n.QueryPointAABB_s_aabb = new Tt,
                n.RayCast_s_aabb = new Tt,
                n.RayCast_s_p = new I,
                n.RayCast_s_v = new I,
                n.RayCast_s_n = new I,
                n.RayCast_s_point = new I,
                n.k_pairFlags = t.b2ParticleFlag.b2_springParticle,
                n.k_triadFlags = t.b2ParticleFlag.b2_elasticParticle,
                n.k_noPressureFlags = t.b2ParticleFlag.b2_powderParticle | t.b2ParticleFlag.b2_tensileParticle,
                n.k_extraDampingFlags = t.b2ParticleFlag.b2_staticPressureParticle,
                n.k_barrierWallFlags = t.b2ParticleFlag.b2_barrierParticle | t.b2ParticleFlag.b2_wallParticle,
                n.CreateParticlesStrokeShapeForGroup_s_edge = new ri,
                n.CreateParticlesStrokeShapeForGroup_s_d = new I,
                n.CreateParticlesStrokeShapeForGroup_s_p = new I,
                n.CreateParticlesFillShapeForGroup_s_aabb = new Tt,
                n.CreateParticlesFillShapeForGroup_s_p = new I,
                n.UpdatePairsAndTriads_s_dab = new I,
                n.UpdatePairsAndTriads_s_dbc = new I,
                n.UpdatePairsAndTriads_s_dca = new I,
                n.AddContact_s_d = new I,
                n.UpdateBodyContacts_s_aabb = new Tt,
                n.Solve_s_subStep = new cn,
                n.SolveCollision_s_aabb = new Tt,
                n.SolveGravity_s_gravity = new I,
                n.SolveBarrier_s_aabb = new Tt,
                n.SolveBarrier_s_va = new I,
                n.SolveBarrier_s_vb = new I,
                n.SolveBarrier_s_pba = new I,
                n.SolveBarrier_s_vba = new I,
                n.SolveBarrier_s_vc = new I,
                n.SolveBarrier_s_pca = new I,
                n.SolveBarrier_s_vca = new I,
                n.SolveBarrier_s_qba = new I,
                n.SolveBarrier_s_qca = new I,
                n.SolveBarrier_s_dv = new I,
                n.SolveBarrier_s_f = new I,
                n.SolvePressure_s_f = new I,
                n.SolveDamping_s_v = new I,
                n.SolveDamping_s_f = new I,
                n.SolveRigidDamping_s_t0 = new I,
                n.SolveRigidDamping_s_t1 = new I,
                n.SolveRigidDamping_s_p = new I,
                n.SolveRigidDamping_s_v = new I,
                n.SolveExtraDamping_s_v = new I,
                n.SolveExtraDamping_s_f = new I,
                n.SolveRigid_s_position = new I,
                n.SolveRigid_s_rotation = new F,
                n.SolveRigid_s_transform = new V,
                n.SolveRigid_s_velocityTransform = new V,
                n.SolveElastic_s_pa = new I,
                n.SolveElastic_s_pb = new I,
                n.SolveElastic_s_pc = new I,
                n.SolveElastic_s_r = new F,
                n.SolveElastic_s_t0 = new I,
                n.SolveSpring_s_pa = new I,
                n.SolveSpring_s_pb = new I,
                n.SolveSpring_s_d = new I,
                n.SolveSpring_s_f = new I,
                n.SolveTensile_s_weightedNormal = new I,
                n.SolveTensile_s_s = new I,
                n.SolveTensile_s_f = new I,
                n.SolveViscous_s_v = new I,
                n.SolveViscous_s_f = new I,
                n.SolveRepulsive_s_f = new I,
                n.SolvePowder_s_f = new I,
                n.SolveSolid_s_f = new I,
                n.RemoveSpuriousBodyContacts_s_n = new I,
                n.RemoveSpuriousBodyContacts_s_pos = new I,
                n.RemoveSpuriousBodyContacts_s_normal = new I,
                n
            }
            )(),
            (function(e) {
                e.UserOverridableBuffer = function() {
                    this.data = null,
                    this.userSuppliedCapacity = 0
                }
                ;
                var n = (function() {
                    function t() {
                        this.index = u,
                        this.tag = 0
                    }
                    return t.CompareProxyProxy = function(t, e) {
                        return t.tag < e.tag
                    }
                    ,
                    t.CompareTagProxy = function(t, e) {
                        return t < e.tag
                    }
                    ,
                    t.CompareProxyTag = function(t, e) {
                        return t.tag < e
                    }
                    ,
                    t
                }
                )();
                e.Proxy = n;
                var r = (function() {
                    function t(t, i, n, r, s) {
                        this.m_system = t,
                        this.m_xLower = (i & e.xMask) >>> 0,
                        this.m_xUpper = (n & e.xMask) >>> 0,
                        this.m_yLower = (i & e.yMask) >>> 0,
                        this.m_yUpper = (n & e.yMask) >>> 0,
                        this.m_first = r,
                        this.m_last = s
                    }
                    return t.prototype.GetNext = function() {
                        for (; this.m_first < this.m_last; ) {
                            var t = (this.m_system.m_proxyBuffer.data[this.m_first].tag & e.xMask) >>> 0;
                            if (t >= this.m_xLower && t <= this.m_xUpper)
                                return this.m_system.m_proxyBuffer.data[this.m_first++].index;
                            this.m_first++
                        }
                        return u
                    }
                    ,
                    t
                }
                )();
                e.InsideBoundsEnumerator = r;
                e.ParticleListNode = function() {
                    this.next = null,
                    this.count = 0,
                    this.index = 0
                }
                ;
                var s = (function() {
                    function t() {}
                    return t.prototype.Allocate = function(t, e) {
                        return e
                    }
                    ,
                    t.prototype.Clear = function() {}
                    ,
                    t.prototype.GetCount = function() {
                        return 0
                    }
                    ,
                    t.prototype.Invalidate = function() {}
                    ,
                    t.prototype.GetValidBuffer = function() {
                        return []
                    }
                    ,
                    t.prototype.GetBuffer = function() {
                        return []
                    }
                    ,
                    t.prototype.SetCount = function() {}
                    ,
                    t
                }
                )();
                e.FixedSetAllocator = s;
                e.FixtureParticle = function(t, e) {
                    this.second = u,
                    this.first = t,
                    this.second = e
                }
                ;
                var a = (function(t) {
                    function e() {
                        return null !== t && t.apply(this, arguments) || this
                    }
                    return ti(e, t),
                    e.prototype.Initialize = function() {}
                    ,
                    e.prototype.Find = function() {
                        return u
                    }
                    ,
                    e
                }
                )(e.FixedSetAllocator);
                e.FixtureParticleSet = a;
                e.ParticlePair = function(t, e) {
                    this.first = u,
                    this.second = u,
                    this.first = t,
                    this.second = e
                }
                ;
                var o = (function(t) {
                    function e() {
                        return null !== t && t.apply(this, arguments) || this
                    }
                    return ti(e, t),
                    e.prototype.Initialize = function() {}
                    ,
                    e.prototype.Find = function() {
                        return u
                    }
                    ,
                    e
                }
                )(e.FixedSetAllocator);
                e.b2ParticlePairSet = o;
                var h = (function() {
                    function t() {}
                    return t.prototype.IsNecessary = function() {
                        return !0
                    }
                    ,
                    t.prototype.ShouldCreatePair = function() {
                        return !0
                    }
                    ,
                    t.prototype.ShouldCreateTriad = function() {
                        return !0
                    }
                    ,
                    t
                }
                )();
                e.ConnectionFilter = h;
                var c = (function(t) {
                    function e(e, i, n, r) {
                        var s = t.call(this) || this;
                        return s.m_callDestructionListener = !1,
                        s.m_destroyed = 0,
                        s.m_system = e,
                        s.m_shape = i,
                        s.m_xf = n,
                        s.m_callDestructionListener = r,
                        s.m_destroyed = 0,
                        s
                    }
                    return ti(e, t),
                    e.prototype.ReportFixture = function() {
                        return !1
                    }
                    ,
                    e.prototype.ReportParticle = function(t, e) {
                        if (t !== this.m_system)
                            return !1;
                        if (!this.m_system.m_positionBuffer.data)
                            throw new Error;
                        return this.m_shape.TestPoint(this.m_xf, this.m_system.m_positionBuffer.data[e]) && (this.m_system.DestroyParticle(e, this.m_callDestructionListener),
                        this.m_destroyed++),
                        !0
                    }
                    ,
                    e.prototype.Destroyed = function() {
                        return this.m_destroyed
                    }
                    ,
                    e
                }
                )(an);
                e.DestroyParticlesInShapeCallback = c;
                var _ = (function(t) {
                    function e(e) {
                        var i = t.call(this) || this;
                        return i.m_threshold = 0,
                        i.m_threshold = e,
                        i
                    }
                    return ti(e, t),
                    e.prototype.ShouldCreatePair = function(t, e) {
                        return t < this.m_threshold && this.m_threshold <= e || e < this.m_threshold && this.m_threshold <= t
                    }
                    ,
                    e.prototype.ShouldCreateTriad = function(t, e, i) {
                        return (t < this.m_threshold || e < this.m_threshold || i < this.m_threshold) && (this.m_threshold <= t || this.m_threshold <= e || this.m_threshold <= i)
                    }
                    ,
                    e
                }
                )(e.ConnectionFilter);
                e.JoinParticleGroupsFilter = _;
                var f = (function(e) {
                    function n(i, n) {
                        void 0 === n && (n = i.length);
                        var r = e.call(this, t.b2ShapeType.e_unknown, 0) || this;
                        return r.m_shapeCount = 0,
                        r.m_shapes = i,
                        r.m_shapeCount = n,
                        r
                    }
                    return ti(n, e),
                    n.prototype.Clone = function() {
                        throw new Error
                    }
                    ,
                    n.prototype.GetChildCount = function() {
                        return 1
                    }
                    ,
                    n.prototype.TestPoint = function(t, e) {
                        for (var i = 0; i < this.m_shapeCount; i++)
                            if (this.m_shapes[i].TestPoint(t, e))
                                return !0;
                        return !1
                    }
                    ,
                    n.prototype.ComputeDistance = function() {
                        return 0
                    }
                    ,
                    n.prototype.RayCast = function() {
                        return !1
                    }
                    ,
                    n.prototype.ComputeAABB = function(t, e) {
                        var n = new Tt;
                        t.lowerBound.x = +i,
                        t.lowerBound.y = +i,
                        t.upperBound.x = -i,
                        t.upperBound.y = -i;
                        for (var r = 0; r < this.m_shapeCount; r++)
                            for (var s = this.m_shapes[r].GetChildCount(), a = 0; a < s; a++) {
                                var o = n;
                                this.m_shapes[r].ComputeAABB(o, e, a),
                                t.Combine1(o)
                            }
                    }
                    ,
                    n.prototype.ComputeMass = function() {}
                    ,
                    n.prototype.SetupDistanceProxy = function() {}
                    ,
                    n.prototype.ComputeSubmergedArea = function() {
                        return 0
                    }
                    ,
                    n.prototype.Dump = function() {}
                    ,
                    n
                }
                )(Qe);
                e.CompositeShape = f;
                var d = (function(e) {
                    function i(t) {
                        var i = e.call(this) || this;
                        return i.m_flagsBuffer = t,
                        i
                    }
                    return ti(i, e),
                    i.prototype.IsNecessary = function(e) {
                        if (!this.m_flagsBuffer.data)
                            throw new Error;
                        return 0 != (this.m_flagsBuffer.data[e] & t.b2ParticleFlag.b2_reactiveParticle)
                    }
                    ,
                    i
                }
                )(e.ConnectionFilter);
                e.ReactiveFilter = d;
                var p = (function(i) {
                    function n(t, e) {
                        var n = i.call(this, t) || this;
                        return n.m_contactFilter = e,
                        n
                    }
                    return ti(n, i),
                    n.prototype.ShouldCollideFixtureParticle = function(e, i, n) {
                        return !(this.m_contactFilter && this.m_system.GetFlagsBuffer()[n] & t.b2ParticleFlag.b2_fixtureContactFilterParticle) || this.m_contactFilter.ShouldCollideFixtureParticle(e, this.m_system, n)
                    }
                    ,
                    n.prototype.ReportFixtureAndParticle = function(i, n, r) {
                        var s = e.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_n
                          , a = e.UpdateBodyContactsCallback.ReportFixtureAndParticle_s_rp;
                        if (!this.m_system.m_flagsBuffer.data)
                            throw new Error;
                        if (!this.m_system.m_positionBuffer.data)
                            throw new Error;
                        var o = this.m_system.m_positionBuffer.data[r]
                          , l = s
                          , h = i.ComputeDistance(o, l, n);
                        if (h < this.m_system.m_particleDiameter && this.ShouldCollideFixtureParticle(i, this.m_system, r)) {
                            var c = i.GetBody()
                              , u = c.GetWorldCenter()
                              , _ = c.GetMass()
                              , f = c.GetInertia() - _ * c.GetLocalCenter().LengthSquared()
                              , d = _ > 0 ? 1 / _ : 0
                              , p = f > 0 ? 1 / f : 0
                              , m = this.m_system.m_flagsBuffer.data[r] & t.b2ParticleFlag.b2_wallParticle ? 0 : this.m_system.GetParticleInvMass()
                              , y = I.SubVV(o, u, a)
                              , v = I.CrossVV(y, l)
                              , g = m + d + p * v * v
                              , A = this.m_system.m_bodyContactBuffer.data[this.m_system.m_bodyContactBuffer.Append()];
                            A.index = r,
                            A.body = c,
                            A.fixture = i,
                            A.weight = 1 - h * this.m_system.m_inverseDiameter,
                            A.normal.Copy(l.SelfNeg()),
                            A.mass = g > 0 ? 1 / g : 0,
                            this.m_system.DetectStuckParticle(r)
                        }
                    }
                    ,
                    n.ReportFixtureAndParticle_s_n = new I,
                    n.ReportFixtureAndParticle_s_rp = new I,
                    n
                }
                )(kn);
                e.UpdateBodyContactsCallback = p;
                var m = (function(i) {
                    function n(t, e) {
                        var n = i.call(this, t) || this;
                        return n.m_step = e,
                        n
                    }
                    return ti(n, i),
                    n.prototype.ReportFixtureAndParticle = function(i, n, r) {
                        var s = e.SolveCollisionCallback.ReportFixtureAndParticle_s_p1
                          , a = e.SolveCollisionCallback.ReportFixtureAndParticle_s_output
                          , o = e.SolveCollisionCallback.ReportFixtureAndParticle_s_input
                          , h = e.SolveCollisionCallback.ReportFixtureAndParticle_s_p
                          , c = e.SolveCollisionCallback.ReportFixtureAndParticle_s_v
                          , u = e.SolveCollisionCallback.ReportFixtureAndParticle_s_f
                          , _ = i.GetBody();
                        if (!this.m_system.m_positionBuffer.data)
                            throw new Error;
                        if (!this.m_system.m_velocityBuffer.data)
                            throw new Error;
                        var f = this.m_system.m_positionBuffer.data[r]
                          , d = this.m_system.m_velocityBuffer.data[r]
                          , p = a
                          , m = o;
                        if (0 === this.m_system.m_iterationIndex) {
                            var y = V.MulTXV(_.m_xf0, f, s);
                            i.GetShape().GetType() === t.b2ShapeType.e_circleShape && (y.SelfSub(_.GetLocalCenter()),
                            F.MulRV(_.m_xf0.q, y, y),
                            F.MulTRV(_.m_xf.q, y, y),
                            y.SelfAdd(_.GetLocalCenter())),
                            V.MulXV(_.m_xf, y, m.p1)
                        } else
                            m.p1.Copy(f);
                        if (I.AddVMulSV(f, this.m_step.dt, d, m.p2),
                        m.maxFraction = 1,
                        i.RayCast(p, m, n)) {
                            var v = p.normal
                              , g = h;
                            g.x = (1 - p.fraction) * m.p1.x + p.fraction * m.p2.x + l * v.x,
                            g.y = (1 - p.fraction) * m.p1.y + p.fraction * m.p2.y + l * v.y;
                            var A = c;
                            A.x = this.m_step.inv_dt * (g.x - f.x),
                            A.y = this.m_step.inv_dt * (g.y - f.y),
                            this.m_system.m_velocityBuffer.data[r].Copy(A);
                            var x = u;
                            x.x = this.m_step.inv_dt * this.m_system.GetParticleMass() * (d.x - A.x),
                            x.y = this.m_step.inv_dt * this.m_system.GetParticleMass() * (d.y - A.y),
                            this.m_system.ParticleApplyForce(r, x)
                        }
                    }
                    ,
                    n.prototype.ReportParticle = function() {
                        return !1
                    }
                    ,
                    n.ReportFixtureAndParticle_s_p1 = new I,
                    n.ReportFixtureAndParticle_s_output = new Ct,
                    n.ReportFixtureAndParticle_s_input = new bt,
                    n.ReportFixtureAndParticle_s_p = new I,
                    n.ReportFixtureAndParticle_s_v = new I,
                    n.ReportFixtureAndParticle_s_f = new I,
                    n
                }
                )(kn);
                e.SolveCollisionCallback = m
            }
            )(t.b2ParticleSystem || (t.b2ParticleSystem = {}));
            var jn = (function() {
                function e(t) {
                    this.m_newFixture = !1,
                    this.m_locked = !1,
                    this.m_clearForces = !0,
                    this.m_contactManager = new ln,
                    this.m_bodyList = null,
                    this.m_jointList = null,
                    this.m_particleSystemList = null,
                    this.m_bodyCount = 0,
                    this.m_jointCount = 0,
                    this.m_gravity = new I,
                    this.m_allowSleep = !0,
                    this.m_destructionListener = null,
                    this.m_debugDraw = null,
                    this.m_inv_dt0 = 0,
                    this.m_warmStarting = !0,
                    this.m_continuousPhysics = !0,
                    this.m_subStepping = !1,
                    this.m_stepComplete = !0,
                    this.m_profile = new hn,
                    this.m_island = new An,
                    this.s_stack = [],
                    this.m_controllerList = null,
                    this.m_controllerCount = 0,
                    this.m_gravity.Copy(t)
                }
                return e.prototype.SetDestructionListener = function(t) {
                    this.m_destructionListener = t
                }
                ,
                e.prototype.SetContactFilter = function(t) {
                    this.m_contactManager.m_contactFilter = t
                }
                ,
                e.prototype.SetContactListener = function(t) {
                    this.m_contactManager.m_contactListener = t
                }
                ,
                e.prototype.SetDebugDraw = function(t) {
                    this.m_debugDraw = t
                }
                ,
                e.prototype.CreateBody = function(t) {
                    if (void 0 === t && (t = {}),
                    this.IsLocked())
                        throw new Error;
                    var e = new _i(t,this);
                    return e.m_prev = null,
                    e.m_next = this.m_bodyList,
                    this.m_bodyList && (this.m_bodyList.m_prev = e),
                    this.m_bodyList = e,
                    ++this.m_bodyCount,
                    e
                }
                ,
                e.prototype.DestroyBody = function(t) {
                    if (this.IsLocked())
                        throw new Error;
                    for (var e = t.m_jointList; e; ) {
                        var i = e;
                        e = e.next,
                        this.m_destructionListener && this.m_destructionListener.SayGoodbyeJoint(i.joint),
                        this.DestroyJoint(i.joint),
                        t.m_jointList = e
                    }
                    t.m_jointList = null;
                    for (var n = t.m_controllerList; n; ) {
                        var r = n;
                        n = n.nextController,
                        r.controller.RemoveBody(t)
                    }
                    for (var s = t.m_contactList; s; ) {
                        var a = s;
                        s = s.next,
                        this.m_contactManager.Destroy(a.contact)
                    }
                    t.m_contactList = null;
                    for (var o = t.m_fixtureList; o; ) {
                        var l = o;
                        o = o.m_next,
                        this.m_destructionListener && this.m_destructionListener.SayGoodbyeFixture(l),
                        l.DestroyProxies(),
                        l.Destroy(),
                        t.m_fixtureList = o,
                        t.m_fixtureCount -= 1
                    }
                    t.m_fixtureList = null,
                    t.m_fixtureCount = 0,
                    t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    t === this.m_bodyList && (this.m_bodyList = t.m_next),
                    --this.m_bodyCount
                }
                ,
                e._Joint_Create = function(e) {
                    switch (e.type) {
                    case t.b2JointType.e_distanceJoint:
                        return new vi(e);
                    case t.b2JointType.e_mouseJoint:
                        return new Mi(e);
                    case t.b2JointType.e_prismaticJoint:
                        return new Bi(e);
                    case t.b2JointType.e_revoluteJoint:
                        return new Oi(e);
                    case t.b2JointType.e_pulleyJoint:
                        return new Pi(e);
                    case t.b2JointType.e_gearJoint:
                        return new Ti(e);
                    case t.b2JointType.e_wheelJoint:
                        return new Gi(e);
                    case t.b2JointType.e_weldJoint:
                        return new Ni(e);
                    case t.b2JointType.e_frictionJoint:
                        return new bi(e);
                    case t.b2JointType.e_ropeJoint:
                        return new Fi(e);
                    case t.b2JointType.e_motorJoint:
                        return new wi(e);
                    case t.b2JointType.e_areaJoint:
                        return new Ai(e)
                    }
                    throw new Error
                }
                ,
                e._Joint_Destroy = function() {}
                ,
                e.prototype.CreateJoint = function(t) {
                    if (this.IsLocked())
                        throw new Error;
                    var i = e._Joint_Create(t, null);
                    i.m_prev = null,
                    i.m_next = this.m_jointList,
                    this.m_jointList && (this.m_jointList.m_prev = i),
                    this.m_jointList = i,
                    ++this.m_jointCount,
                    i.m_edgeA.prev = null,
                    i.m_edgeA.next = i.m_bodyA.m_jointList,
                    i.m_bodyA.m_jointList && (i.m_bodyA.m_jointList.prev = i.m_edgeA),
                    i.m_bodyA.m_jointList = i.m_edgeA,
                    i.m_edgeB.prev = null,
                    i.m_edgeB.next = i.m_bodyB.m_jointList,
                    i.m_bodyB.m_jointList && (i.m_bodyB.m_jointList.prev = i.m_edgeB),
                    i.m_bodyB.m_jointList = i.m_edgeB;
                    var n = t.bodyA
                      , r = t.bodyB;
                    if (!t.collideConnected)
                        for (var s = r.GetContactList(); s; )
                            s.other === n && s.contact.FlagForFiltering(),
                            s = s.next;
                    return i
                }
                ,
                e.prototype.DestroyJoint = function(t) {
                    if (this.IsLocked())
                        throw new Error;
                    var i = t.m_collideConnected;
                    t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    t === this.m_jointList && (this.m_jointList = t.m_next);
                    var n = t.m_bodyA
                      , r = t.m_bodyB;
                    if (n.SetAwake(!0),
                    r.SetAwake(!0),
                    t.m_edgeA.prev && (t.m_edgeA.prev.next = t.m_edgeA.next),
                    t.m_edgeA.next && (t.m_edgeA.next.prev = t.m_edgeA.prev),
                    t.m_edgeA === n.m_jointList && (n.m_jointList = t.m_edgeA.next),
                    t.m_edgeA.prev = null,
                    t.m_edgeA.next = null,
                    t.m_edgeB.prev && (t.m_edgeB.prev.next = t.m_edgeB.next),
                    t.m_edgeB.next && (t.m_edgeB.next.prev = t.m_edgeB.prev),
                    t.m_edgeB === r.m_jointList && (r.m_jointList = t.m_edgeB.next),
                    t.m_edgeB.prev = null,
                    t.m_edgeB.next = null,
                    e._Joint_Destroy(t, null),
                    --this.m_jointCount,
                    !i)
                        for (var s = r.GetContactList(); s; )
                            s.other === n && s.contact.FlagForFiltering(),
                            s = s.next
                }
                ,
                e.prototype.CreateParticleSystem = function(e) {
                    if (this.IsLocked())
                        throw new Error;
                    var i = new t.b2ParticleSystem(e,this);
                    return i.m_prev = null,
                    i.m_next = this.m_particleSystemList,
                    this.m_particleSystemList && (this.m_particleSystemList.m_prev = i),
                    this.m_particleSystemList = i,
                    i
                }
                ,
                e.prototype.DestroyParticleSystem = function(t) {
                    if (this.IsLocked())
                        throw new Error;
                    t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    t === this.m_particleSystemList && (this.m_particleSystemList = t.m_next)
                }
                ,
                e.prototype.CalculateReasonableParticleIterations = function(t) {
                    return null === this.m_particleSystemList ? 1 : bn(this.m_gravity.Length(), (function(t) {
                        for (var e = i, n = t.GetParticleSystemList(); null !== n; n = n.m_next)
                            e = y(e, n.GetRadius());
                        return e
                    }
                    )(this), t)
                }
                ,
                e.prototype.Step = function(t, i, n, r) {
                    void 0 === r && (r = this.CalculateReasonableParticleIterations(t));
                    var s = e.Step_s_stepTimer.Reset();
                    this.m_newFixture && (this.m_contactManager.FindNewContacts(),
                    this.m_newFixture = !1),
                    this.m_locked = !0;
                    var a = e.Step_s_step;
                    a.dt = t,
                    a.velocityIterations = i,
                    a.positionIterations = n,
                    a.particleIterations = r,
                    a.inv_dt = t > 0 ? 1 / t : 0,
                    a.dtRatio = this.m_inv_dt0 * t,
                    a.warmStarting = this.m_warmStarting;
                    var o = e.Step_s_timer.Reset();
                    if (this.m_contactManager.Collide(),
                    this.m_profile.collide = o.GetMilliseconds(),
                    this.m_stepComplete && a.dt > 0) {
                        for (var l = e.Step_s_timer.Reset(), h = this.m_particleSystemList; h; h = h.m_next)
                            h.Solve(a);
                        this.Solve(a),
                        this.m_profile.solve = l.GetMilliseconds()
                    }
                    if (this.m_continuousPhysics && a.dt > 0) {
                        var c = e.Step_s_timer.Reset();
                        this.SolveTOI(a),
                        this.m_profile.solveTOI = c.GetMilliseconds()
                    }
                    a.dt > 0 && (this.m_inv_dt0 = a.inv_dt),
                    this.m_clearForces && this.ClearForces(),
                    this.m_locked = !1,
                    this.m_profile.step = s.GetMilliseconds()
                }
                ,
                e.prototype.ClearForces = function() {
                    for (var t = this.m_bodyList; t; t = t.m_next)
                        t.m_force.SetZero(),
                        t.m_torque = 0
                }
                ,
                e.prototype.DrawParticleSystem = function(t) {
                    if (null !== this.m_debugDraw) {
                        var e = t.GetParticleCount();
                        if (e) {
                            var i = t.GetRadius()
                              , n = t.GetPositionBuffer();
                            if (t.m_colorBuffer.data) {
                                var r = t.GetColorBuffer();
                                this.m_debugDraw.DrawParticles(n, i, r, e)
                            } else
                                this.m_debugDraw.DrawParticles(n, i, null, e)
                        }
                    }
                }
                ,
                e.prototype.DrawDebugData = function() {
                    if (null !== this.m_debugDraw) {
                        var i = this.m_debugDraw.GetFlags()
                          , n = e.DrawDebugData_s_color.SetRGB(0, 0, 0);
                        if (i & t.b2DrawFlags.e_shapeBit)
                            for (var r = this.m_bodyList; r; r = r.m_next) {
                                var s = r.m_xf;
                                this.m_debugDraw.PushTransform(s);
                                for (var a = r.GetFixtureList(); a; a = a.m_next)
                                    r.IsActive() ? r.GetType() === t.b2BodyType.b2_staticBody ? (n.SetRGB(.5, .9, .5),
                                    this.DrawShape(a, n)) : r.GetType() === t.b2BodyType.b2_kinematicBody ? (n.SetRGB(.5, .5, .9),
                                    this.DrawShape(a, n)) : r.IsAwake() ? (n.SetRGB(.9, .7, .7),
                                    this.DrawShape(a, n)) : (n.SetRGB(.6, .6, .6),
                                    this.DrawShape(a, n)) : (n.SetRGB(.5, .5, .3),
                                    this.DrawShape(a, n));
                                this.m_debugDraw.PopTransform(s)
                            }
                        if (i & t.b2DrawFlags.e_particleBit)
                            for (var o = this.m_particleSystemList; o; o = o.m_next)
                                this.DrawParticleSystem(o);
                        if (i & t.b2DrawFlags.e_jointBit)
                            for (var l = this.m_jointList; l; l = l.m_next)
                                this.DrawJoint(l);
                        if (i & t.b2DrawFlags.e_aabbBit) {
                            n.SetRGB(.9, .3, .9);
                            var h = e.DrawDebugData_s_vs;
                            for (r = this.m_bodyList; r; r = r.m_next)
                                if (r.IsActive())
                                    for (a = r.GetFixtureList(); a; a = a.m_next)
                                        for (var c = 0; c < a.m_proxyCount; ++c) {
                                            var u = a.m_proxies[c].treeNode.aabb;
                                            h[0].Set(u.lowerBound.x, u.lowerBound.y),
                                            h[1].Set(u.upperBound.x, u.lowerBound.y),
                                            h[2].Set(u.upperBound.x, u.upperBound.y),
                                            h[3].Set(u.lowerBound.x, u.upperBound.y),
                                            this.m_debugDraw.DrawPolygon(h, 4, n)
                                        }
                        }
                        if (i & t.b2DrawFlags.e_centerOfMassBit)
                            for (r = this.m_bodyList; r; r = r.m_next)
                                (s = e.DrawDebugData_s_xf).q.Copy(r.m_xf.q),
                                s.p.Copy(r.GetWorldCenter()),
                                this.m_debugDraw.DrawTransform(s);
                        if (i & t.b2DrawFlags.e_controllerBit)
                            for (var _ = this.m_controllerList; _; _ = _.m_next)
                                _.Draw(this.m_debugDraw)
                    }
                }
                ,
                e.prototype.QueryAABB = function(t, e, i) {
                    if (this.m_contactManager.m_broadPhase.Query(e, (function(e) {
                        var n = e.userData.fixture;
                        return t ? t.ReportFixture(n) : !i || i(n)
                    }
                    )),
                    t instanceof an)
                        for (var n = this.m_particleSystemList; n; n = n.m_next)
                            t.ShouldQueryParticleSystem(n) && n.QueryAABB(t, e)
                }
                ,
                e.prototype.QueryAllAABB = function(t, e) {
                    return void 0 === e && (e = []),
                    this.QueryAABB(null, t, (function(t) {
                        return e.push(t),
                        !0
                    }
                    )),
                    e
                }
                ,
                e.prototype.QueryPointAABB = function(t, e, i) {
                    if (this.m_contactManager.m_broadPhase.QueryPoint(e, (function(e) {
                        var n = e.userData.fixture;
                        return t ? t.ReportFixture(n) : !i || i(n)
                    }
                    )),
                    t instanceof an)
                        for (var n = this.m_particleSystemList; n; n = n.m_next)
                            t.ShouldQueryParticleSystem(n) && n.QueryPointAABB(t, e)
                }
                ,
                e.prototype.QueryAllPointAABB = function(t, e) {
                    return void 0 === e && (e = []),
                    this.QueryPointAABB(null, t, (function(t) {
                        return e.push(t),
                        !0
                    }
                    )),
                    e
                }
                ,
                e.prototype.QueryFixtureShape = function(t, i, n, r, s) {
                    var a = e.QueryFixtureShape_s_aabb;
                    if (i.ComputeAABB(a, r, n),
                    this.m_contactManager.m_broadPhase.Query(a, (function(e) {
                        var a = e.userData
                          , o = a.fixture;
                        if (Bt(i, n, o.GetShape(), a.childIndex, r, o.GetBody().GetTransform())) {
                            if (t)
                                return t.ReportFixture(o);
                            if (s)
                                return s(o)
                        }
                        return !0
                    }
                    )),
                    t instanceof an)
                        for (var o = this.m_particleSystemList; o; o = o.m_next)
                            t.ShouldQueryParticleSystem(o) && o.QueryAABB(t, a)
                }
                ,
                e.prototype.QueryAllFixtureShape = function(t, e, i, n) {
                    return void 0 === n && (n = []),
                    this.QueryFixtureShape(null, t, e, i, (function(t) {
                        return n.push(t),
                        !0
                    }
                    )),
                    n
                }
                ,
                e.prototype.QueryFixturePoint = function(t, e, i) {
                    if (this.m_contactManager.m_broadPhase.QueryPoint(e, (function(n) {
                        var r = n.userData.fixture;
                        if (r.TestPoint(e)) {
                            if (t)
                                return t.ReportFixture(r);
                            if (i)
                                return i(r)
                        }
                        return !0
                    }
                    )),
                    t)
                        for (var n = this.m_particleSystemList; n; n = n.m_next)
                            t.ShouldQueryParticleSystem(n) && n.QueryPointAABB(t, e)
                }
                ,
                e.prototype.QueryAllFixturePoint = function(t, e) {
                    return void 0 === e && (e = []),
                    this.QueryFixturePoint(null, t, (function(t) {
                        return e.push(t),
                        !0
                    }
                    )),
                    e
                }
                ,
                e.prototype.RayCast = function(t, i, n, r) {
                    var s = e.RayCast_s_input;
                    if (s.maxFraction = 1,
                    s.p1.Copy(i),
                    s.p2.Copy(n),
                    this.m_contactManager.m_broadPhase.RayCast(s, (function(s, a) {
                        var o = a.userData
                          , l = o.fixture
                          , h = o.childIndex
                          , c = e.RayCast_s_output;
                        if (l.RayCast(c, s, h)) {
                            var u = c.fraction
                              , _ = e.RayCast_s_point;
                            if (_.Set((1 - u) * i.x + u * n.x, (1 - u) * i.y + u * n.y),
                            t)
                                return t.ReportFixture(l, _, c.normal, u);
                            if (r)
                                return r(l, _, c.normal, u)
                        }
                        return s.maxFraction
                    }
                    )),
                    t)
                        for (var a = this.m_particleSystemList; a; a = a.m_next)
                            t.ShouldQueryParticleSystem(a) && a.RayCast(t, i, n)
                }
                ,
                e.prototype.RayCastOne = function(t, e) {
                    var i = null
                      , n = 1;
                    return this.RayCast(null, t, e, (function(t, e, r, s) {
                        return s < n && (n = s,
                        i = t),
                        n
                    }
                    )),
                    i
                }
                ,
                e.prototype.RayCastAll = function(t, e, i) {
                    return void 0 === i && (i = []),
                    this.RayCast(null, t, e, (function(t) {
                        return i.push(t),
                        1
                    }
                    )),
                    i
                }
                ,
                e.prototype.GetBodyList = function() {
                    return this.m_bodyList
                }
                ,
                e.prototype.GetJointList = function() {
                    return this.m_jointList
                }
                ,
                e.prototype.GetParticleSystemList = function() {
                    return this.m_particleSystemList
                }
                ,
                e.prototype.GetContactList = function() {
                    return this.m_contactManager.m_contactList
                }
                ,
                e.prototype.SetAllowSleeping = function(t) {
                    if (t !== this.m_allowSleep && (this.m_allowSleep = t,
                    !this.m_allowSleep))
                        for (var e = this.m_bodyList; e; e = e.m_next)
                            e.SetAwake(!0)
                }
                ,
                e.prototype.GetAllowSleeping = function() {
                    return this.m_allowSleep
                }
                ,
                e.prototype.SetWarmStarting = function(t) {
                    this.m_warmStarting = t
                }
                ,
                e.prototype.GetWarmStarting = function() {
                    return this.m_warmStarting
                }
                ,
                e.prototype.SetContinuousPhysics = function(t) {
                    this.m_continuousPhysics = t
                }
                ,
                e.prototype.GetContinuousPhysics = function() {
                    return this.m_continuousPhysics
                }
                ,
                e.prototype.SetSubStepping = function(t) {
                    this.m_subStepping = t
                }
                ,
                e.prototype.GetSubStepping = function() {
                    return this.m_subStepping
                }
                ,
                e.prototype.GetProxyCount = function() {
                    return this.m_contactManager.m_broadPhase.GetProxyCount()
                }
                ,
                e.prototype.GetBodyCount = function() {
                    return this.m_bodyCount
                }
                ,
                e.prototype.GetJointCount = function() {
                    return this.m_jointCount
                }
                ,
                e.prototype.GetContactCount = function() {
                    return this.m_contactManager.m_contactCount
                }
                ,
                e.prototype.GetTreeHeight = function() {
                    return this.m_contactManager.m_broadPhase.GetTreeHeight()
                }
                ,
                e.prototype.GetTreeBalance = function() {
                    return this.m_contactManager.m_broadPhase.GetTreeBalance()
                }
                ,
                e.prototype.GetTreeQuality = function() {
                    return this.m_contactManager.m_broadPhase.GetTreeQuality()
                }
                ,
                e.prototype.SetGravity = function(t, e) {
                    if (void 0 === e && (e = !0),
                    !I.IsEqualToV(this.m_gravity, t) && (this.m_gravity.Copy(t),
                    e))
                        for (var i = this.m_bodyList; i; i = i.m_next)
                            i.SetAwake(!0)
                }
                ,
                e.prototype.GetGravity = function() {
                    return this.m_gravity
                }
                ,
                e.prototype.IsLocked = function() {
                    return this.m_locked
                }
                ,
                e.prototype.SetAutoClearForces = function(t) {
                    this.m_clearForces = t
                }
                ,
                e.prototype.GetAutoClearForces = function() {
                    return this.m_clearForces
                }
                ,
                e.prototype.ShiftOrigin = function(t) {
                    if (this.IsLocked())
                        throw new Error;
                    for (var e = this.m_bodyList; e; e = e.m_next)
                        e.m_xf.p.SelfSub(t),
                        e.m_sweep.c0.SelfSub(t),
                        e.m_sweep.c.SelfSub(t);
                    for (var i = this.m_jointList; i; i = i.m_next)
                        i.ShiftOrigin(t);
                    this.m_contactManager.m_broadPhase.ShiftOrigin(t)
                }
                ,
                e.prototype.GetContactManager = function() {
                    return this.m_contactManager
                }
                ,
                e.prototype.GetProfile = function() {
                    return this.m_profile
                }
                ,
                e.prototype.Dump = function(e) {
                    if (!this.m_locked) {
                        e("const g: b2Vec2 = new b2Vec2(%.15f, %.15f);\n", this.m_gravity.x, this.m_gravity.y),
                        e("this.m_world.SetGravity(g);\n"),
                        e("const bodies: b2Body[] = [];\n"),
                        e("const joints: b2Joint[] = [];\n");
                        for (var i = 0, n = this.m_bodyList; n; n = n.m_next)
                            n.m_islandIndex = i,
                            n.Dump(e),
                            ++i;
                        i = 0;
                        for (var r = this.m_jointList; r; r = r.m_next)
                            r.m_index = i,
                            ++i;
                        for (r = this.m_jointList; r; r = r.m_next)
                            r.m_type !== t.b2JointType.e_gearJoint && (e("{\n"),
                            r.Dump(e),
                            e("}\n"));
                        for (r = this.m_jointList; r; r = r.m_next)
                            r.m_type === t.b2JointType.e_gearJoint && (e("{\n"),
                            r.Dump(e),
                            e("}\n"))
                    }
                }
                ,
                e.prototype.DrawJoint = function(i) {
                    if (null !== this.m_debugDraw) {
                        var n = i.GetBodyA()
                          , r = i.GetBodyB()
                          , s = n.m_xf
                          , a = r.m_xf
                          , o = s.p
                          , l = a.p
                          , h = i.GetAnchorA(e.DrawJoint_s_p1)
                          , c = i.GetAnchorB(e.DrawJoint_s_p2)
                          , u = e.DrawJoint_s_color.SetRGB(.5, .8, .8);
                        switch (i.m_type) {
                        case t.b2JointType.e_distanceJoint:
                            this.m_debugDraw.DrawSegment(h, c, u);
                            break;
                        case t.b2JointType.e_pulleyJoint:
                            var _ = i
                              , f = _.GetGroundAnchorA()
                              , d = _.GetGroundAnchorB();
                            this.m_debugDraw.DrawSegment(f, h, u),
                            this.m_debugDraw.DrawSegment(d, c, u),
                            this.m_debugDraw.DrawSegment(f, d, u);
                            break;
                        case t.b2JointType.e_mouseJoint:
                            var p = e.DrawJoint_s_c;
                            p.Set(0, 1, 0),
                            this.m_debugDraw.DrawPoint(h, 4, p),
                            this.m_debugDraw.DrawPoint(c, 4, p),
                            p.Set(.8, .8, .8),
                            this.m_debugDraw.DrawSegment(h, c, p);
                            break;
                        default:
                            this.m_debugDraw.DrawSegment(o, h, u),
                            this.m_debugDraw.DrawSegment(h, c, u),
                            this.m_debugDraw.DrawSegment(l, c, u)
                        }
                    }
                }
                ,
                e.prototype.DrawShape = function(i, n) {
                    if (null !== this.m_debugDraw) {
                        var r = i.GetShape();
                        switch (r.m_type) {
                        case t.b2ShapeType.e_circleShape:
                            var s = r
                              , a = s.m_p
                              , o = s.m_radius
                              , l = I.UNITX;
                            this.m_debugDraw.DrawSolidCircle(a, o, l, n);
                            break;
                        case t.b2ShapeType.e_edgeShape:
                            var h = r
                              , c = h.m_vertex1
                              , u = h.m_vertex2;
                            this.m_debugDraw.DrawSegment(c, u, n);
                            break;
                        case t.b2ShapeType.e_chainShape:
                            var _ = r
                              , f = _.m_count
                              , d = _.m_vertices
                              , p = e.DrawShape_s_ghostColor.SetRGBA(.75 * n.r, .75 * n.g, .75 * n.b, n.a);
                            if (c = d[0],
                            this.m_debugDraw.DrawPoint(c, 4, n),
                            _.m_hasPrevVertex) {
                                var m = _.m_prevVertex;
                                this.m_debugDraw.DrawSegment(m, c, p),
                                this.m_debugDraw.DrawCircle(m, .1, p)
                            }
                            for (var y = 1; y < f; ++y)
                                u = d[y],
                                this.m_debugDraw.DrawSegment(c, u, n),
                                this.m_debugDraw.DrawPoint(u, 4, n),
                                c = u;
                            if (_.m_hasNextVertex) {
                                var v = _.m_nextVertex;
                                this.m_debugDraw.DrawSegment(v, c, p),
                                this.m_debugDraw.DrawCircle(v, .1, p)
                            }
                            break;
                        case t.b2ShapeType.e_polygonShape:
                            var g = r
                              , A = g.m_count;
                            d = g.m_vertices,
                            this.m_debugDraw.DrawSolidPolygon(d, A, n)
                        }
                    }
                }
                ,
                e.prototype.Solve = function(e) {
                    for (var i = this.m_bodyList; i; i = i.m_next)
                        i.m_xf0.Copy(i.m_xf);
                    for (var n = this.m_controllerList; n; n = n.m_next)
                        n.Step(e);
                    this.m_profile.solveInit = 0,
                    this.m_profile.solveVelocity = 0,
                    this.m_profile.solvePosition = 0;
                    var r = this.m_island;
                    for (r.Initialize(this.m_bodyCount, this.m_contactManager.m_contactCount, this.m_jointCount, null, this.m_contactManager.m_contactListener),
                    i = this.m_bodyList; i; i = i.m_next)
                        i.m_islandFlag = !1;
                    for (var s = this.m_contactManager.m_contactList; s; s = s.m_next)
                        s.m_islandFlag = !1;
                    for (var a = this.m_jointList; a; a = a.m_next)
                        a.m_islandFlag = !1;
                    for (var o = this.s_stack, l = this.m_bodyList; l; l = l.m_next)
                        if (!l.m_islandFlag && l.IsAwake() && l.IsActive() && l.GetType() !== t.b2BodyType.b2_staticBody) {
                            r.Clear();
                            var h = 0;
                            for (o[h++] = l,
                            l.m_islandFlag = !0; h > 0; ) {
                                if (!(i = o[--h]))
                                    throw new Error;
                                if (r.AddBody(i),
                                i.m_awakeFlag = !0,
                                i.GetType() !== t.b2BodyType.b2_staticBody) {
                                    for (var c = i.m_contactList; c; c = c.next) {
                                        var u = c.contact;
                                        if (!u.m_islandFlag && u.IsEnabled() && u.IsTouching()) {
                                            var _ = u.m_fixtureA.m_isSensor
                                              , f = u.m_fixtureB.m_isSensor;
                                            if (!_ && !f) {
                                                if (r.AddContact(u),
                                                u.m_islandFlag = !0,
                                                !(p = c.other))
                                                    throw new Error;
                                                p.m_islandFlag || (o[h++] = p,
                                                p.m_islandFlag = !0)
                                            }
                                        }
                                    }
                                    for (var d = i.m_jointList; d; d = d.next) {
                                        var p;
                                        d.joint.m_islandFlag || (p = d.other).IsActive() && (r.AddJoint(d.joint),
                                        d.joint.m_islandFlag = !0,
                                        p.m_islandFlag || (o[h++] = p,
                                        p.m_islandFlag = !0))
                                    }
                                }
                            }
                            var m = new hn;
                            r.Solve(m, e, this.m_gravity, this.m_allowSleep),
                            this.m_profile.solveInit += m.solveInit,
                            this.m_profile.solveVelocity += m.solveVelocity,
                            this.m_profile.solvePosition += m.solvePosition;
                            for (var y = 0; y < r.m_bodyCount; ++y)
                                (i = r.m_bodies[y]).GetType() === t.b2BodyType.b2_staticBody && (i.m_islandFlag = !1)
                        }
                    for (y = 0; y < o.length && o[y]; ++y)
                        o[y] = null;
                    var v = new U;
                    for (i = this.m_bodyList; i; i = i.m_next)
                        i.m_islandFlag && i.GetType() !== t.b2BodyType.b2_staticBody && i.SynchronizeFixtures();
                    this.m_contactManager.FindNewContacts(),
                    this.m_profile.broadphase = v.GetMilliseconds()
                }
                ,
                e.prototype.SolveTOI = function(i) {
                    var r = this.m_island;
                    if (r.Initialize(64, 32, 0, null, this.m_contactManager.m_contactListener),
                    this.m_stepComplete) {
                        for (var s = this.m_bodyList; s; s = s.m_next)
                            s.m_islandFlag = !1,
                            s.m_sweep.alpha0 = 0;
                        for (var a = this.m_contactManager.m_contactList; a; a = a.m_next)
                            a.m_toiFlag = !1,
                            a.m_islandFlag = !1,
                            a.m_toiCount = 0,
                            a.m_toi = 1
                    }
                    for (; ; ) {
                        var o = null
                          , l = 1;
                        for (a = this.m_contactManager.m_contactList; a; a = a.m_next)
                            if (a.IsEnabled() && !(a.m_toiCount > 8)) {
                                var h = 1;
                                if (a.m_toiFlag)
                                    h = a.m_toi;
                                else {
                                    var c = a.GetFixtureA()
                                      , u = a.GetFixtureB();
                                    if (c.IsSensor() || u.IsSensor())
                                        continue;
                                    var _ = c.GetBody()
                                      , f = u.GetBody()
                                      , d = _.m_type
                                      , p = f.m_type
                                      , m = _.IsAwake() && d !== t.b2BodyType.b2_staticBody
                                      , v = f.IsAwake() && p !== t.b2BodyType.b2_staticBody;
                                    if (!m && !v)
                                        continue;
                                    var g = _.IsBullet() || d !== t.b2BodyType.b2_dynamicBody
                                      , A = f.IsBullet() || p !== t.b2BodyType.b2_dynamicBody;
                                    if (!g && !A)
                                        continue;
                                    var x = _.m_sweep.alpha0;
                                    _.m_sweep.alpha0 < f.m_sweep.alpha0 ? (x = f.m_sweep.alpha0,
                                    _.m_sweep.Advance(x)) : f.m_sweep.alpha0 < _.m_sweep.alpha0 && (x = _.m_sweep.alpha0,
                                    f.m_sweep.Advance(x));
                                    var b = a.GetChildIndexA()
                                      , C = a.GetChildIndexB()
                                      , T = e.SolveTOI_s_toi_input;
                                    T.proxyA.SetShape(c.GetShape(), b),
                                    T.proxyB.SetShape(u.GetShape(), C),
                                    T.sweepA.Copy(_.m_sweep),
                                    T.sweepB.Copy(f.m_sweep),
                                    T.tMax = 1;
                                    var S = e.SolveTOI_s_toi_output;
                                    re(S, T);
                                    var w = S.t;
                                    h = S.state === t.b2TOIOutputState.e_touching ? y(x + (1 - x) * w, 1) : 1,
                                    a.m_toi = h,
                                    a.m_toiFlag = !0
                                }
                                h < l && (o = a,
                                l = h)
                            }
                        if (null === o || 1 - 10 * n < l) {
                            this.m_stepComplete = !0;
                            break
                        }
                        var E = o.GetFixtureA()
                          , M = o.GetFixtureB()
                          , D = E.GetBody()
                          , B = M.GetBody()
                          , I = e.SolveTOI_s_backup1.Copy(D.m_sweep)
                          , P = e.SolveTOI_s_backup2.Copy(B.m_sweep);
                        if (D.Advance(l),
                        B.Advance(l),
                        o.Update(this.m_contactManager.m_contactListener),
                        o.m_toiFlag = !1,
                        ++o.m_toiCount,
                        o.IsEnabled() && o.IsTouching()) {
                            D.SetAwake(!0),
                            B.SetAwake(!0),
                            r.Clear(),
                            r.AddBody(D),
                            r.AddBody(B),
                            r.AddContact(o),
                            D.m_islandFlag = !0,
                            B.m_islandFlag = !0,
                            o.m_islandFlag = !0;
                            for (var R = 0; R < 2; ++R)
                                if ((U = 0 === R ? D : B).m_type === t.b2BodyType.b2_dynamicBody)
                                    for (var O = U.m_contactList; O && r.m_bodyCount !== r.m_bodyCapacity && r.m_contactCount !== r.m_contactCapacity; O = O.next) {
                                        var L = O.contact;
                                        if (!L.m_islandFlag) {
                                            var F = O.other;
                                            if (F.m_type !== t.b2BodyType.b2_dynamicBody || U.IsBullet() || F.IsBullet()) {
                                                var V = L.m_fixtureA.m_isSensor
                                                  , N = L.m_fixtureB.m_isSensor;
                                                if (!V && !N) {
                                                    var k = e.SolveTOI_s_backup.Copy(F.m_sweep);
                                                    F.m_islandFlag || F.Advance(l),
                                                    L.Update(this.m_contactManager.m_contactListener),
                                                    L.IsEnabled() && L.IsTouching() ? (L.m_islandFlag = !0,
                                                    r.AddContact(L),
                                                    F.m_islandFlag || (F.m_islandFlag = !0,
                                                    F.m_type !== t.b2BodyType.b2_staticBody && F.SetAwake(!0),
                                                    r.AddBody(F))) : (F.m_sweep.Copy(k),
                                                    F.SynchronizeTransform())
                                                }
                                            }
                                        }
                                    }
                            var G = e.SolveTOI_s_subStep;
                            for (G.dt = (1 - l) * i.dt,
                            G.inv_dt = 1 / G.dt,
                            G.dtRatio = 1,
                            G.positionIterations = 20,
                            G.velocityIterations = i.velocityIterations,
                            G.particleIterations = i.particleIterations,
                            G.warmStarting = !1,
                            r.SolveTOI(G, D.m_islandIndex, B.m_islandIndex),
                            R = 0; R < r.m_bodyCount; ++R) {
                                var U;
                                if ((U = r.m_bodies[R]).m_islandFlag = !1,
                                U.m_type === t.b2BodyType.b2_dynamicBody)
                                    for (U.SynchronizeFixtures(),
                                    O = U.m_contactList; O; O = O.next)
                                        O.contact.m_toiFlag = !1,
                                        O.contact.m_islandFlag = !1
                            }
                            if (this.m_contactManager.FindNewContacts(),
                            this.m_subStepping) {
                                this.m_stepComplete = !1;
                                break
                            }
                        } else
                            o.SetEnabled(!1),
                            D.m_sweep.Copy(I),
                            B.m_sweep.Copy(P),
                            D.SynchronizeTransform(),
                            B.SynchronizeTransform()
                    }
                }
                ,
                e.prototype.AddController = function(t) {
                    return t.m_next = this.m_controllerList,
                    t.m_prev = null,
                    this.m_controllerList && (this.m_controllerList.m_prev = t),
                    this.m_controllerList = t,
                    ++this.m_controllerCount,
                    t
                }
                ,
                e.prototype.RemoveController = function(t) {
                    return t.m_prev && (t.m_prev.m_next = t.m_next),
                    t.m_next && (t.m_next.m_prev = t.m_prev),
                    this.m_controllerList === t && (this.m_controllerList = t.m_next),
                    --this.m_controllerCount,
                    t.m_prev = null,
                    t.m_next = null,
                    t
                }
                ,
                e.Step_s_step = new cn,
                e.Step_s_stepTimer = new U,
                e.Step_s_timer = new U,
                e.DrawDebugData_s_color = new k(0,0,0),
                e.DrawDebugData_s_vs = I.MakeArray(4),
                e.DrawDebugData_s_xf = new V,
                e.QueryFixtureShape_s_aabb = new Tt,
                e.RayCast_s_input = new bt,
                e.RayCast_s_output = new Ct,
                e.RayCast_s_point = new I,
                e.DrawJoint_s_p1 = new I,
                e.DrawJoint_s_p2 = new I,
                e.DrawJoint_s_color = new k(.5,.8,.8),
                e.DrawJoint_s_c = new k,
                e.DrawShape_s_ghostColor = new k,
                e.SolveTOI_s_subStep = new cn,
                e.SolveTOI_s_backup = new N,
                e.SolveTOI_s_backup1 = new N,
                e.SolveTOI_s_backup2 = new N,
                e.SolveTOI_s_toi_input = new jt,
                e.SolveTOI_s_toi_output = new Yt,
                e
            }
            )()
              , Xn = function(t, e) {
                this.prevBody = null,
                this.nextBody = null,
                this.prevController = null,
                this.nextController = null,
                this.controller = t,
                this.body = e
            }
              , Yn = (function() {
                function t() {
                    this.m_bodyList = null,
                    this.m_bodyCount = 0,
                    this.m_prev = null,
                    this.m_next = null
                }
                return t.prototype.GetNext = function() {
                    return this.m_next
                }
                ,
                t.prototype.GetPrev = function() {
                    return this.m_prev
                }
                ,
                t.prototype.GetBodyList = function() {
                    return this.m_bodyList
                }
                ,
                t.prototype.AddBody = function(t) {
                    var e = new Xn(this,t);
                    e.nextBody = this.m_bodyList,
                    e.prevBody = null,
                    this.m_bodyList && (this.m_bodyList.prevBody = e),
                    this.m_bodyList = e,
                    ++this.m_bodyCount,
                    e.nextController = t.m_controllerList,
                    e.prevController = null,
                    t.m_controllerList && (t.m_controllerList.prevController = e),
                    t.m_controllerList = e,
                    ++t.m_controllerCount
                }
                ,
                t.prototype.RemoveBody = function(t) {
                    if (this.m_bodyCount <= 0)
                        throw new Error;
                    for (var e = this.m_bodyList; e && e.body !== t; )
                        e = e.nextBody;
                    if (null === e)
                        throw new Error;
                    e.prevBody && (e.prevBody.nextBody = e.nextBody),
                    e.nextBody && (e.nextBody.prevBody = e.prevBody),
                    this.m_bodyList === e && (this.m_bodyList = e.nextBody),
                    --this.m_bodyCount,
                    e.nextController && (e.nextController.prevController = e.prevController),
                    e.prevController && (e.prevController.nextController = e.nextController),
                    t.m_controllerList === e && (t.m_controllerList = e.nextController),
                    --t.m_controllerCount
                }
                ,
                t.prototype.Clear = function() {
                    for (; this.m_bodyList; )
                        this.RemoveBody(this.m_bodyList.body);
                    this.m_bodyCount = 0
                }
                ,
                t
            }
            )()
              , qn = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.normal = new I(0,1),
                    e.offset = 0,
                    e.density = 0,
                    e.velocity = new I(0,0),
                    e.linearDrag = 0,
                    e.angularDrag = 0,
                    e.useDensity = !1,
                    e.useWorldGravity = !0,
                    e.gravity = new I(0,0),
                    e
                }
                return ti(e, t),
                e.prototype.Step = function() {
                    if (this.m_bodyList) {
                        this.useWorldGravity && this.gravity.Copy(this.m_bodyList.body.GetWorld().GetGravity());
                        for (var t = this.m_bodyList; t; t = t.nextBody) {
                            var e = t.body;
                            if (e.IsAwake()) {
                                for (var i = new I, r = new I, s = 0, a = 0, o = e.GetFixtureList(); o; o = o.m_next) {
                                    var l = new I
                                      , h = o.GetShape().ComputeSubmergedArea(this.normal, this.offset, e.GetTransform(), l);
                                    s += h,
                                    i.x += h * l.x,
                                    i.y += h * l.y;
                                    var c;
                                    a += h * (c = this.useDensity ? o.GetDensity() : 1),
                                    r.x += h * l.x * c,
                                    r.y += h * l.y * c
                                }
                                if (i.x /= s,
                                i.y /= s,
                                r.x /= a,
                                r.y /= a,
                                !(s < n)) {
                                    var u = this.gravity.Clone().SelfNeg();
                                    u.SelfMul(this.density * s),
                                    e.ApplyForce(u, r);
                                    var _ = e.GetLinearVelocityFromWorldPoint(i, new I);
                                    _.SelfSub(this.velocity),
                                    _.SelfMul(-this.linearDrag * s),
                                    e.ApplyForce(_, i),
                                    e.ApplyTorque(-e.GetInertia() / e.GetMass() * s * e.GetAngularVelocity() * this.angularDrag)
                                }
                            }
                        }
                    }
                }
                ,
                e.prototype.Draw = function(t) {
                    var e = 100
                      , i = new I
                      , n = new I;
                    i.x = this.normal.x * this.offset + this.normal.y * e,
                    i.y = this.normal.y * this.offset - this.normal.x * e,
                    n.x = this.normal.x * this.offset - this.normal.y * e,
                    n.y = this.normal.y * this.offset + this.normal.x * e;
                    var r = new k(0,0,.8);
                    t.DrawSegment(i, n, r)
                }
                ,
                e
            }
            )(Yn)
              , Jn = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.A = new I(0,0),
                    e
                }
                return ti(e, t),
                e.prototype.Step = function(t) {
                    for (var i = I.MulSV(t.dt, this.A, e.Step_s_dtA), n = this.m_bodyList; n; n = n.nextBody) {
                        var r = n.body;
                        r.IsAwake() && r.SetLinearVelocity(I.AddVV(r.GetLinearVelocity(), i, I.s_t0))
                    }
                }
                ,
                e.prototype.Draw = function() {}
                ,
                e.Step_s_dtA = new I,
                e
            }
            )(Yn)
              , Zn = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.F = new I(0,0),
                    e
                }
                return ti(e, t),
                e.prototype.Step = function() {
                    for (var t = this.m_bodyList; t; t = t.nextBody) {
                        var e = t.body;
                        e.IsAwake() && e.ApplyForce(this.F, e.GetWorldCenter())
                    }
                }
                ,
                e.prototype.Draw = function() {}
                ,
                e
            }
            )(Yn)
              , Kn = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.G = 1,
                    e.invSqr = !0,
                    e
                }
                return ti(e, t),
                e.prototype.Step = function() {
                    if (this.invSqr)
                        for (var t = this.m_bodyList; t; t = t.nextBody)
                            for (var i = (l = t.body).GetWorldCenter(), r = l.GetMass(), s = this.m_bodyList; s && s !== t; s = s.nextBody) {
                                var a = (h = s.body).GetWorldCenter()
                                  , o = h.GetMass();
                                (_ = (c = a.x - i.x) * c + (u = a.y - i.y) * u) < n || ((f = e.Step_s_f.Set(c, u)).SelfMul(this.G / _ / T(_) * r * o),
                                l.IsAwake() && l.ApplyForce(f, i),
                                h.IsAwake() && h.ApplyForce(f.SelfMul(-1), a))
                            }
                    else
                        for (t = this.m_bodyList; t; t = t.nextBody) {
                            var l;
                            for (i = (l = t.body).GetWorldCenter(),
                            r = l.GetMass(),
                            s = this.m_bodyList; s && s !== t; s = s.nextBody) {
                                var h, c, u, _, f;
                                a = (h = s.body).GetWorldCenter(),
                                o = h.GetMass(),
                                (_ = (c = a.x - i.x) * c + (u = a.y - i.y) * u) < n || ((f = e.Step_s_f.Set(c, u)).SelfMul(this.G / _ * r * o),
                                l.IsAwake() && l.ApplyForce(f, i),
                                h.IsAwake() && h.ApplyForce(f.SelfMul(-1), a))
                            }
                        }
                }
                ,
                e.prototype.Draw = function() {}
                ,
                e.Step_s_f = new I,
                e
            }
            )(Yn)
              , Qn = (function(t) {
                function e() {
                    var e = null !== t && t.apply(this, arguments) || this;
                    return e.T = new O,
                    e.maxTimestep = 0,
                    e
                }
                return ti(e, t),
                e.prototype.Step = function(t) {
                    var i = t.dt;
                    if (!(i <= n)) {
                        i > this.maxTimestep && this.maxTimestep > 0 && (i = this.maxTimestep);
                        for (var r = this.m_bodyList; r; r = r.nextBody) {
                            var s = r.body;
                            if (s.IsAwake()) {
                                var a = s.GetWorldVector(O.MulMV(this.T, s.GetLocalVector(s.GetLinearVelocity(), I.s_t0), I.s_t1), e.Step_s_damping);
                                s.SetLinearVelocity(I.AddVV(s.GetLinearVelocity(), I.MulSV(i, a, I.s_t0), I.s_t1))
                            }
                        }
                    }
                }
                ,
                e.prototype.Draw = function() {}
                ,
                e.prototype.SetAxisAligned = function(t, e) {
                    this.T.ex.x = -t,
                    this.T.ex.y = 0,
                    this.T.ey.x = 0,
                    this.T.ey.y = -e,
                    this.maxTimestep = t > 0 || e > 0 ? 1 / v(t, e) : 0
                }
                ,
                e.Step_s_damping = new I,
                e
            }
            )(Yn)
              , $n = (function() {
                function t() {
                    this.m_count = 0,
                    this.m_ps = [],
                    this.m_p0s = [],
                    this.m_vs = [],
                    this.m_ims = [],
                    this.m_Ls = [],
                    this.m_as = [],
                    this.m_gravity = new I,
                    this.m_damping = 0,
                    this.m_k2 = 1,
                    this.m_k3 = .1
                }
                return t.prototype.GetVertexCount = function() {
                    return this.m_count
                }
                ,
                t.prototype.GetVertices = function() {
                    return this.m_ps
                }
                ,
                t.prototype.Initialize = function(t) {
                    this.m_count = t.count,
                    this.m_ps = I.MakeArray(this.m_count),
                    this.m_p0s = I.MakeArray(this.m_count),
                    this.m_vs = I.MakeArray(this.m_count),
                    this.m_ims = p(this.m_count);
                    for (var e = 0; e < this.m_count; ++e) {
                        this.m_ps[e].Copy(t.vertices[e]),
                        this.m_p0s[e].Copy(t.vertices[e]),
                        this.m_vs[e].SetZero();
                        var i = t.masses[e];
                        this.m_ims[e] = i > 0 ? 1 / i : 0
                    }
                    var n = this.m_count - 1
                      , r = this.m_count - 2;
                    for (this.m_Ls = p(n),
                    this.m_as = p(r),
                    e = 0; e < n; ++e) {
                        var s = this.m_ps[e]
                          , a = this.m_ps[e + 1];
                        this.m_Ls[e] = I.DistanceVV(s, a)
                    }
                    for (e = 0; e < r; ++e) {
                        s = this.m_ps[e],
                        a = this.m_ps[e + 1];
                        var o = this.m_ps[e + 2]
                          , l = I.SubVV(a, s, I.s_t0)
                          , h = I.SubVV(o, a, I.s_t1)
                          , c = I.CrossVV(l, h)
                          , u = I.DotVV(l, h);
                        this.m_as[e] = B(c, u)
                    }
                    this.m_gravity.Copy(t.gravity),
                    this.m_damping = t.damping,
                    this.m_k2 = t.k2,
                    this.m_k3 = t.k3
                }
                ,
                t.prototype.Step = function(t, e) {
                    if (0 !== t) {
                        for (var i = Math.exp(-t * this.m_damping), n = 0; n < this.m_count; ++n)
                            this.m_p0s[n].Copy(this.m_ps[n]),
                            this.m_ims[n] > 0 && this.m_vs[n].SelfMulAdd(t, this.m_gravity),
                            this.m_vs[n].SelfMul(i),
                            this.m_ps[n].SelfMulAdd(t, this.m_vs[n]);
                        for (n = 0; n < e; ++n)
                            this.SolveC2(),
                            this.SolveC3(),
                            this.SolveC2();
                        var r = 1 / t;
                        for (n = 0; n < this.m_count; ++n)
                            I.MulSV(r, I.SubVV(this.m_ps[n], this.m_p0s[n], I.s_t0), this.m_vs[n])
                    }
                }
                ,
                t.prototype.SolveC2 = function() {
                    for (var e = this.m_count - 1, i = 0; i < e; ++i) {
                        var n = this.m_ps[i]
                          , r = this.m_ps[i + 1]
                          , s = I.SubVV(r, n, t.s_d)
                          , a = s.Normalize()
                          , o = this.m_ims[i]
                          , l = this.m_ims[i + 1];
                        if (o + l !== 0) {
                            var h = o / (o + l)
                              , c = l / (o + l);
                            n.SelfMulSub(this.m_k2 * h * (this.m_Ls[i] - a), s),
                            r.SelfMulAdd(this.m_k2 * c * (this.m_Ls[i] - a), s)
                        }
                    }
                }
                ,
                t.prototype.SetAngle = function(t) {
                    for (var e = this.m_count - 2, i = 0; i < e; ++i)
                        this.m_as[i] = t
                }
                ,
                t.prototype.SolveC3 = function() {
                    for (var e = this.m_count - 2, i = 0; i < e; ++i) {
                        var n = this.m_ps[i]
                          , r = this.m_ps[i + 1]
                          , a = this.m_ps[i + 2]
                          , o = this.m_ims[i]
                          , l = this.m_ims[i + 1]
                          , h = this.m_ims[i + 2]
                          , c = I.SubVV(r, n, t.s_d1)
                          , u = I.SubVV(a, r, t.s_d2)
                          , _ = c.LengthSquared()
                          , f = u.LengthSquared();
                        if (_ * f != 0) {
                            var d = I.CrossVV(c, u)
                              , p = I.DotVV(c, u)
                              , m = B(d, p)
                              , y = I.MulSV(-1 / _, c.SelfSkew(), t.s_Jd1)
                              , v = I.MulSV(1 / f, u.SelfSkew(), t.s_Jd2)
                              , g = I.NegV(y, t.s_J1)
                              , A = I.SubVV(y, v, t.s_J2)
                              , x = v
                              , b = o * I.DotVV(g, g) + l * I.DotVV(A, A) + h * I.DotVV(x, x);
                            if (0 !== b) {
                                b = 1 / b;
                                for (var C = m - this.m_as[i]; C > s; )
                                    C = (m -= 2 * s) - this.m_as[i];
                                for (; C < -s; )
                                    C = (m += 2 * s) - this.m_as[i];
                                var T = -this.m_k3 * b * C;
                                n.SelfMulAdd(o * T, g),
                                r.SelfMulAdd(l * T, A),
                                a.SelfMulAdd(h * T, x)
                            }
                        }
                    }
                }
                ,
                t.prototype.Draw = function(t) {
                    for (var e = new k(.4,.5,.7), i = 0; i < this.m_count - 1; ++i)
                        t.DrawSegment(this.m_ps[i], this.m_ps[i + 1], e)
                }
                ,
                t.s_d = new I,
                t.s_d1 = new I,
                t.s_d2 = new I,
                t.s_Jd1 = new I,
                t.s_Jd2 = new I,
                t.s_J1 = new I,
                t.s_J2 = new I,
                t
            }
            )();
            t.b2Assert = function(t) {
                for (var e = [], i = 1; i < arguments.length; i++)
                    e[i - 1] = arguments[i];
                if (!t)
                    throw new (Error.bind.apply(Error, [void 0].concat(e)))
            }
            ,
            t.b2Maybe = e,
            t.b2_maxFloat = i,
            t.b2_epsilon = n,
            t.b2_epsilon_sq = r,
            t.b2_pi = s,
            t.b2_maxManifoldPoints = a,
            t.b2_maxPolygonVertices = o,
            t.b2_aabbExtension = .1,
            t.b2_aabbMultiplier = 2,
            t.b2_linearSlop = l,
            t.b2_angularSlop = h,
            t.b2_polygonRadius = c,
            t.b2_maxSubSteps = 8,
            t.b2_maxTOIContacts = 32,
            t.b2_velocityThreshold = 1,
            t.b2_maxLinearCorrection = .2,
            t.b2_maxAngularCorrection = .13962634015955555,
            t.b2_maxTranslation = 2,
            t.b2_maxTranslationSquared = 4,
            t.b2_maxRotation = 1.570796326795,
            t.b2_maxRotationSquared = 2.4674011002726646,
            t.b2_baumgarte = .2,
            t.b2_toiBaumgarte = .75,
            t.b2_invalidParticleIndex = u,
            t.b2_maxParticleIndex = 2147483647,
            t.b2_particleStride = .75,
            t.b2_minParticleWeight = 1,
            t.b2_maxParticlePressure = .25,
            t.b2_maxParticleForce = .5,
            t.b2_maxTriadDistance = 2,
            t.b2_maxTriadDistanceSquared = 4,
            t.b2_minParticleSystemBufferCapacity = 256,
            t.b2_barrierCollisionTime = 2.5,
            t.b2_timeToSleep = .5,
            t.b2_linearSleepTolerance = .01,
            t.b2_angularSleepTolerance = .03490658503988889,
            t.b2Alloc = function() {
                return null
            }
            ,
            t.b2Free = function() {}
            ,
            t.b2Log = function(t) {
                for (var e = [], i = 1; i < arguments.length; i++)
                    e[i - 1] = arguments[i]
            }
            ,
            t.b2Version = _,
            t.b2_version = f,
            t.b2_branch = "master",
            t.b2_commit = "fbf51801d80fc389d43dc46524520e89043b6faf",
            t.b2ParseInt = function(t) {
                return parseInt(t, 10)
            }
            ,
            t.b2ParseUInt = function(t) {
                return Math.abs(parseInt(t, 10))
            }
            ,
            t.b2MakeArray = d,
            t.b2MakeNullArray = function(t) {
                for (var e = [], i = 0; i < t; ++i)
                    e.push(null);
                return e
            }
            ,
            t.b2MakeNumberArray = p,
            t.b2_pi_over_180 = .017453292519944444,
            t.b2_180_over_pi = 57.29577951307855,
            t.b2_two_pi = 6.28318530718,
            t.b2Abs = m,
            t.b2Min = y,
            t.b2Max = v,
            t.b2Clamp = g,
            t.b2Swap = function(t, e) {
                var i = t[0];
                t[0] = e[0],
                e[0] = i
            }
            ,
            t.b2IsValid = A,
            t.b2Sq = x,
            t.b2InvSqrt = b,
            t.b2Sqrt = T,
            t.b2Pow = S,
            t.b2DegToRad = function(t) {
                return .017453292519944444 * t
            }
            ,
            t.b2RadToDeg = function(t) {
                return 57.29577951307855 * t
            }
            ,
            t.b2Cos = w,
            t.b2Sin = E,
            t.b2Acos = M,
            t.b2Asin = D,
            t.b2Atan2 = B,
            t.b2NextPowerOfTwo = function(t) {
                return t |= t >> 1 & 2147483647,
                t |= t >> 2 & 1073741823,
                t |= t >> 4 & 268435455,
                1 + ((t |= t >> 8 & 16777215) | t >> 16 & 65535)
            }
            ,
            t.b2IsPowerOfTwo = function(t) {
                return t > 0 && 0 == (t & t - 1)
            }
            ,
            t.b2Random = function() {
                return 2 * Math.random() - 1
            }
            ,
            t.b2RandomRange = function(t, e) {
                return (e - t) * Math.random() + t
            }
            ,
            t.b2Vec2 = I,
            t.b2Vec2_zero = P,
            t.b2Vec3 = R,
            t.b2Mat22 = O,
            t.b2Mat33 = L,
            t.b2Rot = F,
            t.b2Transform = V,
            t.b2Sweep = N,
            t.b2Color = k,
            t.b2Draw = G,
            t.b2Timer = U,
            t.b2Counter = z,
            t.b2GrowableStack = H,
            t.b2BlockAllocator = function() {}
            ,
            t.b2StackAllocator = function() {}
            ,
            t.b2ContactFeature = pt,
            t.b2ContactID = mt,
            t.b2ManifoldPoint = yt,
            t.b2Manifold = gt,
            t.b2WorldManifold = At,
            t.b2GetPointStates = function(e, i, n, r) {
                var s;
                for (s = 0; s < n.pointCount; ++s) {
                    var o = n.points[s].id.key;
                    e[s] = t.b2PointState.b2_removeState;
                    for (var l = 0, h = r.pointCount; l < h; ++l)
                        if (r.points[l].id.key === o) {
                            e[s] = t.b2PointState.b2_persistState;
                            break
                        }
                }
                for (; s < a; ++s)
                    e[s] = t.b2PointState.b2_nullState;
                for (s = 0; s < r.pointCount; ++s)
                    for (o = r.points[s].id.key,
                    i[s] = t.b2PointState.b2_addState,
                    l = 0,
                    h = n.pointCount; l < h; ++l)
                        if (n.points[l].id.key === o) {
                            i[s] = t.b2PointState.b2_persistState;
                            break
                        }
                for (; s < a; ++s)
                    i[s] = t.b2PointState.b2_nullState
            }
            ,
            t.b2ClipVertex = xt,
            t.b2RayCastInput = bt,
            t.b2RayCastOutput = Ct,
            t.b2AABB = Tt,
            t.b2TestOverlapAABB = St,
            t.b2ClipSegmentToLine = wt,
            t.b2TestOverlapShape = Bt,
            t.b2DistanceProxy = W,
            t.b2SimplexCache = j,
            t.b2DistanceInput = X,
            t.b2DistanceOutput = Y,
            t.b2ShapeCastInput = function() {
                this.proxyA = new W,
                this.proxyB = new W,
                this.transformA = new V,
                this.transformB = new V,
                this.translationB = new I
            }
            ,
            t.b2ShapeCastOutput = function() {
                this.point = new I,
                this.normal = new I,
                this.lambda = 0,
                this.iterations = 0
            }
            ,
            t.b2_gjk_reset = function() {
                t.b2_gjkCalls = 0,
                t.b2_gjkIters = 0,
                t.b2_gjkMaxIters = 0
            }
            ,
            t.b2SimplexVertex = q,
            t.b2Simplex = J,
            t.b2Distance = rt,
            t.b2ShapeCast = function(t, e) {
                t.iterations = 0,
                t.lambda = 1,
                t.normal.SetZero(),
                t.point.SetZero();
                var i = e.proxyA
                  , n = e.proxyB
                  , r = v(i.m_radius, c) + v(n.m_radius, c)
                  , s = e.transformA
                  , a = e.transformB
                  , o = e.translationB
                  , h = at.Set(0, 0)
                  , u = 0
                  , _ = ot;
                _.m_count = 0;
                for (var f = _.m_vertices, d = i.GetSupport(F.MulTRV(s.q, I.NegV(o, I.s_t1), I.s_t0)), p = V.MulXV(s, i.GetVertex(d), lt), y = n.GetSupport(F.MulTRV(a.q, o, I.s_t0)), g = V.MulXV(a, n.GetVertex(y), ht), A = I.SubVV(p, g, ct), x = v(c, r - c), b = .5 * l, C = 0; C < 20 && m(A.Length() - x) > b; ) {
                    t.iterations += 1,
                    d = i.GetSupport(F.MulTRV(s.q, I.NegV(A, I.s_t1), I.s_t0)),
                    p = V.MulXV(s, i.GetVertex(d), lt),
                    y = n.GetSupport(F.MulTRV(a.q, A, I.s_t0)),
                    g = V.MulXV(a, n.GetVertex(y), ht);
                    var T = I.SubVV(p, g, ut);
                    A.Normalize();
                    var S = I.DotVV(A, T)
                      , w = I.DotVV(A, o);
                    if (S - x > u * w) {
                        if (w <= 0)
                            return !1;
                        if ((u = (S - x) / w) > 1)
                            return !1;
                        h.Copy(A).SelfNeg(),
                        _.m_count = 0
                    }
                    var E = f[_.m_count];
                    switch (E.indexA = y,
                    E.wA.Copy(g).SelfMulAdd(u, o),
                    E.indexB = d,
                    E.wB.Copy(p),
                    E.w.Copy(E.wB).SelfSub(E.wA),
                    E.a = 1,
                    _.m_count += 1,
                    _.m_count) {
                    case 1:
                        break;
                    case 2:
                        _.Solve2();
                        break;
                    case 3:
                        _.Solve3()
                    }
                    if (3 === _.m_count)
                        return !1;
                    _.GetClosestPoint(A),
                    ++C
                }
                var M = _t
                  , D = ft;
                return _.GetWitnessPoints(M, D),
                A.LengthSquared() > 0 && (h.Copy(A).SelfNeg(),
                h.Normalize()),
                t.normal.Copy(h),
                t.lambda = u,
                t.iterations = C,
                !0
            }
            ,
            t.b2Pair = Ot,
            t.b2BroadPhase = Lt,
            t.b2PairLessThan = Ft,
            t.b2TreeNode = Pt,
            t.b2DynamicTree = Rt,
            t.b2_toi_reset = function() {
                t.b2_toiTime = 0,
                t.b2_toiMaxTime = 0,
                t.b2_toiCalls = 0,
                t.b2_toiIters = 0,
                t.b2_toiMaxIters = 0,
                t.b2_toiRootIters = 0,
                t.b2_toiMaxRootIters = 0
            }
            ,
            t.b2TOIInput = jt,
            t.b2TOIOutput = Yt,
            t.b2SeparationFunction = qt,
            t.b2TimeOfImpact = re,
            t.b2CollideCircles = oe,
            t.b2CollidePolygonAndCircle = ue,
            t.b2CollidePolygons = Le,
            t.b2CollideEdgeAndCircle = We,
            t.b2CollideEdgeAndPolygon = Je,
            t.b2MassData = Ke,
            t.b2Shape = Qe,
            t.b2CircleShape = ii,
            t.b2PolygonShape = ni,
            t.b2EdgeShape = ri,
            t.b2ChainShape = si,
            t.b2Filter = ai,
            t.b2FixtureDef = oi,
            t.b2FixtureProxy = li,
            t.b2Fixture = hi,
            t.b2BodyDef = function() {
                this.type = t.b2BodyType.b2_staticBody,
                this.position = new I(0,0),
                this.angle = 0,
                this.linearVelocity = new I(0,0),
                this.angularVelocity = 0,
                this.linearDamping = 0,
                this.angularDamping = 0,
                this.allowSleep = !0,
                this.awake = !0,
                this.fixedRotation = !1,
                this.bullet = !1,
                this.active = !0,
                this.userData = null,
                this.gravityScale = 1
            }
            ,
            t.b2Body = _i,
            t.b2World = jn,
            t.b2DestructionListener = en,
            t.b2ContactFilter = nn,
            t.b2ContactImpulse = rn,
            t.b2ContactListener = sn,
            t.b2QueryCallback = an,
            t.b2RayCastCallback = on,
            t.b2Island = An,
            t.b2Profile = hn,
            t.b2TimeStep = cn,
            t.b2Position = un,
            t.b2Velocity = _n,
            t.b2SolverData = fn,
            t.b2ContactManager = ln,
            t.b2MixFriction = Ui,
            t.b2MixRestitution = zi,
            t.b2ContactEdge = Wi,
            t.b2Contact = ji,
            t.b2ContactRegister = $i,
            t.b2ContactFactory = tn,
            t.g_blockSolve = !1,
            t.b2VelocityConstraintPoint = dn,
            t.b2ContactVelocityConstraint = pn,
            t.b2ContactPositionConstraint = mn,
            t.b2ContactSolverDef = yn,
            t.b2PositionSolverManifold = vn,
            t.b2ContactSolver = gn,
            t.b2CircleContact = Xi,
            t.b2PolygonContact = Yi,
            t.b2PolygonAndCircleContact = qi,
            t.b2EdgeAndCircleContact = Ji,
            t.b2EdgeAndPolygonContact = Zi,
            t.b2ChainAndCircleContact = Ki,
            t.b2ChainAndPolygonContact = Qi,
            t.b2Jacobian = fi,
            t.b2JointEdge = di,
            t.b2JointDef = pi,
            t.b2Joint = mi,
            t.b2AreaJointDef = gi,
            t.b2AreaJoint = Ai,
            t.b2DistanceJointDef = yi,
            t.b2DistanceJoint = vi,
            t.b2FrictionJointDef = xi,
            t.b2FrictionJoint = bi,
            t.b2GearJointDef = Ci,
            t.b2GearJoint = Ti,
            t.b2MotorJointDef = Si,
            t.b2MotorJoint = wi,
            t.b2MouseJointDef = Ei,
            t.b2MouseJoint = Mi,
            t.b2PrismaticJointDef = Di,
            t.b2PrismaticJoint = Bi,
            t.b2_minPulleyLength = 2,
            t.b2PulleyJointDef = Ii,
            t.b2PulleyJoint = Pi,
            t.b2RevoluteJointDef = Ri,
            t.b2RevoluteJoint = Oi,
            t.b2RopeJointDef = Li,
            t.b2RopeJoint = Fi,
            t.b2WeldJointDef = Vi,
            t.b2WeldJoint = Ni,
            t.b2WheelJointDef = ki,
            t.b2WheelJoint = Gi,
            t.b2ControllerEdge = Xn,
            t.b2Controller = Yn,
            t.b2BuoyancyController = qn,
            t.b2ConstantAccelController = Jn,
            t.b2ConstantForceController = Zn,
            t.b2GravityController = Kn,
            t.b2TensorDampingController = Qn,
            t.b2ParticleDef = xn,
            t.b2CalculateParticleIterations = bn,
            t.b2ParticleHandle = Tn,
            t.b2ParticleGroupDef = Sn,
            t.b2ParticleGroup = wn,
            t.b2GrowableBuffer = Nn,
            t.b2FixtureParticleQueryCallback = kn,
            t.b2ParticleContact = Gn,
            t.b2ParticleBodyContact = Un,
            t.b2ParticlePair = zn,
            t.b2ParticleTriad = Hn,
            t.b2ParticleSystemDef = Wn,
            t.b2RopeDef = function() {
                this.vertices = [],
                this.count = 0,
                this.masses = [],
                this.gravity = new I(0,0),
                this.damping = .1,
                this.k2 = .9,
                this.k3 = .1
            }
            ,
            t.b2Rope = $n,
            Object.defineProperty(t, "__esModule", {
                value: !0
            })
        }
        ,
        "object" == typeof i && void 0 !== e ? n(i) : "function" == typeof define && define.amd ? define(["exports"], n) : n((void 0).box2d = {})
    }
    ), {}],
    378: [(function(t, e) {
        "use strict";
        var i = "undefined" == typeof window ? global : window;
        i.cc = i.cc || {},
        cc.internal = cc.internal || {},
        t("./predefine"),
        t("./polyfill/string"),
        t("./polyfill/misc"),
        t("./polyfill/array"),
        t("./polyfill/object"),
        t("./polyfill/array-buffer"),
        t("./polyfill/number"),
        t("./polyfill/typescript"),
        t("./cocos2d/core/predefine"),
        t("./cocos2d"),
        t("./extends"),
        e.exports = i.cc
    }
    ), {
        "./cocos2d": 295,
        "./cocos2d/core/predefine": 218,
        "./extends": 353,
        "./package": void 0,
        "./polyfill/array": 380,
        "./polyfill/array-buffer": 379,
        "./polyfill/misc": 381,
        "./polyfill/number": 382,
        "./polyfill/object": 383,
        "./polyfill/string": 384,
        "./polyfill/typescript": void 0,
        "./predefine": 385
    }],
    379: [(function() {
        "use strict";
        if (!ArrayBuffer.isView) {
            var t = Object.getPrototypeOf(Int8Array);
            ArrayBuffer.isView = "function" == typeof t ? function(e) {
                return e instanceof t
            }
            : function(t) {
                if ("object" != typeof t)
                    return !1;
                var e = t.constructor;
                return e === Float64Array || e === Float32Array || e === Uint8Array || e === Uint32Array || e === Int8Array
            }
        }
    }
    ), {}],
    380: [(function() {
        "use strict";
        Array.isArray || (Array.isArray = function(t) {
            return "[object Array]" === Object.prototype.toString.call(t)
        }
        ),
        Array.prototype.find || (Array.prototype.find = function(t) {
            for (var e = this.length, i = 0; i < e; i++) {
                var n = this[i];
                if (t.call(this, n, i, this))
                    return n
            }
        }
        ),
        Array.prototype.includes || (Array.prototype.includes = function(t) {
            return -1 !== this.indexOf(t)
        }
        )
    }
    ), {}],
    381: [(function() {
        "use strict";
        if (Math.sign || (Math.sign = function(t) {
            return 0 == (t = +t) || isNaN(t) ? t : t > 0 ? 1 : -1
        }
        ),
        Math.log2 || (Math.log2 = function(t) {
            return Math.log(t) * Math.LOG2E
        }
        ),
        Number.isInteger || (Number.isInteger = function(t) {
            return "number" == typeof t && isFinite(t) && Math.floor(t) === t
        }
        ),
        !console.time) {
            var t = window.performance || Date
              , e = Object.create(null);
            console.time = function(i) {
                e[i] = t.now()
            }
            ,
            console.timeEnd = function(i) {
                var n = e[i]
                  , r = t.now() - n;
                console.log(i + ": " + r + "ms")
            }
        }
    }
    ), {}],
    382: [(function() {
        "use strict";
        Number.parseFloat = Number.parseFloat || parseFloat,
        Number.parseInt = Number.parseInt || parseInt
    }
    ), {}],
    383: [(function() {
        "use strict";
        Object.assign || (Object.assign = function(t, e) {
            return cc.js.mixin(t, e)
        }
        ),
        Object.getOwnPropertyDescriptors || (Object.getOwnPropertyDescriptors = function(t) {
            var e = {}
              , i = Object.getOwnPropertyNames(t);
            Object.getOwnPropertySymbols && (i = i.concat(Object.getOwnPropertySymbols(t)));
            for (var n = 0; n < i.length; ++n) {
                var r = i[n];
                e[r] = Object.getOwnPropertyDescriptor(t, r)
            }
            return e
        }
        )
    }
    ), {}],
    384: [(function() {
        "use strict";
        String.prototype.startsWith || (String.prototype.startsWith = function(t, e) {
            return e = e || 0,
            this.lastIndexOf(t, e) === e
        }
        ),
        String.prototype.endsWith || (String.prototype.endsWith = function(t, e) {
            (void 0 === e || e > this.length) && (e = this.length),
            e -= t.length;
            var i = this.indexOf(t, e);
            return -1 !== i && i === e
        }
        ),
        String.prototype.trimLeft || (String.prototype.trimLeft = function() {
            return this.replace(/^\s+/, "")
        }
        )
    }
    ), {}],
    385: [(function() {
        "use strict";
        var t = "undefined" == typeof window ? global : window;
        function e(e, i) {
            void 0 === t[e] && Object.defineProperty(t, e, {
                get: function() {
                    var t;
                    return "CC_WECHATGAMESUB" === e ? t = "cc.sys.platform === cc.sys.WECHAT_GAME_SUB" : "CC_WECHATGAME" === e ? t = "cc.sys.platform === cc.sys.WECHAT_GAME" : "CC_QQPLAY" === e && (t = "cc.sys.platform === cc.sys.QQ_PLAY"),
                    cc.warnID(1400, e, t),
                    i
                }
            })
        }
        function i(e) {
            return "object" == typeof t[e]
        }
        (function(e, i) {
            void 0 === t[e] && (t[e] = i)
        }
        )("CC_BUILD", !1),
        t.CC_BUILD = !0,
        t.CC_DEV = !1,
        t.CC_DEBUG = !1,
        t.CC_JSB = !1,
        t.CC_NATIVERENDERER = !1,
        t.CC_SUPPORT_JIT = !0,
        t.CC_PHYSICS_BUILTIN = !1,
        t.CC_PHYSICS_CANNON = !1,
        t.CC_EDITOR = !1,
        t.CC_PREVIEW = !1,
        t.CC_TEST = !1,
        t.CC_RUNTIME = !1,
        t.CC_JSB = !1;
        var n = !(!i("wx") || !wx.getSharedCanvas)
          , r = !(!i("wx") || !wx.getSystemInfoSync && !wx.getSharedCanvas)
          , s = i("bk");
        e("CC_WECHATGAMESUB", n),
        e("CC_WECHATGAME", r),
        e("CC_QQPLAY", s),
        t.CocosEngine = cc.ENGINE_VERSION = "2.4.5"
    }
    ), {}]
}, {}, [378]);
