/**
 * Smokescreen v0.1.2 - Chris Smoak <chris.smoak@gmail.com>
 * A Flash player written in JavaScript.
 *
 * Copyright 2010, RevShock
 *
 * Date: 2010-05-27
 */
var Smokescreen=function(url,element,width,height,name,params){
    goog={};

    goog.global=this;
    goog.provide=function(a){
        a=a.split(".");
        var b=goog.global;
        for(var c in a){
            var d=a[c];
            d in b||(b[d]={});
            b=b[d]
        }
    };

    goog.require=function(){};
    var fljs={},BrowserDetect={
        init:function(){
            this.browser=this.searchString(this.dataBrowser)||"An unknown browser";
            this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";
            this.OS=this.searchString(this.dataOS)||"an unknown OS"
        },
        searchString:function(a){
            for(var b=0;b<a.length;b++){
                var c=a[b].string,d=a[b].prop;
                this.versionSearchString=a[b].versionSearch||a[b].identity;
                if(c){
                    if(c.indexOf(a[b].subString)!=-1)return a[b].identity
                }else if(d)return a[b].identity
            }
        },
        searchVersion:function(a){
            var b=a.indexOf(this.versionSearchString);
            if(b!=-1)return parseFloat(a.substring(b+this.versionSearchString.length+1))
        },
        dataBrowser:[{
            string:navigator.userAgent,
            subString:"Chrome",
            identity:"Chrome"
        },{
            string:navigator.vendor,
            subString:"Apple",
            identity:"Safari",
            versionSearch:"Version"
        },{
            prop:window.opera,
            identity:"Opera"
        },{
            string:navigator.userAgent,
            subString:"Firefox",
            identity:"Firefox"
        },{
            string:navigator.userAgent,
            subString:"MSIE",
            identity:"Explorer",
            versionSearch:"MSIE"
        }],
        dataOS:[{
            string:navigator.platform,
            subString:"Win",
            identity:"Windows"
        },{
            string:navigator.userAgent,
            subString:"iPad",
            identity:"iPad"
        },{
            string:navigator.userAgent,
            subString:"iPhone",
            identity:"iPhone"
        },{
            string:navigator.platform,
            subString:"Mac",
            identity:"Mac"
        }]
    };

    BrowserDetect.init();
    fljs.agent=BrowserDetect;
    fljs.addConstants=function(a,b){
        for(var c in b)a[c]=b[c]
    };

    fljs.addMethods=function(a,b){
        for(var c in b)a.prototype[c]=b[c]
    };

    fljs.addStaticMethods=function(a,b){
        for(var c in b)a[c]=b[c]
    };
    fljs.addEvents=function(a,b){
        for(var c in b){
            var d=b[c],e=d[0],f=d[2];
            a.prototype["__add"+e]=d[1];
            a.prototype["__remove"+e]=f
        }
    };

    fljs.now=function(){
        return+new Date
    };

    fljs.inherits=function(a,b){
        function c(){}
        c.prototype=b.prototype;
        a.superClass_=b.prototype;
        a.prototype=new c;
        a.prototype.constructor=a
    };
    fljs.base=function(a,b){
        var c=arguments.callee.caller;
        if(c.superClass_)return c.superClass_.constructor.apply(a,Array.prototype.slice.call(arguments,1));
        for(var d=Array.prototype.slice.call(arguments,2),e=false,f=a.constructor;f;f=f.superClass_&&f.superClass_.constructor)if(f.prototype[b]===c)e=true;
            else if(e)return f.prototype[b].apply(a,d);if(a[b]===c)return a.constructor.prototype[b].apply(a,d);else throw Error("invalid base call");
        };
        fljs.bind=function(a,b){
        var c=b||this;if(arguments.length>2){
        var d=Array.prototype.slice.call(arguments,2);return function(){
        var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(c,e)
        }
        }else return function(){
        return a.apply(c,arguments)
        }
        };
        fljs.DummyConsole=function(){};
        fljs.addMethods(fljs.DummyConsole,{
            info:function(){}
            });fljs.DummyConsole._instance=new fljs.DummyConsole;fljs.console=function(){
        return fljs.debug?console:fljs.DummyConsole._instance
        };
        fljs.ext={};
        var flash={};
        flash.display={};
        flash.display.BlendMode=function(){};
        fljs.addConstants(flash.display.BlendMode,{
            ADD:"add",
            ALPHA:"alpha",
            DARKEN:"darken",
            DIFFERENCE:"difference",
            ERASE:"erase",
            HARDLIGHT:"hardlight",
            INVERT:"invert",
            LAYER:"layer",
            LIGHTEN:"lighten",
            MULTIPLY:"multiply",
            NORMAL:"normal",
            OVERLAY:"overlay",
            SCREEN:"screen",
            SUBTRACT:"subtract"
            });flash.events={};
        flash.events.Event=function(a,b,c){
        this.type=a;this.bubbles=b;this.cancelable=c
        };
        fljs.addConstants(flash.events.Event,{
            ACTIVATE:"activate",
            ADDED:"added",
            ADDED_TO_STAGE:"addedToStage",
            CANCEL:"cancel",
            CHANGE:"change",
            CLOSE:"close",
            COMPLETE:"complete",
            CONNECT:"connect",
            DEACTIVATE:"deactivate",
            DISPLAYING:"displaying",
            ENTER_FRAME:"enterFrame",
            FULLSCREEN:"fullscreen",
            ID3:"id3",
            INIT:"init",
            MOUSE_LEAVE:"mouseLeave",
            OPEN:"open",
            REMOVED:"removed",
            REMOVED_FROM_STAGE:"removedFromStage",
            RENDER:"render",
            RESIZE:"resize",
            SCROLL:"scroll",
            SELECT:"select",
            SOUND_COMPLETE:"soundComplete",
            TAB_CHILDREN_CHANGE:"tabChildrenChange",
            TAB_ENABLED_CHANGE:"tabEnabledChange",
            TAB_INDEX_CHANGE:"tabIndexChange",
            UNLOAD:"unload"
            });
        fljs.addMethods(flash.events.Event,{
            clone:function(){},
            formatToString:function(a){
            return"["+a+this.buildPropertiesString_(arguments)+"]"
            },
            buildPropertiesString_:function(a){
            for(var b=[],c=0;c<a.length;c++)c>0&&b.push(a[c]+"="+this[a[c]]);return b.join(" ")
            },
            isDefaultPrevented:function(){
            return this.returnValue_
            },
            stopImmediatePropagation:function(){
            this.stopPropagation()
            },
            toString:function(){
            return this.formatToString("Event","type","bubbles","cancelable")
            }
            });
        flash.events.MouseEvent=function(a,b,c,d,e,f,g,j,h,m,k,l,n,p){
        flash.events.Event.call(this,a,b,c);this.localX=d;this.localY=e;this.relatedObject=f;this.ctrlKey=g;this.altKey=j;this.shiftKey=h;this.buttonDown=m;this.delta=k;this.commandKey=l;this.controlKey=n;this.clickCount=p
        };
        fljs.inherits(flash.events.MouseEvent,flash.events.Event);
        fljs.addConstants(flash.events.MouseEvent,{
            CLICK:"click",
            DOUBLE_CLICK:"doubleClick",
            MOUSE_DOWN:"mouseDown",
            MOUSE_MOVE:"mouseMove",
            MOUSE_OUT:"mouseOut",
            MOUSE_OVER:"mouseOver",
            MOUSE_UP:"mouseUp",
            MOUSE_WHEEL:"mouseWheel",
            ROLL_OUT:"rollOut",
            ROLL_OVER:"rollOver"
            });flash.events.FullScreenEvent=function(){};
        fljs.addConstants(flash.events.FullScreenEvent,{
            FULL_SCREEN:"fullScreen"
            });
        flash.events.KeyboardEvent=function(a,b,c,d,e,f,g,j,h){
        flash.events.Event(a,b,c);this.charCode=d;this.keyCode=e;this.keyLocation=f;this.ctrlKey=g;this.altKey=j;this.shiftKey=h
        };
        fljs.inherits(flash.events.KeyboardEvent,flash.events.Event);fljs.addConstants(flash.events.KeyboardEvent,{
            KEY_DOWN:"keyDown",
            KEY_UP:"keyUp"
            });flash.events.FocusEvent=function(){};
        fljs.addConstants(flash.events.FocusEvent,{
            KEY_FOCUS_CHANGE:"keyFocusChange",
            MOUSE_FOCUS_CHANGE:"mouseFocusChange"
            });
        flash.events.IEventDispatcher=function(){};
        fljs.addMethods(flash.events.IEventDispatcher,{
            addEventListener:function(){},
            dispatchEvent:function(){},
            hasEventListener:function(){},
            removeEventListener:function(){},
            willTrigger:function(){}
            });flash.events.EventDispatcher=function(){
        this._listenerCount={};
        this._listeners={}
        };
        fljs.addMethods(flash.events.EventDispatcher,{
            addEventListener:function(a,b,c,d,e){
            a in this._listeners||(this._listeners[a]=[]);this._listeners[a].push([b,c,d,e]);if(!this._listenerCount[a]){
            this["__add"+a]&&this["__add"+a]();this._listenerCount[a]=0
            }
            this._listenerCount[a]+=1
            },
            dispatchEvent:function(a){
            var b=this._listeners[a.type];for(var c in b)b[c][0](a)
            },
            hasEventListener:function(a){
            return this._listeners[a]&&this._listeners[a].length>0
            },
            removeEventListener:function(a,b,c){
            var d=this._listeners[a];
            for(var e in d)d[e][0]==b&&d[e][1]==c&&d.splice(e,1);this._listenerCount[a]-=1;if(!this._listenerCount[a]){
            this["__remove"+a]&&this["__remove"+a]();this._listenerCount[a]=0
            }
            },
            willTrigger:function(a){
            return this.hasEventListener(a)
            }
            });flash.geom={};
        flash.geom.ColorTransform=function(a,b,c,d,e,f,g,j){
        if(typeof a=="undefined")a=1;if(typeof b=="undefined")b=1;if(typeof c=="undefined")c=1;if(typeof d=="undefined")d=1;if(typeof e=="undefined")e=0;if(typeof f=="undefined")f=0;if(typeof g=="undefined")g=0;if(typeof j=="undefined")j=0;this.alphaMultiplier=d;this.alphaOffset=j;this.blueMultiplier=c;this.blueOffset=g;this.greenMultiplier=b;this.greenOffset=f;this.redMultiplier=a;this.redOffset=e;this.__default=this.alphaMultiplier==1&&this.blueMultiplier==
        1&&this.greenMultiplier==1&&this.redMultiplier==1&&this.alphaOffset==0&&this.blueOffset==0&&this.greenOffset==0&&this.redOffset==0;fljs.console("cxform")
        };
        fljs.addMethods(flash.geom.ColorTransform,{
            concat:function(a){
            return new flash.geom.ColorTransform(this.redMultiplier*a.redMultiplier,this.greenMultiplier*a.greenMultiplier,this.blueMultiplier*a.blueMultiplier,this.alphaMultiplier*a.alphaMultiplier,Math.min(255,this.redOffset+a.redOffset),Math.min(255,this.greenOffset+a.greenOffset),Math.min(255,this.blueOffset+a.blueOffset),Math.min(255,this.alphaOffset+a.alphaOffset))
            },
            toString:function(){},
            __toSvgString:function(){
            return[this.redMultiplier,0,0,
            0,this.redOffset,0,this.greenMultiplier,0,0,this.greenOffset,0,0,this.blueMultiplier,0,this.blueOffset,0,0,0,this.alphaMultiplier,this.alphaOffset].toString()
            }
            });flash.geom.ColorTransform.identity=new flash.geom.ColorTransform;
        flash.geom.Matrix=function(a,b,c,d,e,f){
        if(typeof a=="undefined")a=1;if(typeof b=="undefined")b=0;if(typeof c=="undefined")c=0;if(typeof d=="undefined")d=1;if(typeof e=="undefined")e=0;if(typeof f=="undefined")f=0;this.a=a;this.b=b;this.c=c;this.d=d;this.tx=e;this.ty=f;this.__default=this.a==1&&this.b==0&&this.c==0&&this.d==1&&this.tx==0&&this.ty==0
        };
        fljs.addMethods(flash.geom.Matrix,{
            clone:function(){
            return new flash.geom.Matrix(this.a,this.b,this.c,this.d,this.tx,this.ty)
            },
            concat:function(a){
            var b=this.a*a.b+this.b*a.d,c=this.c*a.a+this.d*a.c,d=this.c*a.b+this.d*a.d,e=this.tx*a.a+this.ty*a.c+a.tx,f=this.tx*a.b+this.ty*a.d+a.ty;this.a=this.a*a.a+this.b*a.c;this.b=b;this.c=c;this.d=d;this.tx=e;this.ty=f
            },
            createBox:function(){},
            createGradientBox:function(){},
            deltaTransformPoint:function(){},
            identity:function(){},
            invert:function(){},
            rotate:function(){},
            scale:function(a,b){
            this.a*=a;this.d*=b;this.tx*=a;this.ty*=b
            },
            toString:function(){},
            transformPoint:function(){},
            translate:function(){},
            __toSvgString:function(){
            return"matrix("+[this.a,this.b,this.c,this.d,this.tx,this.ty]+")"
            }
            });flash.geom.Transform=function(a){
        this._target=a;this._colorTransform=new flash.geom.ColorTransform;this._matrix=new flash.geom.Matrix
        };
        fljs.addMethods(flash.geom.Transform,{
            setTarget:function(a){
            this._target=a
            },
            getColorTransform:function(){
            return this._colorTransform
            },
            setColorTransform:function(a){
            this._colorTransform=a;this._target.__setColorTransform(a)
            },
            getConcatenatedColorTransform:function(){
            for(var a=this._colorTransform,b=this._target,c=fljs.Player.getInstance();b&&b!=c;){
            var d=b.getTransform().getColorTransform();if(!d.__default){
            a=d;break
            }
            b=b.getParent()
            }
            return a
            },
            getMatrix:function(){
            return this._matrix
            },
            setMatrix:function(a){
            this._matrix=
            a;this._target.__setMatrix(a)
            },
            notify:function(){
            this._target.__setMatrix(this._matrix);this._target.__setColorTransform(this._colorTransform)
            }
            });
        flash.display.DisplayObject=function(){
        flash.events.EventDispatcher.call(this);this._alpha=1;this.blendMode_=flash.display.BlendMode.NORMAL;this._transform=new flash.geom.Transform(this);this.enterFrameListener=fljs.bind(this.onEnterFrame_,this);fljs.Player.getInstance().dispatcher.addEventListener(flash.events.Event.ENTER_FRAME,this.enterFrameListener);this.__simpleColorTransform=true;this.__asContext=null;(this._clipElement=new fljs.dom.Element).create(fljs.dom.Namespace.Svg,"g");this.id="clip"+
        flash.display.DisplayObject.id++;this._mouseEventHandler=fljs.bind(this.dispatchMouseEvent,this)
        };
        fljs.inherits(flash.display.DisplayObject,flash.events.EventDispatcher);
        fljs.addMethods(flash.display.DisplayObject,{
            getBounds:function(a){
            var b=this.element_.getElement().getBBox();if(a==this)return new flash.geom.Rectangle(b.x,b.y,b.width,b.height);else{
            var c=new flash.geom.Point(b.x,b.y);
            c=a.globalToLocal(this.localToGlobal(c));
            b=new flash.geom.Point(b.x+b.width,b.y+b.height);
            b=a.globalToLocal(this.localToGlobal(b));
            return new flash.geom.Rectangle(c.x,c.y,b.x-c.x,b.y-c.y)
        }
        },
        getRect:function(){},
            globalToLocal:function(a){
                var b=this._svgCtm();
                a=this._SvgApplyMatrixToPoint(a,
                    b);
                return new flash.geom.Point(a.x,a.y)
            },
            hitTestObject:function(a){
                a=a.getBounds(this);
                var b=this.getBounds(this);
                return a.x+a.width<=b.x&&a.x>=b.x+b.width&&a.y+a.height<=b.y&&a.y>=b.y+b.height
            },
            hitTestPoint:function(a,b){
                a=new flash.geom.Point(a,b);
                a=this.globalToLocal(a);
                b=this.getBounds(this);
                return a.x>=b.x&&a.x<=b.x+b.width&&a.y>b.y&&a.y<=b.y+b.height
            },
            _svgApplyMatrixToPoint:function(a,b){
                var c=fljs.Player.getInstance().element.getElement().createSVGPoint();
                c.x=a.x;
                c.y=a.y;
                return c=c.matrixTransform(b)
            },
            _svgCtm:function(){
                var a=this.element_.getElement(),b;
                try{
                    b=a.parentNode.getScreenCTM()
                }catch(c){
                    b=getScreenCTM(a.parentNode)
                }
                return b
            },
            localToGlobal:function(a){
                var b=this._svgCtm();
                a=this._SvgApplyMatrixToPoint(a,b.inverse());
                return new flash.geom.Point(a.x,a.y)
            },
            onEnterFrame_:function(){},
            __setColorTransform:function(a){
                this.element_.getElement().setAttributeNS(null,"opacity",a.alphaMultiplier);
                this.element_.getElement().setAttributeNS(null,"stroke-opacity",a.alphaMultiplier);
                this.element_.getElement().setAttributeNS(null,
                    "fill-opacity",a.alphaMultiplier);
                this.__simpleColorTransform=true
            },
            setColorTransform:function(){},
            __setHitTarget:function(a){
                this.setVisible(false);
                this.element_.getElement().setAttributeNS(null,"pointer-events","all");
                this._hitTargetFor=a;
                this.addEventListeners()
            },
            makeClipPath:function(){
                this.getClipPath()
            },
            getClipPath:function(){
                this._clipPath||this.buildClipPath();
                return this._clipPath
            },
            buildClipPath:function(){
                var a=new fljs.dom.Element;
                a.create(fljs.dom.Namespace.Svg,"clipPath");
                var b="clip"+
                flash.display.DisplayObject.id++;
                a.sets([["id",b],[null,"clipPathUnits","userSpaceOnUse"]]);
                a.update();
                this.__clipElement=a;
                a=this._clipPath=new fljs.dom.Element;
                a.create(fljs.dom.Namespace.Svg,"g");
                a.set(null,"clip-path","url(#"+b+")");
                a.update();
                this._clipElement.element.parentNode.replaceChild(a.element,this._clipElement.element);
                this._clipElement=a;
                this.buildClipParts(this);
                fljs.Player.getInstance().defs.append(this.__clipElement)
            },
            buildClipParts:function(a){
                if(!this._parentClipPaths)this._parentClipPaths=

                {};

                this._parentClipPaths[a.id]=a
            },
            __setMatrix:function(a){
                this.element_.getElement().setAttributeNS(null,"transform",a.__toSvgString());
                if(this._parentClipPaths)for(var b in this._parentClipPaths){
                    a=this._parentClipPaths[b];
                    this.updateClipParts&&this.updateClipParts(a)
                }
            },
            addEventListeners:function(){
                var a=this._buttonEventHandler=fljs.bind(this._hitTargetFor.updateButtonState,this._hitTargetFor),b=flash.events.MouseEvent;
                this.addEventListener(b.CLICK,a,true);
                this.addEventListener(b.MOUSE_OVER,a,true);
                this.addEventListener(b.MOUSE_OUT,a,true);
                this.addEventListener(b.MOUSE_DOWN,a,true);
                this.addEventListener(b.MOUSE_UP,a,true)
            },
            removeFromStage:function(){
                fljs.Player.getInstance().dispatcher.removeEventListener(flash.events.Event.ENTER_FRAME,this.enterFrameListener)
            },
            updateClipDepth:function(a){
                if(this.__clipDepth){
                    if(a!=this.__clipDepth)if(a<this.__clipDepth){
                        ;
                        }else if(a>this.__clipDepth){}
                }else{
                    this.makeClipPath();
                    this.__clipDepth=a;
                    var b=this._parent;
                    b.element_.getElement();
                    var c=b.clipPathForDepth(this._depth);
                    c&&c.getClipPath();
                    var d=document.createDocumentFragment();
                    for(var e in b.displayList_){
                        var f=b.displayList_[e].displayObject;
                        if(e>this._depth&&e<=a&&f._mask==c){
                            d.appendChild(f._clipElement.element);
                            f._mask=this
                        }
                    }
                    this.getClipPath().element.appendChild(d)
                }
            },
            getName:function(){
                return this._name
            },
            setName:function(a){
                this._parent&&this._parent.setChildName(this,a);
                this._name=a
            },
            getStage:function(){
                return this._parent&&this._parent.getStage?this._parent.getStage():null
            },
            getTransform:function(){
                return this._transform
            },
            setTransform:function(a){
                this._transform=a;
                this._transform.setTarget(this);
                this._transform.notify()
            },
            getMatrix:function(){
                return this._transform._matrix
            },
            setMatrix:function(a){
                this._transform.setMatrix(a)
            },
            getVisible:function(){
                return this._visible
            },
            setVisible:function(a){
                a=(this._visible=!!a)?"visible":"hidden";
                this.element_.getElement().setAttributeNS(null,"visibility",a)
            },
            getParent:function(){
                return this._parent
            },
            setParent:function(a){
                if(this._parent!=a)this._parent=a
            },
            getAs2Object:function(){
                if(!this._as2Object)this._as2Object=
                    new fljs.swf.act.MovieClip(this);
                return this._as2Object
            },
            dispatchMouseEvent:function(a){
                var b={};

                b.click=flash.events.MouseEvent.CLICK;
                b.touchend=flash.events.MouseEvent.CLICK;
                b.mouseover=flash.events.MouseEvent.MOUSE_OVER;
                b.mouseout=flash.events.MouseEvent.MOUSE_OUT;
                b.mousedown=flash.events.MouseEvent.MOUSE_DOWN;
                b.mouseup=flash.events.MouseEvent.MOUSE_UP;
                b.touchstart=flash.events.MouseEvent.MOUSE_DOWN;
                b.touchend=flash.events.MouseEvent.MOUSE_UP;
                this.dispatchEvent(new flash.events.MouseEvent(b[a.type]))
            },
            getWidth:function(){
                return this.element_.element.getBBox().width
            },
            setWidth:function(a){
                var b=this.getWidth(),c=this.getMatrix(),d=new flash.geom.Matrix;
                d.scale(a/b,1);
                d.concat(c);
                d.tx=c.tx;
                d.ty=c.ty;
                this.setMatrix(d)
            },
            getHeight:function(){
                return this.element_.element.getBBox().height
            }
        });
    fljs.addEvents(flash.display.DisplayObject,[[flash.events.MouseEvent.MOUSE_OVER,function(){
        this.element_.element.addEventListener("mouseover",this._mouseEventHandler,false)
    },function(){
        this.element_.element.removeEventListener("mouseover",this._mouseEventHandler)
    }],[flash.events.MouseEvent.MOUSE_OUT,function(){
        this.element_.element.addEventListener("mouseout",this._mouseEventHandler,false)
    },function(){
        this.element_.element.removeEventListener("mouseout",this._mouseEventHandler)
    }],[flash.events.MouseEvent.MOUSE_DOWN,
    function(){
        this.element_.element.addEventListener("mousedown",this._mouseEventHandler,false)
    },function(){
        this.element_.element.removeEventListener("mousedown",this._mouseEventHandler)
    }],[flash.events.MouseEvent.MOUSE_UP,function(){
        this.element_.element.addEventListener("mouseup",this._mouseEventHandler,false)
    },function(){
        this.element_.element.removeEventListener("mouseup",this._mouseEventHandler)
    }]]);
    flash.display.DisplayObject.id=1;
    flash.display.InteractiveObject=function(){
        flash.display.DisplayObject.call(this)
    };
    fljs.inherits(flash.display.InteractiveObject,flash.display.DisplayObject);
    flash.display.DisplayObjectContainer=function(){
        flash.display.InteractiveObject.call(this);
        this.element_=this._clipElement;
        this.graphics_=new flash.display.Graphics(this);
        this.displayList_=[];
        this.__childNames={}
    };

    fljs.inherits(flash.display.DisplayObjectContainer,flash.display.InteractiveObject);
    fljs.addMethods(flash.display.DisplayObjectContainer,{
        addChild:function(a){
            var b=0;
            for(var c in this.displayList_)b=Math.max(c,b);return this.addChildAt(a,b+1)
        },
        addChildAt:function(a,b){
            a._depth=b;
            a.setParent(this);
            var c=this.element_.getElement(),d=this.clipPathForDepth(b);
            if(d)c=d.getClipPath().element;
            var e=this.displayList_[b],f;
            if(e)f=e.displayObject;
            if(e&&!f.__clipDepth){
                c.replaceChild(a._clipElement.element,f._clipElement.element);
                f.removeFromStage()
            }else{
                e&&this.removeChildAt(b);
                if((e=this.dispObjAfterIndex(b))&&
                    d)if(e._mask!=d)e=null;
                e?c.insertBefore(a._clipElement.element,e._clipElement.element):c.appendChild(a._clipElement.element)
            }
            this.displayList_[b]={
                displayObject:a
            };

            a.__name&&this.setChildName(a,null,a.__name);
            if(this._parentClipPaths)for(var g in this._parentClipPaths)a.buildClipParts(this._parentClipPaths[g]);if(d)a._mask=d;
            return a
        },
        dispObjAfterIndex:function(a){
            var b,c=null;
            for(var d in this.displayList_)if(d>a){
                b=c?Math.min(b,d):d;
                c=this.displayList_[b].displayObject
            }
            return c
        },
        areInaccessibleObjectsUnderPoint:function(){
            return false
        },
        contains:function(){},
        getChildAt:function(a){
            return(a=this.displayList_[a])?a.displayObject:null
        },
        getChildByName:function(a){
            return this.childrenByName_[a]
        },
        removeChildAt:function(a){
            var b=this.displayList_[a];
            if(b){
                b=b.displayObject;
                var c;
                c=(c=this.clipPathForDepth(a))?c.getClipPath().element:this.element_.getElement();
                var d=b._clipElement.element;
                if(b.__clipDepth){
                    b.getClipPath();
                    var e=document.createDocumentFragment();
                    for(var f in this.displayList_){
                        var g=this.displayList_[f].displayObject;
                        if(g._mask==
                            b){
                            g._mask=null;
                            e.appendChild(g._clipElement.element)
                        }
                    }
                    c.replaceChild(e,d)
                }else c.removeChild(d);
                b.setParent(null);
                b.removeFromStage();
                b._name&&delete this.__childNames[b._name];
                delete this.displayList_[a];
                return b
            }else fljs.console("doc").info("removeChildAt:"+a+" failed")
        },
        removeChildren:function(){
            for(var a in this.displayList_)this.removeChildAt(a)
        },
        setChildIndex:function(){},
        swapChildren:function(){},
        swapChildrenAt:function(){},
        setChildName:function(a,b){
            a._name&&delete this.__childNames[a._name];
            this.__childNames[b]=a
        },
        buildClipParts:function(a){
            fljs.base(this,"buildClipParts",a);
            this.graphics_.buildClipParts(a);
            for(var b in this.displayList_){
                var c=this.displayList_[b].displayObject;
                c.buildClipParts&&c.buildClipParts(a)
            }
        },
        updateClipParts:function(a){
            this.graphics_.updateClipParts(a);
            for(var b in this.displayList_){
                var c=this.displayList_[b].displayObject;
                c.updateClipParts&&c.updateClipParts(a)
            }
        },
        updateColorTransform:function(){
            for(var a in this.displayList_){
                var b=this.displayList_[a].displayObject;
                b.updateColorTransform&&b.updateColorTransform()
            }
        },
        __setColorTransform:function(a){
            fljs.base(this,"__setColorTransform",a);
            this.updateColorTransform()
        },
        clipPathForDepth:function(a){
            var b=-1;
            for(var c in this.displayList_){
                var d=this.displayList_[c].displayObject;
                if(d.__clipDepth)if(a>c&&a<=d.__clipDepth)b=Math.max(c,b)
            }
            return b>-1?this.displayList_[b].displayObject:null
        }
    });
    flash.display.Stage=function(){
        flash.display.DisplayObjectContainer.call(this);
        var a=fljs.Player.getInstance(),b=a.header.FrameSize.Xmax-a.header.FrameSize.Xmin,c=a.header.FrameSize.Ymax-a.header.FrameSize.Ymin;
        this._clipElement.sets([[null,"width",b],[null,"height",c]]);
        this._clipElement.update();
        this.align_=flash.display.StageAlign.TOP_LEFT;
        this.displayState_=flash.display.StageDisplayState.NORMAL;
        this.frameRate_=30;
        a=fljs.Player.getInstance();
        b=a.header.FrameSize.Xmax-a.header.FrameSize.Xmin;
        c=
        a.header.FrameSize.Ymax-a.header.FrameSize.Ymin;
        a=this._bg=new fljs.dom.Element;
        a.create(fljs.dom.Namespace.Svg,"rect");
        a.sets([[null,"x",0],[null,"y",0],[null,"width",b],[null,"height",c],[null,"stroke","none"],[null,"fill",this.colorToSvgString(0)]]);
        a.update();
        (b=this._clipElement.element.firstChild)?this._clipElement.getElement().insertBefore(a.element,b):this._clipElement.getElement().appendChild(a.element)
    };

    fljs.inherits(flash.display.Stage,flash.display.DisplayObjectContainer);
    fljs.addMethods(flash.display.Stage,{
        initialize:function(){
            this.setBackgroundColor_(0)
        },
        invalidate:function(){},
        isFocusInaccessible:function(){},
        runFrameLoop_:function(){},
        onEnterFrame_:function(){
            for(var a in this.children_)this.children_.onEnterFrame()
        },
        colorToSvgString:function(a){
            return"rgb("+[a>>16&255,a>>8&255,a&255]+")"
        },
        setBackgroundColor_:function(a){
            this._bg.set(null,"fill",this.colorToSvgString(a));
            this._bg.update()
        },
        onMouseMove:function(a){
            this._mouseX=a.clientX;
            this._mouseY=a.clientY
        },
        getStage:function(){
            return this
        },
        getFrameRate:function(){
            return this.frameRate_
        },
        setFrameRate:function(a){
            this.frameRate_=a=Math.max(Math.min(a,1E3),0.01)
        }
    });
    flash.display.GradientType=function(){};

    fljs.addConstants(flash.display.GradientType,{
        LINEAR:"linear",
        RADIAL:"radial"
    });
    flash.display.SpreadMethod=function(){};

    fljs.addConstants(flash.display.SpreadMethod,{
        PAD:"pad",
        REFLECT:"reflect",
        REPEAT:"repeat"
    });
    flash.display.InterpolationMethod=function(){};
    fljs.addConstants(flash.display.InterpolationMethod,{
        LINEAR_RGB:"linearRGB",
        RGB:"rgb"
    });
    flash.display.Graphics=function(a){
        this.__target=a;
        this.setDisplayObject(a);
        this._parentClipPaths={};

        this._clipParts={};

        this._parts=[]
    };
    fljs.addMethods(flash.display.Graphics,{
        clear:function(){
            for(var a in this._parts)this.parentEl.removeChild(this._parts[a]);this._parts=[];
            this._clipParts={};

            this._parentClipPaths={}
        },
        opacityWithXform:function(a){
            var b=this.displayObject_.getTransform().getConcatenatedColorTransform();
            return b.__default?a:Math.max(0,Math.min(255,Math.round(a*255*b.alphaMultiplier+b.alphaOffset)))/255
        },
        setDisplayObject:function(a){
            this.displayObject_=a;
            this.parentEl=this.displayObject_.element_.element
        },
        __colorToSvgString:function(a){
            var b=
            a>>16&255,c=a>>8&255;
            a=a&255;
            if(!this.displayObject_.getTransform().getConcatenatedColorTransform().__default){
                var d=this.displayObject_.getTransform().getConcatenatedColorTransform();
                b=Math.max(0,Math.min(255,Math.round(b*d.redMultiplier+d.redOffset)));
                c=Math.max(0,Math.min(255,Math.round(c*d.greenMultiplier+d.greenOffset)));
                a=Math.max(0,Math.min(255,Math.round(a*d.blueMultiplier+d.blueOffset)))
            }
            return"rgb("+[b,c,a]+")"
        },
        clipTransforms:function(a){
            for(var b=[],c=this.displayObject_;;){
                var d=c.getMatrix().__toSvgString();
                b.push(d);
                if(c==a)break;
                c=c.getParent()
            }
            return b
        },
        buildClipParts:function(a){
            this._parentClipPaths[a.id]=a;
            var b=this.clipTransforms(a).join(" ");
            if(this.tag){
                var c=this.tag.def.paths;
                for(var d in c){
                    var e=c[d],f;
                    f=fljs.agent.browser=="Safari"?e.clone():e.use();
                    f.set(null,"transform",b);
                    f.update();
                    this.addClipPart(a,e,f)
                }
            }
        },
        addClipPart:function(a,b,c){
            this._clipParts[a.id]||(this._clipParts[a.id]={});
            this._clipParts[a.id][b.id]=c;
            a.__clipElement.append(c)
        },
        updateClipParts:function(a){
            var b=this.clipTransforms(a);
            for(a=a;;){
                if(this._parentClipPaths[a.id]){
                    var c=b.join(" "),d=this._clipParts[a.id];
                    for(var e in d){
                        var f=d[e];
                        f.set(null,"transform",c);
                        f.update()
                    }
                }
                if(!a||!a.getTransform)break;
                c=a.getMatrix().__toSvgString();
                b.push(c);
                a=a.getParent()
            }
        },
        useTag:function(a,b,c){
            var d=this.displayObject_.getTransform().getConcatenatedColorTransform();
            d.__default||(b=d);
            this.tag=a;
            this.cloning=c;
            this.use=a.def.use(b,null,this.cloning);
            this.parentEl.appendChild(this.use.element)
        },
        setColorTransform:function(a){
            if(this.use){
                var b=
                this.use.element;
                this.use=this.tag.def.use(a,null,this.cloning);
                this.parentEl.replaceChild(this.use.element,b)
            }
        }
    });
    flash.display.Graphics.patternId=1;
    flash.display.Graphics.pathId=1;
    flash.display.IBitmapDrawable=function(){};

    flash.display.StageAlign=function(){};

    fljs.addConstants(flash.display.StageAlign,{
        TOP:"top",
        BOTTOM:"bottom",
        LEFT:"left",
        RIGHT:"right",
        TOP_LEFT:"topLeft",
        TOP_RIGHT:"topRight",
        BOTTOM_LEFT:"bottomLeft",
        BOTTOM_RIGHT:"bottomRight"
    });
    flash.display.StageDisplayState=function(){};
    fljs.addConstants(flash.display.StageDisplayState,{
        FULL_SCREEN:"fullScreen",
        NORMAL:"normal"
    });
    fljs.swf={};

    fljs.swf.tag={};

    fljs.swf.tag.End=function(){};

    fljs.addMethods(fljs.swf.tag.End,{
        read:function(){},
        evaluate:function(){}
    });
    fljs.swf.tag.ShowFrame=function(){};

    fljs.addMethods(fljs.swf.tag.ShowFrame,{
        read:function(){},
        evaluate:function(){}
    });
    flash.display.Shape=function(){
        flash.display.DisplayObject.call(this);
        this.element_=this._clipElement;
        this.graphics_=new flash.display.Graphics(this)
    };
    fljs.inherits(flash.display.Shape,flash.display.DisplayObject);
    fljs.addMethods(flash.display.Shape,{
        buildClipParts:function(a){
            fljs.base(this,"buildClipParts",a);
            this.graphics_.buildClipParts(a)
        },
        updateClipParts:function(a){
            this.graphics_.updateClipParts(a)
        },
        useTag:function(a,b,c){
            this.tag=a;
            this.graphics_.useTag(a,b,c);
            if(b){
                this.setColorTransform(b);
                this.element_.getElement().setAttributeNS(null,"opacity",b.alphaMultiplier)
            }
        },
        updateColorTransform:function(){
            this.graphics_.setColorTransform(this.getTransform().getConcatenatedColorTransform())
        },
        __setColorTransform:function(a){
            fljs.base(this,
                "__setColorTransform",a);
            this.graphics_.setColorTransform(a)
        }
    });
    fljs.swf.tag.PlaceObject=function(){};
    fljs.addMethods(fljs.swf.tag.PlaceObject,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.CharacterId=a.readUI16();
            this.Depth=a.readUI16();
            this.Matrix=a.readMATRIX();
            a.stream.align();
            if(a.stream.byteIndex!=c+b.TagLength){
                fljs.console("parse").info("reading cxform");
                this.ColorTransform=a.readCXFORM()
            }
            a.stream.align()
        },
        buildMatrix_:function(){
            return new flash.geom.Matrix(this.Matrix.ScaleX,this.Matrix.RotateSkew0,this.Matrix.RotateSkew1,this.Matrix.ScaleY,this.Matrix.TranslateX,this.Matrix.TranslateY)
        },
        buildColorTransform_:function(){
            var a=this.ColorTransform;
            return new flash.geom.ColorTransform(a.RedMultTerm,a.GreenMultTerm,a.BlueMultTerm,a.AlphaMultTerm,a.RedAddTerm,a.GreenAddTerm,a.BlueAddTerm,a.AlphaAddTerm)
        },
        evaluate:function(a,b,c,d){
            b=fljs.console("eval");
            c=a.dictionary[this.CharacterId];
            var e;
            if(c instanceof fljs.swf.tag.DefineShape||c instanceof fljs.swf.tag.DefineShape2){
                e=new flash.display.Shape;
                e.getTransform().setMatrix(this.buildMatrix_());
                this.ColorTransform&&e.getTransform().setColorTransform(this.buildColorTransform_());
                e.useTag(c)
            }else if(c instanceof fljs.swf.tag.DefineBitsJPEG2){
                e=c.buildBitmap(fljs.Player.getInstance());
                e.getTransform().setMatrix(this.buildMatrix_())
            }else if(c instanceof fljs.swf.tag.DefineButton2){
                e=c.build(a);
                e.getTransform().setMatrix(this.buildMatrix_())
            }
            e?d.addChildAt(e,this.Depth):b.info("not recognized: "+[this.CharacterId,this.Name])
        }
    });
    fljs.swf.tag.RemoveObject=function(){};
    fljs.addMethods(fljs.swf.tag.RemoveObject,{
        read:function(a){
            this.CharacterId=a.readUI16();
            this.Depth=a.readUI16()
        },
        evaluate:function(a,b,c,d){
            d.removeChildAt(this.Depth)
        }
    });
    fljs.swf.tag.PlaceObject2=function(){};
    fljs.addMethods(fljs.swf.tag.PlaceObject2,{
        read:function(a){
            this.startByteIndex=a.stream.byteIndex;
            fljs.console("parse");
            this.PlaceFlagHasClipActions=a.readUB(1);
            this.PlaceFlagHasClipDepth=a.readUB(1);
            this.PlaceFlagHasName=a.readUB(1);
            this.PlaceFlagHasRatio=a.readUB(1);
            this.PlaceFlagHasColorTransform=a.readUB(1);
            this.PlaceFlagHasMatrix=a.readUB(1);
            this.PlaceFlagHasCharacter=a.readUB(1);
            this.PlaceFlagMove=a.readUB(1);
            this.Depth=a.readUI16();
            if(this.PlaceFlagHasCharacter)this.CharacterId=a.readUI16();
            if(this.PlaceFlagHasMatrix)this.Matrix=a.readMATRIX();
            if(this.PlaceFlagHasColorTransform)this.ColorTransform=a.readCXFORMWITHALPHA();
            if(this.PlaceFlagHasRatio)this.Ratio=a.readUI16();
            if(this.PlaceFlagHasName)this.Name=a.readSTRING();
            if(this.PlaceFlagHasClipDepth)this.ClipDepth=a.readUI16();
            if(this.PlaceFlagHasClipActions)this.ClipActions=a.readCLIPACTIONS()
        },
        buildMatrix_:function(){
            return new flash.geom.Matrix(this.Matrix.ScaleX,this.Matrix.RotateSkew0,this.Matrix.RotateSkew1,this.Matrix.ScaleY,this.Matrix.TranslateX,
                this.Matrix.TranslateY)
        },
        buildColorTransform_:function(){
            var a=this.ColorTransform;
            return new flash.geom.ColorTransform(a.RedMultTerm,a.GreenMultTerm,a.BlueMultTerm,a.AlphaMultTerm,a.RedAddTerm,a.GreenAddTerm,a.BlueAddTerm,a.AlphaAddTerm)
        },
        evaluate:function(a,b,c,d){
            var e;
            c=fljs.console("place");
            if(this.PlaceFlagMove&&this.PlaceFlagHasCharacter)e=d.getChildAt(this.Depth);
            var f;
            if(this.ColorTransform)f=this.buildColorTransform_();
            if(this.PlaceFlagHasCharacter){
                b=a.dictionary[this.CharacterId];
                var g;
                if(b instanceof fljs.swf.tag.DefineShape||b instanceof fljs.swf.tag.DefineEditText||b instanceof fljs.swf.tag.DefineText||b instanceof fljs.swf.tag.DefineSprite||b instanceof fljs.swf.tag.DefineButton2)g=b.build(a,f);
                if(g){
                    this.Matrix&&g.getTransform().setMatrix(this.buildMatrix_());
                    d.addChildAt(g,this.Depth);
                    if(e)this.Matrix||g.getTransform().setMatrix(e.getTransform().getMatrix());
                    if(g.__clipActions==null)g.__clipActions={};

                    if(this.ClipActions){
                        f=fljs.swf.ClipEventFlags;
                        d=this.ClipActions.ClipActionRecords;
                        for(var j in d){
                            e=d[j];
                            for(var h in fljs.swf.ClipEventFlags)if(e.EventFlags&f[h]){
                                g.__clipActions[h]||(g.__clipActions[h]=[]);
                                g.__clipActions[h].push(e)
                            }
                        }
                    }
                    if(b instanceof fljs.swf.tag.DefineSprite||b instanceof fljs.swf.tag.DefineButton2)g.onCreate()
                }else{
                    c.info("not recognized: "+[this.CharacterId,this.Name]);
                    e&&d.removeChildAt(this.Depth)
                }
            }else if(this.PlaceFlagMove){
                g=d.getChildAt(this.Depth);
                if(!g)return;
                h=false;
                if(this.Matrix){
                    g.getTransform().setMatrix(this.buildMatrix_());
                    h=true
                }
                if(f){
                    g.getTransform().setColorTransform(f);
                    h=true
                }
                if(h&&a.renderTextAsGlyphs)if(g.text_||g._text)if(g.getParent()){
                    j=0;
                    h=g._clipElement.element;
                    h=b=h.parentNode;
                    b=h.parentNode;
                    d=h.nextSibling;
                    b.removeChild(h);
                    f&&g.getTransform().setColorTransform(f);
                    this.Matrix&&g.getTransform().setMatrix(this.buildMatrix_());
                    d?b.insertBefore(h,d):b.appendChild(h)
                }
            }
            if(g){
                this.PlaceFlagHasClipDepth&&g.updateClipDepth(this.ClipDepth);
                this.Name&&g.setName(this.Name);
                if(g&&this.PlaceFlagHasCharacter){
                    if(g.__clipActions.ClipEventInitialize){
                        f=[];
                        for(j in g.__clipActions.ClipEventInitialize)f.push.apply(f,
                            g.__clipActions.ClipEventInitialize[j].Actions);a.doActions(g,f)
                    }
                    if(g.__clipActions.ClipEventLoad){
                        f=[];
                        for(j in g.__clipActions.ClipEventLoad)f.push.apply(f,g.__clipActions.ClipEventLoad[j].Actions);a.doActions(g,f)
                    }
                    if(g.__clipActions.ClipEventEnterFrame){
                        f=[];
                        for(j in g.__clipActions.ClipEventEnterFrame)f.push.apply(f,g.__clipActions.ClipEventEnterFrame[j].Actions);a.dispatcher.addEventListener(flash.events.Event.ENTER_FRAME,fljs.bind(a.doActions,a,g,f))
                    }
                }
            }
        }
    });
    fljs.swf.build={};
    fljs.swf.build.SvgUtils=function(){};

    fljs.addMethods(fljs.swf.build.SvgUtils,{
        toSvgColorString:function(a){
            return"rgb("+[a.Red,a.Green,a.Blue]+")"
        },
        toSvgOpacity:function(a){
            return a.Alpha==null?1:a.Alpha/255
        },
        toSvgMatrixString:function(a){
            return(new flash.geom.Matrix(a.ScaleX,a.RotateSkew0,a.RotateSkew1,a.ScaleY,a.TranslateX,a.TranslateY)).__toSvgString()
        },
        toMatrix:function(a){
            return new flash.geom.Matrix(a.ScaleX,a.RotateSkew0,a.RotateSkew1,a.ScaleY,a.TranslateX,a.TranslateY)
        }
    });
    fljs.swf.def={};
    fljs.swf.def.BitmapDef=function(){
        (this.element=new fljs.dom.Element).create(fljs.dom.Namespace.Svg,"image")
    };

    fljs.addMethods(fljs.swf.def.BitmapDef,{
        setCharaId:function(a){
            this.id="bitmap-"+a;
            this.ref="#"+this.id;
            this.element.set("id",this.id)
        },
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(){
            var a=new fljs.dom.Element;
            a.create(fljs.dom.Namespace.Svg,"use");
            a.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.ref]]);
            a.update();
            return a
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.BitmapFillDef=function(){
        var a=this.element=new fljs.dom.Element;
        a.create(fljs.dom.Namespace.Svg,"pattern");
        this.type="Bitmap";
        this.id="pattern-"+fljs.swf.def.BitmapFillDef.patternId++;
        this.ref="#"+this.id;
        a.set("id",this.id)
    };
    fljs.addMethods(fljs.swf.def.BitmapFillDef,{
        setBitmapId:function(a){
            a=fljs.Player.getInstance().dictionary[a];
            if(!a)return false;
            this.bitmap=a;
            this.element.append(a.def.use());
            return true
        },
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(){
            var a=new fljs.dom.Element;
            a.create(fljs.dom.Namespace.Svg,"use");
            a.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.ref]]);
            a.update();
            return a
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.BitmapFillDef.patternId=1;
    fljs.swf.def.GradientFillDef=function(){
        this.element=new fljs.dom.Element;
        this.stops=[];
        this.type="Gradient"
    };
    fljs.addMethods(fljs.swf.def.GradientFillDef,{
        create:function(a){
            var b=this.element;
            b.create(fljs.dom.Namespace.Svg,a);
            this.id="gradient-"+fljs.swf.def.GradientFillDef.gradientId++;
            this.ref="#"+this.id;
            b.set("id",this.id)
        },
        addStop:function(a){
            this.stops.push(a);
            this.element.append(a.element)
        },
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(a){
            var b=this.element.clone(false);
            b.id="gradient-"+fljs.swf.def.GradientFillDef.gradientId++;
            b.ref="#"+b.id;
            b.set("id",
                b.id);
            for(var c in this.stops)b.append(this.stops[c].use(a));b.update();
            this._define(b.element);
            return b
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.GradientFillDef.gradientId=1;
    fljs.swf.def.GradientFillStopDef=function(){
        (this.element=new fljs.dom.Element).create(fljs.dom.Namespace.Svg,"stop")
    };
    fljs.addMethods(fljs.swf.def.GradientFillStopDef,{
        create:function(a){
            var b=this.element;
            b.create(fljs.dom.Namespace.Svg,a);
            b.set("id",this.id)
        },
        setColor:function(a,b){
            this.rgba=a;
            this.element.sets([[null,"stop-color",this._colorToSvgColor(a,b)],[null,"stop-opacity",this._colorToSvgOpacity(a)]])
        },
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(a){
            var b=this.element.clone(false);
            a=[[null,"stop-color",this._colorToSvgColor(this.rgba,a)]];
            b.sets(a);
            b.update();
            return b
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        },
        _colorToSvgColor:function(a,b){
            var c=a>>24&255,d=a>>16&255;
            a=a>>8&255;
            if(b){
                c=Math.max(0,Math.min(255,Math.round(c*b.redMultiplier+b.redOffset)));
                d=Math.max(0,Math.min(255,Math.round(d*b.greenMultiplier+b.greenOffset)));
                a=Math.max(0,Math.min(255,Math.round(a*b.blueMultiplier+b.blueOffset)))
            }
            return"rgb("+[c,d,a]+")"
        },
        _colorToSvgOpacity:function(a,b){
            a=(a&255)/255;
            if(b)a=Math.max(0,Math.min(1,Math.round(a*b.alphaMultiplier+
                b.alphaOffset)));
            return a
        }
    });
    fljs.swf.def.GradientFillStopDef.gradientStopId=1;
    fljs.swf.def.PathDef=function(){
        var a=this.element=new fljs.dom.Element;
        a.create(fljs.dom.Namespace.Svg,"path");
        this.id="path"+fljs.swf.def.PathDef.pathId++;
        this.ref="#"+this.id;
        a.set("id",this.id);
        a.update()
    };
    fljs.addMethods(fljs.swf.def.PathDef,{
        setStroke:function(a){
            (this.stroke=a)?this.element.sets([[null,"stroke-width",a.thickness],[null,"stroke",this._colorToSvgColor(a.color)],[null,"stroke-opacity",this._colorToSvgOpacity(a.color)]]):this.element.set(null,"stroke","none")
        },
        setFill:function(a){
            if(this.fill=a)switch(a.type){
                case "Solid":
                    this._setSolidFill(a);
                    break;
                case "Bitmap":
                    this._setBitmapFill(a);
                    break;
                case "Gradient":
                    this._setGradientFill(a);
                    break
            }else this.element.set(null,"fill","none")
        },
        _setSolidFill:function(){},
        _setBitmapFill:function(a){
            this.element.sets([[null,"fill","url("+a.ref+")"],[null,"fill-opacity",1]])
        },
        _setGradientFill:function(){},
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(a,b){
            var c=new fljs.dom.Element;
            c.create(fljs.dom.Namespace.Svg,"use");
            document.getElementById(this.id);
            var d=[[fljs.dom.Namespace.Xlink,"xlink:href",this.ref]],e=this.stroke;
            e&&c.sets([[null,"stroke-width",e.thickness],[null,"stroke",this._colorToSvgColor(e.color,a)],[null,"stroke-opacity",
                this._colorToSvgOpacity(e.color)]]);
            if(e=this.fill)switch(e.type){
                case "Solid":
                    c.set(null,"fill",this._colorToSvgColor(e.color,a));
                    c.set(null,"fill-opacity",this._colorToSvgOpacity(e.color));
                    break;
                case "Bitmap":
                    break;
                case "Gradient":
                    c.sets([[null,"fill","url("+e.use(a).ref+")"],[null,"fill-opacity",1]]);
                    break
            }
            c.sets(d);
            b&&b.append(c);
            c.update();
            return c
        },
        clone:function(){
            var a=this.element.clone(true);
            a.set("id",null);
            return a
        },
        _colorToSvgColor:function(a,b){
            var c=a>>24&255,d=a>>16&255;
            a=a>>8&255;
            if(b){
                c=Math.max(0,Math.min(255,Math.round(c*b.redMultiplier+b.redOffset)));
                d=Math.max(0,Math.min(255,Math.round(d*b.greenMultiplier+b.greenOffset)));
                a=Math.max(0,Math.min(255,Math.round(a*b.blueMultiplier+b.blueOffset)))
            }
            return"rgb("+[c,d,a]+")"
        },
        _colorToSvgOpacity:function(a,b){
            a=(a&255)/255;
            if(b)a=Math.max(0,Math.min(1,Math.round(a*b.alphaMultiplier+b.alphaOffset)));
            return a
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.PathDef.pathId=1;
    fljs.swf.def.ShapeDef=function(){
        (this.element=new fljs.dom.Element).create(fljs.dom.Namespace.Svg,"g");
        this.parts=[];
        this.paths=[];
        this.images=[];
        this.cxforms={};

        this.cxformCount=0
    };
    fljs.addMethods(fljs.swf.def.ShapeDef,{
        setCharaId:function(a){
            this.id="chara-"+a;
            this.ref="#"+this.id;
            this.element.set("id",this.id)
        },
        addPath:function(a){
            this.paths.push(a);
            this.parts.push(a);
            this.element.append(a.element)
        },
        addImage:function(a){
            this.images.push(a);
            this.parts.push(a);
            this.element.append(a.element)
        },
        define:function(){
            this.element.update();
            fljs.Player.getInstance();
            this._define(this.element.element)
        },
        use:function(a,b,c){
            if(c){
                a=this.element.clone(true);
                b&&b.append(a);
                return a
            }
            if(!a)a=
                flash.geom.ColorTransform.identity;
            c=a.__toSvgString();
            a=c in this.cxforms?this.cxforms[c]:(this.cxforms[c]=this.useDef(a));
            c=new fljs.dom.Element;
            c.create(fljs.dom.Namespace.Svg,"use");
            document.getElementById(a.id);
            b&&b.append(c);
            c.element.setAttributeNS(fljs.dom.Namespace.Xlink,"xlink:href",a.ref);
            return c
        },
        useDef:function(a){
            var b=new fljs.dom.Element;
            b.create(fljs.dom.Namespace.Svg,"g");
            var c=[this.id,this.cxformCount++].join("-");
            b.sets([["id",c]]);
            b.update();
            this._define(b.element);
            var d=this.parts;
            for(var e in d)d[e].use(a,b);return{
                element:b,
                id:c,
                ref:"#"+c
            }
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.ImageDef=function(){
        var a=this.element=new fljs.dom.Element;
        a.create(fljs.dom.Namespace.Svg,"g");
        this.id="image-def-"+fljs.swf.def.ImageDef.id++;
        this.ref="#"+this.id;
        a.set("id",this.id)
    };
    fljs.addMethods(fljs.swf.def.ImageDef,{
        setBitmapId:function(a){
            a=fljs.Player.getInstance().dictionary[a];
            if(!a)return false;
            this.bitmap=a;
            this._use=a.def.use();
            this.element.append(this._use);
            return true
        },
        define:function(){
            this.element.update();
            this._define(this.element.element)
        },
        use:function(a,b){
            a=new fljs.dom.Element;
            a.create(fljs.dom.Namespace.Svg,"use");
            a.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.ref]]);
            a.update();
            b&&b.append(a);
            return a
        },
        _define:function(a){
            fljs.Player.getInstance().defs.element.appendChild(a)
        }
    });
    fljs.swf.def.ImageDef.id=1;
    fljs.swf.BigEndianStringStream=function(a){
        this.buffer=a;
        this.bitIndex=this.byteIndex=this._byte=0;
        this.byteIndexForBits=-1;
        this.logger=fljs.console("parse")
    };
    fljs.addMethods(fljs.swf.BigEndianStringStream,{
        length:function(){
            return this.buffer.length
        },
        hasMore:function(){
            return this.byteIndex<this.buffer.length
        },
        skipBytes:function(a){
            this.byteIndex+=a
        },
        readBytes:function(a){
            for(var b=[],c=0;c<a;c++)b.push(this.buffer.charCodeAt(this.byteIndex++)&255);
            return b
        },
        align:function(){
            this.bitIndex=8
        },
        nextUByte:function(){
            return this.buffer.charCodeAt(this.byteIndex++)&255
        },
        nextSByte:function(){
            var a=this.buffer.charCodeAt(this.byteIndex++)&255;
            if(a>=128)a-=256;
            return a
        },
        nextUShort:function(){
            var a=((this.buffer.charCodeAt(this.byteIndex++)&255)<<8)+(this.buffer.charCodeAt(this.byteIndex++)&255);
            if(a<0)a+=65536;
            return a
        }
    });
    fljs.swf.ClipEventFlags={
        ClipEventKeyUp:-2147483648,
        ClipEventKeyDown:1073741824,
        ClipEventMouseUp:536870912,
        ClipEventMouseDown:268435456,
        ClipEventMouseMove:134217728,
        ClipEventUnload:67108864,
        ClipEventEnterFrame:33554432,
        ClipEventLoad:16777216,
        ClipEventDragOver:8388608,
        ClipEventRollOut:4194304,
        ClipEventRollOver:2097152,
        ClipEventReleaseOutside:1048576,
        ClipEventRelease:524288,
        ClipEventPress:262144,
        ClipEventInitialize:131072,
        ClipEventData:65536,
        ClipEventConstruct:1024,
        ClipEventKeyPress:512,
        ClipEventDragOut:256
    };
    fljs.swf.FillStyleTypes={
        SolidFill:0,
        LinearGradientFill:16,
        RadialGradientFill:18,
        FocalRadialGradientFill:19,
        RepeatingBitmapFill:64,
        ClippedBitmapFill:65,
        NonSmoothedRepeatingBitmapFill:66,
        NonSmoothedClippedBitmapFill:67
    };

    fljs.swf.SpreadMethods={
        Pad:0,
        Reflect:1,
        Repeat:2
    };

    fljs.swf.InterpolationMethods={
        Rgb:0,
        LinearRgb:1
    };

    fljs.swf.build.ShapeBuilder=function(a){
        this.context=a;
        this.utils=new fljs.swf.build.SvgUtils
    };
    fljs.addMethods(fljs.swf.build.ShapeBuilder,{
        build:function(a){
            var b=this.parseSwfPaths(a),c=[];
            for(var d in b)c.push([this.buildPaths(b[d][0]),this.buildPaths(b[d][1])]);return this.buildDefinition(a,c)
        },
        parseSwfPaths:function(a){
            var b=0,c=0,d=0,e=0,f=0,g=0,j=a.Shapes.ShapeRecords,h=this.stateNewStyles(a.Shapes.FillStyles),m=this.stateNewStyles(a.Shapes.LineStyles),k=[],l=0,n=0,p=0,u=1,o={
                x1:0,
                y1:0
            },q=[],s=this;
            a=function(){
                o.parts=q;
                o.flipped=false;
                o.x2=q[q.length-1].x2;
                o.y2=q[q.length-1].y2;
                o.key1=
                s.pointKey(o.x1,o.y1);
                o.key2=s.pointKey(o.x2,o.y2);
                o.key=u+=1;
                l&&h[l].edges.push(o);
                if(n)h[n].edges.push({
                    parts:q,
                    flipped:true,
                    x1:o.x2,
                    y1:o.y2,
                    x2:o.x1,
                    y2:o.y1,
                    key1:o.key2,
                    key2:o.key1,
                    key:u+=1
                });
                p&&m[p].edges.push(o);
                o={
                    x1:o.x2,
                    y1:o.y2
                };

                q=[]
            };

            var r=function(){
                k.push([h,m])
            },t=function(w){
                return Math.round(w*100)/100
            };

            for(var v in j){
                g=j[v];
                switch(g.type){
                    case "STRAIGHT":
                        f=b+g.DeltaX;
                        g=c+g.DeltaY;
                        q.push({
                            x1:t(b),
                            y1:t(c),
                            x2:t(f),
                            y2:t(g)
                        });
                        b=f;
                        c=g;
                        break;
                    case "CURVED":
                        d=b+g.ControlDeltaX;
                        e=c+g.ControlDeltaY;
                        f=d+g.AnchorDeltaX;
                        g=e+g.AnchorDeltaY;
                        q.push({
                            x1:t(b),
                            y1:t(c),
                            cx:t(d),
                            cy:t(e),
                            x2:t(f),
                            y2:t(g)
                        });
                        b=f;
                        c=g;
                        break;
                    case "NONEDGE":
                        q.length&&a();
                        if(g.StateNewStyles){
                            r();
                            h=this.stateNewStyles(g.FillStyles);
                            m=this.stateNewStyles(g.LineStyles)
                        }
                        if(g.StateLineStyle)p=g.LineStyle;
                        if(g.StateFillStyle0)l=g.FillStyle0;
                        if(g.StateFillStyle1)n=g.FillStyle1;
                        if(g.StateMoveTo){
                            b=g.MoveDeltaX;
                            c=g.MoveDeltaY;
                            o.x1=b;
                            o.y1=c
                        }
                        break
                }
            }
            q.length&&a();
            r();
            return k
        },
        stateNewStyles:function(a){
            var b=[{
                edges:[],
                style:null
            }];
            for(var c in a)b.push({
                edges:[],
                style:a[c]
            });return b
        },
        buildPaths:function(a){
            var b=[],c,d,e,f,g,j,h,m,k,l;
            for(e=0;e<a.length;e++){
                d=a[e].edges;
                if(d.length!=0){
                    j={};

                    edgeIndexCount={};

                    m=[];
                    for(f=h=0;f<d.length;f++){
                        c=d[f];
                        if(c.key1==c.key2){
                            c.picked=true;
                            h+=1;
                            m.push([c])
                        }else{
                            c.picked=false;
                            j[c.key1]||(j[c.key1]=[]);
                            j[c.key1].push(c)
                        }
                    }
                    for(f=0;f<d.length;f++){
                        if(h==d.length)break;
                        c=d[f];
                        if(!c.picked){
                            k=[c];
                            c.picked=true;
                            h+=1;
                            l=j[c.key1];
                            for(g=0;g<l.length;g++)if(l[g]==c){
                                l.splice(g,1);
                                break
                            }
                            g=c.key1;
                            for(c=c.key2;c!=g;){
                                l=j[c];
                                if(typeof l==
                                    "undefined")break;
                                if(l.length==0)break;
                                c=l.shift();
                                k.push(c);
                                c.picked=true;
                                h+=1;
                                c=c.key2
                            }
                            m.push(k)
                        }
                    }
                    m.length&&b.push({
                        path:m,
                        style:a[e].style
                    })
                }
            }
            return b
        },
        pointKey:function(a,b){
            return[a,b].join(",")
        },
        buildDefinition:function(a,b){
            var c=new fljs.swf.def.ShapeDef;
            c.setCharaId(a.ShapeId);
            for(var d in b){
                a=b[d][0];
                for(var e in a){
                    var f=a[e];
                    if(this.isImagePath(f)){
                        var g=new fljs.swf.def.ImageDef;
                        this.buildImageDef(g,f);
                        c.addImage(g)
                    }else{
                        f.style.def=this.buildFillDef(f.style);
                        f=this.buildPathDefinition(f.path,
                            f.style,null);
                        c.addPath(f)
                    }
                }
                a=b[d][1];
                for(e in a){
                    f=a[e];
                    f=this.buildPathDefinition(f.path,null,f.style);
                    c.addPath(f)
                }
            }
            c.define();
            return c
        },
        sameStyle:function(a,b){
            if(!a||!b)return false;
            if(a.def&&b.def&&a.def.fill&&b.def.fill)if(a.def.fill.type=="Solid"&&b.def.fill.type=="Solid"){
                if(a.def.fill.color!=b.def.fill.color)return false
            }else return false;
            else if(a.def&&b.def&&(a.def.fill||b.def.fill))return false;
            var c,d;
            c=a.HasFillFlag&&a.FillType.Color?a.FillType.Color:a.Color;
            if(b.HasFillFlag&&b.FillType.Color)bcolor=
                b.FillType.Color;else d=b.Color;
            if(c&&d){
                if(this.rgbaToColor(c)!=this.rgbaToColor(d))return false;
                if(a.Width!=b.Width)return false
            }else if(c||d)return false;
            return true
        },
        buildPathDefinition:function(a,b,c){
            var d=new fljs.swf.def.PathDef;
            this.setPathLineStyle(d,c);
            this.setPathFillStyle(d,b);
            d.element.set(null,"d",this.pathToString(a));
            d.define();
            return d
        },
        isImagePath:function(a){
            if(a.path.length!=1||a.path[0].length!=1||a.path[0][0].parts.length!=4||!a.style)return false;
            var b=a.style.FillStyleType,
            c=fljs.swf.FillStyleTypes;
            if(!(b==c.RepeatingBitmapFill||b==c.ClippedBitmapFill||b==c.NonSmoothedRepeatingBitmapFill||b==c.NonSmoothedClippedBitmapFill))return false;
            if(!fljs.Player.getInstance().dictionary[a.style.BitmapId])return false;
            a=a.path[0][0].parts;
            for(b=0;b<a.length;b++){
                if(typeof a[b].cx!="undefined")return false;
                if(b<a.length-1){
                    var d=a[b],e=a[b+1],f,g,j;
                    if(d.flipped){
                        f=d.x2;
                        c=d.y2;
                        g=d.x1;
                        d=d.y1
                    }else{
                        f=d.x1;
                        c=d.y1;
                        g=d.x2;
                        d=d.y2
                    }
                    if(e.flipped){
                        j=e.x1;
                        e=e.y1
                    }else{
                        j=e.x2;
                        e=e.y2
                    }
                    f=(f-g)*(j-
                        g);
                    c=(c-d)*(e-d);
                    g=f+c;
                    if(Math.abs(g)>0.01){
                        if(!f||!c)return false;
                        if(Math.abs(g/f)>0.01||Math.abs(g/c)>0.01)return false
                    }
                }
            }
            return true
        },
        buildImageDef:function(a,b){
            a.setBitmapId(b.style.BitmapId);
            for(var c=[],d=0,e=0,f=b.path[0][0].parts,g=0;g<f.length;g++){
                var j=f[g],h=Math.abs(j.x2-j.x1);
                j=Math.abs(j.y2-j.y1);
                if(h>d)d=h;
                if(j>e)e=j
            }
            a._use.set(null,"x",0);
            a._use.set(null,"y",0);
            a._use.set(null,"width",d);
            a._use.set(null,"height",e);
            if(b=b.style.BitmapMatrix){
                b=this.utils.toMatrix(b);
                b.a/=20;
                b.b/=
                20;
                b.c/=20;
                b.d/=20;
                c.push("translate("+[b.tx,b.ty]+")");
                b.tx=0;
                b.ty=0;
                c.push(b.__toSvgString())
            }
            a._use.set(null,"transform",c.toString());
            a._use.update();
            a.element.update();
            a.define()
        },
        appendPathToDef:function(a,b){
            a=a.element.element;
            b=a.getAttributeNS(null,"d")+" "+this.pathToString(b);
            a.setAttributeNS(null,"d",b)
        },
        pathToString:function(a){
            var b,c,d=[];
            for(var e in a){
                var f=a[e];
                d.push("M",f[0].x1,f[0].y1);
                for(var g in f){
                    b=f[g];
                    if(b.flipped)for(var j=b.parts.length-1;j>=0;j--){
                        c=b.parts[j];
                        typeof c.cx==
                        "undefined"?d.push("L",c.x1,c.y1):d.push("Q",c.cx,c.cy,c.x1,c.y1)
                    }else for(j in b.parts){
                        c=b.parts[j];
                        typeof c.cx=="undefined"?d.push("L",c.x2,c.y2):d.push("Q",c.cx,c.cy,c.x2,c.y2)
                    }
                }
            }
            return d.join(" ")
        },
        setPathLineStyle:function(a,b){
            if(b){
                var c={};

                c=b.HasFillFlag?b.FillType.Color?{
                    thickness:Math.max(b.Width,1),
                    color:this.rgbaToColor(b.FillType.Color)
                }:{
                    thickness:1,
                    color:0
                }:{
                    thickness:Math.max(b.Width,1),
                    color:this.rgbaToColor(b.Color)
                };

                a.setStroke(c)
            }else a.setStroke(null)
        },
        setPathFillStyle:function(a,
            b){
            if(b)if(b.FillStyleType==fljs.swf.FillStyleTypes.SolidFill)this.setPathSolidFillStyle(a,b);else b.def&&a.setFill(b.def);else a.setFill(null)
        },
        setPathSolidFillStyle:function(a,b){
            a.setFill({
                type:"Solid",
                color:this.rgbaToColor(b.Color)
            })
        },
        buildFillDef:function(a){
            if(!a)return null;
            var b=a.FillStyleType,c=fljs.swf.FillStyleTypes;
            return b==c.LinearGradientFill||b==c.RadialGradientFill||b==c.FocalRadialGradientFill?this.buildGradientFillDef(a):b==c.RepeatingBitmapFill||b==c.ClippedBitmapFill||b==c.NonSmoothedRepeatingBitmapFill||
            b==c.NonSmoothedClippedBitmapFill?this.buildBitmapFillDef(a):null
        },
        buildGradientFillDef:function(a){
            var b=new fljs.swf.def.GradientFillDef,c=[];
            if(a.FillStyleType==fljs.swf.FillStyleTypes.LinearGradientFill){
                b.create("linearGradient");
                c.push([null,"x1",-819.2],[null,"x2",819.2])
            }else{
                b.create("radialGradient");
                c.push([null,"cx",0],[null,"cy",0],[null,"r",819.2])
            }
            c.push([null,"gradientUnits","userSpaceOnUse"]);
            c.push([null,"gradientTransform",this.utils.toSvgMatrixString(a.GradientMatrix)]);
            var d,
            e=fljs.swf.SpreadMethods;
            switch(a.Gradient.SpreadMode){
                case e.Pad:
                    d="pad";
                    break;
                case e.Reflect:
                    d="reflect";
                    break;
                case e.Repeat:
                    d="repeat";
                    break
            }
            c.push([null,"spreadMethod",d]);
            var f;
            d=fljs.swf.InterpolationMethods;
            switch(a.Gradient.InterpolationMode){
                case d.LinearRgb:
                    f="linearRGB";
                    break;
                case d.Rgb:
                    f="rgb";
                    break
            }
            c.push([null,"color-interpolation",f]);
            a=a.Gradient.GradientRecords;
            for(var g in a){
                f=a[g];
                d=new fljs.swf.def.GradientFillStopDef;
                d.setColor(this.rgbaToColor(f.Color));
                e=[];
                e.push([null,"offset",
                    f.Ratio/255]);
                d.element.sets(e);
                d.element.update();
                b.addStop(d)
            }
            b.element.sets(c);
            b.define();
            return b
        },
        buildBitmapFillDef:function(a){
            var b=new fljs.swf.def.BitmapFillDef;
            if(!b.setBitmapId(a.BitmapId)){
                b.define();
                return b
            }
            var c=[];
            c.push([null,"patternUnits","userSpaceOnUse"],[null,"x",0],[null,"y",0],[null,"width",b.bitmap.Width],[null,"height",b.bitmap.Height]);
            var d=[];
            if(a=a.BitmapMatrix){
                a=this.utils.toMatrix(a);
                a.a/=20;
                a.b/=20;
                a.c/=20;
                a.d/=20;
                d.push("translate("+[a.tx,a.ty]+")");
                a.tx=0;
                a.ty=
                0;
                d.push(a.__toSvgString())
            }
            c.push([null,"patternTransform",d.toString()]);
            b.element.sets(c);
            b.define();
            return b
        },
        rgbaToColor:function(a){
            var b=(a.Red<<24)+(a.Green<<16)+(a.Blue<<8);
            b|=typeof a.Alpha!="undefined"?a.Alpha:255;
            return b
        }
    });
    fljs.swf.tag.DefineShape=function(){};
    fljs.addMethods(fljs.swf.tag.DefineShape,{
        read:function(a){
            a.beginContext(fljs.swf.tag.DefineShape);
            this.defId=this.ShapeId=a.readUI16();
            this.ShapeBounds=a.readRECT();
            a.stream.align();
            this.Shapes=a.readSHAPEWITHSTYLE();
            a.endContext()
        },
        waitForBitmaps:function(){
            var a=fljs.Player.getInstance();
            this.bitmapIds=this.findBitmaps(this);
            this.waiting=0;
            var b=fljs.Player.getInstance().mainTimeline.resources,c=[];
            for(var d in this.bitmapIds)if(b.waiting(d)){
                this.waiting+=1;
                b.listen(d,fljs.bind(this.onLoad,this,
                    a))
            }else c.push(d);for(var e in c)delete this.bitmapIds[c[e]]
        },
        onLoad:function(a,b){
            if(this.bitmapIds[b]){
                delete this.bitmapIds[b];
                this.waiting-=1
            }
            this.waiting==0&&this.evaluate(a)
        },
        evaluate:function(a){
            this.bitmapIds||this.waitForBitmaps();
            if(!(this.waiting>0)){
                this.def=(new fljs.swf.build.ShapeBuilder).build(this);
                a.addDefinition(this,this.ShapeId)
            }
        },
        findBitmaps:function(a){
            var b={};

            this.findBitmapsForStyles(b,a.Shapes.FillStyles);
            a=a.Shapes.ShapeRecords;
            for(var c in a){
                var d=a[c];
                d.type=="NONEDGE"&&
                d.StateNewStyles&&this.findBitmapsForStyles(b,d.FillStyles)
            }
            return b
        },
        findBitmapsForStyles:function(a,b){
            var c=fljs.swf.FillStyleTypes;
            for(var d in b){
                var e=b[d],f=e.FillStyleType;
                if(f==c.RepeatingBitmapFill||f==c.ClippedBitmapFill||f==c.NonSmoothedRepeatingBitmapFill||f==c.NonSmoothedClippedBitmapFill)a[e.BitmapId]=true
            }
        },
        build:function(a,b,c){
            a=new flash.display.Shape;
            a.useTag(this,b,c);
            return a
        }
    });
    fljs.dom={};

    fljs.dom.Namespace={
        Svg:"http://www.w3.org/2000/svg",
        Xlink:"http://www.w3.org/1999/xlink"
    };
    fljs.dom.Element=function(a){
        this.element=a;
        this.changes=[]
    };
    fljs.addMethods(fljs.dom.Element,{
        create:function(a,b){
            if(arguments.length==1){
                b=a;
                this.element=document.createElement(b)
            }else this.element=document.createElementNS(a,b);
            this.changes=[]
        },
        set:function(a,b,c){
            if(arguments.length==2){
                c=b;
                b=a;
                this.changes.push([b,c])
            }else this.changes.push([a,b,c])
        },
        sets:function(a){
            this.changes.push.apply(this.changes,a)
        },
        update:function(){
            var a=this.element,b=this.changes;
            for(var c in b){
                var d=b[c];
                d.length==2?a.setAttribute(d[0],d[1]):a.setAttributeNS(d[0],d[1],d[2])
            }
            this.changes=
            []
        },
        append:function(a){
            this.element.appendChild(a.element)
        },
        appendText:function(a){
            this.element.appendChild(document.createTextNode(a))
        },
        clone:function(a){
            var b=new fljs.dom.Element;
            b.element=this.element.cloneNode(a);
            b.changes=[];
            return b
        },
        remove:function(a){
            this.element.removeChild(a.element)
        },
        getElement:function(){
            return this.element
        }
    });
    fljs.swf.build.FontBuilder=function(a,b){
        this.tag=a;
        this.player=b
    };
    fljs.addMethods(fljs.swf.build.FontBuilder,{
        buildDef:function(){
            var a=this.buildGlyphPaths();
            return this.player.renderTextAsGlyphs?this.buildFontDef(a):this.buildShapeDef(a)
        },
        buildFontDef:function(a){
            var b=this.tag,c=this.player.element.getElement().ownerDocument,d=c.createElementNS("http://www.w3.org/2000/svg","font"),e=c.createElementNS("http://www.w3.org/2000/svg","font-face");
            e.setAttributeNS(null,"font-family","font-"+b.FontId);
            e.setAttributeNS(null,"units-per-em",51.2);
            d.appendChild(e);
            for(var f in a){
                e=
                c.createElementNS("http://www.w3.org/2000/svg","glyph");
                e.setAttributeNS(null,"unicode",String.fromCharCode(b.CodeTable[f]));
                b.FontAdvanceTable&&e.setAttributeNS(null,"horiz-adv-x",b.FontAdvanceTable[f]/20);
                e.setAttributeNS(null,"d",a[f]);
                d.appendChild(e)
            }
            return[{
                element:d
            }]
        },
        buildShapeDef:function(a){
            var b=this.tag,c=[];
            for(var d in a){
                var e=new fljs.dom.Element;
                e.create(fljs.dom.Namespace.Svg,"path");
                var f=["font",b.FontId,b.FontFlagsBold,b.FontFlagsItalic,b.CodeTable[d]].join("-");
                if(document.getElementById(f))rar.rar=
                    rar;
                e.sets([["id",f],["d",a[d]]]);
                e.update();
                c.push(e)
            }
            return c
        },
        buildGlyphPaths:function(){
            for(var a=[],b=this.tag.GlyphShapeTable,c=0,d=b.length;c<d;c++){
                var e=this.buildPath(this.buildGlyph(b[c]));
                a.push(e)
            }
            return a
        },
        buildGlyph:function(a){
            var b=0,c=0,d=0,e=0,f=0,g=0;
            a=a.ShapeRecords;
            var j=[],h=[],m=1;
            if(this.tag instanceof fljs.swf.tag.DefineFont3)m=20;
            var k=function(n){
                return Math.round(n*100)/100/m
            };

            for(var l in a){
                g=a[l];
                switch(g.type){
                    case "STRAIGHT":
                        f=b+g.DeltaX;
                        g=c+g.DeltaY;
                        h.push({
                            x1:k(b),
                            y1:k(c),
                            x2:k(f),
                            y2:k(g)
                        });
                        b=f;
                        c=g;
                        break;
                    case "CURVED":
                        d=b+g.ControlDeltaX;
                        e=c+g.ControlDeltaY;
                        f=d+g.AnchorDeltaX;
                        g=e+g.AnchorDeltaY;
                        h.push({
                            x1:k(b),
                            y1:k(c),
                            cx:k(d),
                            cy:k(e),
                            x2:k(f),
                            y2:k(g)
                        });
                        b=f;
                        c=g;
                        break;
                    case "NONEDGE":
                        if(g.StateMoveTo){
                            h.length&&j.push(h);
                            b=g.MoveDeltaX;
                            c=g.MoveDeltaY;
                            h=[]
                        }
                        break
                }
            }
            h.length&&j.push(h);
            return j
        },
        buildPath:function(a){
            var b=[],c=this.player.renderTextAsGlyphs?-1:1,d;
            for(var e in a){
                var f=a[e];
                b.push("M",f[0].x1,f[0].y1*c);
                for(var g in f){
                    d=f[g];
                    typeof d.cx=="undefined"?
                    b.push("L",d.x2,d.y2*c):b.push("Q",d.cx,d.cy*c,d.x2,d.y2*c)
                }
            }
            b.length==0&&b.push("M",0,0);
            return b.join(" ")
        }
    });
    fljs.swf.build.FontBuilder.id=1;
    fljs.swf.tag.DefineFont=function(){};
    fljs.addMethods(fljs.swf.tag.DefineFont,{
        read:function(a){
            this.FontId=a.readUI16();
            this.OffsetTable=[a.readUI16()];
            var b=this.OffsetTable[0]/2;
            this.NumGlyphs=b;
            for(var c=1;c<b;c++)this.OffsetTable.push(a.readUI16());
            this.GlyphShapeTable=[];
            for(c=0;c<b;c++)this.GlyphShapeTable.push(a.readSHAPE())
        },
        evaluate:function(a){
            this.CodeTable=[];
            for(var b in this.GlyphShapeTable)this.CodeTable.push(b);this.FontName="font-no-info-"+this.FontId;
            this.FontFlagsItalic=this.FontFlagsBold=false;
            a.fontsWithoutInfo[this.FontId]=
            this;
            b=(new fljs.swf.build.FontBuilder(this,a)).buildDef();
            a.defineFont2(this.FontId,this.GlyphShapeTable,b,this.FontName,this.FontFlagsBold,this.FontFlagsItalic,this.CodeTable)
        }
    });
    fljs.swf.tag.SetBackgroundColor=function(){};

    fljs.addMethods(fljs.swf.tag.SetBackgroundColor,{
        read:function(a){
            this.BackgroundColor=a.readRGB()
        },
        evaluate:function(a){
            a.stage.setBackgroundColor_((this.BackgroundColor.Red<<16)+(this.BackgroundColor.Green<<8)+this.BackgroundColor.Blue)
        }
    });
    fljs.swf.tag.DoAbc=function(){};
    fljs.addMethods(fljs.swf.tag.DoAbc,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.Flags=a.readUI32();
            this.Name=a.readString();
            b=b.TagLength-(a.stream.byteIndex-c);
            c=[];
            for(var d=0;d<b;d++)c.push(String.fromCharCode(a.readUB()));
            this.AbcData=c.join("")
        },
        evaluate:function(){}
    });
    fljs.swf.tag.SoundStreamBlock=function(){};
    fljs.addMethods(fljs.swf.tag.SoundStreamBlock,{
        read:function(a,b){
            this.SampleCount=a.readUI16();
            this.Mp3SoundData=a.readMp3SoundData(b.TagLength-2)
        },
        evaluate:function(a,b,c,d){
            if(d==a.mainTimeline)if(b=d.audioStream){
                b.shouldBuffer()&&b.buffer();
                c=a.mainTimeline.currentFrameIndex_;
                if(!b.playing&&b.frameShouldPlay(c)){
                    b.playFrame(c);
                    a.sync.start(c)
                }
            }
        },
        duration:function(){
            var a=0;
            for(var b in this.Mp3SoundData.Mp3Frames){
                var c=this.Mp3SoundData.Mp3Frames[b],d;
                d=c.MpegVersion==3?1152:576;
                var e={
                    0:11025,
                    1:12E3,
                    2:8E3
                }
                [c.SamplingRate];
                e*={
                    0:1,
                    2:2,
                    3:4
                }
                [c.MpegVersion];
                a+=1E3*d/e/(c.ChannelMode==3?1:2)
            }
            return a
        }
    });
    fljs.swf.SwfStreamingSoundReader=function(a,b){
        this.stream=new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
        this.container=b;
        b.soundStream=this;
        this.tagMap={
            19:fljs.swf.tag.SoundStreamBlock
        };

        this.currentTimeOffset=this.currentPlayer=0;
        this.data=[];
        this.dataDurations=[];
        this.container.needAudio();
        for(a=0;a<2;a++){
            b=this.container.audio[a];
            b.currentTimeOffset=0;
            b.addEventListener("load",fljs.bind(this.onLoadSrc,this,a),true)
        }
        this.lastBufferAt=null;
        this.swfFrames={};

        this.duration=this.swfFrameNum=
        0;
        this.playing=false;
        this.nextTime=null;
        this.waitingForLoad=false;
        this.dataOffset=0;
        this.player=fljs.Player.getInstance()
    };
    fljs.addMethods(fljs.swf.SwfStreamingSoundReader,{
        controlFrame:function(){},
        timeDiff:function(a){
            var b=this.container.audio[this.currentPlayer];
            return 1E3*(b.currentTime+b.currentTimeOffset)-this.swfFrames[a]
        },
        currentTime:function(){
            var a=this.container.audio[this.currentPlayer];
            return 1E3*(a.currentTime+a.currentTimeOffset)
        },
        play:function(a){
            a=this.swfFrames[a];
            if(a==null)a=0;
            a/=1E3;
            this.nextTime=a;
            this.playing=true;
            if(!this.waitingForLoad){
                var b=this.container.audio[this.currentPlayer];
                b.currentTime=
                a-b.currentTimeOffset;
                b.fljsPlaying=true;
                this.player.playing&&b.play()
            }
        },
        stop:function(){
            this.playing=false;
            var a=this.container.audio[this.currentPlayer];
            a.fljsPlaying=false;
            a.pause()
        },
        silence:function(){
            return""
        },
        onLoadSrc:function(a){
            var b=this.container.audio[a],c=this.container.audio[1-a];
            b.fljsWaiting=false;
            if(this.nextTime!=null){
                b.currentTime=this.nextTime-b.currentTimeOffset;
                this.nextTime=null
            }else b.currentTime=c.currentTime+c.currentTimeOffset-b.currentTimeOffset;
            if(this.playing){
                b.fljsPlaying=
                true;
                this.player.playing&&b.play()
            }
            c.fljsPlaying=false;
            c.pause();
            this.currentPlayer=a;
            this.waitingForLoad=false
        },
        processBlock:function(a,b){
            a=new fljs.swf.StringStream(this.stream.stream.buffer);
            a.byteIndex=b.Mp3SoundData.byteIndex;
            a=a.readBytes(b.Mp3SoundData.byteCount).join("");
            this.data.push(String(a));
            if(b.SampleCount){
                a=b.duration();
                b=a*(b.Mp3SoundData.SeekSamples/b.SampleCount);
                this.swfFrames[this.swfFrameNum]=this.duration+b;
                this.sync&&this.sync.setFrameTime(this.swfFrameNum,this.duration+
                    b);
                this.duration+=a
            }else a=0;
            this.dataDurations.push(a/1E3);
            this.blocks+=1;
            return this.blocks<fljs.swf.SwfStreamingSoundReader.bufferBlocks
        },
        buffer:function(){
            this.blocks=0;
            this.readTags(fljs.bind(this.processBlock,this),this.stream.stream.byteIndex);
            for(var a=this.container.audio[this.currentPlayer],b=this.container.audio[1-this.currentPlayer];this.currentTimeOffset+this.dataDurations[this.dataOffset]<a.currentTime+a.currentTimeOffset;){
                this.currentTimeOffset+=this.dataDurations[this.dataOffset];
                this.dataOffset+=1
            }
            a="data:audio/mpeg;base64,"+btoa(this.data.slice(this.dataOffset).join(""));
            b.currentTimeOffset=this.currentTimeOffset;
            b.setAttribute("src",a);
            this.waitingForLoad=true;
            b.fljsWaiting=true;
            b.load();
            this.lastBufferAt=fljs.now()
        },
        readTags:function(a,b){
            var c=fljs.console("soundstream");
            if(b)this.stream.stream.seek(b);else this.stream.header=this.stream.readSwfHeader();
            for(var d,e;this.stream.hasMore();){
                d=this.stream.readRecordHeader();
                e=this.tagMap[d.TagType];
                b=this.stream.stream.byteIndex;
                if(e){
                    e=new e;
                    e.read(this.stream,d,this,a,fljs.Player.getInstance().stage);
                    if(!a(d,e))return
                }else{
                    this.stream.skipBytes(d.TagLength);
                    if(d.TagType==1)this.swfFrameNum+=1
                }
                if(this.stream.stream.byteIndex!=b+d.TagLength){
                    c.info("expected "+(b+d.TagLength)+" but got "+this.stream.stream.byteIndex);
                    return
                }
            }
        }
    });
    fljs.swf.SwfStreamingSoundReader.rebufferDuration=9E4;
    fljs.swf.SwfStreamingSoundReader.bufferBlocks=4500;
    fljs.swf.tag.SoundStreamHead=function(){};
    fljs.addMethods(fljs.swf.tag.SoundStreamHead,{
        read:function(a){
            a.readUB(4);
            this.PlaybackSoundRate=a.readUB(2);
            this.PlaybackSoundSize=a.readUB(1);
            this.PlaybackSoundType=a.readUB(1);
            this.StreamSoundCompression=a.readUB(4);
            this.StreamSoundRate=a.readUB(2);
            this.StreamSoundSize=a.readUB(1);
            this.StreamSoundType=a.readUB(1);
            this.StreamSoundSampleCount=a.readUI16();
            if(this.StreamSoundCompression==2)this.LatencySeek=a.readSI16()
        },
        evaluate:function(a,b,c,d){
            if(!this.processed){
                d.soundStreamHead=this;
                if(d==
                    a.mainTimeline){
                    d.audioStream=fljs.agent.browser=="Firefox"?new fljs.player.ExtAudioStream(a,d,"audio/"+a.name+"-"+(d.def?d.def.defId:"main")+".wav"):new fljs.player.SwfAudioStream(a,d);
                    a.sync=new fljs.player.AudioSync(a.header.FrameRate);
                    a.sync.setAudio(d.audioStream);
                    d.audioStream.buffer()
                }
                this.processed=true
            }
        }
    });
    fljs.swf.tag.DefineFont2=function(){};
    fljs.addMethods(fljs.swf.tag.DefineFont2,{
        read:function(a){
            var b;
            this.FontId=a.readUI16();
            this.FontFlagsHasLayout=a.readUB(1);
            this.FontFlagsShiftJIS=a.readUB(1);
            this.FontFlagsSmallText=a.readUB(1);
            this.FontFlagsANSI=a.readUB(1);
            this.FontFlagsWideOffsets=a.readUB(1);
            this.FontFlagsWideCodes=a.readUB(1);
            a.FontFlagsWideCodes=this.FontFlagsWideCodes;
            this.FontFlagsItalic=a.readUB(1);
            this.FontFlagsBold=a.readUB(1);
            this.LanguageCode=a.readLangCode();
            this.FontNameLen=a.readUI8();
            var c=[];
            for(b=0;b<this.FontNameLen;b++)c.push(String.fromCharCode(a.readUI8()));
            this.FontName=c.join("");
            this.NumGlyphs=a.readUI16();
            this.OffsetTable=[];
            if(this.FontFlagsWideOffsets){
                for(b=0;b<this.NumGlyphs;b++)this.OffsetTable.push(a.readUI32());
                this.CodeTableOffset=a.readUI32()
            }else{
                for(b=0;b<this.NumGlyphs;b++)this.OffsetTable.push(a.readUI16());
                this.CodeTableOffset=a.readUI16()
            }
            this.GlyphShapeTable=[];
            for(b=0;b<this.NumGlyphs;b++)this.GlyphShapeTable.push(a.readShape());
            this.CodeTable=[];
            if(this.FontFlagsWideCodes)for(b=0;b<this.NumGlyphs;b++)this.CodeTable.push(a.readUI16());
            else for(b=0;b<this.NumGlyphs;b++)this.CodeTable.push(a.readUI8());
            if(this.FontFlagsHasLayout){
                this.FontAscent=a.readSI16();
                this.FontDescent=a.readSI16();
                this.FontLeading=a.readSI16();
                this.FontAdvanceTable=[];
                for(b=0;b<this.NumGlyphs;b++)this.FontAdvanceTable.push(a.readSI16());
                this.FontBoundsTable=[];
                for(b=0;b<this.NumGlyphs;b++){
                    this.FontBoundsTable.push(a.readRECT());
                    a.stream.align()
                }
                this.KerningCount=a.readUI16();
                this.FontKerningTable=[];
                for(b=0;b<this.KerningCount;b++)this.FontKerningTable.push(a.readKerningRecord())
            }
        },
        evaluate:function(a){
            var b=(new fljs.swf.build.FontBuilder(this,a)).buildDef();
            a.defineFont2(this.FontId,this.GlyphShapeTable.length,b,this.FontName,this.FontFlagsBold,this.FontFlagsItalic,this.CodeTable,this)
        }
    });
    flash.text={};

    flash.text.TextFormatAlign=function(){};

    fljs.addConstants(flash.text.TextFormatAlign,{
        CENTER:"center",
        JUSTIFY:"justify",
        LEFT:"left",
        RIGHT:"right"
    });
    flash.text.TextFormat=function(a,b,c,d,e,f,g,j,h,m,k,l,n,p){
        if(typeof a=="undefined")a=null;
        this.font=a;
        if(typeof b=="undefined")b=null;
        this.size=b;
        if(typeof c=="undefined")c=null;
        this.color=c;
        if(typeof d=="undefined")d=null;
        this.bold=d;
        if(typeof e=="undefined")e=null;
        this.italic=e;
        if(typeof f=="undefined")f=null;
        this.underline=f;
        if(typeof g=="undefined")g=null;
        this.url=g;
        if(typeof j=="undefined")j=null;
        this.target=j;
        if(typeof h=="undefined")h=flash.text.TextFormatAlign.LEFT;
        this.align=h;
        if(typeof m==
            "undefined")m=null;
        this.leftMargin=m;
        if(typeof k=="undefined")k=null;
        this.rightMargin=k;
        if(typeof l=="undefined")l=null;
        this.indent=l;
        if(typeof n=="undefined")n=null;
        this.leading=n;
        if(typeof p=="undefined")p=1;
        this.alpha=p
    };
    flash.text.TextField=function(){
        flash.display.InteractiveObject.call(this);
        var a=this.element_=new fljs.dom.Element;
        a.create(fljs.dom.Namespace.Svg,"g");
        this._clipElement.element.appendChild(this.element_.getElement());
        this.font_={
            family:"times",
            size:12
        };

        this.fill_={
            color:0
        };

        this.textFormat_=new flash.text.TextFormat(this.font_.family,this.font_.size,this.fill_.color,false,false,false,null,null,flash.text.TextFormatAlign.LEFT,0,0,0,0);
        if(fljs.Player.getInstance().renderTextAsGlyphs){
            a=Math.round(this.font_.size*
                0.85);
            var b=Math.round(0-this.font_.size/2+a);
            a=this._text=this.text_=new fljs.dom.Element;
            a.create(fljs.dom.Namespace.Svg,"text");
            a.sets([[null,"fill",this.__colorToSvgString(this.font_.color)],[null,"font-family",this.font_.family],[null,"font-size",this.font_.size],[null,"font-family",this.font_.family],[null,"x",0],[null,"y",b]]);
            a.update();
            this.element_.append(a)
        }else{
            a=this._text=new fljs.dom.Element;
            a.create(fljs.dom.Namespace.Svg,"g");
            a.update();
            this.element_.append(a)
        }
        this._textContent=""
    };
    fljs.inherits(flash.text.TextField,flash.display.InteractiveObject);
    fljs.addMethods(flash.text.TextField,{
        setTextMatrix:function(a){
            this._textMatrix=a;
            this._text.set(null,'transform',a.__toSvgString());
            this._text.update()
        },
        __setSpans:function(a){
            var b=[];
            this.spans=[];
            if(fljs.Player.getInstance().renderTextAsGlyphs){
                var c=this.text_.getElement().ownerDocument;
                for(var d in a){
                    var e=a[d],f=c.createElementNS("http://www.w3.org/2000/svg","tspan"),g=e.format.indent,j=[g];
                    for(var h in e.advances){
                        g+=e.advances[h];
                        j.push(g)
                    }
                    f.appendChild(c.createTextNode(e.text));
                    f.setAttributeNS(null,"x",j.join(" "));
                    f.setAttributeNS(null,"y",e.format.leading);
                    f.setAttributeNS(null,"font-size",e.format.size);
                    f.setAttributeNS(null,"fill",this.__colorToSvgString(e.format.color));
                    f.setAttributeNS(null,"fill-opacity",this.textOpacityWithXform(e.format.alpha));
                    this.text_.getElement().appendChild(f);
                    this.spans.push({
                        def:e,
                        element:f
                    });
                    b.push(e.text)
                }
            }else{
                fljs.Player.getInstance();
                c=this._text;
                for(d in a){
                    e=a[d];
                    f=e.format;
                    j=e.advances;
                    var m=new fljs.dom.Element;
                    m.create(fljs.dom.Namespace.Svg,"g");
                    m.sets([["transform",["translate(",f.indent,",",f.leading,")"].join("")],["fill",this.__colorToSvgString(f.color)],
                        ["fill-opacity",this.opacityWithXform(f.alpha)]]);
                    m.update();
                    h=g=0;
                    for(var k=e.text.length;h<k;h++){
                        var l=new fljs.dom.Element;
                        l.create(fljs.dom.Namespace.Svg,"use");
                        var n=["font",f.fontid,f.bold,f.italic,e.text.charCodeAt(h)].join("-");
                        l.sets([[fljs.dom.Namespace.Xlink,"xlink:href","#"+n],["transform",["translate(",g,")scale(",f.size*20/1024,")"].join("")]]);
                        l.update();
                        m.append(l);
                        g+=j[h]
                    }
                    c.append(m);
                    this.spans.push({
                        def:e,
                        element:m
                    });
                    b.push(e.text)
                }
            }
            this._textContent=b.join("")
        },
        __colorToSvgString:function(a){
            var b=
            a>>16&255,c=a>>8&255;
            a=a&255;
            var d=this.getTransform().getConcatenatedColorTransform();
            if(!d.__default){
                b=Math.max(0,Math.min(255,Math.round(b*d.redMultiplier+d.redOffset)));
                c=Math.max(0,Math.min(255,Math.round(c*d.greenMultiplier+d.greenOffset)));
                a=Math.max(0,Math.min(255,Math.round(a*d.blueMultiplier+d.blueOffset)))
            }
            return"rgb("+[b,c,a]+")"
        },
        opacityWithXform:function(a){
            return a
        },
        textOpacityWithXform:function(a){
            var b=this.getTransform().getConcatenatedColorTransform();
            return b.__default?a:Math.max(0,
                Math.min(255,Math.round(a*255*b.alphaMultiplier+b.alphaOffset)))/255
        },
        __setColorTransform:function(a){
            if(fljs.Player.getInstance().renderTextAsGlyphs)for(var b in this.spans){
                var c=this.spans[b];
                a=c.def;
                c=c.element;
                c.setAttributeNS(null,"color",this.__colorToSvgString(a.format.color));
                c.setAttributeNS(null,"fill-opacity",this.textOpacityWithXform(a.format.alpha))
            }else{
                fljs.base(this,"__setColorTransform",a);
                for(b in this.spans){
                    c=this.spans[b];
                    a=c.def;
                    c=c.element;
                    c.sets([[null,"color",this.__colorToSvgString(a.format.color)]]);
                    c.update()
                }
            }
        },
        setHeight:function(a){
            this.height_=a
        },
        setWidth:function(a){
            this.width_=a
        },
        getDefaultTextFormat:function(){
            return this.textFormat_
        },
        setDefaultTextFormat:function(a){
            if(fljs.Player.getInstance().renderTextAsGlyphs){
                var b=this.textFormat_;
                this.textFormat_=a;
                if(b.align!=this.textFormat_.align)switch(this.textFormat_.align){
                    case flash.text.TextFormatAlign.LEFT:
                        this.text_.getElement().setAttribute("x",this.x);
                        this.text_.getElement().setAttribute("text-anchor","start");
                        break;
                    case flash.text.TextFormatAlign.CENTER:
                        this.text_.getElement().setAttribute("x",
                            this.x+this.width/2);
                        this.text_.getElement().setAttribute("text-anchor","middle");
                        break;
                    case flash.text.TextFormatAlign.LEFT:
                        this.text_.getElement().setAttribute("x",this.x+this.width);
                        this.text_.getElement().setAttribute("text-anchor","end");
                        break;default:
                }
                if(b.font!=this.textFormat_.font){
                    a=fljs.Player.getInstance().lookupFontByStyle(this.textFormat_.font,this.textFormat_.bold,this.textFormat_.italic);
                    this.text_.getElement().setAttributeNS(null,"font-family",a)
                }
                if(b.bold!=this.textFormat_.bold){
                    a=
                    this.textFormat_.bold?"bold":"";
                    this.text_.getElement().setAttribute("font-weight",a)
                }
                if(b.italic!=this.textFormat_.italic){
                    a=this.textFormat_.italic?"italic":"";
                    this.text_.getElement().setAttribute("font-style",a)
                }
                if(b.color!=this.textFormat_.color){
                    this.fill_={
                        color:this.textFormat_.color
                    };

                    this.text_.set(null,"fill",this.__colorToSvgString(this.fill_.color))
                }
                if(b.size!=this.textFormat_.size){
                    this.font_={
                        size:this.textFormat_.size,
                        family:this.textFormat_.font
                    };

                    this.text_.getElement().setAttribute("font-size",
                        this.textFormat_.size)
                }
                b.alpha!=this.textFormat_.alpha&&this.text_.getElement().setAttribute("opacity",this.textFormat_.alpha)
            }
        }
    });
    fljs.swf.tag.DefineEditText=function(){};
    fljs.addMethods(fljs.swf.tag.DefineEditText,{
        read:function(a){
            this.CharacterId=a.readUI16();
            this.Bounds=a.readRECT();
            a.stream.align();
            this.HasText=a.readUB(1);
            this.WordWrap=a.readUB(1);
            this.Multiline=a.readUB(1);
            this.Password=a.readUB(1);
            this.ReadOnly=a.readUB(1);
            this.HasTextColor=a.readUB(1);
            this.HasMaxLength=a.readUB(1);
            this.HasFont=a.readUB(1);
            this.HasFontClass=a.readUB(1);
            this.AutoSize=a.readUB(1);
            this.HasLayout=a.readUB(1);
            this.NoSelect=a.readUB(1);
            this.Border=a.readUB(1);
            this.WasStatic=a.readUB(1);
            this.HTML=a.readUB(1);
            this.UseOutlines=a.readUB(1);
            if(this.HasFont)this.FontId=a.readUI16();
            if(this.HasFontClass)this.FontClass=a.readString();
            if(this.HasFont)this.FontHeight=a.readUI16()/a.twipsPerPixel;
            if(this.HasTextColor)this.TextColor=a.readRGBA();
            if(this.HasMaxLength)this.MaxLength=a.readUI16();
            if(this.HasLayout){
                this.Align=a.readUI8();
                this.LeftMargin=a.readUI16();
                this.RightMargin=a.readUI16();
                this.Indent=a.readUI16();
                this.Leading=a.readUI16()
            }
            this.VariableName=a.readString();
            if(this.HasText)this.InitialText=
                a.readString()
        },
        evaluate:function(a){
            a.addDefinition(this,this.CharacterId)
        },
        _build:function(a){
            a=a.element.getElement().ownerDocument;
            var b=a.createElement("text");
            b.setAttribute("font-family","font-"+String(this.FontId));
            b.setAttribute("font-size",this.FontHeight);
            var c=this.TextColor,d=0;
            d+=c.Red<<16;
            d+=c.Green<<8;
            d+=c.Blue;
            b.setAttribute("fill",d);
            var e,f;
            if(this.Align){
                if(this.Align==1){
                    e=this.Bounds.Xmax;
                    f="end"
                }
            }else{
                e=this.Bounds.Xmin;
                f="start"
            }
            b.setAttribute("x",e);
            b.setAttribute("text-anchor",
                f);
            b.setAttribute("y",this.Bounds.Ymax);
            b.appendChild(a.createTextNode(this.InitialText?this.InitialText:""));
            return b
        },
        build:function(a,b){
            return this._buildTextField(a,b)
        },
        _buildTextField:function(a,b){
            var c=new flash.text.TextField;
            b&&c.getTransform().setColorTransform(b);
            c.text=this.InitialText;
            c.x=this.Bounds.Xmin;
            c.y=this.Bounds.Ymin;
            c.setWidth(this.Bounds.Xmax-this.Bounds.Xmin);
            c.setHeight(this.Bounds.Ymax-this.Bounds.Ymin);
            b=new flash.text.TextFormat;
            switch(this.Align){
                case 0:
                    b.align=flash.text.TextFormatAlign.LEFT;
                    break;
                case 1:
                    b.align=flash.text.TextFormatAlign.RIGHT;
                    break;
                case 2:
                    b.align=flash.text.TextFormatAlign.CENTER;
                    break;
                case 3:
                    b.align=flash.text.TextFormatAlign.JUSTIFY;
                    break
            }
            if(a=a.fonts2[this.FontId]){
                b.bold=a.bold;
                b.italic=a.italic;
                b.font=a.name
            }
            a=this.TextColor;
            var d=0;
            d+=a.Red<<16;
            d+=a.Green<<8;
            d+=a.Blue;
            b.color=d;
            b.leading=this.Leading;
            b.leftMargin=this.LeftMargin;
            b.rightMargin=this.RightMargin;
            b.indent=this.Indent;
            b.size=this.FontHeight;
            c.setDefaultTextFormat(b);
            return c
        }
    });
    fljs.swf.tag.RemoveObject2=function(){};

    fljs.addMethods(fljs.swf.tag.RemoveObject2,{
        read:function(a){
            this.Depth=a.readUI16()
        },
        evaluate:function(a,b,c,d){
            d.removeChildAt(this.Depth)
        }
    });
    fljs.swf.build.JpegBuilder=function(){};
    fljs.addMethods(fljs.swf.build.JpegBuilder,{
        parseJpeg:function(a,b,c,d){
            b=String(b.readBytes(c).join(""));
            var e=new fljs.swf.BigEndianStringStream(b),f,g,j=fljs.Player.getInstance(),h;
            if(e.nextUShort()==65497){
                h=d&&j.jpegTables?6:4;
                e.nextUShort();
                e.nextUShort()
            }else h=d&&j.jpegTables?2:0;
            for(var m=0;e.byteIndex<c;){
                f=e.nextUShort();
                g=e.nextUShort();
                if(f==65472){
                    e.nextUByte();
                    a.Height=e.nextUShort();
                    a.Width=e.nextUShort();
                    break
                }
                if(f==65497)m=e.byteIndex-6;else e.skipBytes(g-2)
            }
            if(m)b=b.substr(0,m)+
                b.substr(m+6);
            if(h)b=b.substr(h);
            a.DataUri="data:image/jpeg;base64,"+btoa((d&&j.jpegTables?j.jpegTables:"")+b)
        },
        parseJpegTables:function(a,b,c){
            b=String(b.readBytes(c).join(""));
            var d=new fljs.swf.BigEndianStringStream(b),e=0;
            if(d.nextUShort()==65497){
                e=4;
                d.nextUShort();
                d.nextUShort()
            }
            a.JpegTables=b.substr(e,c-e-2)
        }
    });
    fljs.swf.tag.DefineBitsJPEG2=function(){};
    fljs.addMethods(fljs.swf.tag.DefineBitsJPEG2,{
        read:function(a,b){
            this.CharacterId=a.readUI16();
            b=b.TagLength-2;
            (new fljs.swf.build.JpegBuilder).parseJpeg(this,a,b,true)
        },
        evaluate:function(a){
            this.defId="image"+this.CharacterId;
            a.addDefinition(this,this.CharacterId);
            a=new fljs.swf.def.BitmapDef;
            a.setCharaId(this.defId);
            a.element.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.DataUri],[null,"x",0],[null,"y",0],[null,"width",this.Width],[null,"height",this.Height]]);
            a.define();
            this.def=a
        }
    });
    flash.display.Sprite=function(){
        flash.display.DisplayObjectContainer.call(this)
    };

    fljs.inherits(flash.display.Sprite,flash.display.DisplayObjectContainer);
    fljs.addMethods(flash.display.Sprite,{
        startDrag:function(){},
        stopDrag:function(){},
        getGraphics:function(){
            return this.graphics_
        }
    });
    flash.display.Scene=function(){};

    flash.ui={};

    flash.ui.Keyboard=function(){};

    fljs.addStaticMethods(flash.ui.Keyboard,{
        isAccessible:function(){}
    });
    fljs.addConstants(flash.ui.Keyboard,{
        BACKSPACE:8,
        CAPS_LOCK:20,
        CONTROL:17,
        DELETE:46,
        DOWN:40,
        END:35,
        ENTER:13,
        ESCAPE:27,
        F1:112,
        F10:121,
        F11:122,
        F12:123,
        F13:124,
        F14:125,
        F15:126,
        F2:113,
        F3:114,
        F4:115,
        F5:116,
        F6:117,
        F7:118,
        F8:119,
        F9:120,
        HOME:36,
        INSERT:45,
        LEFT:37,
        NUMPAD_0:96,
        NUMPAD_1:97,
        NUMPAD_2:98,
        NUMPAD_3:99,
        NUMPAD_4:100,
        NUMPAD_5:101,
        NUMPAD_6:102,
        NUMPAD_7:103,
        NUMPAD_8:104,
        NUMPAD_9:105,
        NUMPAD_ADD:107,
        NUMPAD_DECIMAL:110,
        NUMPAD_DIVIDE:111,
        NUMPAD_ENTER:108,
        NUMPAD_MULTIPLY:106,
        NUMPAD_SUBTRACT:109,
        PAGE_DOWN:34,
        PAGE_UP:33,
        RIGHT:39,
        SHIFT:16,
        SPACE:32,
        TAB:9,
        UP:38
    });
    fljs.swf.AudioStreamReader=function(a,b){
        this.player=a;
        this.delegate=b;
        this.reader=new fljs.swf.TagReader(a.parser.reader.stream.stream.buffer);
        this.reader.readSwfHeader()
    };
    fljs.addMethods(fljs.swf.AudioStreamReader,{
        hasMore:function(){
            return this.reader.stream.hasMore()
        },
        read:function(a){
            for(var b=0,c=this.delegate,d=this.reader,e=[0];d.stream.hasMore();){
                var f=d.readTagHeader();
                switch(f.tagClass()){
                    case fljs.swf.tag.SoundStreamBlock:
                        f=d.readTag(f);
                        c.onSoundStreamBlockTag(f,null,e[0]);
                        b++;
                        if(b==a)return;
                        break;
                    case fljs.swf.tag.ShowFrame:
                        f=d.readTag(f);
                        c.onShowFrameTag(f,null,e[0]);
                        e[0]+=1;
                        break;
                    default:
                        d.skipTag(f);
                        c.onUnknownTag&&c.onUnknownTag(f,null,e[0]);
                        break
                }
            }
        }
    });
    fljs.player={};

    fljs.player.ResourceManager=function(){
        this.frames={};

        this.res={};

        this.streams={};

        this.listeners={}
    };
    fljs.addMethods(fljs.player.ResourceManager,{
        addToFrame:function(a,b){
            this.frames[b]||(this.frames[b]={});
            this.frames[b][a]=true;
            this.res[a]=b
        },
        remove:function(a){
            if(this.listeners[a])for(var b in this.listeners[a])this.listeners[a][b](a);b=this.res[a];
            delete this.listeners[a];
            delete this.frames[b][a];
            delete this.res[a]
        },
        addStream:function(a){
            this.streams[a.id]=a
        },
        frameReady:function(a){
            for(var b=0;b<=a;b++){
                var c=this.frames[a];
                if(c)for(var d in c)return false
            }
            for(b in this.streams)if(!this.streams[b].frameReady(a))return false;
            return true
        },
        listen:function(a,b){
            var c=this.listeners[a];
            c||(c=this.listeners[a]=[]);
            c.push(b)
        },
        waiting:function(a){
            return a in this.res
        },
        newId:function(){
            return fljs.player.ResourceManager.id++
        }
    });
    fljs.player.ResourceManager.id=1;
    fljs.player.ExtAudioStream=function(a,b,c){
        this.id=b.resources.newId();
        b.resources.addStream(this);
        b=this.audio=a.allocAudio();
        b.addEventListener("canplaythrough",fljs.bind(this.onAudioLoad,this),true);
        b.setAttribute("src",c);
        b.load();
        this.frames={};

        this.playing=false;
        this.audioStreamReader=new fljs.swf.AudioStreamReader(a,this);
        this.duration=0;
        this.maxFrame=-1
    };
    fljs.addMethods(fljs.player.ExtAudioStream,{
        pingLoad:function(){},
        frameReady:function(a){
            if(this.maxFrame<a)return false;
            if(typeof this.frames[a]!="undefined")return true;
            else{
                for(a=a;a>0&&typeof this.frames[a]=="undefined";)a--;
                return a==0?true:this.frameReady(a)
            }
        },
        frameShouldPlay:function(a){
            for(a=a;a>0;){
                if(a in this.frames)return!!this.frames[a];
                a--
            }
            return false
        },
        setFrameDuration:function(a,b){
            this.frames[a]=b
        },
        onAudioLoad:function(){
            fljs.console("audio").info("onAudioLoad: "+this.audio.readyState+
                ", "+this.audio.duration);
            if(!this.started&&this.playing){
                this.audio.currentTime=this.frames[this.frame];
                this.audio.play()
            }
            this.started=true
        },
        playFrame:function(a){
            fljs.console("audio").info("playFrame:"+this.audio.readyState);
            if(this.audio.readyState>=2){
                this.frame=a;
                this.audio.currentTime=this.frames[a];
                this.audio.play();
                this.started=true
            }
            this.playing=true
        },
        pause:function(){
            this.audio.pause();
            this.playing=false
        },
        controlsFrame:function(){},
        currentTime:function(){
            return this.audio.currentTime*1E3
        },
        setSync:function(a){
            this.sync=a
        },
        shouldBuffer:function(){
            var a=fljs.now()-this.lastBufferAt;
            return!this.lastBufferAt||a>fljs.swf.SwfStreamingSoundReader.rebufferDuration
        },
        buffer:function(){
            var a=this.audioStreamReader;
            a.hasMore()&&a.read(fljs.swf.SwfStreamingSoundReader.bufferBlocks);
            this.lastBufferAt=fljs.now()
        },
        onSoundStreamBlockTag:function(a,b,c){
            this.maxFrame=c;
            b=a.duration();
            a=this.duration+b*(a.Mp3SoundData.SeekSamples/a.SampleCount);
            this.frames[c]=a/1E3;
            this.duration+=b;
            this.sync.setFrameTime(c,
                a)
        },
        onShowFrameTag:function(){}
    });
    fljs.player.SwfAudioStream=function(a,b){
        this.id=b.resources.newId();
        b.resources.addStream(this);
        this.player=a;
        this.target=b;
        this.soundStream=new fljs.swf.SwfStreamingSoundReader(a.parser.reader.stream.stream.buffer,b);
        this.playing=false
    };
    fljs.addMethods(fljs.player.SwfAudioStream,{
        pingLoad:function(){},
        frameReady:function(a){
            if(typeof this.soundStream.swfFrames[a]!="undefined")return this.soundStream.duration>=this.soundStream.swfFrames[a];
            else{
                for(a=a;a>0&&typeof this.soundStream.swfFrames[a]=="undefined";)a--;
                return a==0?true:this.frameReady(a)
            }
        },
        frameShouldPlay:function(a){
            for(a=a;a>0;){
                if(a in this.soundStream.swfFrames)return true;
                a--
            }
            return false
        },
        setFrameDuration:function(){},
        playFrame:function(a){
            this.soundStream.play(a);
            this.playing=true
        },
        pause:function(){
            this.soundStream.stop();
            this.playing=false
        },
        controlsFrame:function(a){
            return this.soundStream.controlFrame(a)
        },
        timeDiff:function(a){
            return this.soundStream.timeDiff(a)
        },
        currentTime:function(){
            return this.soundStream.currentTime()
        },
        setSync:function(a){
            this.soundStream.sync=a
        },
        shouldBuffer:function(){
            var a=fljs.now()-this.soundStream.lastBufferAt;
            return!this.soundStream.lastBufferAt||a>fljs.swf.SwfStreamingSoundReader.rebufferDuration
        },
        buffer:function(){
            this.soundStream.buffer()
        }
    });
    flash.display.MovieClip=function(){
        flash.display.Sprite.call(this);
        var a=new flash.display.Scene;
        a.labels=[];
        a.name="Scene 1";
        a.numFrames=1;
        this.frameData_=[{
            scripts:[],
            parts:[],
            tags:[],
            label:"",
            repeat:false
        }];
        this.labels_={};

        this.sceneIndices_={};

        this.currentSceneIndex_=0;
        this.scenes_=[a];
        this.currentFrameIndex_=0;
        this.currentLabel_=null;
        this._enabled=false;
        this.totalFrames_=this.framesLoaded_=1;
        this.next_=null;
        this.playing_=true;
        this.audio=[];
        fljs.Player.getInstance();
        this.id=flash.display.MovieClip.id++;
        this.element_.getElement().setAttribute("id","mc"+this.id);
        this.__buttonStateDown=this.__buttonStateOver=this.firstFrame=false;
        this.resources=new fljs.player.ResourceManager
    };

    fljs.inherits(flash.display.MovieClip,flash.display.Sprite);
    fljs.addMethods(flash.display.MovieClip,{
        gotoAndPlay:function(a,b){
            this.gotoAnd_(a,b,true)
        },
        gotoAndStop:function(a,b){
            this.gotoAnd_(a,b,false)
        },
        gotoAnd_:function(a,b,c){
            var d,e;
            if(typeof a.valueOf()=="string")if(d=this.labels_[a]){
                d=d.frame-1;
                e=0
            }else return;
            else if(!b){
                d=a-1;
                if(d==-1)d=0;
                a=this.globalFrameIndexToLocal_(d);
                d=a[0];
                e=a[1]
            }
            this.next_={
                frameIndex:d,
                sceneIndex:e,
                play:c
            };

            this.next_.clear=d!=this.currentFrameIndex_+1
        },
        globalFrameIndexToLocal_:function(a){
            for(var b=0;a>=this.scenes_[b].numFrames;){
                a-=
                this.scenes_[b].numFrames;
                b+=1
            }
            return[a,b]
        },
        nextFrame:function(){
            var a=this.currentFrameIndex_+1,b=this.currentSceneIndex_;
            if(a==this.scenes_[this.currentSceneIndex_].numFrames)if(this.totalFrames_>1){
                a=0;
                b+=1;
                if(b==this.scenes_.length)b=0
            }else{
                this.next_=null;
                return
            }
            this.next_={
                frameIndex:a,
                sceneIndex:b,
                play:this.next_?this.next_.play:this.playing_
            }
        },
        nextScene:function(){
            var a=this.currentSceneIndex_+1;
            if(a==this.scenes_.length)a=0;
            this.next_={
                frameIndex:0,
                sceneIndex:a,
                play:true
            }
        },
        play:function(){
            this.next_=
            this.next_?{
                frameIndex:this.next_.frameIndex,
                sceneIndex:this.next_.sceneIndex,
                play:true,
                clear:this.next_.clear
            }:{
                frameIndex:this.currentFrameIndex_,
                sceneIndex:this.currentSceneIndex_,
                play:true
            }
        },
        prevFrame:function(){
            var a=this.currentFrameIndex_-1,b=this.currentSceneIndex_;
            if(a==-1){
                b-=1;
                if(b==-1)b=this.scenes_.length-1;
                a=this.scenes_[b].numFrames-1
            }
            this.next_={
                frameIndex:a,
                sceneIndex:b,
                play:this.next_?this.next_.play:this.playing_
            }
        },
        prevScene:function(){
            var a=this.currentSceneIndex_-1;
            if(a==-1)a=
                this.scenes_.length-1;
            frameIndex=this.scenes_[a].numFrames-1;
            this.next_={
                frameIndex:frameIndex,
                sceneIndex:a,
                play:true
            }
        },
        stop:function(){
            var a;
            if(this.next_)a=this.next_.clear;
            this.next_={
                frameIndex:this.currentFrameIndex_,
                sceneIndex:this.currentSceneIndex_,
                play:false,
                stop:true,
                clear:a
            }
        },
        clear:function(){
            for(var a in this.displayList_)this.removeChildAt(a)
        },
        onNewFrame:function(){
            if(this.getStage())if(this.frameReady(this.currentFrameIndex_)){
                this.pendingFrame=false;
                var a=this.frameData_[this.currentFrameIndex_];
                if(a.label)this.currentLabel_=a.label;
                for(var b=0;b<a.tags.length;b++){
                    var c=a.tags[b];
                    c[0]&&c[0].evaluate(fljs.Player.getInstance(),null,null,this)
                }
                if(a.parts)for(b in a.parts)this.addChildAt(a.parts[b],b)
            }else this.pendingFrame=true
        },
        onEnterFrame:function(){
            var a=false;
            if(a=this.pendingFrame?true:this.pickNextFrame()){
                this.onNewFrame();
                if(this.pendingFrame)return
            }(a=this._as2Object)&&a._onEnterFrame&&fljs.Player.getInstance().interpreter.callback(a,a._onEnterFrame)
        },
        onCreate:function(){
            this.next_=

            {
                frameIndex:0,
                sceneIndex:0,
                play:!this._enabled&&this.totalFrames_>1
            };

            this.setCurrentFrame();
            this.onNewFrame()
        },
        setCurrentFrame:function(){
            this.updateSoundStream();
            this.currentFrameIndex_=this.next_.frameIndex;
            this.currentSceneIndex_=this.next_.sceneIndex;
            this.playing_=this.next_.play;
            this.next_=null
        },
        pickNextFrame:function(){
            if(this.playing_)if(!this.next_){
                var a=this.currentFrameIndex_+1,b=this.currentSceneIndex_;
                if(a==this.scenes_[this.currentSceneIndex_].numFrames)if(a==this.totalFrames_)if(this.totalFrames_>
                    1){
                    this.clear();
                    this.next_={
                        frameIndex:0,
                        sceneIndex:0,
                        play:true
                    }
                }else{
                    this.playing_=false;
                    this.next_=null
                }else this.next_={
                    frameIndex:a,
                    sceneIndex:b+1,
                    play:true
                };else this.next_={
                    frameIndex:a,
                    sceneIndex:b,
                    play:this.playing_
                }
            }
            if(this.next_)if(this._enabled)this.next_.play=false;
            a=this.next_&&!this.next_.stop&&this.next_.frameIndex!=this.currentFrameIndex_;
            if(this.next_){
                a&&this.next_.clear&&this.removeChildren();
                this.setCurrentFrame();
                this.next_=null
            }
            return a
        },
        onEnterFrame_:function(a){
            fljs.console("mc").info("mc#"+
                this.id+" frame#"+this.currentFrameIndex_);
            this.onEnterFrame(a)
        },
        updateSoundStream:function(){
            if(this.audioStream)if(this.next_)if(this.next_.play!=this.playing_)if(this.next_.playing)this.audioStream.frameShouldPlay(this.next_.frameIndex)&&this.audioStream.playFrame(this.next_.frameIndex);else this.audioStream.pause();else this.next_.play&&this.next_.frameIndex!=this.currentFrameIndex_+1&&this.audioStream.frameShouldPlay(this.next_.frameIndex)&&this.audioStream.playFrame(this.next_.frameIndex);else this.audioStream.pause()
        },
        addFrameScript:function(){
            for(var a,b,c=0;c<arguments.length;c+=2){
                a=arguments[c];
                b=this.globalFrameIndexToLocal_(a);
                a=b[0];
                b=b[1];
                this.scenes_[b].frameData_[a].scripts.push(arguments[c+1])
            }
        },
        updateButtonState:function(a){
            if(this._enabled){
                var b=flash.events.MouseEvent,c=flash.events.KeyboardEvent,d,e;
                switch(a.type){
                    case b.CLICK:
                        e=d=true;
                        break;
                    case b.MOUSE_OVER:
                        d=true;
                        e=this.__buttonStateDown;
                        break;
                    case b.MOUSE_OUT:
                        d=false;
                        e=this.__buttonStateDown;
                        break;
                    case b.MOUSE_DOWN:
                        d=this.__buttonStateOver;
                        e=true;
                        break;
                    case b.MOUSE_UP:
                        d=this.__buttonStateOver;
                        e=false;
                        break;
                    case c.KEY_DOWN:
                        d=this.__buttonStateOver;
                        e=true;
                        break;
                    case c.KEY_UP:
                        d=this.__buttonStateOver;
                        e=false;
                        break
                }
                var f;
                if(this.__buttonStateOver!=d)f=d?e?this.__buttonStateDown?"CondOutDownToOverDown":"CondIdleToOverDown":"CondIdleToOverUp":e?"CondOverDownToOutDown":"CondOverUpToIdle";
                else if(this.__buttonStateDown!=e)if(e){
                    if(d)f="CondOverUpToOverDown"
                }else f=d?"CondOverDownToOverUp":"CondOutDownToIdle";
                a=d?e?"down":"over":"up";
                this.__buttonStateOver=
                d;
                this.__buttonStateDown=e;
                this.gotoAndStop("_"+a);
                if(f)for(var g in this.__buttonActions){
                    d=this.__buttonActions[g];
                    d[f]&&fljs.Player.getInstance().doActions(this,d.Actions)
                }
            }
        },
        needAudio:function(){
            for(var a=fljs.Player.getInstance(),b=0;b<2;b++)this.audio[b]=a.allocAudio()
        },
        frameReady:function(a){
            return this.frameData_[a]&&this.frameData_[a].loaded&&this.resources.frameReady(a)
        },
        getEnabled:function(){
            return this._enabled
        },
        setEnabled:function(a){
            this._enabled=!!a
        }
    });
    flash.display.MovieClip.id=1;
    fljs.swf.tag.DefineSprite=function(){};
    fljs.addMethods(fljs.swf.tag.DefineSprite,{
        read:function(a){
            this.defId=this.SpriteId=a.readUI16();
            this.FrameCount=a.readUI16();
            this.frameData_=[{
                tags:[]
            }];
            this.labels_={};

            this.framesLoaded_=0;
            this.totalFrames_=this.FrameCount
        },
        evaluate:function(a){
            a.addDefinition(this,this.SpriteId)
        },
        build:function(a,b){
            a=new flash.display.MovieClip;
            a.def=this;
            b&&a.getTransform().setColorTransform(b);
            b=new flash.display.Scene;
            b.labels=[];
            b.name="Scene 1";
            b.numFrames=this.FrameCount;
            a.frameData_=[];
            for(var c=0;c<this.FrameCount;c++){
                var d=

                {
                    scripts:[],
                    parts:[],
                    tags:[],
                    label:""
                };

                d.tags=this.frameData_[c].tags;
                d.loaded=this.frameData_[c].loaded;
                a.frameData_.push(d)
            }
            a.labels_=this.labels_;
            a.sceneIndices_={};

            a.currentSceneIndex_=0;
            a.scenes_=[b];
            a.currentFrameIndex_=0;
            a.currentLabel_=null;
            a._enabled=false;
            a.framesLoaded_=this.FrameCount;
            a.totalFrames_=this.FrameCount;
            a.next_=null;
            a.playing_=true;
            return a
        }
    });
    fljs.swf.tag.DefineSound=function(){};
    fljs.addMethods(fljs.swf.tag.DefineSound,{
        read:function(a,b){
            this.SoundId=a.readUI16();
            this.SoundFormat=a.readUB(4);
            this.SoundRate=a.readUB(2);
            this.SoundSize=a.readUB(1);
            this.SoundType=a.readUB(1);
            this.SoundSampleCount=a.readUI32();
            this.Mp3SoundData=this.SoundData=a.readMp3SoundData(b.TagLength-2-1-4)
        },
        evaluate:function(a){
            a.sounds[this.SoundId]=this
        }
    });
    fljs.swf.tag.StartSound=function(){};
    fljs.addMethods(fljs.swf.tag.StartSound,{
        read:function(a){
            this.SoundId=a.readUI16();
            this.SoundInfo=a.readSoundInfo()
        },
        evaluate:function(a,b){
            var c=a.sounds[this.SoundId];
            if(!c.player){
                c.player=a.allocAudio();
                b=new fljs.swf.StringStream(a.reader.stream.stream.buffer);
                b.byteIndex=c.Mp3SoundData.byteIndex;
                b=b.readBytes(c.Mp3SoundData.byteCount).join("");
                b="data:audio/mpeg;base64,"+btoa(b);
                c.player.setAttribute("src",b)
            }
            var d=c.player;
            if(this.SoundInfo.SyncStop){
                d.fljsPlaying=false;
                d.pause()
            }else if(this.SoundInfo.SyncNoMultiple){
                d.fljsPlaying=
                true;
                a.playing&&d.play()
            }else{
                d.addEventListener("load",function(){
                    d.currentTime=0;
                    d.fljsPlaying=true;
                    a.playing&&d.play()
                },true);
                d.load()
            }
        }
    });
    fljs.swf.tag.DefineShape2=function(){};

    fljs.inherits(fljs.swf.tag.DefineShape2,fljs.swf.tag.DefineShape);
    fljs.addMethods(fljs.swf.tag.DefineShape2,{
        read:function(a,b){
            a.beginContext(fljs.swf.tag.DefineShape2);
            a.endByteIndex=a.stream.byteIndex+b.TagLength;
            this.ShapeId=a.readUI16();
            this.ShapeBounds=a.readRECT();
            a.stream.align();
            this.Shapes=a.readSHAPEWITHSTYLE();
            a.endContext()
        }
    });
    fljs.swf.tag.SoundStreamHead2=function(){};

    fljs.inherits(fljs.swf.tag.SoundStreamHead2,fljs.swf.tag.SoundStreamHead);
    fljs.swf.tag.DefineFontInfo=function(){};
    fljs.addMethods(fljs.swf.tag.DefineFontInfo,{
        read:function(a){
            this.FontId=a.readUI16();
            this.FontNameLen=a.readUI8();
            var b=[];
            for(i=0;i<this.FontNameLen;i++)b.push(String.fromCharCode(a.readUI8()));
            this.FontName=b.join("");
            a.readUB(2);
            this.FontFlagsSmallText=a.readUB(1);
            this.FontFlagsShiftJis=a.readUB(1);
            this.FontFlagsAnsi=a.readUB(1);
            this.FontFlagsItalic=a.readUB(1);
            this.FontFlagsBold=a.readUB(1);
            this.FontFlagsWideCodes=a.readUB(1);
            b=fljs.Player.getInstance().fontsWithoutInfo[this.FontId];
            this.CodeTable=
            [];
            if(this.FontFlagsWideCodes)for(i=0;i<b.NumGlyphs;i++)this.CodeTable.push(a.readUI16());else for(i=0;i<this.NumGlyphs;i++)this.CodeTable.push(a.readUI8());
            this.GlyphShapeTable=b.GlyphShapeTable
        },
        evaluate:function(a){
            var b=(new fljs.swf.build.FontBuilder(this,a)).buildDef();
            a.defineFont2(this.FontId,this.GlyphShapeTable.length,b,this.FontName,this.FontFlagsBold,this.FontFlagsItalic,this.CodeTable)
        }
    });
    fljs.swf.tag.DefineText=function(){};
    fljs.addMethods(fljs.swf.tag.DefineText,{
        read:function(a){
            this.CharacterId=a.readUI16();
            this.TextBounds=a.readRECT();
            a.stream.align();
            this.TextMatrix=a.readMATRIX();
            this.GlyphBits=a.readUI8();
            this.AdvanceBits=a.readUI8();
            a.GlyphBits=this.GlyphBits;
            a.AdvanceBits=this.AdvanceBits;
            a.context=fljs.swf.tag.DefineText;
            this.TextRecords=a.readTEXTRECORDS();
            a.context=null
        },
        buildMatrix_:function(){
            return new flash.geom.Matrix(this.TextMatrix.ScaleX,this.TextMatrix.RotateSkew0,this.TextMatrix.RotateSkew1,this.TextMatrix.ScaleY,
                this.TextMatrix.TranslateX,this.TextMatrix.TranslateY)
        },
        evaluate:function(a){
            a.addDefinition(this,this.CharacterId)
        },
        build:function(a,b){
            return this._buildTextField(a,b)
        },
        _buildTextField:function(a,b){
            if(!this.TextRecords||!this.TextRecords.length)return null;
            this.FontId=this.TextRecords[0].FontId;
            this.Bounds=this.TextBounds;
            var c=a.fonts2[this.FontId];
            a=[];
            var d;
            fljs.console("definetext");
            var e,f,g=0,j;
            for(var h in this.TextRecords){
                var m=this.TextRecords[h];
                d=new flash.text.TextFormat;
                if(c){
                    d.bold=c.bold;
                    d.italic=c.italic;
                    d.font=c.name;
                    d.fontid=this.FontId
                }
                if(m.TextColor){
                    var k=m.TextColor;
                    e=0;
                    e+=k.Red<<16;
                    e+=k.Green<<8;
                    e+=k.Blue;
                    if(typeof m.TextColor.Alpha!="undefined")d.alpha=m.TextColor.Alpha/255
                }
                d.color=e;
                if(m.YOffset!=null){
                    f=m.YOffset;
                    g=0
                };

                d.leading=f;
                if(m.XOffset!=null)g=m.XOffset;
                d.indent=g;
                if(m.TextHeight!=null)j=m.TextHeight;
                d.size=j;
                m=m.GlyphEntries;
                k=[];
                var l=[];
                if(m)for(var n in m){
                    var p=m[n];
                    c?k.push(String.fromCharCode(c.codeTable[p.GlyphIndex])):k.push(String.fromCharCode(p.GlyphIndex));
                    l.push(p.GlyphAdvance);
                    g+=p.GlyphAdvance
                }
                a.push({
                    text:k.join(""),
                    advances:l,
                    format:d
                })
            }
            this.Indent=this.RightMargin=this.LeftMargin=this.Leading=this.Align=0;
            this.FontHeight=this.TextRecords[0].TextHeight;
            this.TextColor=this.TextRecords[0].TextColor;
            e=new flash.text.TextField;
            e.setTextMatrix(this.buildMatrix_());
            b&&e.getTransform().setColorTransform(b);
            e.x=this.Bounds.Xmin;
            e.y=this.Bounds.Ymin;
            e.setWidth(this.Bounds.Xmax-this.Bounds.Xmin);
            e.setHeight(this.Bounds.Ymax-this.Bounds.Ymin);
            e.setDefaultTextFormat(d);
            e.__setSpans(a);
            return e
        }
    });
    fljs.swf.tag.DefineFontInfo2=function(){};
    fljs.addMethods(fljs.swf.tag.DefineFontInfo2,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.FontId=a.readUI16();
            this.FontNameLen=a.readUI8();
            var d=[];
            for(i=0;i<this.FontNameLen;i++)d.push(String.fromCharCode(a.readUI8()));
            this.FontName=d.join("");
            a.readUB(2);
            this.FontFlagsSmallText=a.readUB(1);
            this.FontFlagsShiftJis=a.readUB(1);
            this.FontFlagsAnsi=a.readUB(1);
            this.FontFlagsItalic=a.readUB(1);
            this.FontFlagsBold=a.readUB(1);
            this.FontFlagsWideCodes=a.readUB(1);
            this.LanguageCode=a.readLangCode();
            b=
            b.TagLength-(a.stream.byteIndex-c);
            this.CodeTable=[];
            if(this.FontFlagsWideCodes){
                b=b/2;
                for(i=0;i<b;i++)this.CodeTable.push(a.readUI16())
            }else{
                b=b;
                for(i=0;i<b;i++)this.CodeTable.push(a.readUI8())
            }
        },
        evaluate:function(a){
            this.GlyphShapeTable=a.fontsWithoutInfo[this.FontId].GlyphShapeTable;
            var b=(new fljs.swf.build.FontBuilder(this,a)).buildDef();
            a.defineFont2(this.FontId,this.GlyphShapeTable.length,b,this.FontName,this.FontFlagsBold,this.FontFlagsItalic,this.CodeTable)
        }
    });
    fljs.swf.tag.DefineShape3=function(){};
    fljs.inherits(fljs.swf.tag.DefineShape3,fljs.swf.tag.DefineShape);
    fljs.addMethods(fljs.swf.tag.DefineShape3,{
        read:function(a){
            a.beginContext(fljs.swf.tag.DefineShape3);
            this.ShapeId=a.readUI16();
            this.ShapeBounds=a.readRECT();
            a.stream.align();
            this.Shapes=a.readSHAPEWITHSTYLE();
            a.endContext()
        }
    });
    fljs.swf.tag.DoAction=function(){};

    fljs.addMethods(fljs.swf.tag.DoAction,{
        read:function(a,b){
            this.Actions=a.readActionRecords(b.TagLength)
        },
        evaluate:function(a,b,c,d){
            a.doActions(d,this.Actions)
        }
    });
    fljs.swf.tag.Protect=function(){};

    fljs.addMethods(fljs.swf.tag.Protect,{
        read:function(a,b){
            a.skipBytes(b.TagLength)
        },
        evaluate:function(){}
    });
    flash.display.FrameLabel=function(){};

    fljs.swf.tag.DefineButton2=function(){};
    fljs.addMethods(fljs.swf.tag.DefineButton2,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            a.context=fljs.swf.tag.DefineButton2;
            this.ButtonId=a.readUI16();
            a.readUB(7);
            this.TrackAsMenu=a.readUB(1);
            this.ActionOffset=a.readUI16();
            this.Characters=a.readButtonRecords();
            this.Actions=this.ActionOffset?a.readButtonCondActions(b.TagLength-(a.stream.byteIndex-c)):[];
            a.context=null
        },
        evaluate:function(a){
            a.addDefinition(this,this.ButtonId)
        },
        build:function(a,b){
            if(b&&b.__default)b=null;
            var c=new flash.display.MovieClip;
            c.def=this;
            c.setEnabled(true);
            c.trackAsMenu=this.TrackAsMenu;
            c.__buttonActions=this.Actions;
            var d=[["ButtonStateUp","up"],["ButtonStateDown","down"],["ButtonStateOver","over"],["ButtonStateHitTest","hitTest"]],e=new flash.display.Scene;
            e.labels=[];
            e.name="Scene 1";
            e.numFrames=3;
            c.frameData_=[];
            c.labels_={};

            var f,g=0;
            for(var j in d){
                var h=d[j][0],m=d[j][1];
                f=null;
                for(var k in this.Characters){
                    var l=this.Characters[k];
                    if(l[h]){
                        f||(f=new flash.display.Sprite);
                        var n=this.buildStateDisplayObject(a,l,false);
                        n&&f.addChildAt(n,l.PlaceDepth)
                    }
                }
                for(k in this.Characters){
                    l=this.Characters[k];
                    if(l.ButtonStateHitTest){
                        f||(f=new flash.display.Sprite);
                        if(n=this.buildStateDisplayObject(a,l,true)){
                            n.__setHitTarget(c);
                            f.addChild(n)
                        }
                    }
                }
                if(m!="hitTest"){
                    h=new flash.display.FrameLabel;
                    h.name="_"+m;
                    h.frame=g+1;
                    m={
                        scripts:[],
                        parts:[],
                        tags:[],
                        label:h.name,
                        loaded:true
                    };

                    f&&m.parts.push(f);
                    c.frameData_.push(m);
                    c.labels_[h.name]=h
                }
                g+=1
            }
            c.sceneIndices_={};

            c.currentSceneIndex_=0;
            c.scenes_=[e];
            c.currentFrameIndex_=0;
            c.currentLabel_=
            c.frameData_[c.currentFrameIndex_].label;
            c._enabled=true;
            c.framesLoaded_=3;
            c.totalFrames_=3;
            c.next_=null;
            c.playing_=false;
            c.gotoAndStop(1);
            b&&c.getTransform().setColorTransform(b);
            return c
        },
        buildStateDisplayObject:function(a,b,c){
            var d=this.buildColorTransform(b.ColorTransform),e=this.buildMatrix(b.PlaceMatrix);
            c=(fljs.agent.OS=="iPad"||fljs.agent.OS=="iPhone")&&c;
            b=a.dictionary[b.CharacterId];
            var f;
            if(b instanceof fljs.swf.tag.DefineShape||b instanceof fljs.swf.tag.DefineEditText||b instanceof fljs.swf.tag.DefineText||
                b instanceof fljs.swf.tag.DefineSprite)f=b.build(a,d,c);
            if(f){
                f.setMatrix(e);
                f.__clipActions={};

                b instanceof fljs.swf.tag.DefineSprite&&f.onCreate()
            }
            return f
        },
        buildMatrix:function(a){
            return new flash.geom.Matrix(a.ScaleX,a.RotateSkew0,a.RotateSkew1,a.ScaleY,a.TranslateX,a.TranslateY)
        },
        buildColorTransform:function(a){
            a=new flash.geom.ColorTransform(a.RedMultTerm,a.GreenMultTerm,a.BlueMultTerm,a.AlphaMultTerm,a.RedAddTerm,a.GreenAddTerm,a.BlueAddTerm,a.AlphaAddTerm);
            return a.__default?null:a
        }
    });
    fljs.swf.tag.DefineText2=function(){};

    fljs.inherits(fljs.swf.tag.DefineText2,fljs.swf.tag.DefineText);
    fljs.addMethods(fljs.swf.tag.DefineText2,{
        read:function(a){
            this.CharacterId=a.readUI16();
            this.TextBounds=a.readRECT();
            a.stream.align();
            this.TextMatrix=a.readMATRIX();
            this.GlyphBits=a.readUI8();
            this.AdvanceBits=a.readUI8();
            a.GlyphBits=this.GlyphBits;
            a.AdvanceBits=this.AdvanceBits;
            a.context=fljs.swf.tag.DefineText2;
            this.TextRecords=a.readTEXTRECORDS();
            a.context=null
        }
    });
    fljs.swf.tag.JpegTables=function(){};
    fljs.addMethods(fljs.swf.tag.JpegTables,{
        read:function(a,b){
            if(b.TagLength!=0){
                a=a.readBytes(b.TagLength).join("");
                var c=new fljs.swf.BigEndianStringStream(a);
                fljs.console("jpeg").info(""+b.TagType);
                b=0;
                if(c.nextUShort()==65497){
                    b=4;
                    c.nextUShort();
                    c.nextUShort()
                }
                this.JPEGData=a.substr(b,a.length-b-2)
            }
        },
        evaluate:function(a){
            a.jpegTables=this.JPEGData
        }
    });
    fljs.swf.tag.DefineBits=function(){};

    fljs.inherits(fljs.swf.tag.DefineBits,fljs.swf.tag.DefineBitsJPEG2);
    fljs.addMethods(fljs.swf.tag.DefineBits,{
        read:function(a,b){
            this.CharacterId=a.readUI16();
            b=b.TagLength-2;
            (new fljs.swf.build.JpegBuilder).parseJpeg(this,a,b,true)
        }
    });
    fljs.swf.tag.FrameLabel=function(){};

    fljs.addMethods(fljs.swf.tag.FrameLabel,{
        read:function(a){
            this.Name=a.readString()
        },
        evaluate:function(a,b,c,d){
            if(d==a.stage)d=a.mainTimeline;
            d.frameData_[d.framesLoaded_].label=this.Name;
            a=d.labels_[this.Name]=new flash.display.FrameLabel;
            a.frame=d.framesLoaded_+1;
            a.name=this.Name
        }
    });
    fljs.zip_inflate={};
    var zip_WSIZE=32768,zip_STORED_BLOCK=0,zip_STATIC_TREES=1,zip_DYN_TREES=2,zip_lbits=9,zip_dbits=6,zip_INBUFSIZ=32768,zip_INBUF_EXTRA=64,zip_slide,zip_wp,zip_fixed_tl=null,zip_fixed_td,zip_fixed_bl,fixed_bd,zip_bit_buf,zip_bit_len,zip_method,zip_eof,zip_copy_leng,zip_copy_dist,zip_tl,zip_td,zip_bl,zip_bd,zip_inflate_data,zip_inflate_pos,zip_MASK_BITS=new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535),zip_cplens=new Array(3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,
        59,67,83,99,115,131,163,195,227,258,0,0),zip_cplext=new Array(0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99),zip_cpdist=new Array(1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577),zip_cpdext=new Array(0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13),zip_border=new Array(16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15);
    function zip_HuftList(){
        this.list=this.next=null
    }
    function zip_HuftNode(){
        this.n=this.b=this.e=0;
        this.t=null
    }
    function zip_HuftBuild(a,b,c,d,e,f){
        this.BMAX=16;
        this.N_MAX=288;
        this.status=0;
        this.root=null;
        this.m=0;
        var g=new Array(this.BMAX+1),j,h,m,k,l,n,p,u=new Array(this.BMAX+1),o,q,s,r=new zip_HuftNode,t=new Array(this.BMAX);
        k=new Array(this.N_MAX);
        var v,w=new Array(this.BMAX+1),y,x,z;
        z=this.root=null;
        for(l=0;l<g.length;l++)g[l]=0;
        for(l=0;l<u.length;l++)u[l]=0;
        for(l=0;l<t.length;l++)t[l]=null;
        for(l=0;l<k.length;l++)k[l]=0;
        for(l=0;l<w.length;l++)w[l]=0;
        j=b>256?a[256]:this.BMAX;
        o=a;
        q=0;
        l=b;
        do{
            g[o[q]]++;
            q++
        }while(--l>
            0);
        if(g[0]==b){
            this.root=null;
            this.status=this.m=0
        }else{
            for(n=1;n<=this.BMAX;n++)if(g[n]!=0)break;p=n;
            if(f<n)f=n;
            for(l=this.BMAX;l!=0;l--)if(g[l]!=0)break;m=l;
            if(f>l)f=l;
            for(y=1<<n;n<l;n++,y<<=1)if((y-=g[n])<0){
                this.status=2;
                this.m=f;
                return
            }
            if((y-=g[l])<0){
                this.status=2;
                this.m=f
            }else{
                g[l]+=y;
                w[1]=n=0;
                o=g;
                q=1;
                for(s=2;--l>0;)w[s++]=n+=o[q++];
                o=a;
                l=q=0;
                do if((n=o[q++])!=0)k[w[n]++]=l;while(++l<b);
                b=w[m];
                w[0]=l=0;
                o=k;
                q=0;
                k=-1;
                v=u[0]=0;
                s=null;
                for(x=0;p<=m;p++)for(a=g[p];a-- >0;){
                    for(;p>v+u[1+k];){
                        v+=u[1+
                        k];
                        k++;
                        x=(x=m-v)>f?f:x;
                        if((h=1<<(n=p-v))>a+1){
                            h-=a+1;
                            for(s=p;++n<x;){
                                if((h<<=1)<=g[++s])break;
                                h-=g[s]
                            }
                        }
                        if(v+n>j&&v<j)n=j-v;
                        x=1<<n;
                        u[1+k]=n;
                        s=new Array(x);
                        for(h=0;h<x;h++)s[h]=new zip_HuftNode;
                        z=z==null?(this.root=new zip_HuftList):(z.next=new zip_HuftList);
                        z.next=null;
                        z.list=s;
                        t[k]=s;
                        if(k>0){
                            w[k]=l;
                            r.b=u[k];
                            r.e=16+n;
                            r.t=s;
                            n=(l&(1<<v)-1)>>v-u[k];
                            t[k-1][n].e=r.e;
                            t[k-1][n].b=r.b;
                            t[k-1][n].n=r.n;
                            t[k-1][n].t=r.t
                        }
                    }
                    r.b=p-v;
                    if(q>=b)r.e=99;
                    else if(o[q]<c){
                        r.e=o[q]<256?16:15;
                        r.n=o[q++]
                    }else{
                        r.e=e[o[q]-c];
                        r.n=
                        d[o[q++]-c]
                    }
                    h=1<<p-v;
                    for(n=l>>v;n<x;n+=h){
                        s[n].e=r.e;
                        s[n].b=r.b;
                        s[n].n=r.n;
                        s[n].t=r.t
                    }
                    for(n=1<<p-1;(l&n)!=0;n>>=1)l^=n;
                    for(l^=n;(l&(1<<v)-1)!=w[k];){
                        v-=u[k];
                        k--
                    }
                }
                this.m=u[1];
                this.status=y!=0&&m!=1?1:0
            }
        }
    }
    function zip_GET_BYTE(){
        if(zip_inflate_data.length==zip_inflate_pos)return-1;
        return zip_inflate_data.charCodeAt(zip_inflate_pos++)&255
    }
    function zip_NEEDBITS(a){
        for(;zip_bit_len<a;){
            zip_bit_buf|=zip_GET_BYTE()<<zip_bit_len;
            zip_bit_len+=8
        }
    }
    function zip_GETBITS(a){
        return zip_bit_buf&zip_MASK_BITS[a]
    }
    function zip_DUMPBITS(a){
        zip_bit_buf>>=a;
        zip_bit_len-=a
    }
    function zip_inflate_codes(a,b,c){
        var d,e,f;
        if(c==0)return 0;
        for(f=0;;){
            zip_NEEDBITS(zip_bl);
            e=zip_tl.list[zip_GETBITS(zip_bl)];
            for(d=e.e;d>16;){
                if(d==99)return-1;
                zip_DUMPBITS(e.b);
                d-=16;
                zip_NEEDBITS(d);
                e=e.t[zip_GETBITS(d)];
                d=e.e
            }
            zip_DUMPBITS(e.b);
            if(d==16){
                zip_wp&=zip_WSIZE-1;
                a[b+f++]=zip_slide[zip_wp++]=e.n
            }else{
                if(d==15)break;
                zip_NEEDBITS(d);
                zip_copy_leng=e.n+zip_GETBITS(d);
                zip_DUMPBITS(d);
                zip_NEEDBITS(zip_bd);
                e=zip_td.list[zip_GETBITS(zip_bd)];
                for(d=e.e;d>16;){
                    if(d==99)return-1;
                    zip_DUMPBITS(e.b);
                    d-=16;
                    zip_NEEDBITS(d);
                    e=e.t[zip_GETBITS(d)];
                    d=e.e
                }
                zip_DUMPBITS(e.b);
                zip_NEEDBITS(d);
                zip_copy_dist=zip_wp-e.n-zip_GETBITS(d);
                for(zip_DUMPBITS(d);zip_copy_leng>0&&f<c;){
                    zip_copy_leng--;
                    zip_copy_dist&=zip_WSIZE-1;
                    zip_wp&=zip_WSIZE-1;
                    a[b+f++]=zip_slide[zip_wp++]=zip_slide[zip_copy_dist++]
                }
            }
            if(f==c)return c
        }
        zip_method=-1;
        return f
    }
    function zip_inflate_stored(a,b,c){
        var d;
        d=zip_bit_len&7;
        zip_DUMPBITS(d);
        zip_NEEDBITS(16);
        d=zip_GETBITS(16);
        zip_DUMPBITS(16);
        zip_NEEDBITS(16);
        if(d!=(~zip_bit_buf&65535))return-1;
        zip_DUMPBITS(16);
        zip_copy_leng=d;
        for(d=0;zip_copy_leng>0&&d<c;){
            zip_copy_leng--;
            zip_wp&=zip_WSIZE-1;
            zip_NEEDBITS(8);
            a[b+d++]=zip_slide[zip_wp++]=zip_GETBITS(8);
            zip_DUMPBITS(8)
        }
        if(zip_copy_leng==0)zip_method=-1;
        return d
    }
    function zip_inflate_fixed(a,b,c){
        if(zip_fixed_tl==null){
            var d,e=new Array(288);
            for(d=0;d<144;d++)e[d]=8;
            for(;d<256;d++)e[d]=9;
            for(;d<280;d++)e[d]=7;
            for(;d<288;d++)e[d]=8;
            zip_fixed_bl=7;
            d=new zip_HuftBuild(e,288,257,zip_cplens,zip_cplext,zip_fixed_bl);
            if(d.status!=0){
                alert("HufBuild error: "+d.status);
                return-1
            }
            zip_fixed_tl=d.root;
            zip_fixed_bl=d.m;
            for(d=0;d<30;d++)e[d]=5;
            zip_fixed_bd=5;
            d=new zip_HuftBuild(e,30,0,zip_cpdist,zip_cpdext,zip_fixed_bd);
            if(d.status>1){
                zip_fixed_tl=null;
                alert("HufBuild error: "+
                    d.status);
                return-1
            }
            zip_fixed_td=d.root;
            zip_fixed_bd=d.m
        }
        zip_tl=zip_fixed_tl;
        zip_td=zip_fixed_td;
        zip_bl=zip_fixed_bl;
        zip_bd=zip_fixed_bd;
        return zip_inflate_codes(a,b,c)
    }
    function zip_inflate_dynamic(a,b,c){
        var d,e,f,g,j,h,m,k=new Array(316);
        for(d=0;d<k.length;d++)k[d]=0;
        zip_NEEDBITS(5);
        h=257+zip_GETBITS(5);
        zip_DUMPBITS(5);
        zip_NEEDBITS(5);
        m=1+zip_GETBITS(5);
        zip_DUMPBITS(5);
        zip_NEEDBITS(4);
        d=4+zip_GETBITS(4);
        zip_DUMPBITS(4);
        if(h>286||m>30)return-1;
        for(e=0;e<d;e++){
            zip_NEEDBITS(3);
            k[zip_border[e]]=zip_GETBITS(3);
            zip_DUMPBITS(3)
        }
        for(;e<19;e++)k[zip_border[e]]=0;
        zip_bl=7;
        e=new zip_HuftBuild(k,19,19,null,null,zip_bl);
        if(e.status!=0)return-1;
        zip_tl=e.root;
        zip_bl=e.m;
        g=h+
        m;
        for(d=f=0;d<g;){
            zip_NEEDBITS(zip_bl);
            j=zip_tl.list[zip_GETBITS(zip_bl)];
            e=j.b;
            zip_DUMPBITS(e);
            e=j.n;
            if(e<16)k[d++]=f=e;
            else if(e==16){
                zip_NEEDBITS(2);
                e=3+zip_GETBITS(2);
                zip_DUMPBITS(2);
                if(d+e>g)return-1;
                for(;e-- >0;)k[d++]=f
            }else{
                if(e==17){
                    zip_NEEDBITS(3);
                    e=3+zip_GETBITS(3);
                    zip_DUMPBITS(3)
                }else{
                    zip_NEEDBITS(7);
                    e=11+zip_GETBITS(7);
                    zip_DUMPBITS(7)
                }
                if(d+e>g)return-1;
                for(;e-- >0;)k[d++]=0;
                f=0
            }
        }
        zip_bl=zip_lbits;
        e=new zip_HuftBuild(k,h,257,zip_cplens,zip_cplext,zip_bl);
        if(zip_bl==0)e.status=1;
        if(e.status!=
            0)return-1;
        zip_tl=e.root;
        zip_bl=e.m;
        for(d=0;d<m;d++)k[d]=k[d+h];
        zip_bd=zip_dbits;
        e=new zip_HuftBuild(k,m,0,zip_cpdist,zip_cpdext,zip_bd);
        zip_td=e.root;
        zip_bd=e.m;
        if(zip_bd==0&&h>257)return-1;
        if(e.status!=0)return-1;
        return zip_inflate_codes(a,b,c)
    }
    function zip_inflate_start(){
        if(zip_slide==null)zip_slide=new Array(2*zip_WSIZE);
        zip_bit_len=zip_bit_buf=zip_wp=0;
        zip_method=-1;
        zip_eof=false;
        zip_copy_leng=zip_copy_dist=0;
        zip_tl=null
    }
    function zip_inflate_internal(a,b,c){
        var d,e;
        for(d=0;d<c;){
            if(zip_eof&&zip_method==-1)return d;
            if(zip_copy_leng>0){
                if(zip_method!=zip_STORED_BLOCK)for(;zip_copy_leng>0&&d<c;){
                    zip_copy_leng--;
                    zip_copy_dist&=zip_WSIZE-1;
                    zip_wp&=zip_WSIZE-1;
                    a[b+d++]=zip_slide[zip_wp++]=zip_slide[zip_copy_dist++]
                }else{
                    for(;zip_copy_leng>0&&d<c;){
                        zip_copy_leng--;
                        zip_wp&=zip_WSIZE-1;
                        zip_NEEDBITS(8);
                        a[b+d++]=zip_slide[zip_wp++]=zip_GETBITS(8);
                        zip_DUMPBITS(8)
                    }
                    if(zip_copy_leng==0)zip_method=-1
                }
                if(d==c)return d
            }
            if(zip_method==
                -1){
                if(zip_eof)break;
                zip_NEEDBITS(1);
                if(zip_GETBITS(1)!=0)zip_eof=true;
                zip_DUMPBITS(1);
                zip_NEEDBITS(2);
                zip_method=zip_GETBITS(2);
                zip_DUMPBITS(2);
                zip_tl=null;
                zip_copy_leng=0
            }
            switch(zip_method){
                case 0:
                    e=zip_inflate_stored(a,b+d,c-d);
                    break;
                case 1:
                    e=zip_tl!=null?zip_inflate_codes(a,b+d,c-d):zip_inflate_fixed(a,b+d,c-d);
                    break;
                case 2:
                    e=zip_tl!=null?zip_inflate_codes(a,b+d,c-d):zip_inflate_dynamic(a,b+d,c-d);
                    break;
                default:
                    e=-1;
                    break
            }
            if(e==-1){
                if(zip_eof)return 0;
                return-1
            }
            d+=e
        }
        return d
    }
    function zip_inflate(a){
        var b,c,d;
        zip_inflate_start();
        zip_inflate_data=a;
        zip_inflate_pos=0;
        b=new Array(1024);
        for(a="";(c=zip_inflate_internal(b,0,b.length))>0;)for(d=0;d<c;d++)a+=String.fromCharCode(b[d]);
        zip_inflate_data=null;
        return a
    }
    fljs.swf.tag.DefineBitsJpeg3=function(){};

    fljs.inherits(fljs.swf.tag.DefineBitsJpeg3,fljs.swf.tag.DefineBitsJPEG2);
    fljs.addMethods(fljs.swf.tag.DefineBitsJpeg3,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.CharacterId=a.readUI16();
            var d=fljs.Player.getInstance();
            d.mainTimeline&&d.mainTimeline.resources.addToFrame(this.CharacterId,d.mainTimeline.framesLoaded_);
            if(d.loadExtResources){
                a.skipBytes(b.TagLength-2);
                d="img/"+d.name+"-"+this.CharacterId+".png";
                fljs.console("image").info(d);
                c=new Image;
                c.addEventListener("load",fljs.bind(this.onLoadImage,this,a,b,c),false);
                fljs.Player.getInstance().delayFrame++;
                c.src=
                d
            }else{
                d=this.AlphaDataOffset=a.readUI32();
                (new fljs.swf.build.JpegBuilder).parseJpeg(this,a,d,true);
                d=b.TagLength-(a.stream.byteIndex-c);
                c=a.stream.byteIndex;
                var e=new Image;
                e.width=this.Width;
                e.height=this.Height;
                e.addEventListener("load",fljs.bind(this.onLoadData,this,a,b,e,c,d));
                fljs.Player.getInstance().delayFrame++;
                e.src=this.DataUri
            }
        },
        onLoadData:function(a,b,c,d,e){
            a=a.stream.buffer.substr(d+2,e-2);
            a=zip_inflate(a);
            a=new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
            b=document.createElement("canvas");
            b.width=this.Width;
            b.height=this.Height;
            d=b.getContext("2d");
            d.drawImage(c,0,0);
            c=d.getImageData(0,0,this.Width,this.Height);
            e=c.data;
            for(var f=0;f<this.Width*this.Height*4;){
                e[f+3]=a.readUI8();
                f+=4
            }
            d.putImageData(c,0,0);
            this.DataUri=b.toDataURL();
            c=fljs.Player.getInstance();
            if(c.dictionary){
                this.evaluate(c);
                c.delayFrame--;
                c.mainTimeline.resources.remove(this.CharacterId)
            }else this.callback(this);
            return true
        },
        onLoadImage:function(a,b,c){
            this.Width=c.width;
            this.Height=c.height;
            a=document.createElement("canvas");
            a.width=this.Width;
            a.height=this.Height;
            a.getContext("2d").drawImage(c,0,0);
            this.DataUri=a.toDataURL();
            c=fljs.Player.getInstance();
            this.evaluate(c);
            c.setTimeout(fljs.bind(this.afterLoadImage,this));
            return true
        },
        afterLoadImage:function(){
            c=fljs.Player.getInstance();
            c.delayFrame--;
            c.mainTimeline.resources.remove(this.CharacterId)
        },
        evaluate:function(a){
            this.defId="image"+this.CharacterId;
            a.addDefinition(this,this.CharacterId);
            a=new fljs.swf.def.BitmapDef;
            a.setCharaId(this.defId);
            a.element.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.DataUri],[null,"x",0],[null,"y",0],[null,"width",this.Width],[null,
                "height",this.Height]]);
            a.define();
            this.def=a
        }
    });
    fljs.swf.tag.ExportAssets=function(){};

    fljs.addMethods(fljs.swf.tag.ExportAssets,{
        read:function(a){
            this.Count=a.readUI16();
            this.Tags=[];
            this.Names=[];
            for(var b=0;b<this.Count;b++){
                this.Tags[b]=a.readUI16();
                this.Names[b]=a.readString()
            }
        },
        evaluate:function(a){
            for(var b=0;b<this.Tags.length;b++)a.assets[this.Names[b]]=this.Tags[b]
        }
    });
    fljs.swf.tag.PlaceObject3=function(){};

    fljs.inherits(fljs.swf.tag.PlaceObject3,fljs.swf.tag.PlaceObject2);
    fljs.addMethods(fljs.swf.tag.PlaceObject3,{
        read:function(a){
            this.startByteIndex=a.stream.byteIndex;
            this.PlaceFlagHasClipActions=a.readUB(1);
            this.PlaceFlagHasClipDepth=a.readUB(1);
            this.PlaceFlagHasName=a.readUB(1);
            this.PlaceFlagHasRatio=a.readUB(1);
            this.PlaceFlagHasColorTransform=a.readUB(1);
            this.PlaceFlagHasMatrix=a.readUB(1);
            this.PlaceFlagHasCharacter=a.readUB(1);
            this.PlaceFlagMove=a.readUB(1);
            a.readUB(3);
            this.PlaceFlagHasImage=a.readUB(1);
            this.PlaceFlagHasClassName=a.readUB(1);
            this.PlaceFlagHasCacheAsBitmap=
            a.readUB(1);
            this.PlaceFlagHasBlendMode=a.readUB(1);
            this.PlaceFlagHasFilterList=a.readUB(1);
            this.Depth=a.readUI16();
            if(this.PlaceFlagHasClassName||this.PlaceFlagHasImage&&this.PlaceFlagHasCharacter)this.ClassName=a.readString();
            if(this.PlaceFlagHasCharacter)this.CharacterId=a.readUI16();
            if(this.PlaceFlagHasMatrix)this.Matrix=a.readMATRIX();
            if(this.PlaceFlagHasColorTransform)this.ColorTransform=a.readCXFORMWITHALPHA();
            if(this.PlaceFlagHasRatio)this.Ratio=a.readUI16();
            if(this.PlaceFlagHasName)this.Name=
                a.readSTRING();
            if(this.PlaceFlagHasClipDepth)this.ClipDepth=a.readUI16();
            if(this.PlaceFlagHasFilterList)this.SurfaceFilterList=a.readFilterList();
            if(this.PlaceFlagHasBlendMode)this.BlendMode=a.readUI8();
            if(this.PlaceFlagHasClipActions)this.ClipActions=a.readCLIPACTIONS()
        }
    });
    fljs.swf.tag.DefineShape4=function(){};

    fljs.inherits(fljs.swf.tag.DefineShape4,fljs.swf.tag.DefineShape);
    fljs.addMethods(fljs.swf.tag.DefineShape4,{
        read:function(a){
            a.beginContext(fljs.swf.tag.DefineShape4);
            this.ShapeId=a.readUI16();
            this.ShapeBounds=a.readRECT();
            this.EdgeBounds=a.readRECT();
            a.readUB(6);
            this.UsesNonScalingStrokes=a.readUB(1);
            this.UsesScalingStrokes=a.readUB(1);
            this.Shapes=a.readSHAPEWITHSTYLE();
            a.endContext()
        }
    });
    fljs.swf.tag.DefineBitsLossless2=function(){};
    fljs.addMethods(fljs.swf.tag.DefineBitsLossless2,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.CharacterId=a.readUI16();
            this.BitmapFormat=a.readUI8();
            this.BitmapWidth=a.readUI16();
            this.BitmapHeight=a.readUI16();
            if(this.BitmapFormat==3)this.BitmapColorTableSize=a.readUI8();
            a=a.stream.buffer.substr(a.stream.byteIndex+2,b.TagLength-(a.stream.byteIndex-c)-2);
            a=zip_inflate(a);
            a=new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
            b=document.createElement("canvas");
            b.width=this.BitmapWidth;
            b.height=
            this.BitmapHeight;
            c=b.getContext("2d");
            var d=c.createImageData(this.BitmapWidth,this.BitmapHeight),e=d.data;
            if(this.BitmapFormat==3){
                this.ColorTableRgb=[];
                for(var f=0;f<this.BitmapColorTableSize+1;f++)this.ColorTableRgb[f]=a.readRGBA();
                var g=Math.floor((this.BitmapWidth+3)/4)*4;
                for(var j=f=0;f<this.BitmapWidth*this.BitmapHeight*4;){
                    var h=this.ColorTableRgb[a.readUI8()];
                    e[f++]=h.Red;
                    e[f++]=h.Green;
                    e[f++]=h.Blue;
                    e[f++]=h.Alpha;
                    j++;
                    if(j==this.BitmapWidth){
                        a.skipBytes(g-this.BitmapWidth);
                        j=0
                    }
                }
            }else for(f=
                0;f<this.BitmapWidth*this.BitmapHeight*4;){
                h=a.readARGB();
                e[f++]=h.Red;
                e[f++]=h.Green;
                e[f++]=h.Blue;
                e[f++]=h.Alpha
            }
            c.putImageData(d,0,0);
            this.DataUri=b.toDataURL()
        },
        evaluate:function(a){
            a.addDefinition(this,this.CharacterId);
            this.Width=this.BitmapWidth;
            this.Height=this.BitmapHeight;
            this.defId="image"+this.CharacterId;
            a=new fljs.swf.def.BitmapDef;
            a.setCharaId(this.defId);
            a.element.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.DataUri],[null,"x",0],[null,"y",0],[null,"width",this.Width],[null,"height",
                this.Height]]);
            a.define();
            this.def=a
        }
    });
    fljs.swf.tag.DefineBitsLossless=function(){};
    fljs.addMethods(fljs.swf.tag.DefineBitsLossless,{
        read:function(a,b){
            var c=a.stream.byteIndex;
            this.CharacterId=a.readUI16();
            this.BitmapFormat=a.readUI8();
            this.BitmapWidth=a.readUI16();
            this.BitmapHeight=a.readUI16();
            if(this.BitmapFormat==3)this.BitmapColorTableSize=a.readUI8();
            a=a.stream.buffer.substr(a.stream.byteIndex+2,b.TagLength-(a.stream.byteIndex-c)-2);
            a=zip_inflate(a);
            a=new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
            b=document.createElement("canvas");
            b.width=this.BitmapWidth;
            b.height=
            this.BitmapHeight;
            c=b.getContext("2d");
            var d=c.createImageData(this.BitmapWidth,this.BitmapHeight),e=d.data;
            if(this.BitmapFormat==3){
                this.ColorTableRgb=[];
                for(var f=0;f<this.BitmapColorTableSize+1;f++)this.ColorTableRgb[f]=a.readRGB();
                var g=Math.floor((this.BitmapWidth+3)/4)*4;
                for(var j=f=0;f<this.BitmapWidth*this.BitmapHeight*4;){
                    var h=this.ColorTableRgb[a.readUI8()];
                    e[f++]=h.Red;
                    e[f++]=h.Green;
                    e[f++]=h.Blue;
                    e[f++]=255;
                    j++;
                    if(j==this.BitmapWidth){
                        a.skipBytes(g-this.BitmapWidth);
                        j=0
                    }
                }
            }else if(this.BitmapFormat==
                4){
                g=Math.floor((this.BitmapWidth*2+3)/4)*4;
                for(j=f=0;f<this.BitmapWidth*this.BitmapHeight*4;){
                    h=a.readPix15();
                    e[f++]=h.Red;
                    e[f++]=h.Green;
                    e[f++]=h.Blue;
                    e[f++]=255;
                    j++;
                    if(j==this.BitmapWidth){
                        a.skipBytes(g-this.BitmapWidth);
                        j=0
                    }
                }
            }else if(this.BitmapFormat==5)for(f=0;f<this.BitmapWidth*this.BitmapHeight*4;){
                h=a.readARGB();
                e[f++]=h.Red;
                e[f++]=h.Green;
                e[f++]=h.Blue;
                e[f++]=255
            }
            c.putImageData(d,0,0);
            this.DataUri=b.toDataURL()
        },
        evaluate:function(a){
            a.addDefinition(this,this.CharacterId);
            this.Width=this.BitmapWidth;
            this.Height=this.BitmapHeight;
            this.defId="image"+this.CharacterId;
            a=new fljs.swf.def.BitmapDef;
            a.setCharaId(this.defId);
            a.element.sets([[fljs.dom.Namespace.Xlink,"xlink:href",this.DataUri],[null,"x",0],[null,"y",0],[null,"width",this.Width],[null,"height",this.Height]]);
            a.define();
            this.def=a
        }
    });
    fljs.swf.tag.DefineFont3=function(){};
    fljs.addMethods(fljs.swf.tag.DefineFont3,{
        read:function(a){
            var b;
            this.FontId=a.readUI16();
            this.FontFlagsHasLayout=a.readUB(1);
            this.FontFlagsShiftJIS=a.readUB(1);
            this.FontFlagsSmallText=a.readUB(1);
            this.FontFlagsANSI=a.readUB(1);
            this.FontFlagsWideOffsets=a.readUB(1);
            this.FontFlagsWideCodes=a.readUB(1);
            a.FontFlagsWideCodes=this.FontFlagsWideCodes;
            this.FontFlagsItalic=a.readUB(1);
            this.FontFlagsBold=a.readUB(1);
            this.LanguageCode=a.readLangCode();
            this.FontNameLen=a.readUI8();
            var c=[];
            for(b=0;b<this.FontNameLen;b++)c.push(String.fromCharCode(a.readUI8()));
            this.FontName=c.join("");
            this.NumGlyphs=a.readUI16();
            this.OffsetTable=[];
            if(this.FontFlagsWideOffsets){
                for(b=0;b<this.NumGlyphs;b++)this.OffsetTable.push(a.readUI32());
                this.CodeTableOffset=a.readUI32()
            }else{
                for(b=0;b<this.NumGlyphs;b++)this.OffsetTable.push(a.readUI16());
                this.CodeTableOffset=a.readUI16()
            }
            this.GlyphShapeTable=[];
            for(b=0;b<this.NumGlyphs;b++)this.GlyphShapeTable.push(a.readShape());
            this.CodeTable=[];
            for(b=0;b<this.NumGlyphs;b++)this.CodeTable.push(a.readUI16());
            if(this.FontFlagsHasLayout){
                this.FontAscent=
                a.readSI16();
                this.FontDescent=a.readSI16();
                this.FontLeading=a.readSI16();
                this.FontAdvanceTable=[];
                for(b=0;b<this.NumGlyphs;b++)this.FontAdvanceTable.push(a.readSI16());
                this.FontBoundsTable=[];
                for(b=0;b<this.NumGlyphs;b++){
                    this.FontBoundsTable.push(a.readRECT());
                    a.stream.align()
                }
                this.KerningCount=a.readUI16();
                this.FontKerningTable=[];
                for(b=0;b<this.KerningCount;b++)this.FontKerningTable.push(a.readKerningRecord())
            }
        },
        evaluate:function(a){
            var b=(new fljs.swf.build.FontBuilder(this,a)).buildDef();
            a.defineFont2(this.FontId,
                this.GlyphShapeTable.length,b,this.FontName,this.FontFlagsBold,this.FontFlagsItalic,this.CodeTable,this)
        }
    });
    fljs.swf.tag.DoInitAction=function(){};

    fljs.addMethods(fljs.swf.tag.DoInitAction,{
        read:function(a,b){
            this.SpriteId=a.readUI16();
            this.Actions=a.readActionRecords(b.TagLength-2-1);
            this.ActionEndFlag=a.readUI8()
        },
        evaluate:function(a){
            if(!this.processed){
                this.processed=true;
                a.doInitAction(this)
            }
        }
    });
    fljs.swf.tag.tagMap={
        0:fljs.swf.tag.End,
        1:fljs.swf.tag.ShowFrame,
        2:fljs.swf.tag.DefineShape,
        4:fljs.swf.tag.PlaceObject,
        5:fljs.swf.tag.RemoveObject,
        6:fljs.swf.tag.DefineBits,
        8:fljs.swf.tag.JpegTables,
        9:fljs.swf.tag.SetBackgroundColor,
        10:fljs.swf.tag.DefineFont,
        11:fljs.swf.tag.DefineText,
        12:fljs.swf.tag.DoAction,
        13:fljs.swf.tag.DefineFontInfo,
        14:fljs.swf.tag.DefineSound,
        15:fljs.swf.tag.StartSound,
        18:fljs.swf.tag.SoundStreamHead,
        19:fljs.swf.tag.SoundStreamBlock,
        20:fljs.swf.tag.DefineBitsLossless,
        21:fljs.swf.tag.DefineBitsJPEG2,
        22:fljs.swf.tag.DefineShape2,
        24:fljs.swf.tag.Protect,
        26:fljs.swf.tag.PlaceObject2,
        28:fljs.swf.tag.RemoveObject2,
        32:fljs.swf.tag.DefineShape3,
        33:fljs.swf.tag.DefineText2,
        34:fljs.swf.tag.DefineButton2,
        35:fljs.swf.tag.DefineBitsJpeg3,
        36:fljs.swf.tag.DefineBitsLossless2,
        37:fljs.swf.tag.DefineEditText,
        39:fljs.swf.tag.DefineSprite,
        43:fljs.swf.tag.FrameLabel,
        45:fljs.swf.tag.SoundStreamHead2,
        48:fljs.swf.tag.DefineFont2,
        56:fljs.swf.tag.ExportAssets,
        59:fljs.swf.tag.DoInitAction,
        62:fljs.swf.tag.DefineFontInfo2,
        70:fljs.swf.tag.PlaceObject3,
        75:fljs.swf.tag.DefineFont3,
        82:fljs.swf.tag.DoAbc,
        83:fljs.swf.tag.DefineShape4
    };

    fljs.swf.SwfStream=function(a){
        this.stream=a;
        this.twipsPerPixel=20;
        this.logger=fljs.console("parse")
    };
    fljs.addMethods(fljs.swf.SwfStream,{
        _mark:function(a,b){
            this.debug&&this.logger.info(a+": "+b)
        },
        hasMore:function(){
            return this.stream.hasMore()
        },
        skipBytes:function(a){
            this.stream.skipBytes(a)
        },
        readBytes:function(a){
            return this.stream.readBytes(a)
        },
        readUI8:function(){
            return this.stream.nextUByte()
        },
        readUI16:function(){
            var a=this.stream.nextUShort();
            this._mark("readUI16",a);
            return a
        },
        readUI32:function(){
            return this.stream.nextULong()
        },
        readSI8:function(){
            return this.stream.nextSByte()
        },
        readSI16:function(){
            return this.stream.nextSShort()
        },
        readSI32:function(){
            return this.stream.nextSLong()
        },
        readUB:function(a){
            return this.stream.nextUBits(a)
        },
        readSB:function(a){
            return this.stream.nextSBits(a)
        },
        readFB:function(a){
            return this.stream.nextFBits(a)
        },
        readFIXED:function(){
            return this.readFixed()
        },
        readFixed:function(){
            return this.stream.nextFLong()
        },
        readFIXED8:function(){
            return this.readFixed8()
        },
        readFixed8:function(){
            return this.stream.nextFShort()
        },
        readFLOAT16:function(){
            return this.stream.nextHalfFloat()
        },
        readFLOAT:function(){
            return this.readFloat()
        },
        readFloat:function(){
            return this.stream.nextSingleFloat()
        },
        readFloats:function(a){
            for(var b=[],c=0;c<a;c++)b.push(this.readFloat());
            return b
        },
        readDOUBLE:function(){
            return this.stream.nextDoubleFloat()
        },
        readDouble:function(){
            return this.stream.nextDoubleFloat()
        },
        readEncodedU32:function(){
            return this.stream.nextEncodedULong()
        },
        readString:function(){
            return this.stream.nextString()
        },
        readSTRING:function(){
            return this.stream.nextString()
        },
        readSwfHeader:function(){
            var a=String.fromCharCode(this.readUI8(),
                this.readUI8(),this.readUI8()),b=this.readUI8(),c=this.readUI32();
            if(a=="CWS"){
                var d=fljs.console("rar");
                d.info("deflating...");
                var e=this.stream.buffer.substr(this.stream.byteIndex+2);
                d.info("unzipping...");
                e=zip_inflate(e);
                d.info("streaming...");
                this.stream=new fljs.swf.StringStream(e);
                d.info("done");
                d.info(this.stream.buffer.length)
            }
            d=this.readRECT();
            e=this.readFIXED8();
            var f=this.readUI16();
            return this.header={
                Signature:a,
                Version:b,
                FileLength:c,
                FrameSize:d,
                FrameRate:e,
                FrameCount:f
            }
        },
        readLANGCODE:function(){
            return{
                LanguageCode:this.readUI8()
            }
        },
        readRecordHeader:function(){
            var a=this.readUI16(),b=a&63;
            a=a>>6&1023;
            if(b==63)b=this.readSI32();
            return{
                TagType:a,
                TagLength:b,
                byteIndex:this.stream.byteIndex
            }
        },
        readMATRIX:function(){
            return this.readMatrix()
        },
        readCXFORM:function(){
            var a=this.readUB(1),b=this.readUB(1),c=this.readUB(4),d=1,e=1,f=1;
            if(b){
                d=this.readSB(c)/256;
                e=this.readSB(c)/256;
                f=this.readSB(c)/256
            }
            var g=0,j=0,h=0;
            if(a){
                g=this.readSB(c);
                j=this.readSB(c);
                h=this.readSB(c)
            }
            return{
                HasAddTerms:a,
                HasMultTerms:b,
                Nbits:c,
                RedMultTerm:d,
                GreenMultTerm:e,
                BlueMultTerm:f,
                RedAddTerm:g,
                GreenAddTerm:j,
                BlueAddTerm:h,
                AlphaMultTerm:1,
                AlphaAddTerm:0
            }
        },
        readCXFORMWITHALPHA:function(){
            this.stream.align();
            var a=this.readUB(1),b=this.readUB(1),c=this.readUB(4),d=1,e=1,f=1,g=1;
            if(b){
                d=this.readSB(c)/256;
                e=this.readSB(c)/256;
                f=this.readSB(c)/256;
                g=this.readSB(c)/256
            }
            var j=0,h=0,m=0,k=0;
            if(a){
                j=this.readSB(c);
                h=this.readSB(c);
                m=this.readSB(c);
                k=this.readSB(c)
            }
            return{
                HasAddTerms:a,
                HasMultTerms:b,
                Nbits:c,
                RedMultTerm:d,
                GreenMultTerm:e,
                BlueMultTerm:f,
                AlphaMultTerm:g,
                RedAddTerm:j,
                GreenAddTerm:h,
                BlueAddTerm:m,
                AlphaAddTerm:k
            }
        },
        readFILTERLIST:function(){},
        readCLIPACTIONS:function(){
            this.readUI16();
            var a=this.readClipEventFlags(),b=this.readClipActionRecords();
            return{
                AllEventFlags:a,
                ClipActionRecords:b
            }
        },
        readClipActionRecords:function(){
            for(var a=[],b;b=this.readClipActionRecord();)a.push(b);
            return a
        },
        readClipActionRecord:function(){
            var a=this.readClipEventFlags();
            if(!a)return null;
            var b=this.readUI32(),c=b,d;
            if(a&fljs.swf.ClipEventFlags.ClipEventKeyPress){
                d=this.readUI8();
                c-=1
            }
            c=this.readActionRecords(c);
            return{
                EventFlags:a,
                ActionRecordSize:b,
                KeyCode:d,
                Actions:c
            }
        },
        readActionRecords:function(a){
            for(var b=this.stream.byteIndex,c=[];this.stream.byteIndex!=b+a;)c.push(this.readActionRecord());
            if(c.length){
                a=c[c.length-1];
                a.ActionCode!=0&&c.push({
                    code:"0x0",
                    address:a.address+a.Length,
                    ActionCode:0,
                    Action:"End"
                })
            }
            return c
        },
        readActionRecord:function(){
            var a=this.stream.byteIndex,b=this.readUI8();
            a={
                code:"0x"+b.toString(16),
                address:a,
                ActionCode:b
            };

            if(b>=128)a.Length=this.readUI16();
            switch(b){
                case 129:
                    a.Action="ActionGotoFrame";
                    a.Frame=this.readUI16();
                    break;
                case 131:
                    a.Action="ActionGetUrl";
                    a.UrlString=this.readString();
                    a.TargetString=this.readString();
                    break;
                case 4:
                    a.Action="ActionNextFrame";
                    break;
                case 5:
                    a.Action="ActionPrevFrame";
                    break;
                case 6:
                    a.Action="ActionPlay";
                    break;
                case 7:
                    a.Action="ActionStop";
                    break;
                case 8:
                    a.Action="ActionToggleQuality";
                    break;
                case 9:
                    a.Action="ActionStopSounds";
                    break;
                case 138:
                    a.Action="ActionWaitForFrame";
                    a.Frame=this.readUI16();
                    a.SkipCount=this.readUI8();
                    break;
                case 139:
                    a.Action="ActionSetTarget";
                    a.TargetName=this.readString();
                    break;
                case 8:
                    a.Action="ActionToggleQuality";
                    break;
                case 139:
                    a.Action="ActionSetTarget";
                    a.TargetName=this.readString();
                    break;
                case 140:
                    a.Action="ActionGotoLabel";
                    a.Label=this.readString();
                    break;
                case 150:
                    this.readActionPush(a);
                    break;
                case 153:
                    a.Action="ActionJump";
                    a.BranchOffset=this.readSI16();
                    break;
                case 157:
                    a.Action="ActionIf";
                    a.BranchOffset=this.readSI16();
                    break;
                case 154:
                    a.Action="ActionGetUrl2";
                    a.SendVarsMethod=this.readUB(2);
                    a.Reserved=this.readUB(4);
                    a.LoadTargetFlag=this.readUB(1);
                    a.LoadVariablesFlag=this.readUB(1);
                    break;
                case 159:
                    this.readActionGotoFrame2(a);
                    break;
                case 141:
                    a.Action="ActionWaitForFrame2";
                    a.SkipCount=this.readUI8();
                    break;
                case 136:
                    this.readActionConstantPool(a);
                    break;
                case 155:
                    this.readActionDefineFunction(a);
                    break;
                case 148:
                    this.readActionWith(a);
                    break;
                case 135:
                    a.Action="ActionStoreRegister";
                    a.RegisterNumber=this.readUI8();
                    break;
                case 142:
                    this.readActionDefineFunction2(a);
                    break;
                case 143:
                    this.readActionTry(a);
                    break;
                default:
                    a.Action="Unknown";
                    break
            }
            return a
        },
        readActionPush:function(a){
            for(var b=a.Length,c=this.stream.byteIndex,d=[];this.stream.byteIndex<c+b;){
                var e=this.readUI8(),f;
                switch(e){
                    case 0:
                        f=this.readString();
                        break;
                    case 1:
                        f=this.readFloat();
                        break;
                    case 4:case 5:case 8:
                        f=this.readUI8();
                        break;
                    case 6:
                        f=this.readDouble();
                        break;
                    case 7:
                        f=this.readUI32();
                        break;
                    case 9:
                        f=this.readUI16();
                        break
                }
                d.push({
                    Type:e,
                    Value:f
                })
            }
            a.Action="ActionPush";
            a.Values=d
        },
        readActionGotoFrame2:function(a){
            this.readUB(6);
            var b=
            this.readUB(1),c=this.readUB(1),d;
            if(b)d=this.readUI16();
            a.Action="ActionGotoFrame2";
            a.SceneBiasFlag=b;
            a.PlayFlag=c;
            a.SceneBias=d
        },
        readActionConstantPool:function(a){
            for(var b=a.Length,c=this.stream.byteIndex,d=[],e=0;this.stream.byteIndex<c+b;){
                var f=this.readString();
                e>0&&d.push(f);
                e++
            }
            a.Action="ActionConstantPool";
            a.Count=b;
            a.ConstantPool=d
        },
        readActionDefineFunction:function(a){
            for(var b=this.readString(),c=this.readUI16(),d=[],e=0;e<c;e++)d.push(this.readString());
            e=this.readUI16();
            var f=this.readActionRecords(e);
            a.Action="ActionDefineFunction";
            a.FunctionName=b;
            a.NumParams=c;
            a.Params=d;
            a.CodeSize=e;
            a.Code=f
        },
        readActionWith:function(a){
            var b=this.readUI16(),c=this.readActionRecords(b);
            a.Action="ActionWith";
            a.Size=b;
            a.Code=c
        },
        readActionDefineFunction2:function(a){
            a.FunctionName=this.readString();
            a.NumParams=this.readUI16();
            a.RegisterCount=this.readUI8();
            a.PreloadParentFlag=this.readUB(1);
            a.PreloadRootFlag=this.readUB(1);
            a.SupressSuperFlag=this.readUB(1);
            a.PreloadSuperFlag=this.readUB(1);
            a.SupressArgumentsFlag=
            this.readUB(1);
            a.PreloadArgumentsFlag=this.readUB(1);
            a.SupressThisFlag=this.readUB(1);
            a.PreloadThisFlag=this.readUB(1);
            this.readUB(7);
            a.PreloadGlobalFlag=this.readUB(1);
            a.Parameters=[];
            for(var b=0;b<a.NumParams;b++)a.Parameters.push(this.readRegisterParam());
            a.CodeSize=this.readUI16();
            b=this.readActionRecords(a.CodeSize);
            a.Action="ActionDefineFunction2";
            a.Code=b
        },
        readRegisterParam:function(){
            return{
                Register:this.readUI8(),
                ParamName:this.readString()
            }
        },
        readActionTry:function(a){
            this.readUB(5);
            a.CatchInRegisterFlag=
            this.readUB(1);
            a.FinallyBlockFlag=this.readUB(1);
            a.CatchBlockFlag=this.readUB(1);
            a.TrySize=this.readUI16();
            a.CatchSize=this.readUI16();
            a.FinallySize=this.readUI16();
            if(a.CatchInRegisterFlag)a.CatchRegister=this.readUI8();else a.CatchName=this.readString();
            this.skipBytes(a.TrySize);
            this.skipBytes(a.CatchSize);
            this.skipBytes(a.FinallySize)
        },
        readClipEventFlags:function(){
            return this.header.Version<=5?this.readUB(16)<<16:this.readUB(32)
        },
        readRGB:function(){
            return{
                Red:this.readUI8(),
                Green:this.readUI8(),
                Blue:this.readUI8()
            }
        },
        readRGBA:function(){
            return{
                Red:this.readUI8(),
                Green:this.readUI8(),
                Blue:this.readUI8(),
                Alpha:this.readUI8()
            }
        },
        readARGB:function(){
            return{
                Alpha:this.readUI8(),
                Red:this.readUI8(),
                Green:this.readUI8(),
                Blue:this.readUI8()
            }
        },
        readRect:function(){
            this.stream.align();
            var a=this.readUB(5);
            return{
                Nbits:a,
                Xmin:this.readSB(a)/this.twipsPerPixel,
                Xmax:this.readSB(a)/this.twipsPerPixel,
                Ymin:this.readSB(a)/this.twipsPerPixel,
                Ymax:this.readSB(a)/this.twipsPerPixel
            }
        },
        readRECT:function(){
            return this.readRect()
        },
        readShapeWithStyle:function(){
            this.stream.align();
            var a=this.readFILLSTYLEARRAY(),b=this.readLINESTYLEARRAY();
            this.stream.align();
            var c=this.readUB(4),d=this.readUB(4);
            this.NumFillBits=c;
            this.NumLineBits=d;
            var e=this.readSHAPERECORDS();
            return{
                FillStyles:a,
                LineStyles:b,
                NumFillBits:c,
                NumLineBits:d,
                ShapeRecords:e
            }
        },
        readSHAPEWITHSTYLE:function(){
            return this.readShapeWithStyle()
        },
        readSHAPERECORDS:function(){
            for(var a=[],b=this.readSHAPERECORD();!b.isEndOfShape;){
                a.push(b);
                b=this.readSHAPERECORD()
            }
            this.stream.align();
            return a
        },
        readSHAPERECORD:function(){
            return this.readUB(1)==0?this.readNonEdgeSHAPERECORD():this.readEdgeSHAPERECORD()
        },
        readNonEdgeSHAPERECORD:function(){
            var a=this.readUB(1),b=this.readUB(1),c=this.readUB(1),d=this.readUB(1),e=this.readUB(1);
            if(a==0&&b==0&&c==0&&d==0&&e==0)return{
                isEndOfShape:true,
                type:"END"
            };
            else{
                var f,g,j;
                if(e){
                    f=this.readUB(5);
                    g=this.readSB(f);
                    j=this.readSB(f)
                }
                var h;
                if(d)h=this.readUB(this.NumFillBits);
                var m;
                if(c)m=this.readUB(this.NumFillBits);
                var k;
                if(b)k=this.readUB(this.NumLineBits);
                var l,n,p,u;
                if(a){
                    l=this.readFILLSTYLEARRAY();
                    n=this.readLINESTYLEARRAY();
                    this.stream.align();
                    p=this.readUB(4);
                    u=this.readUB(4);
                    this.NumFillBits=p;
                    this.NumLineBits=u
                }
                return{
                    isEndOfShape:false,
                    type:"NONEDGE",
                    StateNewStyles:a,
                    StateLineStyle:b,
                    StateFillStyle1:c,
                    StateFillStyle0:d,
                    StateMoveTo:e,
                    MoveBits:f,
                    MoveDeltaX:g/this.twipsPerPixel,
                    MoveDeltaY:j/this.twipsPerPixel,
                    FillStyle0:h,
                    FillStyle1:m,
                    LineStyle:k,
                    FillStyles:l,
                    LineStyles:n,
                    NumFillBits:p,
                    NumLineBits:u
                }
            }
        },
        readEdgeSHAPERECORD:function(){
            return this.readUB(1)==
            1?this.readSTRAIGHTEDGERECORD():this.readCURVEDEDGERECORD()
        },
        readSTRAIGHTEDGERECORD:function(){
            var a=this.readUB(4),b=this.readUB(1),c;
            if(b==0)c=this.readUB(1);
            var d;
            if(b==1||c==0){
                d=this.readSB(a+2);
                if(c==0)e=0
            }
            var e;
            if(b==1||c==1){
                e=this.readSB(a+2);
                if(c==1)d=0
            }
            return{
                isStraightEdge:true,
                type:"STRAIGHT",
                NumBits:a,
                GeneralLineFlag:b,
                VertLineFlag:c,
                DeltaX:d/this.twipsPerPixel,
                DeltaY:e/this.twipsPerPixel
            }
        },
        readCURVEDEDGERECORD:function(){
            var a=this.readUB(4),b=this.readSB(a+2),c=this.readSB(a+2),d=
            this.readSB(a+2),e=this.readSB(a+2);
            return{
                isCurvedEdge:true,
                type:"CURVED",
                NumBits:a,
                ControlDeltaX:b/this.twipsPerPixel,
                ControlDeltaY:c/this.twipsPerPixel,
                AnchorDeltaX:d/this.twipsPerPixel,
                AnchorDeltaY:e/this.twipsPerPixel
            }
        },
        readFILLSTYLEARRAY:function(){
            var a=this.readUI8();
            if(this.context==fljs.swf.tag.DefineShape2||this.context==fljs.swf.tag.DefineShape3||this.context==fljs.swf.tag.DefineShape4)if(a==255)a=a=this.readUI16();
            for(var b=[],c=0;c<a;c++)b[c]=this.readFILLSTYLE();
            return b
        },
        readFILLSTYLE:function(){
            var a=
            this.readUI8(),b;
            if(a==0)b=this.context==fljs.swf.tag.DefineShape3||this.context==fljs.swf.tag.DefineShape4?this.readRGBA():this.readRGB();
            var c,d;
            if(a==16||a==18){
                c=this.readMatrix();
                d=this.readGRADIENT()
            }
            if(a==19){
                c=this.readMatrix();
                d=this.readFOCALGRADIENT()
            }
            var e,f;
            if(a==64||a==65||a==66||a==67){
                e=this.readUI16();
                f=this.readMatrix()
            }
            this.stream.align();
            return{
                FillStyleType:a,
                Color:b,
                GradientMatrix:c,
                Gradient:d,
                BitmapId:e,
                BitmapMatrix:f
            }
        },
        readLINESTYLEARRAY:function(){
            var a=this.readUI8();
            if(a==
                255)a=a=this.readUI16();
            var b=[];
            if(this.context==fljs.swf.tag.DefineShape4)for(var c=0;c<a;c++)b[c]=this.readLINESTYLE2();else for(c=0;c<a;c++)b[c]=this.readLINESTYLE();
            return b
        },
        readLINESTYLE:function(){
            var a=this.readUI16(),b;
            b=this.context==fljs.swf.tag.DefineShape||this.context==fljs.swf.tag.DefineShape2?this.readRGB():this.readRGBA();
            return{
                Width:a/this.twipsPerPixel,
                Color:b
            }
        },
        readLINESTYLE2:function(){
            var a=this.readUI16(),b=this.readUB(2),c=this.readUB(2),d=this.readUB(1),e=this.readUB(1),
            f=this.readUB(1),g=this.readUB(1);
            this.readUB(5);
            var j=this.readUB(1),h=this.readUB(2),m;
            if(c==2)m=this.readUI16();
            var k;
            if(d==0)k=this.readRGBA();
            var l;
            if(d==1)l=this.readFILLSTYLE();
            return{
                Width:a/this.twipsPerPixel,
                StartCapStyle:b,
                JoinStyle:c,
                HasFillFlag:d,
                NoHScaleFlag:e,
                NoVScaleFlag:f,
                PixelHintingFlag:g,
                NoClose:j,
                EndCapStyle:h,
                MiterLimitFactor:m,
                Color:k,
                FillType:l
            }
        },
        readGRADIENT:function(){
            this.stream.align();
            for(var a=this.readUB(2),b=this.readUB(2),c=this.readUB(4),d=[],e=0;e<c;e++)d.push(this.readGRADRECORD());
            return{
                SpreadMode:a,
                InterpolationMode:b,
                NumGradients:c,
                GradientRecords:d
            }
        },
        readFOCALGRADIENT:function(){
            this.stream.align();
            for(var a=this.readUB(2),b=this.readUB(2),c=this.readUB(4),d=[],e=0;e<c;e++)d.push(this.readGRADRECORD());
            e=this.readFIXED8();
            return{
                SpreadMode:a,
                InterpolationMode:b,
                NumGradients:c,
                GradientRecords:d,
                FocalPoint:e
            }
        },
        readGRADRECORD:function(){
            var a=this.readUI8(),b;
            b=this.context==fljs.swf.tag.DefineShape||this.context==fljs.swf.tag.DefineShape2?this.readRGB():this.readRGBA();
            return{
                Ratio:a,
                Color:b
            }
        },
        readID:function(){},
        readMatrix:function(){
            this.stream.align();
            var a=this.readUB(1),b,c,d;
            if(a){
                b=this.readUB(5);
                c=this.readFB(b);
                d=this.readFB(b)
            }
            var e=this.readUB(1),f,g,j;
            if(e){
                f=this.readUB(5);
                g=this.readFB(f);
                j=this.readFB(f)
            }
            var h=this.readUB(5),m=this.readSB(h),k=this.readSB(h);
            return{
                HasScale:a,
                NScaleBits:b,
                ScaleX:c,
                ScaleY:d,
                HasRotate:e,
                NRotateBits:f,
                RotateSkew0:g,
                RotateSkew1:j,
                NTranslateBits:h,
                TranslateX:m/this.twipsPerPixel,
                TranslateY:k/this.twipsPerPixel
            }
        },
        readSHAPE:function(){
            var a=
            this.readUB(4),b=this.readUB(4);
            this.NumFillBits=a;
            this.NumLineBits=b;
            var c=this.readSHAPERECORDS();
            return{
                NumFillBits:a,
                NumLineBits:b,
                ShapeRecords:c
            }
        },
        readShape:function(){
            return this.readSHAPE()
        },
        readTEXTRECORDS:function(){
            for(var a=[];;){
                this.stream.align();
                if(this.readUB(1))a.push(this.readTEXTRECORD());
                else{
                    this.stream.align();
                    break
                }
            }
            return a
        },
        readTEXTRECORD:function(){
            var a=this.readUB(3),b=this.readUB(1),c=this.readUB(1),d=this.readUB(1),e=this.readUB(1),f;
            if(b)f=this.readUI16();
            var g;
            if(c)g=
                this.context==fljs.swf.tag.DefineText2?this.readRGBA():this.readRGB();
            var j;
            if(e)j=this.readSI16()/this.twipsPerPixel;
            var h;
            if(d)h=this.readSI16()/this.twipsPerPixel;
            var m;
            if(b)m=this.readUI16()/this.twipsPerPixel;
            for(var k=this.readUI8(),l=[],n=0;n<k;n++)l.push(this.readGLYPHENTRY());
            return{
                StyleFlagsReserved:a,
                StyleFlagsHasFont:b,
                StyleFlagsHasColor:c,
                StyleFlagsHasYOffset:d,
                StyleFlagsHasXOffset:e,
                FontId:f,
                TextColor:g,
                XOffset:j,
                YOffset:h,
                TextHeight:m,
                GlyphCount:k,
                GlyphEntries:l
            }
        },
        readGLYPHENTRY:function(){
            return{
                GlyphIndex:this.readUB(this.GlyphBits),
                GlyphAdvance:this.readSB(this.AdvanceBits)/this.twipsPerPixel
            }
        },
        readLangCode:function(){
            return this.readUI8()
        },
        readKerningRecord:function(){
            var a,b;
            if(this.FontFlagsWideCodes){
                a=this.readUI16();
                b=this.readUI16()
            }else{
                a=this.readUI8();
                b=this.readUI8()
            }
            var c=this.readSI16();
            return{
                FontKerningCode1:a,
                FontKerningCode2:b,
                FontKerningAdjustment:c
            }
        },
        readMp3SoundData:function(a){
            for(var b=this.stream.byteIndex,c=this.readSI16(),d=this.stream.byteIndex,e=[];this.stream.byteIndex<b+a;)e.push(this.readMp3Frame(e.length));
            a=this.stream.byteIndex-d;
            return{
                SeekSamples:c,
                Mp3Frames:e,
                byteIndex:d,
                byteCount:a,
                buffer:this.stream.buffer
            }
        },
        readMp3Frame:function(a){
            var b=this.readUB(11);
            if(b!=2047)throw new Error("readMp3Frame: Syncword is wrong in frame# "+a+" @ "+this.stream.byteIndex);
            a=this.readUB(2);
            var c=this.readUB(2),d=this.readUB(1),e=this.readUB(4),f=this.readUB(2),g=this.readUB(1);
            this.readUB(1);
            var j=this.readUB(2),h=this.readUB(2),m=this.readUB(1),k=this.readUB(1),l=this.readUB(2);
            d==0&&this.readUI16();
            var n=Math.floor((a==

            {
                    MPEG2_5:0,
                    MPEG2:2,
                    MPEG1:3
                }.MPEG1?144:72)*{
                1:[null,32,40,48,56,64,80,96,112,128,160,192,224,256,320],
                2:[null,8,16,24,32,40,48,56,64,80,96,112,128,144,160]
            }
            [{
                0:2,
                2:2,
                3:1
            }
            [a]][e]*1E3/{
                0:[11025,12E3,8E3],
                2:[22050,24E3,16E3],
                3:[44100,48E3,32E3]
            }
            [a][f])+g-4,p=this.readBytes(n);
            return{
                Syncword:b,
                MpegVersion:a,
                Layer:c,
                ProtectionBit:d,
                Bitrate:e,
                SamplingRate:f,
                PaddingBit:g,
                ChannelMode:j,
                ModeExtension:h,
                Copyright:m,
                Original:k,
                Emphasis:l,
                byteCount:n,
                SampleData:p
            }
        },
        readSoundInfo:function(){
            this.readUB(2);
            var a=
            this.readUB(1),b=this.readUB(1),c=this.readUB(1),d=this.readUB(1),e=this.readUB(1),f=this.readUB(1),g;
            if(f)g=this.readUI32();
            var j;
            if(e)j=this.readUI32();
            var h;
            if(d)h=this.readUI16();
            var m,k;
            if(c){
                m=this.readUI8();
                k=[];
                for(var l=0;l<m;l++)k.push(this.readEnvelopeRecord())
            }
            return{
                SyncStop:a,
                SyncNoMultiple:b,
                HasEnvelope:c,
                HasLoops:d,
                HasOutPoint:e,
                HasInPoint:f,
                InPoint:g,
                OutPoint:j,
                LoopCount:h,
                EnvPoints:m,
                EnvelopeRecords:k
            }
        },
        readEnvelopeRecord:function(){
            return{
                Pos44:this.readUI32(),
                LeftLevel:this.readUI16(),
                RightLevel:this.readUI16()
            }
        },
        readButtonRecords:function(){
            for(var a=[],b;b=this.readButtonRecord();)a.push(b);
            return a
        },
        readButtonRecord:function(){
            var a={};

            this.stream.align();
            this.readUB(2);
            a.ButtonHasBlendMode=this.readUB(1);
            a.ButtonHasFilterList=this.readUB(1);
            a.ButtonStateHitTest=this.readUB(1);
            a.ButtonStateDown=this.readUB(1);
            a.ButtonStateOver=this.readUB(1);
            a.ButtonStateUp=this.readUB(1);
            if(!a.ButtonHasBlendMode&&!a.ButtonHasFilterList&&!a.ButtonStateHitTest&&!a.ButtonStateDown&&!a.ButtonStateOver&&
                !a.ButtonStateUp)return null;
            a.CharacterId=this.readUI16();
            a.PlaceDepth=this.readUI16();
            a.PlaceMatrix=this.readMatrix();
            if(this.context==fljs.swf.tag.DefineButton2){
                a.ColorTransform=this.readCXFORMWITHALPHA();
                if(a.ButtonHasFilterList)a.FilterList=this.readFilterList();
                if(a.ButtonHasBlendMode)a.BlendMode=this.readUI8()
            }
            return a
        },
        readFilterList:function(){
            for(var a=[],b=this.readUI8(),c=0;c<b;c++)a.push(this.readFilter());
            return a
        },
        readFilter:function(){
            var a={};

            a.FilterId=this.readUI8();
            switch(a.FilterId){
                case 0:
                    a.DropShadowFilter=
                    this.readDropShadowFilter();
                    break;
                case 1:
                    a.BlurFilter=this.readBlurFilter();
                    break;
                case 2:
                    a.GlowFilter=this.readGlowFilter();
                    break;
                case 3:
                    a.BevelFilter=this.readBevelFilter();
                    break;
                case 4:
                    a.GradientGlowFilter=this.readGradientGlowFilter();
                    break;
                case 5:
                    a.ConvolutionFilter=this.readConvolutionFilter();
                    break;
                case 6:
                    a.ColorMatrixFilter=this.readColorMatrixFilter();
                    break;
                case 7:
                    a.GradientBevelFitler=this.readGradientBevelFilter();
                    break
            }
            return a
        },
        readColorMatrixFilter:function(){
            return{
                Matrix:this.readFloats(20)
            }
        },
        readConvolutionFilter:function(){
            var a={};

            a.MatrixX=this.readUI8();
            a.MatrixY=this.readUI8();
            a.Divisor=this.readFloat();
            a.Bias=this.readFloat();
            a.Matrix=this.readFloats(a.MatrixX*a.MatrixY);
            a.DefaultColor=this.readRGBA();
            this.readUB(6);
            a.Clamp=this.readUB(1);
            a.PreserveAlpha=this.readUB(1);
            return a
        },
        readBlurFilter:function(){
            var a={
                BlurX:this.readFixed(),
                BlurY:this.readFixed(),
                Passes:this.readUB(5)
            };

            this.readUB(3);
            return a
        },
        readDropShadowFilter:function(){
            return{
                DropShadowColor:this.readRGBA(),
                BlurX:this.readFixed(),
                BlurY:this.readFixed(),
                Angle:this.readFixed(),
                Distance:this.readFixed(),
                Strength:this.readFixed8(),
                InnerShadow:this.readUB(1),
                Knockout:this.readUB(1),
                CompositeSource:this.readUB(1),
                Passes:this.readUB(5)
            }
        },
        readGlowFilter:function(){
            return{
                GlowColor:this.readRGBA(),
                BlurX:this.readFixed(),
                BlurY:this.readFixed(),
                Strength:this.readFixed8(),
                InnerGlow:this.readUB(1),
                Knockout:this.readUB(1),
                CompositeSource:this.readUB(1),
                Passes:this.readUB(5)
            }
        },
        readBevelFilter:function(){
            return{
                ShadowColor:this.readRGBA(),
                HighlightColor:this.readRGBA(),
                BlurX:this.readFixed(),
                BlurY:this.readFixed(),
                Angle:this.readFixed(),
                Distance:this.readFixed(),
                Strength:this.readFixed8(),
                InnerShadow:this.readUB(1),
                Knockout:this.readUB(1),
                CompositeSource:this.readUB(1),
                OnTop:this.readUB(1),
                Passes:this.readUB(4)
            }
        },
        readGradientGlowFilter:function(){
            var a={};

            a.NumColors=this.readUI8();
            a.GradientColors=[];
            for(var b=0;b<a.NumColors;b++)a.GradientColors.push(this.readRGBA());
            a.GradientRatios=[];
            for(b=0;b<a.NumColors;b++)a.GradientRatios.push(this.readUI8());
            a.BlurX=this.readFixed();
            a.BlurY=this.readFixed();
            a.Angle=this.readFixed();
            a.Distance=this.readFixed();
            a.Strength=this.readFixed8();
            a.InnerShadow=this.readUB(1);
            a.Knockout=this.readUB(1);
            a.CompositeSource=this.readUB(1);
            a.OnTop=this.readUB(1);
            a.Passes=this.readUB(4);
            return a
        },
        readGradientBevelFilter:function(){
            var a={};

            a.NumColors=this.readUI8();
            a.GradientColors=[];
            for(var b=0;b<a.NumColors;b++)a.GradientColors.push(this.readRGBA());
            a.GradientRatios=[];
            for(b=0;b<a.NumColors;b++)a.GradientRatios.push(this.readUI8());
            a.BlurX=this.readFixed();
            a.BlurY=this.readFixed();
            a.Angle=this.readFixed();
            a.Distance=this.readFixed();
            a.Strength=this.readFixed8();
            a.InnerShadow=this.readUB(1);
            a.Knockout=this.readUB(1);
            a.CompositeSource=this.readUB(1);
            a.OnTop=this.readUB(1);
            a.Passes=this.readUB(4);
            return a
        },
        readButtonCondActions:function(a){
            for(var b=[],c=this.stream.byteIndex,d;d=this.readUI16();)b.push(this.readButtonCondAction(d-2));
            b.push(this.readButtonCondAction(a-(this.stream.byteIndex-c)));
            return b
        },
        readButtonCondAction:function(a){
            var b=

            {};

            b.CondActionSize=a+2;
            b.CondIdleToOverDown=this.readUB(1);
            b.CondOutDownToIdle=this.readUB(1);
            b.CondOutDownToOverDown=this.readUB(1);
            b.CondOverDownToOutDown=this.readUB(1);
            b.CondOverDownToOverUp=this.readUB(1);
            b.CondOverUpToOverDown=this.readUB(1);
            b.CondOverUpToIdle=this.readUB(1);
            b.CondIdleToOverUp=this.readUB(1);
            b.CondKeyPress=this.readUB(7);
            b.CondOverDownToIdle=this.readUB(1);
            b.Actions=this.readActionRecords(a-2);
            return b
        },
        readPix15:function(){
            this.stream.align();
            this.readUB(1);
            return{
                Red:Math.floor(this.readUB(5)*
                    8.226),
                Green:Math.floor(this.readUB(5)*8.226),
                Blue:Math.floor(this.readUB(5)*8.226)
            }
        },
        beginContext:function(a){
            this.context=a
        },
        endContext:function(){
            this.NumLineBits=this.NumFillBits=this.context=null
        }
    });
    fljs.swf.StringStream=function(a){
        this.buffer=String(a);
        this.bitIndex=this.byteIndex=this._byte=0;
        this.byteIndexForBits=-1;
        this.logger=fljs.console("parse")
    };
    fljs.addMethods(fljs.swf.StringStream,{
        length:function(){
            return this.buffer.length
        },
        hasMore:function(){
            return this.byteIndex<this.buffer.length
        },
        seek:function(a){
            this._byte=0;
            this.byteIndex=a;
            this.bitIndex=0;
            this.byteIndexForBits=-1
        },
        skipBytes:function(a){
            this.byteIndex+=a
        },
        readBytes:function(a){
            for(var b=[],c=0;c<a;c++)b.push(String.fromCharCode(this.buffer.charCodeAt(this.byteIndex++)&255));
            return b
        },
        readBytesRev:function(a){
            for(var b=[],c=0;c<a;c++)b.unshift(String.fromCharCode(this.buffer.charCodeAt(this.byteIndex++)&
                255));
            return b
        },
        align:function(){
            this.bitIndex=8
        },
        nextUByte:function(){
            return this.buffer.charCodeAt(this.byteIndex++)&255
        },
        nextSByte:function(){
            var a=this.buffer.charCodeAt(this.byteIndex++)&255;
            if(a>=128)a-=256;
            return a
        },
        nextUShort:function(){
            var a=(this.buffer.charCodeAt(this.byteIndex++)&255)+((this.buffer.charCodeAt(this.byteIndex++)&255)<<8);
            if(a<0)a+=65536;
            return a
        },
        nextSShort:function(){
            var a=this.nextUShort();
            if(a>32767)a-=65536;
            return a
        },
        nextULong:function(){
            var a=this.buffer.charCodeAt(this.byteIndex++)&
            255,b=this.buffer.charCodeAt(this.byteIndex++)&255,c=this.buffer.charCodeAt(this.byteIndex++)&255,d=this.buffer.charCodeAt(this.byteIndex++)&255;
            a=a+(b<<8)+(c<<16)+(d<<24);
            if(a<0)a+=4294967296;
            return a
        },
        nextSLong:function(){
            var a=this.nextULong();
            if(a>2147483647)a-=4294967296;
            return a
        },
        nextEncodedULong:function(){
            var a=this.buffer.charCodeAt(this.byteIndex++)&255;
            if(!(a&128))return a;
            a=a&127|(this.buffer.charCodeAt(this.byteIndex++)&255)<<7;
            if(!(a&16384))return a;
            a=a&16383|(this.buffer.charCodeAt(this.byteIndex++)&
                255)<<14;
            if(!(a&2097152))return a;
            a=a&2097151|(this.buffer.charCodeAt(this.byteIndex++)&255)<<21;
            if(!(a&268435456))return a;
            return a=a&268435455|(this.buffer.charCodeAt(this.byteIndex++)&255)<<28
        },
        nextString:function(){
            for(var a=[],b;b=this.nextUByte();)a.push(String.fromCharCode(b));
            return a.join("")
        },
        _nextByteForBits:function(){
            this._byte=this.nextUByte();
            this.bitIndex=0;
            this.byteIndexForBits=this.byteIndex
        },
        nextUBits:function(a){
            this.byteIndex!=this.byteIndexForBits&&this._nextByteForBits();
            for(var b=
                0,c=0;c<a;c++){
                this.bitIndex==8&&this._nextByteForBits();
                b=(b<<1)+(this._byte>>7-this.bitIndex&1);
                this.bitIndex+=1
            }
            return b
        },
        nextSBits:function(a,b){
            b=this.nextUBits(a,b);
            if(b>>a-1)b-=Math.pow(2,a);
            return b
        },
        nextFShort:function(){
            return this.nextSShort()*Math.pow(2,-8)
        },
        nextFLong:function(){
            return this.nextSLong()*Math.pow(2,-16)
        },
        nextFBits:function(a){
            return this.nextSBits(a)*Math.pow(2,-16)
        },
        nextHalfFloat:function(){
            return this.nextUShort()
        },
        nextSingleFloat:function(){
            return this.nextULong()
        },
        nextDoubleFloat:function(){
            return this.nextULong()+
            this.nextULong()
        }
    });
    fljs.swf.TagHeader=function(){};

    fljs.addMethods(fljs.swf.TagHeader,{
        tagClass:function(){
            return fljs.swf.tag.tagMap[this.type]
        }
    });
    fljs.swf.TagReader=function(a){
        this.stream=new fljs.swf.SwfStream(new fljs.swf.StringStream(a));
        this.tagMap=fljs.swf.tag.tagMap
    };
    fljs.addMethods(fljs.swf.TagReader,{
        position:function(){
            return this.stream.stream.byteIndex
        },
        readSwfHeader:function(){
            return this.stream.readSwfHeader()
        },
        readTagHeader:function(){
            var a=this.stream.readRecordHeader(),b=new fljs.swf.TagHeader;
            b.data=a;
            b.type=a.TagType;
            b.length=a.TagLength;
            return b
        },
        readTag:function(a,b){
            var c=a.tagClass();
            if(c){
                var d=new c;
                c=this.stream.stream.byteIndex;
                d.read(this.stream,a.data,this,null,fljs.Player.getInstance().stage);
                d.header=a;
                d.byteIndex=c;
                if(!b&&this.stream.stream.byteIndex<
                    c+a.length)this.stream.skipBytes(c+a.length-this.stream.stream.byteIndex);else b||this.checkLocation(d)
            }
            return d
        },
        skipTag:function(a){
            this.stream.skipBytes(a.length)
        },
        checkLocation:function(a){
            if(this.stream.stream.byteIndex!=a.byteIndex+a.header.length){
                fljs.console("parse");
            }
        }
    });
    fljs.swf.DefinitionParser=function(a){
        this.reader=new fljs.swf.TagReader(a);
        this.pendingSprite=this.pendingHeader=null;
        this.done=false
    };
    fljs.addMethods(fljs.swf.DefinitionParser,{
        readHeader:function(){
            var a=this.reader.readSwfHeader();
            return this.reader.stream.header=a
        },
        readSomeTags:function(a){
            fljs.console("parse");
            if(!this.done){
                var b;
                b=this.pendingSprite?this.pendingSprite.tag:a.mainTimeline;
                for(var c=this.reader,d=0,e=c.stream.stream.byteIndex;c.stream.hasMore();){
                    var f=c.stream.stream.byteIndex,g;
                    if(this.pendingHeader){
                        g=this.pendingHeader;
                        this.pendingHeader=null
                    }else g=c.readTagHeader();
                    if(d>0&&g.length>2E4){
                        this.pendingHeader=
                        g;
                        a.mainTimeline.__bytesLoaded+=e-c.stream.stream.byteIndex;
                        return
                    }
                    var j=c.stream.stream.byteIndex;
                    switch(g.tagClass()){
                        case fljs.swf.tag.DefineShape:case fljs.swf.tag.DefineShape2:case fljs.swf.tag.DefineShape3:case fljs.swf.tag.DefineShape4:case fljs.swf.tag.DefineFont:case fljs.swf.tag.DefineFont2:case fljs.swf.tag.DefineFont3:case fljs.swf.tag.DefineFontInfo:case fljs.swf.tag.DefineFontInfo2:case fljs.swf.tag.DefineText:case fljs.swf.tag.DefineText2:case fljs.swf.tag.DefineEditText:case fljs.swf.tag.DefineSound:case fljs.swf.tag.JpegTables:case fljs.swf.tag.DefineBits:case fljs.swf.tag.DefineBitsJPEG2:case fljs.swf.tag.DefineBitsLossless:case fljs.swf.tag.DefineBitsLossless2:case fljs.swf.tag.DefineButton2:case fljs.swf.tag.FrameLabel:case fljs.swf.tag.ExportAssets:
                            var h=
                            c.readTag(g);
                            if(c.stream.stream.byteIndex!=j+g.length){
                                rar.rar=true;
                                return
                            }
                            h.evaluate(a,this,null,b);
                            break;
                        case fljs.swf.tag.DefineBitsJpeg3:
                            c.readTag(g);
                            if(c.stream.stream.byteIndex!=j+g.length){
                                rar.rar=true;
                                return
                            }
                            break;
                        case fljs.swf.tag.DefineSprite:
                            h=c.readTag(g,true);
                            h.evaluate(a,this,null,a.stage);
                            this.pendingSprite={
                                header:g,
                                tag:h,
                                endByteIndex:j+g.length
                            };

                            b=h;
                            break;
                        case fljs.swf.tag.PlaceObject:case fljs.swf.tag.RemoveObject:case fljs.swf.tag.SetBackgroundColor:case fljs.swf.tag.DoAction:case fljs.swf.tag.DoInitAction:case fljs.swf.tag.Protect:case fljs.swf.tag.StartSound:case fljs.swf.tag.SoundStreamHead:case fljs.swf.tag.SoundStreamBlock:case fljs.swf.tag.PlaceObject2:case fljs.swf.tag.PlaceObject3:case fljs.swf.tag.RemoveObject2:case fljs.swf.tag.SoundStreamHead2:case fljs.swf.tag.DoAbc:case fljs.swf.tag.End:
                            h=
                            c.readTag(g);
                            b.frameData_[b.framesLoaded_].tags.push([h,g]);
                            if(c.stream.stream.byteIndex!=j+g.length){
                                rar.rar=true;
                                return
                            }
                            break;
                        case fljs.swf.tag.ShowFrame:
                            c.readTag(g);
                            b.frameData_[b.framesLoaded_].loaded=true;
                            b.framesLoaded_+=1;
                            if(b.framesLoaded_==b.totalFrames_)if(this.pendingSprite){
                                c.stream.stream.byteIndex<this.pendingSprite.endByteIndex&&c.stream.skipBytes(this.pendingSprite.endByteIndex-c.stream.stream.byteIndex);
                                b.__bytesLoaded=b.__bytesTotal;
                                this.pendingSprite=null;
                                b=a.mainTimeline
                            }else{
                                b.__bytesLoaded=
                                b.__bytesTotal;
                                this.done=true;
                                return
                            }else b.frameData_[b.framesLoaded_]={
                                tags:[]
                            };

                            break;
                        default:
                            fljs.console("unk");
                            c.skipTag(g)
                    }
                    d+=c.stream.stream.byteIndex-f;
                    if(d>2E4){
                        a.mainTimeline.__bytesLoaded+=c.stream.stream.byteIndex-e;
                        return
                    }
                }
            }
        }
    });
    fljs.swf.DefParser=fljs.swf.DefinitionParser;
    fljs.swf.act={};

    fljs.swf.act.ActionInterpreter=function(a){
        this.player=a;
        this.trace=false;
        this.consts=new fljs.swf.act.ConstantsPool;
        this.globals=new fljs.swf.act.Globals(a);
        this.traceLogger=fljs.console("trace")
    };
    fljs.swf.act.ActionInterpreter.ActionCode={
        End:0,
        NextFrame:4,
        PreviousFrame:5,
        Play:6,
        Stop:7,
        Subtract:11,
        Multiply:12,
        Divide:13,
        Not:18,
        Pop:23,
        ToInteger:24,
        GetVariable:28,
        SetVariable:29,
        Trace:38,
        StartDrag:39,
        EndDrag:40,
        GetTime:52,
        Delete:58,
        DefineLocal:60,
        CallFunction:61,
        Return:62,
        NewObject:64,
        DefineLocal2:65,
        InitObject:67,
        TypeOf:68,
        Add2:71,
        Less2:72,
        Equals2:73,
        PushDuplicate:76,
        GetMember:78,
        SetMember:79,
        Increment:80,
        Decrement:81,
        CallMethod:82,
        Greater:103,
        GotoFrame:129,
        GetUrl:131,
        StoreRegister:135,
        ConstantPool:136,
        WaitForFrame:138,
        SetTarget:139,
        GotoLabel:140,
        DefineFunction2:142,
        With:148,
        Push:150,
        Jump:153,
        GetUrl2:154,
        DefineFunction:155,
        If:157,
        GotoFrame2:159
    };
    fljs.addMethods(fljs.swf.act.ActionInterpreter,{
        value:function(a,b){
            switch(b.Type){
                case 0:case 2:case 3:case 5:case 10:case 11:
                    return b;
                case 1:case 6:case 7:
                    return{
                        Type:1,
                        Value:b.Value
                    };

                case 4:
                    return a.reg(b.Value);
                case 8:case 9:
                    return{
                        Type:0,
                        Value:this.consts.lookup(b.Value)
                    };

                default:
                    return"[ERR: unknown value]"
            }
        },
        callFunction:function(a,b,c,d){
            a=new fljs.swf.act.Context(c,b.Context,this,false,b.Value.SupressThisFlag);
            for(var e=0;e<b.Value.NumParams;e++){
                var f=b.Value.Parameters[e].Register,g=d[e];
                g||(g={
                    Type:3,
                    Value:undefined
                });
                f?a.setReg(f,g):a.setLocal(b.Value.Parameters[e].ParamName,g)
            }
            f=1;
            if(b.Value.PreloadThisFlag){
                a.setReg(f,a.locals.get("this"));
                f+=1
            }
            if(b.Value.PreloadArgumentsFlag){
                a.setReg(f,{
                    Type:3,
                    Value:undefined
                });
                f+=1
            }
            if(b.Value.PreloadSuperFlag){
                a.setReg(f,{
                    Type:3,
                    Value:undefined
                });
                f+=1
            }
            if(b.Value.PreloadRootFlag){
                a.setReg(f,a.locals.get("_root"));
                f+=1
            }
            if(b.Value.PreloadParentFlag){
                a.setReg(f,a.locals.get("_parent"));
                f+=1
            }
            b.Value.PreloadGlobalFlag&&a.setReg(f,a.locals.get("_global"));
            d=this.consts;
            this.consts=b.Consts;
            b=this.eval(c,b.Value.Code,a);
            this.consts=d;
            return b
        },
        callMethod:function(a,b,c,d){
            var e;
            switch(b.Type){
                case 0:
                    a=new fljs.swf.act.String(b.Value);
                    e=a.get(c).apply(a,d);
                    break;
                case 3:
                    break;
                case 11:
                    c=b.Value.get(c);
                    switch(c.Type){
                        case 10:
                            e=c.Value.apply(b.Value,d);
                            break;
                        case 12:
                            e=this.callFunction(a,c,b.Value,d);
                            break
                    }
                    break
            }
            return e
        },
        callWith:function(a,b,c){
            a=new fljs.swf.act.Context(c,a,this,true);
            this.eval(c,b.Value.Code,a)
        },
        callback:function(a,b,c){
            c||(c=[]);
            switch(b.Type){
                case 10:
                    b.Value.apply(a,
                        c);
                    break;
                case 12:
                    this.callFunction(null,b,a,c);
                    break
            }
        },
        eval:function(a,b,c){
            c||(c=new fljs.swf.act.Context(a,null,this));
            for(var d=fljs.swf.act.ActionInterpreter.ActionCode,e=[],f=0;f<b.length;f++){
                var g=b[f];
                g=b[f];
                switch(g.ActionCode){
                    case d.ConstantPool:
                        this.consts=new fljs.swf.act.ConstantsPool;
                        for(var j in g.ConstantPool)this.consts.push(g.ConstantPool[j]);this.trace&&e.push("ConstantPool = "+this.consts);
                        break;
                    case d.Push:
                        for(j in g.Values)c.stack.push(this.value(c,g.Values[j]));if(this.trace){
                            var h=
                            [];
                            for(j in g.Values)h.push(this.value(c,g.Values[j]));e.push("Push("+h+")")
                        }
                        break;
                    case d.GetVariable:
                        g=c.stack.pop().Value;
                        h=c.get(g);
                        c.stack.push(h);
                        this.trace&&e.push("GetVariable("+[g,h]+")");
                        break;
                    case d.CallMethod:
                        g=c.stack.pop().Value;
                        var m=c.stack.pop(),k=c.stack.pop().Value;
                        h=[];
                        for(j=0;j<k;j++)h.push(c.stack.pop());
                        var l;
                        if(g)l=this.callMethod(c,m,g,h);else switch(m.Type){
                            case 10:
                                l=m.Value.apply(null,h);
                                break;
                            case 12:
                                l=this.callFunction(c,m,null,h);
                                break
                        }
                        if(typeof l=="undefined")l={
                            Type:3,
                            Value:undefined
                        };

                        c.stack.push(l);
                        this.trace&&e.push("Call("+[m,g,h,l]+")");
                        break;
                    case d.SetVariable:
                        h=c.stack.pop();
                        k=c.stack.pop().Value;
                        m=k.split(":");
                        if(m.length==1){
                            a=c.self;
                            g=m[0]
                        }else{
                            a=c.resolvePath(m[0]);
                            g=m[1]
                        }
                        switch(h.Type){
                            case 0:case 1:case 2:case 3:case 5:case 6:case 7:
                                a.set(g,{
                                    Type:h.Type,
                                    Value:h.Value
                                });
                                break;
                            default:
                                a.set(g,h);
                                break
                        }
                        this.trace&&e.push("Set: "+[k,g,h]);
                        break;
                    case d.Divide:
                        g=c.stack.pop();
                        h=c.stack.pop();
                        k={
                            Type:1,
                            Value:h.Value/g.Value
                        };

                        if(fljs.Player.getInstance().swfVersion==
                            4&&(isNaN(k.Value)||k.Value==Number.POSITIVE_INFINITY||k.Value==Number.NEGATIVE_INFINITY))k={
                            Type:0,
                            Value:"#ERROR#"
                        };

                        c.stack.push(k);
                        this.trace&&e.push([g,"/",h].toString());
                        break;
                    case d.Multiply:
                        g=c.stack.pop();
                        h=c.stack.pop();
                        c.stack.push({
                            Type:1,
                            Value:Number(g.Value)*Number(h.Value)
                        });
                        this.trace&&e.push([g,"*",h].toString());
                        break;
                    case d.Equals2:
                        g=c.stack.pop();
                        h=c.stack.pop();
                        c.stack.push({
                            Type:5,
                            Value:g.Value==h.Value
                        });
                        this.trace&&e.push([g,"==",h].toString());
                        break;
                    case d.Not:
                        g=Number(c.stack.pop().Value);
                        if(fljs.Player.getInstance().swfVersion==4)g==0?c.stack.push({
                            Type:1,
                            Value:1
                        }):c.stack.push({
                            Type:1,
                            Value:0
                        });else c.stack.push({
                            Type:5,
                            Value:!g
                        });
                        this.trace&&e.push(["!",g].toString());
                        break;
                    case d.If:
                        h=c.stack.pop();
                        if(h.Value){
                            for(j=f+1;b[j]&&b[j].address!=b[f+1].address+g.BranchOffset;)if(g.BranchOffset>0)j+=1;else j-=1;f=j-1
                        }
                        this.trace&&e.push(["if(",h,")",f].toString());
                        break;
                    case d.Pop:
                        c.stack.pop();
                        this.trace&&e.push("pop");
                        break;
                    case d.WaitForFrame:
                        if(c.self.get__framesloaded().Value<g.Frame+
                            1)f+=1+g.SkipCount;
                        this.trace&&e.push("waitForFrame("+[g.Frame+1,g.SkipCount]+")");
                        break;
                    case d.GotoFrame:
                        c.self.gotoFrame({
                            Type:1,
                            Value:g.Frame+1
                        });
                        this.trace&&e.push("gotoFrame("+(g.Frame+1)+")");
                        break;
                    case d.GetUrl:
                        c.self.getUrl({
                            Type:0,
                            Value:g.UrlString
                        },{
                            Type:0,
                            Value:g.TargetString
                        });
                        this.trace&&e.push('getUrl("'+g.UrlString+'")');
                        break;
                    case d.GetUrl2:
                        if(g.LoadTargetFlag)this.trace&&e.push("unsupported getUrl call");
                        else if(g.LoadVariablesFlag)this.trace&&e.push("unsupported getUrl call");
                        else{
                            g.SendVarsMethod&&
                            this.trace&&e.push("unsupported getUrl call");
                            g=c.stack.pop();
                            h=c.stack.pop();
                            c.self.getUrl(h,g);
                            this.trace&&e.push('getUrl("'+h+'", "'+g+'")')
                        }
                        break;
                    case d.Play:
                        c.self.play();
                        this.trace&&e.push("play()");
                        break;
                    case d.Stop:
                        c.self.stop();
                        this.trace&&e.push("stop()");
                        break;
                    case d.DefineFunction:
                        if(g.FunctionName){
                            c.set(g.FunctionName,{
                                Type:12,
                                Value:g,
                                Consts:this.consts,
                                Context:c
                            });
                            this.trace&&e.push(g.FunctionName+" = function() {}")
                        }else{
                            c.stack.push({
                                Type:12,
                                Value:g,
                                Consts:this.consts,
                                Context:c
                            });
                            this.trace&&e.push("Push(function "+g.FunctionName+"() {})")
                        }
                        break;
                    case d.SetTarget:
                        c.setTarget(g.TargetName);
                        this.trace&&e.push("SetTarget("+g.TargetName+")");
                        break;
                    case d.PreviousFrame:
                        c.self.prevFrame();
                        this.trace&&e.push("PrevFrame()");
                        break;
                    case d.NextFrame:
                        c.self.nextFrame();
                        this.trace&&e.push("NextFrame()");
                        break;
                    case d.Jump:
                        h=g.BranchOffset>0?1:-1;
                        for(j=f+1;b[j]&&b[j].address!=b[f+1].address+g.BranchOffset;)j+=h;
                        f=j-1;
                        this.trace&&e.push("Jump("+g.BranchOffset+")");
                        break;
                    case d.NewObject:
                        g=
                        c.stack.pop().Value;
                        k=c.stack.pop().Value;
                        h=[];
                        for(j=0;j<k;j++)h.push(c.stack.pop());
                        k=c.get(g);
                        switch(k.Type){
                            case 11:
                                a=new k.Value;
                                a.init.apply(a,h);
                                a={
                                    Type:11,
                                    Value:a
                                };

                                break
                        }
                        c.stack.push(a);
                        this.trace&&e.push("New("+g+")");
                        break;
                    case d.GetMember:
                        g=c.stack.pop().Value;
                        a=c.stack.pop();
                        c.stack.push(a.Value.get(g));
                        this.trace&&e.push("GetMember ("+[a,g]+")");
                        break;
                    case d.SetMember:
                        h=c.stack.pop();
                        g=c.stack.pop().Value;
                        a=c.stack.pop();
                        a.Value.set(g,h);
                        this.trace&&e.push("SetMember ("+[a,g,h]+")");
                        break;
                    case d.InitObject:
                        k=c.stack.pop().Value;
                        a=new fljs.swf.act.Object;
                        for(f=0;f<k;f++){
                            h=c.stack.pop();
                            g=c.stack.pop().Value;
                            a.set(g,h)
                        }
                        this.trace&&e.push("InitObject ("+[a,k]+")");
                        break;
                    case d.Trace:
                        h=c.stack.pop();
                        this.traceLogger.info(h.Value);
                        this.trace&&e.push("Trace ("+h.Value+")");
                        break;
                    case d.Increment:
                        h=c.stack.pop();
                        c.stack.push({
                            Type:h.Type,
                            Value:h.Value+1
                        });
                        this.trace&&e.push("Increment ("+h.Value+")");
                        break;
                    case d.With:
                        a=c.stack.pop();
                        this.callWith(c,g,a.Value);
                        this.trace&&e.push("With ("+
                            a+")");
                        break;
                    case d.End:
                        this.trace&&e.push("End");
                        break;
                    case d.DefineFunction2:
                        if(g.FunctionName){
                            c.set(g.FunctionName,{
                                Type:12,
                                Value:g,
                                Consts:this.consts,
                                Context:c
                            });
                            this.trace&&e.push(g.FunctionName+" = function() {}")
                        }else{
                            c.stack.push({
                                Type:12,
                                Value:g,
                                Consts:this.consts,
                                Context:c
                            });
                            this.trace&&e.push("Push(function "+g.FunctionName+"() {})")
                        }
                        this.trace&&e.push("DefineFunction2("+g.FunctionName+")");
                        break;
                    case d.StoreRegister:
                        c.setReg(g.RegisterNumber,c.stack[c.stack.length-1]);
                        this.trace&&e.push("StoreRegister("+
                            g.RegisterNumber+")");
                        break;
                    case d.GotoLabel:
                        c.self.gotoFrame({
                            Type:0,
                            Value:g.Label
                        });
                        this.trace&&e.push("GotoLabel("+g.Label+")");
                        break;
                    case d.StartDrag:
                        c.stack.pop();
                        c.stack.pop();
                        if(c.stack.pop().Value){
                            c.stack.pop();
                            c.stack.pop();
                            c.stack.pop();
                            c.stack.pop()
                        }
                        break;
                    case d.EndDrag:
                        break;
                    case d.Add2:
                        h=c.stack.pop();
                        k=c.stack.pop();
                        g=h.Type==0||k.Type==0?0:h.Type==6||k.Type==6?6:h.Type==1||k.Type==1?1:7;
                        c.stack.push({
                            Type:g,
                            Value:k.Value+h.Value
                        });
                        break;
                    case d.Subtract:
                        g=Number(c.stack.pop().Value);
                        h=Number(c.stack.pop().Value);
                        c.stack.push({
                            Type:1,
                            Value:h-g
                        });
                        break;
                    case d.DefineLocal:
                        h=c.stack.pop();
                        g=c.stack.pop().Value;
                        c.setLocal(g,h);
                        break;
                    case d.PushDuplicate:
                        h=c.stack[c.stack.length-1];
                        switch(h.Type){
                            case 0:case 1:case 2:case 3:case 5:case 6:case 7:
                                g={
                                    Type:h.Type,
                                    Value:h.Value
                                };

                                break;
                            default:
                                g=h;
                                break
                        }
                        c.stack.push(g);
                        break;
                    case d.GetTime:
                        c.stack.push({
                            Type:1,
                            Value:fljs.now()-fljs.Player.getInstance().startTime
                        });
                        break;
                    case d.Greater:
                        h=c.stack.pop();
                        k=c.stack.pop();
                        c.stack.push({
                            Type:5,
                            Value:k.Value>h.Value
                        });
                        break;
                    case d.CallFunction:
                        g=c.stack.pop().Value;
                        k=c.stack.pop().Value;
                        h=[];
                        for(j=0;j<k;j++)h.push(c.stack.pop());
                        k=c.get(g);
                        if(g)switch(k.Type){
                            case 10:
                                l=k.Value.apply(null,h);
                                break;
                            case 12:
                                l=this.callFunction(c,k,null,h);
                                break
                        }
                        if(typeof l=="undefined")l={
                            Type:3,
                            Value:undefined
                        };

                        c.stack.push(l);
                        break;
                    case d.DefineLocal2:
                        g=c.stack.pop().Value;
                        g in c.locals||c.setLocal(g,{
                            Type:3,
                            Value:undefined
                        });
                        break;
                    case d.TypeOf:
                        h=c.stack.pop();
                        g={
                            0:"string",
                            1:"number",
                            2:"null",
                            3:"undefined",
                            5:"boolean",
                            6:"number",
                            7:"number",
                            10:"function",
                            11:"object",
                            12:"function"
                        }
                        [h.Type];
                        if(h.Value instanceof fljs.swf.act.MovieClip)g="movieclip";
                        c.stack.push({
                            Type:0,
                            Value:g
                        });
                        break;
                    case d.ToInteger:
                        h=Number(c.stack.pop().Value);
                        h=h>=0?Math.floor(h):Math.ceil(h);
                        c.stack.push({
                            Type:1,
                            Value:h
                        });
                        break;
                    case d.Return:
                        return c.stack.pop();
                    case d.GotoFrame2:
                        h=c.stack.pop();
                        if(h.Type==0){
                            m=h.Value.split(":");
                            if(m.length==1){
                                a=c.self;
                                h=m[0]
                            }else{
                                a=c.resolvePath(m[0]);
                                h=m[1]
                            }
                            h=parseInt(h)?{
                                Type:1,
                                Value:parseInt(h)
                            }:

                            {
                                Type:0,
                                Value:h
                            }
                        }else{
                            a=c.self;
                            h=h
                        }
                        if(g.SceneBias)h.Value+=g.SceneBias;
                        g.PlayFlag?c.self.gotoandPlay(h):c.self.gotoFrame(h);
                        break;
                    case d.Less2:
                        h=c.stack.pop().Value;
                        k=c.stack.pop().Value;
                        c.stack.push({
                            Type:5,
                            Value:k<h
                        });
                        break;
                    case d.Decrement:
                        h=c.stack.pop();
                        c.stack.push({
                            Type:h.Type,
                            Value:h.Value-1
                        });
                        break;
                    case d.Delete:
                        g=c.stack.pop().Value;
                        a=c.stack.pop();
                        a.Value.del(g);
                        break;
                    default:
                        rar.rar=rar;
                        this.trace&&e.push("skipped: 0x"+g.ActionCode.toString(16))
                }
            }
            this.trace&&fljs.console("actions").info(e.join("\n"))
        }
    });
    fljs.swf.act.Context=function(a,b,c,d,e){
        this.self=a;
        if(this.parent=b)this.root=b.root?b.root:b;
        this.withCtx=d;
        this.stack=[];
        this.interp=c;
        this.locals=this.withCtx?this.parent.locals:new fljs.swf.act.Object;
        if(!this.withCtx){
            a=fljs.Player.getInstance().mainTimeline.getAs2Object();
            this.locals.set("_root",{
                Type:11,
                Value:a
            });
            this.locals.set("_level0",{
                Type:11,
                Value:a
            });
            this.locals.set("_global",{
                Type:11,
                Value:c.globals
            });
            if(this.self){
                for(c=this;!c.self;)c=c.parent;
                b=c.self;
                c=b.dispObj.getParent()?b.dispObj.getParent().getAs2Object():
                a
            }else b=c=a;
            this.locals.set("_parent",{
                Type:11,
                Value:c
            });
            e||this.locals.set("this",{
                Type:11,
                Value:b
            })
        }
        this.regs=[]
    };
    fljs.addMethods(fljs.swf.act.Context,{
        set:function(a,b){
            if(a in this.locals)this.locals.set(a,b);
            else{
                if(this.withCtx)if(a in this.self){
                    this.self.set(a,b);
                    return
                }
                this.parent?this.parent.set(a,b):this.self.set(a,b)
            }
        },
        setLocal:function(a,b){
            this.parent?this.locals.set(a,b):this.set(a,b)
        },
        get:function(a){
            var b;
            b=this.locals.get(a);
            if(b.Type!=3)return b;
            if(this.withCtx){
                b=this.self.get(a);
                if(b.Type!=3)return b
            }
            if(this.parent)return this.parent.get(a);else b=this.root?this.root.get(a):this.self.get(a);
            if(b.Type!=3)return b;
            return this.interp.globals.get(a)
        },
        reg:function(a){
            return this.regs[a]
        },
        setReg:function(a,b){
            this.regs[a]=b
        },
        resolvePath:function(a){
            var b;
            b=a.indexOf(".")==-1?"/":".";
            a=a.split(b);
            b=this.self;
            if(a[0]==""&&a.length>1)b=this.root?this.root.self:this.self;
            for(var c in a){
                var d=a[c];
                if(d)if(d!=".")b=d==".."?b.parent.Value:b.dispObj.__childNames[d].getAs2Object()
            }
            return b
        },
        setTarget:function(a){
            if(a){
                a=this.resolvePath(a);
                if(!this.origTarget)this.origTarget=this.self
            }else a=this.origTarget;
            this.self=a
        }
    });
    fljs.swf.act.ConstantsPool=function(){
        this.consts=[]
    };

    fljs.addMethods(fljs.swf.act.ConstantsPool,{
        clear:function(){
            this.consts=[]
        },
        push:function(a){
            this.consts.push(a)
        },
        lookup:function(a){
            return this.consts[a]
        }
    });
    fljs.swf.act.Object=function(){
        this.self={};

        this.funcs={};

        this.props={}
    };

    fljs.swf.act.Object.Type={
        Bool:5,
        Func:10
    };
    fljs.addMethods(fljs.swf.act.Object,{
        setNativeFunc:function(a,b){
            this.funcs[a]=b
        },
        setNativeProperty:function(a,b){
            this.props[a]=b
        },
        set:function(a,b){
            if(this.props&&a in this.props)this["set_"+this.props[a]](b);else this.self[a]=b
        },
        get:function(a){
            if(this.funcs&&a in this.funcs)return{
                Type:10,
                Value:this[this.funcs[a]]
            };

            if(this.props&&a in this.props)return this["get_"+this.props[a]]();
            else if(this.self&&a in this.self){
                a=this.self[a];
                return a==null?{
                    Type:2,
                    Value:null
                }:a
            }else return{
                Type:3,
                Value:undefined
            }
        },
        del:function(a){
            if(this.props&&a in this.props)this["set_"+this.props[a]]({
                Type:3,
                Value:undefined
            });else delete this.self[a]
        }
    });
    fljs.swf.act.MovieClip=function(a){
        fljs.swf.act.Object.call(this);
        this.dispObj=a;
        this.logger=fljs.console("mcaction");
        this.funcs=fljs.swf.act.MovieClip.funcs;
        this.props=fljs.swf.act.MovieClip.props
    };

    fljs.inherits(fljs.swf.act.MovieClip,fljs.swf.act.Object);
    fljs.swf.act.MovieClip.props={
        _framesloaded:"_framesloaded",
        _visible:"_visible",
        _x:"_x",
        _y:"_y",
        onEnterFrame:"onEnterFrame",
        onRollOver:"onRollOver",
        onRollOut:"onRollOut",
        onPress:"onPress",
        onRelease:"onRelease",
        _xmouse:"_ymouse",
        _xscale:"_xscale",
        _yscale:"_yscale",
        _width:"_width"
    };
    fljs.swf.act.MovieClip.funcs={
        nextFrame:"nextFrame",
        prevFrame:"prevFrame",
        gotoFrame:"gotoFrame",
        gotoAndStop:"gotoFrame",
        gotoAndPlay:"gotoAndPlay",
        play:"play",
        stop:"stop",
        localToGlobal:"localToGlobal",
        hitTest:"hitTest",
        getBytesLoaded:"getBytesLoaded",
        getBytesTotal:"getBytesTotal"
    };
    fljs.addMethods(fljs.swf.act.MovieClip,{
        get:function(a){
            var b=this.dispObj.__childNames[a];
            return b?{
                Type:11,
                Value:b.getAs2Object()
            }:fljs.base(this,"get",a)
        },
        nextFrame:function(){
            this.logger.info("nextFrame");
            this.dispObj.currentFrameIndex_<this.dispObj.totalFrames_-1&&this.dispObj.nextFrame()
        },
        prevFrame:function(){
            this.logger.info("prevFrame");
            this.dispObj.currentFrameIndex_>0&&this.dispObj.prevFrame()
        },
        gotoFrame:function(a){
            this.logger.info("gotoFrame: "+a);
            this.dispObj.gotoAndStop(a.Value)
        },
        gotoAndPlay:function(a){
            this.logger.info("gotoAndPlay: "+
                a);
            this.dispObj.gotoAndPlay(a.Value)
        },
        play:function(){
            this.logger.info("play");
            this.dispObj.play()
        },
        stop:function(){
            this.logger.info("stop");
            this.dispObj.stop()
        },
        getUrl:function(a,b){
            if(b.Value=="")window.location=a.Value;
            if(a.Value.substr(0,10)=="FSCommand:")switch(a.Value.substr(10)){
                case "quit":
                    fljs.Player.getInstance().pause();
                    break;
                case "fullscreen":
                    break;
                case "allowscale":
                    break;
                case "showmenu":
                    break;
                case "exec":
                    break;
                case "trapallkeys":
                    break
            }else{
                b=b.Value;
                if(fljs.agent.OS==
                    "iPhone"||fljs.agent.OS=="iPad")if(b=="_blank")b="_self";
                window.open(a.Value,b);
                return{
                    Type:0,
                    Value:""
                }
            }
        },
        localToGlobal:function(a){
            a=new flash.geom.Point(a.Value.get("x"),a.Value.get("y"));
            a=this.dispObj.localToGlobal(a);
            var b=new fljs.swf.act.Object;
            b.set("x",a.x);
            b.set("y",a.y);
            return{
                Type:11,
                Value:b
            }
        },
        hitTest:function(a,b,c){
            if(arguments.length==1){
                c=arguments[0];
                var d;
                if(c.Type!=0)d=c.Value;
                return{
                    Type:5,
                    Value:this.dispObj.hitTestObject(d.Value.dispObj)
                }
            }
        },
        getBytesLoaded:function(){
            return{
                Type:1,
                Value:this.dispObj.__bytesLoaded
            }
        },
        getBytesTotal:function(){
            return{
                Type:1,
                Value:this.dispObj.__bytesTotal
            }
        },
        get__framesloaded:function(){
            return{
                Type:1,
                Value:this.dispObj.framesLoaded_
            }
        },
        get__xscale:function(){
            return{
                Type:1,
                Value:this.dispObj.scaleX
            }
        },
        set__xscale:function(a){
            this.dispObj.scaleX=a.Value
        },
        get__yscale:function(){
            return{
                Type:1,
                Value:this.dispObj.scaleY
            }
        },
        set__yscale:function(a){
            this.dispObj.scaleY=a.Value
        },
        get__visible:function(){
            return{
                Type:5,
                Value:this.dispObj.getVisible()
            }
        },
        set__visible:function(a){
            this.dispObj.setVisible(a.Value)
        },
        get__x:function(){
            return{
                Type:1,
                Value:this.dispObj.x
            }
        },
        set__x:function(a){
            this.dispObj.x=a.Value
        },
        get__y:function(){
            return{
                Type:1,
                Value:this.dispObj.y
            }
        },
        set__y:function(a){
            this.dispObj.y=a.Value
        },
        set_onEnterFrame:function(a){
            this._onEnterFrame=a
        },
        set_onRollOver:function(a){
            this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_OVER,a)
        },
        set_onRollOut:function(a){
            this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_OUT,a)
        },
        set_onPress:function(a){
            this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_DOWN,
                a)
        },
        set_onRelease:function(a){
            this.set_onMouseEvent(flash.events.MouseEvent.MOUSE_UP,a)
        },
        set_onMouseEvent:function(a,b){
            var c=this["_on"+a]&&!(this["_on"+a].Type==2||this["_on"+a].Type==3),d=!(b.Type==2||b.Type==3);
            c&&!d&&this.dispObj.removeEventListener(a,this["_on"+a+"Handler"]);
            if(!c&&d){
                this["_on"+a+"Handler"]||(this["_on"+a+"Handler"]=fljs.bind(this.onMouseEventHandler,this,a));
                this.dispObj.addEventListener(a,this["_on"+a+"Handler"])
            }
            this["_on"+a]=b
        },
        get_xmouse:function(){
            return this.dispObj.get_mouseX()
        },
        get_ymouse:function(){
            return this.dispObj.get_mouseY()
        },
        onMouseEventHandler:function(a){
            fljs.Player.getInstance().interpreter.callback(this,this["_on"+a])
        },
        get__width:function(){
            return{
                Type:1,
                Value:this.dispObj.getWidth()
            }
        },
        set__width:function(a){
            this.dispObj.setWidth(a.Value)
        }
    });
    fljs.swf.act.Mouse=function(){
        fljs.swf.act.Object.call(this);
        this.funcs=fljs.swf.act.Mouse.funcs;
        this.props=fljs.swf.act.Mouse.props
    };

    fljs.inherits(fljs.swf.act.Mouse,fljs.swf.act.Object);
    fljs.swf.act.Mouse.props={};
    fljs.swf.act.Mouse.funcs={
        hide:"hide",
        show:"show",
        addListener:"addListener",
        removeListener:"removeListener"
    };

    fljs.addMethods(fljs.swf.act.Mouse,{
        hide:function(){
            fljs.Player.getInstance().element.getElement().setAttributeNS(null,"cursor",'url("img/nothing.cur")')
        },
        show:function(){
            fljs.Player.getInstance().element.getElement().setAttributeNS(null,"cursor","")
        },
        addListener:function(){},
        removeListener:function(){}
    });
    fljs.swf.act.Mouse._self={};

    fljs.swf.act.Mouse._props={};
    fljs.swf.act.Mouse._funcs={
        hide:"hide",
        show:"show"
    };
    fljs.addStaticMethods(fljs.swf.act.Mouse,{
        set:function(a,b){
            delete this._funcs[a];
            delete this._props[a];
            this._self[a]=b
        },
        get:function(a){
            var b=this._funcs[a];
            if(b)return{
                Type:10,
                Value:this[b]
            };

            if(b=this._props[a])return this[b];
            else{
                a=this._self[a];
                return a==null?{
                    Type:2,
                    Value:null
                }:a
            }
        },
        hide:function(){
            fljs.Player.getInstance().element.getElement().setAttributeNS(null,"cursor",'url("img/nothing.cur")')
        },
        show:function(){
            fljs.Player.getInstance().element.getElement().setAttributeNS(null,"cursor","")
        }
    });
    fljs.swf.act.Sound=function(){
        this.funcs=fljs.swf.act.Sound.funcs;
        this.props={}
    };

    fljs.inherits(fljs.swf.act.Sound,fljs.swf.act.Object);
    fljs.swf.act.Sound.funcs={
        attachSound:"attachSound",
        start:"start",
        stop:"stop"
    };
    fljs.addMethods(fljs.swf.act.Sound,{
        init:function(a){
            this.target=a
        },
        attachSound:function(a){
            var b=fljs.Player.getInstance();
            this.target=b.sounds[b.assets[a.Value]]
        },
        start:function(){
            var a=fljs.Player.getInstance();
            if(!this.audio)this.audio=a.allocAudio();
            var b=this.audio,c=this.target,d=new fljs.swf.StringStream(a.reader.stream.stream.buffer);
            d.byteIndex=c.Mp3SoundData.byteIndex;
            c=d.readBytes(c.Mp3SoundData.byteCount).join("");
            c="data:audio/mpeg;base64,"+btoa(c);
            b.setAttribute("src",c);
            b.addEventListener("load",
                function(){
                    b.currentTime=0;
                    b.fljsPlaying=true;
                    a.playing&&b.play()
                },true);
            b.load()
        },
        stop:function(){
            if(this.audio){
                fljs.Player.getInstance();
                var a=this.audio;
                a.fljsPlaying=false;
                a.pause()
            }
        }
    });
    fljs.swf.act.Math=function(){
        this.funcs=fljs.swf.act.Math.funcs;
        this.props=fljs.swf.act.Math.props
    };

    fljs.inherits(fljs.swf.act.Math,fljs.swf.act.Object);
    fljs.swf.act.Math.props={};

    fljs.swf.act.Math.funcs={
        floor:"floor"
    };

    fljs.addMethods(fljs.swf.act.Math,{
        floor:function(a){
            return{
                Type:1,
                Value:Math.floor(a.Value)
            }
        }
    });
    fljs.swf.act.Math._self={};

    fljs.swf.act.Math._props={};

    fljs.swf.act.Math._funcs={
        floor:"floor",
        random:"random"
    };

    fljs.addStaticMethods(fljs.swf.act.Math,{
        set:function(a,b){
            delete this._funcs[a];
            delete this._props[a];
            this._self[a]=b
        },
        get:function(a){
            var b=this._funcs[a];
            if(b)return{
                Type:10,
                Value:this[b]
            };

            if(b=this._props[a])return this[b];
            else{
                a=this._self[a];
                return a==null?{
                    Type:2,
                    Value:null
                }:a
            }
        },
        floor:function(a){
            return{
                Type:1,
                Value:Math.floor(a.Value)
            }
        },
        random:function(){
            return{
                Type:1,
                Value:Math.random()
            }
        }
    });
    fljs.swf.act.System=function(){
        this.funcs={};

        this.props=fljs.swf.act.System.props;
        this.security=new fljs.swf.act.SystemSecurity
    };

    fljs.inherits(fljs.swf.act.System,fljs.swf.act.Object);
    fljs.swf.act.System.props={
        security:"security"
    };

    fljs.swf.act.SystemSecurity=function(){
        this.funcs=fljs.swf.act.SystemSecurity.funcs;
        this.props={}
    };

    fljs.inherits(fljs.swf.act.SystemSecurity,fljs.swf.act.Object);
    fljs.swf.act.SystemSecurity.funcs={
        allowDomain:"allowDomain"
    };
    fljs.addMethods(fljs.swf.act.SystemSecurity,{
        allowDomain:function(){},
        get_security:function(){
            return{
                Type:11,
                Value:this.security
            }
        }
    });
    fljs.swf.act.String=function(a){
        this.str=a;
        this.funcs=fljs.swf.act.String.funcs;
        this.props={}
    };

    fljs.inherits(fljs.swf.act.String,fljs.swf.act.Object);
    fljs.swf.act.String.funcs={
        substr:"substr"
    };

    fljs.addMethods(fljs.swf.act.String,{
        substr:function(a,b){
            return{
                Type:0,
                Value:this.str.substr(a.Value,b.Value)
            }
        }
    });
    fljs.swf.act.Globals=function(){
        fljs.swf.act.Object.call(this);
        this.funcs=fljs.swf.act.Globals.funcs;
        this.props=fljs.swf.act.Globals.props;
        this.Mouse={
            Type:11,
            Value:fljs.swf.act.Mouse
        };

        this.Sound={
            Type:11,
            Value:fljs.swf.act.Sound
        };

        this.System={
            Type:11,
            Value:fljs.swf.act.System
        };

        this.Math={
            Type:11,
            Value:fljs.swf.act.Math
        }
    };

    fljs.inherits(fljs.swf.act.Globals,fljs.swf.act.Object);
    fljs.swf.act.Globals.props={
        Mouse:"Mouse",
        Sound:"Sound",
        System:"System",
        Math:"Math",
        setInterval:"setInterval",
        clearInterval:"clearInterval"
    };
    fljs.swf.act.Globals.funcs={};
    fljs.addMethods(fljs.swf.act.Globals,{
        get_Mouse:function(){
            return this.Mouse
        },
        get_Sound:function(){
            return this.Sound
        },
        get_System:function(){
            return this.System
        },
        get_Math:function(){
            return this.Math
        },
        get_setInterval:function(){
            return{
                Type:10,
                Value:fljs.bind(this.setInterval,this)
            }
        },
        get_clearInterval:function(){
            return{
                Type:10,
                Value:fljs.bind(this.clearInterval,this)
            }
        },
        setInterval:function(){
            var a=fljs.Player.getInstance().interpreter,b;
            b=[];
            switch(arguments[0].Type){
                case 10:
                    b=[arguments[0].Value,null];
                    for(var c=2;c<arguments.length;c++)b.push(arguments[c]);
                    a=fljs.bind.apply(null,b);
                    b=arguments[1].Value;
                    b=[a,b];
                    break;
                case 11:
                    b=[];
                    for(c=3;c<arguments.length;c++)b.push(arguments[c]);
                    a=fljs.bind(a.callMethod,a,null,arguments[0],arguments[1],b);
                    b=arguments[2].Value;
                    b=[a,b];
                    break;
                case 12:
                    b=[];
                    for(c=2;c<arguments.length;c++)b.push(arguments[c]);
                    a=fljs.bind(a.callFunction,a,null,arguments[0],null,b);
                    b=arguments[1].Value;
                    b=[a,b];
                    break
            }
            return{
                Type:1,
                Value:setInterval.apply(null,b)
            }
        },
        clearInterval:function(a){
            clearInterval(a.Value)
        }
    });
    flash.display.Document=function(){
        flash.display.MovieClip.call(this)
    };

    fljs.inherits(flash.display.Document,flash.display.MovieClip);
    fljs.player.AbsTimeSync=function(a){
        this.frameRate=a
    };

    fljs.addMethods(fljs.player.AbsTimeSync,{
        start:function(){
            this.frameCount=1;
            this.frameStart=0;
            this.startAt=+new Date
        },
        delay:function(){
            this.frameCount++;
            return 1E3*(this.frameCount-this.frameStart)/this.frameRate-(+new Date-this.startAt)
        }
    });
    fljs.player.AudioSync=function(a){
        this.frameRate=a;
        this.oneFrame=1E3/this.frameRate;
        this.audio=null;
        this.frames={};

        this.timeSync=new fljs.player.AbsTimeSync(a)
    };
    fljs.addMethods(fljs.player.AudioSync,{
        setAudio:function(a){
            this.audio=a;
            this.audio.setSync(this)
        },
        setFrameTime:function(a,b){
            this.frames[a]=b
        },
        start:function(a){
            if(this.audio.frameShouldPlay(a)&&typeof this.frames[a]!="undefined")this.audioSync=true;
            else{
                this.timeSync.start();
                this.audioSync=false
            }
            this.lastFrame=a
        },
        stop:function(){},
        delay:function(a){
            if(a!=this.lastFrame+1){
                this.start(a);
                return this.oneFrame
            }
            this.lastFrame=a;
            if(this.audioSync)if(this.audio.frameShouldPlay(a)&&typeof this.frames[a]!=
                "undefined"){
                expTime=this.audio.currentTime();
                time=this.frames[a];
                return time-expTime
            }else{
                this.timeSync.start();
                this.audioSync=false;
                return this.oneFrame
            }else if(this.audio.frameShouldPlay(a)&&typeof this.frames[a]!="undefined"){
                this.audioSync=true;
                return this.oneFrame
            }else return this.timeSync.delay(a)
        }
    });
    fljs.enterFrameDispatcher=function(){
        this.enterFrameListeners=[]
    };
    fljs.addMethods(fljs.enterFrameDispatcher,{
        addEventListener:function(a,b){
            this.enterFrameListeners.push(b)
        },
        removeEventListener:function(a,b){
            for(var c in this.enterFrameListeners)this.enterFrameListeners[c]==b&&this.enterFrameListeners.splice(c,1)
        },
        dispatchEvent:function(a){
            for(var b in this.enterFrameListeners)this.enterFrameListeners[b](a)
        }
    });
    fljs.Player=function(){
        this.muted=this.debug=this.predefine=false;
        this.playing=true;
        this.audioId=1;
        this.audios={};

        this._volume=1;
        this.params={};

        this.renderTextAsGlyphs=false;
        this.loadExtResources=fljs.agent.browser=="Safari"||fljs.agent.browser=="Firefox"||fljs.agent.browser=="Opera"
    };

    fljs.Player.getInstance=function(){
        return fljs.Player._instance||(fljs.Player._instance=new fljs.Player)
    };
    fljs.addMethods(fljs.Player,{
        initialize:function(a){
            fljs.debug=this.debug;
            this.containerElement=a;
            this.dictionary={};

            this.displayList=[];
            this.frameNum=-1;
            this.fontsWithoutInfo={};

            this.fonts={};

            this.fonts2={};

            this.fonts2ByName={};

            this.fonts2ByStyle={};

            this.sounds={};

            this.tagMap=fljs.swf.tag.tagMap;
            this.logger=fljs.console("player");
            this.dispatcher=new fljs.enterFrameDispatcher;
            this.buildSvg();
            this.assets={};

            this.actionQueue=[];
            this.initActionQueue=[];
            this.delayFrame=0;
            this.startTime=fljs.now();
            this.initTimeoutHandler()
        },
        initTimeoutHandler:function(){
            this.timeouts=[];
            this.timeoutMessageName="fljs-timeout-message";
            window.addEventListener("message",fljs.bind(this.timeoutHandler,this),true)
        },
        timeoutHandler:function(a){
            if(a.source==window&&a.data==this.timeoutMessageName){
                a.stopPropagation();
                this.timeouts.length>0&&this.timeouts.shift()()
            }
        },
        setTimeout:function(a){
            this.timeouts.push(a);
            window.postMessage(this.timeoutMessageName,"*")
        },
        buildSvg:function(){
            for(var a=this.containerElement.firstChild,b;a;){
                if(a.nodeName=="SVG"){
                    b=
                    new fljs.dom.Element(a);
                    break
                }
                a=a.nextSibling
            }
            if(!a){
                for(var a=this.containerElement.firstChild,b;a;){
                    b=a.nextSibling;
                    this.containerElement.removeChild(a);
                    a=b
                };

                b=new fljs.dom.Element;
                b.create(fljs.dom.Namespace.Svg,"svg")
            }
            b.set(null,"overflow","hidden");
            b.sets([[null,"width",this.containerElement.offsetWidth],[null,"height",this.containerElement.offsetHeight],[null,"stroke-linecap","round"],[null,"stroke-linejoin","round"],[null,"fill-rule","evenodd"],[null,"clip-rule","evenodd"]]);
            if(fljs.agent.OS=="iPhone"||fljs.agent.OS=="iPad")b.sets([[null,"color-rendering","optimizeSpeed"],[null,"image-rendering",
                "optimizeSpeed"]]);
            b.update();
            this.svg=this.element=this.element_=b;
            a||this.containerElement.appendChild(b.element);
            b=this.defs=new fljs.dom.Element;
            b.create(fljs.dom.Namespace.Svg,"defs");
            this.svg.append(b)
        },
        createStage:function(){
            new flash.display.DisplayObject;
            this.stage=new flash.display.Stage;
            this.stage.setParent(this);
            this.svg.append(this.stage._clipElement);
            this.stage.initialize();
            this.stage.setFrameRate(this.header.FrameRate)
        },
        addDefinition:function(a,b){
            this.dictionary[b]=a
        },
        defineFont:function(a,
            b,c){
            this.fonts[a]={
                glyphCount:b,
                element:c
            };

            this.defs.element.appendChild(c)
        },
        defineFont2:function(a,b,c,d,e,f,g,j){
            this.fonts2[a]={
                glyphCount:b,
                element:c,
                name:d,
                bold:e,
                italic:f,
                codeTable:g,
                tag:j
            };

            this.fonts2ByName[d]=a;
            this.fonts2ByStyle[[d,e,f].toString()]=a;
            for(var h in c)this.defs.append(c[h])
        },
        lookupFontByName:function(a){
            return"font-"+String(this.fonts2ByName[a])
        },
        lookupFontByStyle:function(a,b,c){
            a=[a,b,c].toString();
            return"font-"+String(this.fonts2ByStyle[a])
        },
        addToDisplayList:function(a,
            b){
            this.displayList[b]=a
        },
        loadSwf:function(a,b,c,d,e,f){
            b.style.width=c+"px";
            b.style.height=d+"px";
            this.name=e;
            for(var g in f)this.params[g]=f[g];this.initialize(b);
            (new fljs.swf.SwfLoader).load(a,fljs.bind(this.readSwf,this))
        },
        readSwf:function(a){
            this.parser=new fljs.swf.DefinitionParser(a.stream.buffer);
            this.readHeader();
            this.createStage();
            this.buildMainTimeline();
            this.interpreter=new fljs.swf.act.ActionInterpreter(this);
            this.sync=new fljs.player.AbsTimeSync(this.header.FrameRate);
            this.sync.start();
            this.enterFrame()
        },
        showFrame:function(){
            delay=this.sync.delay(this.mainTimeline.currentFrameIndex_,this.delayFrame);
            delay=Math.max(0,delay);
            this.lastFrameAt=fljs.now();
            this.waitingOnFrame=true;
            if(fljs.agent.browser=="Opera"){
                this.element.getElement().setAttributeNS(null,"fill-color","red");
                this.element.getElement().setAttributeNS(null,"fill-color","none")
            }
            var a=fljs.bind(this.enterFrame,this,this.frameNum);
            delay>=10?setTimeout(a,delay):this.setTimeout(a)
        },
        enterFrame:function(a){
            if(!this.delayFrame){
                this.logger.info("player frame#"+
                    a);
                this.waitingOnFrame=false;
                if(!this.playing)return;
                this.frameNum+=1;
                var b;
                if(this.element.getElement().suspendRedraw)b=this.element.getElement().suspendRedraw(100);
                this.dispatcher.dispatchEvent(new flash.events.Event(flash.events.Event.ENTER_FRAME));
                this.parser.readSomeTags(this);
                this.doActionQueue();
                this.element.getElement().unsuspendRedraw&&this.element.getElement().unsuspendRedraw(b)
            }
            this.showFrame()
        },
        doActions:function(a,b){
            this.actionQueue.push({
                target:this.containingDispObj(a).getAs2Object(),
                actions:b
            })
        },
        doInitAction:function(a){
            this.initActionQueue.push({
                target:null,
                actions:a.Actions
            })
        },
        containingDispObj:function(a){
            for(;!(a instanceof flash.display.MovieClip&&!a.getEnabled());)a=a.getParent();
            return a
        },
        doActionQueue:function(){
            for(var a in this.initActionQueue){
                var b=this.initActionQueue[a];
                this.interpreter.eval(null,b.actions)
            }
            this.initActionQueue=[];
            for(a in this.actionQueue){
                b=this.actionQueue[a];
                this.interpreter.eval(b.target,b.actions)
            }
            this.actionQueue=[]
        },
        readHeader:function(){
            var a=
            this.parser.readHeader();
            this.header=a;
            this.swfVersion=a.Version;
            var b=a.FrameSize.Xmin,c=a.FrameSize.Ymin;
            this.svg.sets([[null,"viewBox",[b,c,a.FrameSize.Xmax-b,a.FrameSize.Ymax-c].join(" ")],[null,"preserveAspectRatio","none"]]);
            this.svg.update()
        },
        buildMainTimeline:function(){
            var a=new flash.display.Document;
            a.setName("_root");
            a.__frameNum=0;
            var b=new flash.display.Scene;
            b.labels=[];
            b.name="Scene 1";
            b.numFrames=this.header.FrameCount;
            a.frameData_=[];
            for(var c=0;c<this.header.FrameCount;c++)a.frameData_.push({
                scripts:[],
                parts:[],
                tags:[],
                label:""
            });
            a.labels_={};

            a.sceneIndices_={};

            a.currentSceneIndex_=0;
            a.scenes_=[b];
            a.currentFrameIndex_=0;
            a.currentLabel_=null;
            a._enabled=false;
            a.framesLoaded_=0;
            a.totalFrames_=this.header.FrameCount;
            a.next_=null;
            a.playing_=true;
            a.__bytesLoaded=this.parser.reader.stream.stream.byteIndex;
            a.__bytesTotal=this.header.FileLength;
            this.mainTimeline=a;
            b=a.getAs2Object();
            for(c in this.params)b.set(c,{
                Type:0,
                Value:this.params[c]
            });this.stage.addChild(a);
            a.onCreate()
        },
        play:function(){
            if(!this.playing){
                for(var a in this.audios){
                    var b=
                    this.audios[a];
                    b.fljsPlaying&&b.play()
                }
                this.playing=true;
                this.setPlayingControl();
                this.waitingOnFrame||this.enterFrame()
            }
        },
        pause:function(){
            if(this.playing){
                this.playing=false;
                this.setPlayingControl();
                for(var a in this.audios)this.audios[a].pause()
            }
        },
        mute:function(){
            this.prevVolume=this.getVolume();
            this.setVolume(0);
            this.setVolumeControl();
            for(var a in this.audios)this.audioSetVolume(this.audios[a])
        },
        unmute:function(){
            this.setVolume(this.prevVolume);
            this.setVolumeControl();
            for(var a in this.audios)this.audioSetVolume(this.audios[a])
        },
        allocAudio:function(){
            var a=new Audio,b=this;
            a.addEventListener("loadedmetadata",function(){
                b.audioSetVolume(a)
            },false);
            a.fljsPlay=a.play;
            a.play=function(){
                a.fljsPlaying=true;
                b.playing&&a.fljsPlay()
            };

            a.fljsId=this.audioId++;
            return this.audios[a.fljsId]=a
        },
        releaseAudio:function(a){
            delete this.audios[a.fljsId]
        },
        audioSetVolume:function(a){
            if(!a.fljsWaiting){
                a.volume=Math.max(0,Math.min(this._volume+0.0010,1));
                a.volume=Math.max(0,Math.min(this._volume,1))
            }
        },
        buildControls:function(a){
            if(fljs.agent.browser!=
                "Explorer"){
                var b=a.ownerDocument,c=b.createElement("input");
                c.setAttribute("type","button");
                var d=this;
                c.addEventListener("click",function(){
                    d.playing?d.pause():d.play()
                },true);
                a.appendChild(c);
                b=b.createElement("input");
                b.setAttribute("type","button");
                b.addEventListener("click",function(){
                    d.getVolume()>0?d.mute():d.unmute()
                },true);
                a.appendChild(b);
                this.controls={
                    playing:c,
                    volume:b
                };

                this.setPlayingControl();
                this.setVolumeControl()
            }
        },
        setPlayingControl:function(){
            if(this.controls)this.controls.playing.value=
                this.playing?"pause":"play"
        },
        setVolumeControl:function(){
            if(this.controls)this.controls.volume.value=this.muted?"unmute":"mute"
        },
        getVolume:function(){
            return this._volume==0.999?1:this._volume
        },
        setSolume:function(a){
            this.prevVolume=this._volume;
            this._volume=a;
            this.muted=this._volume==0;
            if(this._volume==1)this._volume=0.999;
            this.setVolumeControl()
        }
    });
    fljs.base64={};

    fljs.base64.chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    fljs.base64.atob=function(a){
        for(var b=a.length,c=[],d=0,e,f,g,j,h,m=fljs.base64.chars;d<b;){
            e=m.indexOf(a.charAt(d++));
            f=m.indexOf(a.charAt(d++));
            g=m.indexOf(a.charAt(d++));
            j=m.indexOf(a.charAt(d++));
            e=e<<2|f>>4;
            f=(f&15)<<4|g>>2;
            h=(g&3)<<6|j;
            c.push(String.fromCharCode(4096|e));
            g!=64&&c.push(String.fromCharCode(4096|f));
            j!=64&&c.push(String.fromCharCode(4096|h))
        }
        String(c.join(""))
    };
    fljs.swf.SwfLoader=function(){
        var a;
        this.complete=false;
        try{
            a=new XMLHttpRequest
        }catch(b){
            a=false
        }
        if(!a)return null;
        this.xmlhttp=a
    };
    fljs.addMethods(fljs.swf.SwfLoader,{
        load:function(a,b){
            if(fljs.agent.browser=="Explorer"||fljs.agent.browser=="Opera")a+=".b64";
            this.logger=fljs.console("demo");
            this.complete=false;
            try{
                this.xmlhttp.overrideMimeType&&this.xmlhttp.overrideMimeType("text/plain; charset=x-user-defined");
                this.xmlhttp.open("GET",a,true);
                this.xmlhttp.onreadystatechange=fljs.bind(this.onLoad,this,b);
                this.xmlhttp.send(null)
            }catch(c){
                return false
            }
            return true
        },
        onLoad:function(a){
            if(!(this.xmlhttp.readyState!=4||this.complete)){
                this.complete=
                true;
                var b;
                b=fljs.agent.browser=="Explorer"?fljs.base64.atob(this.xmlhttp.responseText):fljs.agent.browser=="Opera"?window.atob(this.xmlhttp.responseText):this.xmlhttp.responseText;
                b=new fljs.swf.StringStream(b);
                b=new fljs.swf.SwfStream(b);
                a(b)
            }
        }
    });
    var player=fljs.Player.getInstance();
    player.loadSwf(url,element,width,height,name,params);
    return player
}

