- 
      
- 
        Save vhanla/3159192 to your computer and use it in GitHub Desktop. 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | /** | |
| * Smokescreen v0.1.2 - Chris Smoak <[email protected]> | |
| * 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 | |
| } | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment