Created
May 29, 2010 10:07
-
-
Save simonw/418177 to your computer and use it in GitHub Desktop.
This file contains 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