test-scribe
Version:
Your sidekick for analog machine development. Run machines interactively and generate automated test scripts based on the outcome.
5,604 lines • 225 kB
JavaScript
"no use strict";
(function(e) {
if (typeof e.window != "undefined" && e.document) return;
e.console = function() {
var e = Array.prototype.slice.call(arguments, 0);
postMessage({
type: "log",
data: e
})
}, e.console.error = e.console.warn = e.console.log = e.console.trace = e.console, e.window = e, e.ace = e, e.onerror = function(e, t, n, r, i) {
postMessage({
type: "error",
data: {
message: e,
file: t,
line: n,
col: r,
stack: i.stack
}
})
}, e.normalizeModule = function(t, n) {
if (n.indexOf("!") !== -1) {
var r = n.split("!");
return e.normalizeModule(t, r[0]) + "!" + e.normalizeModule(t, r[1])
}
if (n.charAt(0) == ".") {
var i = t.split("/").slice(0, -1).join("/");
n = (i ? i + "/" : "") + n;
while (n.indexOf(".") !== -1 && s != n) {
var s = n;
n = n.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, "")
}
}
return n
}, e.require = function(t, n) {
n || (n = t, t = null);
if (!n.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments");
n = e.normalizeModule(t, n);
var r = e.require.modules[n];
if (r) return r.initialized || (r.initialized = !0, r.exports = r.factory().exports), r.exports;
var i = n.split("/");
if (!e.require.tlns) return console.log("unable to load " + n);
i[0] = e.require.tlns[i[0]] || i[0];
var s = i.join("/") + ".js";
return e.require.id = n, importScripts(s), e.require(t, n)
}, e.require.modules = {}, e.require.tlns = {}, e.define = function(t, n, r) {
arguments.length == 2 ? (r = n, typeof t != "string" && (n = t, t = e.require.id)) : arguments.length == 1 && (r = t, n = [], t = e.require.id);
if (typeof r != "function") {
e.require.modules[t] = {
exports: r,
initialized: !0
};
return
}
n.length || (n = ["require", "exports", "module"]);
var i = function(n) {
return e.require(t, n)
};
e.require.modules[t] = {
exports: {},
factory: function() {
var e = this,
t = r.apply(this, n.map(function(t) {
switch (t) {
case "require":
return i;
case "exports":
return e.exports;
case "module":
return e;
default:
return i(t)
}
}));
return t && (e.exports = t), e
}
}
}, e.define.amd = {}, e.initBaseUrls = function(t) {
require.tlns = t
}, e.initSender = function() {
var n = e.require("ace/lib/event_emitter").EventEmitter,
r = e.require("ace/lib/oop"),
i = function() {};
return function() {
r.implement(this, n), this.callback = function(e, t) {
postMessage({
type: "call",
id: t,
data: e
})
}, this.emit = function(e, t) {
postMessage({
type: "event",
name: e,
data: t
})
}
}.call(i.prototype), new i
};
var t = e.main = null,
n = e.sender = null;
e.onmessage = function(r) {
var i = r.data;
if (i.command) {
if (!t[i.command]) throw new Error("Unknown command:" + i.command);
t[i.command].apply(t, i.args)
} else if (i.init) {
initBaseUrls(i.tlns), require("ace/lib/es5-shim"), n = e.sender = initSender();
var s = require(i.module)[i.classname];
t = e.main = new s(n)
} else i.event && n && n._signal(i.event, i.data)
}
})(this), ace.define("ace/lib/oop", ["require", "exports", "module"], function(e, t, n) {
"use strict";
t.inherits = function(e, t) {
e.super_ = t, e.prototype = Object.create(t.prototype, {
constructor: {
value: e,
enumerable: !1,
writable: !0,
configurable: !0
}
})
}, t.mixin = function(e, t) {
for (var n in t) e[n] = t[n];
return e
}, t.implement = function(e, n) {
t.mixin(e, n)
}
}), ace.define("ace/lib/event_emitter", ["require", "exports", "module"], function(e, t, n) {
"use strict";
var r = {},
i = function() {
this.propagationStopped = !0
},
s = function() {
this.defaultPrevented = !0
};
r._emit = r._dispatchEvent = function(e, t) {
this._eventRegistry || (this._eventRegistry = {}), this._defaultHandlers || (this._defaultHandlers = {});
var n = this._eventRegistry[e] || [],
r = this._defaultHandlers[e];
if (!n.length && !r) return;
if (typeof t != "object" || !t) t = {};
t.type || (t.type = e), t.stopPropagation || (t.stopPropagation = i), t.preventDefault || (t.preventDefault = s), n = n.slice();
for (var o = 0; o < n.length; o++) {
n[o](t, this);
if (t.propagationStopped) break
}
if (r && !t.defaultPrevented) return r(t, this)
}, r._signal = function(e, t) {
var n = (this._eventRegistry || {})[e];
if (!n) return;
n = n.slice();
for (var r = 0; r < n.length; r++) n[r](t, this)
}, r.once = function(e, t) {
var n = this;
t && this.addEventListener(e, function r() {
n.removeEventListener(e, r), t.apply(null, arguments)
})
}, r.setDefaultHandler = function(e, t) {
var n = this._defaultHandlers;
n || (n = this._defaultHandlers = {
_disabled_: {}
});
if (n[e]) {
var r = n[e],
i = n._disabled_[e];
i || (n._disabled_[e] = i = []), i.push(r);
var s = i.indexOf(t);
s != -1 && i.splice(s, 1)
}
n[e] = t
}, r.removeDefaultHandler = function(e, t) {
var n = this._defaultHandlers;
if (!n) return;
var r = n._disabled_[e];
if (n[e] == t) {
var i = n[e];
r && this.setDefaultHandler(e, r.pop())
} else if (r) {
var s = r.indexOf(t);
s != -1 && r.splice(s, 1)
}
}, r.on = r.addEventListener = function(e, t, n) {
this._eventRegistry = this._eventRegistry || {};
var r = this._eventRegistry[e];
return r || (r = this._eventRegistry[e] = []), r.indexOf(t) == -1 && r[n ? "unshift" : "push"](t), t
}, r.off = r.removeListener = r.removeEventListener = function(e, t) {
this._eventRegistry = this._eventRegistry || {};
var n = this._eventRegistry[e];
if (!n) return;
var r = n.indexOf(t);
r !== -1 && n.splice(r, 1)
}, r.removeAllListeners = function(e) {
this._eventRegistry && (this._eventRegistry[e] = [])
}, t.EventEmitter = r
}), ace.define("ace/range", ["require", "exports", "module"], function(e, t, n) {
"use strict";
var r = function(e, t) {
return e.row - t.row || e.column - t.column
},
i = function(e, t, n, r) {
this.start = {
row: e,
column: t
}, this.end = {
row: n,
column: r
}
};
(function() {
this.isEqual = function(e) {
return this.start.row === e.start.row && this.end.row === e.end.row && this.start.column === e.start.column && this.end.column === e.end.column
}, this.toString = function() {
return "Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]"
}, this.contains = function(e, t) {
return this.compare(e, t) == 0
}, this.compareRange = function(e) {
var t, n = e.end,
r = e.start;
return t = this.compare(n.row, n.column), t == 1 ? (t = this.compare(r.row, r.column), t == 1 ? 2 : t == 0 ? 1 : 0) : t == -1 ? -2 : (t = this.compare(r.row, r.column), t == -1 ? -1 : t == 1 ? 42 : 0)
}, this.comparePoint = function(e) {
return this.compare(e.row, e.column)
}, this.containsRange = function(e) {
return this.comparePoint(e.start) == 0 && this.comparePoint(e.end) == 0
}, this.intersects = function(e) {
var t = this.compareRange(e);
return t == -1 || t == 0 || t == 1
}, this.isEnd = function(e, t) {
return this.end.row == e && this.end.column == t
}, this.isStart = function(e, t) {
return this.start.row == e && this.start.column == t
}, this.setStart = function(e, t) {
typeof e == "object" ? (this.start.column = e.column, this.start.row = e.row) : (this.start.row = e, this.start.column = t)
}, this.setEnd = function(e, t) {
typeof e == "object" ? (this.end.column = e.column, this.end.row = e.row) : (this.end.row = e, this.end.column = t)
}, this.inside = function(e, t) {
return this.compare(e, t) == 0 ? this.isEnd(e, t) || this.isStart(e, t) ? !1 : !0 : !1
}, this.insideStart = function(e, t) {
return this.compare(e, t) == 0 ? this.isEnd(e, t) ? !1 : !0 : !1
}, this.insideEnd = function(e, t) {
return this.compare(e, t) == 0 ? this.isStart(e, t) ? !1 : !0 : !1
}, this.compare = function(e, t) {
return !this.isMultiLine() && e === this.start.row ? t < this.start.column ? -1 : t > this.end.column ? 1 : 0 : e < this.start.row ? -1 : e > this.end.row ? 1 : this.start.row === e ? t >= this.start.column ? 0 : -1 : this.end.row === e ? t <= this.end.column ? 0 : 1 : 0
}, this.compareStart = function(e, t) {
return this.start.row == e && this.start.column == t ? -1 : this.compare(e, t)
}, this.compareEnd = function(e, t) {
return this.end.row == e && this.end.column == t ? 1 : this.compare(e, t)
}, this.compareInside = function(e, t) {
return this.end.row == e && this.end.column == t ? 1 : this.start.row == e && this.start.column == t ? -1 : this.compare(e, t)
}, this.clipRows = function(e, t) {
if (this.end.row > t) var n = {
row: t + 1,
column: 0
};
else if (this.end.row < e) var n = {
row: e,
column: 0
};
if (this.start.row > t) var r = {
row: t + 1,
column: 0
};
else if (this.start.row < e) var r = {
row: e,
column: 0
};
return i.fromPoints(r || this.start, n || this.end)
}, this.extend = function(e, t) {
var n = this.compare(e, t);
if (n == 0) return this;
if (n == -1) var r = {
row: e,
column: t
};
else var s = {
row: e,
column: t
};
return i.fromPoints(r || this.start, s || this.end)
}, this.isEmpty = function() {
return this.start.row === this.end.row && this.start.column === this.end.column
}, this.isMultiLine = function() {
return this.start.row !== this.end.row
}, this.clone = function() {
return i.fromPoints(this.start, this.end)
}, this.collapseRows = function() {
return this.end.column == 0 ? new i(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0) : new i(this.start.row, 0, this.end.row, 0)
}, this.toScreenRange = function(e) {
var t = e.documentToScreenPosition(this.start),
n = e.documentToScreenPosition(this.end);
return new i(t.row, t.column, n.row, n.column)
}, this.moveBy = function(e, t) {
this.start.row += e, this.start.column += t, this.end.row += e, this.end.column += t
}
}).call(i.prototype), i.fromPoints = function(e, t) {
return new i(e.row, e.column, t.row, t.column)
}, i.comparePoints = r, i.comparePoints = function(e, t) {
return e.row - t.row || e.column - t.column
}, t.Range = i
}), ace.define("ace/anchor", ["require", "exports", "module", "ace/lib/oop", "ace/lib/event_emitter"], function(e, t, n) {
"use strict";
var r = e("./lib/oop"),
i = e("./lib/event_emitter").EventEmitter,
s = t.Anchor = function(e, t, n) {
this.$onChange = this.onChange.bind(this), this.attach(e), typeof n == "undefined" ? this.setPosition(t.row, t.column) : this.setPosition(t, n)
};
(function() {
r.implement(this, i), this.getPosition = function() {
return this.$clipPositionToDocument(this.row, this.column)
}, this.getDocument = function() {
return this.document
}, this.$insertRight = !1, this.onChange = function(e) {
var t = e.data,
n = t.range;
if (n.start.row == n.end.row && n.start.row != this.row) return;
if (n.start.row > this.row) return;
if (n.start.row == this.row && n.start.column > this.column) return;
var r = this.row,
i = this.column,
s = n.start,
o = n.end;
if (t.action === "insertText")
if (s.row === r && s.column <= i) {
if (s.column !== i || !this.$insertRight) s.row === o.row ? i += o.column - s.column : (i -= s.column, r += o.row - s.row)
} else s.row !== o.row && s.row < r && (r += o.row - s.row);
else t.action === "insertLines" ? (s.row !== r || i !== 0 || !this.$insertRight) && s.row <= r && (r += o.row - s.row) : t.action === "removeText" ? s.row === r && s.column < i ? o.column >= i ? i = s.column : i = Math.max(0, i - (o.column - s.column)) : s.row !== o.row && s.row < r ? (o.row === r && (i = Math.max(0, i - o.column) + s.column), r -= o.row - s.row) : o.row === r && (r -= o.row - s.row, i = Math.max(0, i - o.column) + s.column) : t.action == "removeLines" && s.row <= r && (o.row <= r ? r -= o.row - s.row : (r = s.row, i = 0));
this.setPosition(r, i, !0)
}, this.setPosition = function(e, t, n) {
var r;
n ? r = {
row: e,
column: t
} : r = this.$clipPositionToDocument(e, t);
if (this.row == r.row && this.column == r.column) return;
var i = {
row: this.row,
column: this.column
};
this.row = r.row, this.column = r.column, this._signal("change", {
old: i,
value: r
})
}, this.detach = function() {
this.document.removeEventListener("change", this.$onChange)
}, this.attach = function(e) {
this.document = e || this.document, this.document.on("change", this.$onChange)
}, this.$clipPositionToDocument = function(e, t) {
var n = {};
return e >= this.document.getLength() ? (n.row = Math.max(0, this.document.getLength() - 1), n.column = this.document.getLine(n.row).length) : e < 0 ? (n.row = 0, n.column = 0) : (n.row = e, n.column = Math.min(this.document.getLine(n.row).length, Math.max(0, t))), t < 0 && (n.column = 0), n
}
}).call(s.prototype)
}), ace.define("ace/document", ["require", "exports", "module", "ace/lib/oop", "ace/lib/event_emitter", "ace/range", "ace/anchor"], function(e, t, n) {
"use strict";
var r = e("./lib/oop"),
i = e("./lib/event_emitter").EventEmitter,
s = e("./range").Range,
o = e("./anchor").Anchor,
u = function(e) {
this.$lines = [], e.length === 0 ? this.$lines = [""] : Array.isArray(e) ? this._insertLines(0, e) : this.insert({
row: 0,
column: 0
}, e)
};
(function() {
r.implement(this, i), this.setValue = function(e) {
var t = this.getLength();
this.remove(new s(0, 0, t, this.getLine(t - 1).length)), this.insert({
row: 0,
column: 0
}, e)
}, this.getValue = function() {
return this.getAllLines().join(this.getNewLineCharacter())
}, this.createAnchor = function(e, t) {
return new o(this, e, t)
}, "aaa".split(/a/).length === 0 ? this.$split = function(e) {
return e.replace(/\r\n|\r/g, "\n").split("\n")
} : this.$split = function(e) {
return e.split(/\r\n|\r|\n/)
}, this.$detectNewLine = function(e) {
var t = e.match(/^.*?(\r\n|\r|\n)/m);
this.$autoNewLine = t ? t[1] : "\n", this._signal("changeNewLineMode")
}, this.getNewLineCharacter = function() {
switch (this.$newLineMode) {
case "windows":
return "\r\n";
case "unix":
return "\n";
default:
return this.$autoNewLine || "\n"
}
}, this.$autoNewLine = "", this.$newLineMode = "auto", this.setNewLineMode = function(e) {
if (this.$newLineMode === e) return;
this.$newLineMode = e, this._signal("changeNewLineMode")
}, this.getNewLineMode = function() {
return this.$newLineMode
}, this.isNewLine = function(e) {
return e == "\r\n" || e == "\r" || e == "\n"
}, this.getLine = function(e) {
return this.$lines[e] || ""
}, this.getLines = function(e, t) {
return this.$lines.slice(e, t + 1)
}, this.getAllLines = function() {
return this.getLines(0, this.getLength())
}, this.getLength = function() {
return this.$lines.length
}, this.getTextRange = function(e) {
if (e.start.row == e.end.row) return this.getLine(e.start.row).substring(e.start.column, e.end.column);
var t = this.getLines(e.start.row, e.end.row);
t[0] = (t[0] || "").substring(e.start.column);
var n = t.length - 1;
return e.end.row - e.start.row == n && (t[n] = t[n].substring(0, e.end.column)), t.join(this.getNewLineCharacter())
}, this.$clipPosition = function(e) {
var t = this.getLength();
return e.row >= t ? (e.row = Math.max(0, t - 1), e.column = this.getLine(t - 1).length) : e.row < 0 && (e.row = 0), e
}, this.insert = function(e, t) {
if (!t || t.length === 0) return e;
e = this.$clipPosition(e), this.getLength() <= 1 && this.$detectNewLine(t);
var n = this.$split(t),
r = n.splice(0, 1)[0],
i = n.length == 0 ? null : n.splice(n.length - 1, 1)[0];
return e = this.insertInLine(e, r), i !== null && (e = this.insertNewLine(e), e = this._insertLines(e.row, n), e = this.insertInLine(e, i || "")), e
}, this.insertLines = function(e, t) {
return e >= this.getLength() ? this.insert({
row: e,
column: 0
}, "\n" + t.join("\n")) : this._insertLines(Math.max(e, 0), t)
}, this._insertLines = function(e, t) {
if (t.length == 0) return {
row: e,
column: 0
};
while (t.length > 61440) {
var n = this._insertLines(e, t.slice(0, 61440));
t = t.slice(61440), e = n.row
}
var r = [e, 0];
r.push.apply(r, t), this.$lines.splice.apply(this.$lines, r);
var i = new s(e, 0, e + t.length, 0),
o = {
action: "insertLines",
range: i,
lines: t
};
return this._signal("change", {
data: o
}), i.end
}, this.insertNewLine = function(e) {
e = this.$clipPosition(e);
var t = this.$lines[e.row] || "";
this.$lines[e.row] = t.substring(0, e.column), this.$lines.splice(e.row + 1, 0, t.substring(e.column, t.length));
var n = {
row: e.row + 1,
column: 0
},
r = {
action: "insertText",
range: s.fromPoints(e, n),
text: this.getNewLineCharacter()
};
return this._signal("change", {
data: r
}), n
}, this.insertInLine = function(e, t) {
if (t.length == 0) return e;
var n = this.$lines[e.row] || "";
this.$lines[e.row] = n.substring(0, e.column) + t + n.substring(e.column);
var r = {
row: e.row,
column: e.column + t.length
},
i = {
action: "insertText",
range: s.fromPoints(e, r),
text: t
};
return this._signal("change", {
data: i
}), r
}, this.remove = function(e) {
e instanceof s || (e = s.fromPoints(e.start, e.end)), e.start = this.$clipPosition(e.start), e.end = this.$clipPosition(e.end);
if (e.isEmpty()) return e.start;
var t = e.start.row,
n = e.end.row;
if (e.isMultiLine()) {
var r = e.start.column == 0 ? t : t + 1,
i = n - 1;
e.end.column > 0 && this.removeInLine(n, 0, e.end.column), i >= r && this._removeLines(r, i), r != t && (this.removeInLine(t, e.start.column, this.getLine(t).length), this.removeNewLine(e.start.row))
} else this.removeInLine(t, e.start.column, e.end.column);
return e.start
}, this.removeInLine = function(e, t, n) {
if (t == n) return;
var r = new s(e, t, e, n),
i = this.getLine(e),
o = i.substring(t, n),
u = i.substring(0, t) + i.substring(n, i.length);
this.$lines.splice(e, 1, u);
var a = {
action: "removeText",
range: r,
text: o
};
return this._signal("change", {
data: a
}), r.start
}, this.removeLines = function(e, t) {
return e < 0 || t >= this.getLength() ? this.remove(new s(e, 0, t + 1, 0)) : this._removeLines(e, t)
}, this._removeLines = function(e, t) {
var n = new s(e, 0, t + 1, 0),
r = this.$lines.splice(e, t - e + 1),
i = {
action: "removeLines",
range: n,
nl: this.getNewLineCharacter(),
lines: r
};
return this._signal("change", {
data: i
}), r
}, this.removeNewLine = function(e) {
var t = this.getLine(e),
n = this.getLine(e + 1),
r = new s(e, t.length, e + 1, 0),
i = t + n;
this.$lines.splice(e, 2, i);
var o = {
action: "removeText",
range: r,
text: this.getNewLineCharacter()
};
this._signal("change", {
data: o
})
}, this.replace = function(e, t) {
e instanceof s || (e = s.fromPoints(e.start, e.end));
if (t.length == 0 && e.isEmpty()) return e.start;
if (t == this.getTextRange(e)) return e.end;
this.remove(e);
if (t) var n = this.insert(e.start, t);
else n = e.start;
return n
}, this.applyDeltas = function(e) {
for (var t = 0; t < e.length; t++) {
var n = e[t],
r = s.fromPoints(n.range.start, n.range.end);
n.action == "insertLines" ? this.insertLines(r.start.row, n.lines) : n.action == "insertText" ? this.insert(r.start, n.text) : n.action == "removeLines" ? this._removeLines(r.start.row, r.end.row - 1) : n.action == "removeText" && this.remove(r)
}
}, this.revertDeltas = function(e) {
for (var t = e.length - 1; t >= 0; t--) {
var n = e[t],
r = s.fromPoints(n.range.start, n.range.end);
n.action == "insertLines" ? this._removeLines(r.start.row, r.end.row - 1) : n.action == "insertText" ? this.remove(r) : n.action == "removeLines" ? this._insertLines(r.start.row, n.lines) : n.action == "removeText" && this.insert(r.start, n.text)
}
}, this.indexToPosition = function(e, t) {
var n = this.$lines || this.getAllLines(),
r = this.getNewLineCharacter().length;
for (var i = t || 0, s = n.length; i < s; i++) {
e -= n[i].length + r;
if (e < 0) return {
row: i,
column: e + n[i].length + r
}
}
return {
row: s - 1,
column: n[s - 1].length
}
}, this.positionToIndex = function(e, t) {
var n = this.$lines || this.getAllLines(),
r = this.getNewLineCharacter().length,
i = 0,
s = Math.min(e.row, n.length);
for (var o = t || 0; o < s; ++o) i += n[o].length + r;
return i + e.column
}
}).call(u.prototype), t.Document = u
}), ace.define("ace/lib/lang", ["require", "exports", "module"], function(e, t, n) {
"use strict";
t.last = function(e) {
return e[e.length - 1]
}, t.stringReverse = function(e) {
return e.split("").reverse().join("")
}, t.stringRepeat = function(e, t) {
var n = "";
while (t > 0) {
t & 1 && (n += e);
if (t >>= 1) e += e
}
return n
};
var r = /^\s\s*/,
i = /\s\s*$/;
t.stringTrimLeft = function(e) {
return e.replace(r, "")
}, t.stringTrimRight = function(e) {
return e.replace(i, "")
}, t.copyObject = function(e) {
var t = {};
for (var n in e) t[n] = e[n];
return t
}, t.copyArray = function(e) {
var t = [];
for (var n = 0, r = e.length; n < r; n++) e[n] && typeof e[n] == "object" ? t[n] = this.copyObject(e[n]) : t[n] = e[n];
return t
}, t.deepCopy = function(e) {
if (typeof e != "object" || !e) return e;
var n = e.constructor;
if (n === RegExp) return e;
var r = n();
for (var i in e) typeof e[i] == "object" ? r[i] = t.deepCopy(e[i]) : r[i] = e[i];
return r
}, t.arrayToMap = function(e) {
var t = {};
for (var n = 0; n < e.length; n++) t[e[n]] = 1;
return t
}, t.createMap = function(e) {
var t = Object.create(null);
for (var n in e) t[n] = e[n];
return t
}, t.arrayRemove = function(e, t) {
for (var n = 0; n <= e.length; n++) t === e[n] && e.splice(n, 1)
}, t.escapeRegExp = function(e) {
return e.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1")
}, t.escapeHTML = function(e) {
return e.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<")
}, t.getMatchOffsets = function(e, t) {
var n = [];
return e.replace(t, function(e) {
n.push({
offset: arguments[arguments.length - 2],
length: e.length
})
}), n
}, t.deferredCall = function(e) {
var t = null,
n = function() {
t = null, e()
},
r = function(e) {
return r.cancel(), t = setTimeout(n, e || 0), r
};
return r.schedule = r, r.call = function() {
return this.cancel(), e(), r
}, r.cancel = function() {
return clearTimeout(t), t = null, r
}, r.isPending = function() {
return t
}, r
}, t.delayedCall = function(e, t) {
var n = null,
r = function() {
n = null, e()
},
i = function(e) {
n == null && (n = setTimeout(r, e || t))
};
return i.delay = function(e) {
n && clearTimeout(n), n = setTimeout(r, e || t)
}, i.schedule = i, i.call = function() {
this.cancel(), e()
}, i.cancel = function() {
n && clearTimeout(n), n = null
}, i.isPending = function() {
return n
}, i
}
}), ace.define("ace/worker/mirror", ["require", "exports", "module", "ace/document", "ace/lib/lang"], function(e, t, n) {
"use strict";
var r = e("../document").Document,
i = e("../lib/lang"),
s = t.Mirror = function(e) {
this.sender = e;
var t = this.doc = new r(""),
n = this.deferredUpdate = i.delayedCall(this.onUpdate.bind(this)),
s = this;
e.on("change", function(e) {
t.applyDeltas(e.data);
if (s.$timeout) return n.schedule(s.$timeout);
s.onUpdate()
})
};
(function() {
this.$timeout = 500, this.setTimeout = function(e) {
this.$timeout = e
}, this.setValue = function(e) {
this.doc.setValue(e), this.deferredUpdate.schedule(this.$timeout)
}, this.getValue = function(e) {
this.sender.callback(this.doc.getValue(), e)
}, this.onUpdate = function() {}, this.isPending = function() {
return this.deferredUpdate.isPending()
}
}).call(s.prototype)
}), ace.define("ace/mode/javascript/jshint", ["require", "exports", "module"], function(e, t, n) {
n.exports = function r(t, n, i) {
function s(u, a) {
if (!n[u]) {
if (!t[u]) {
var f = typeof e == "function" && e;
if (!a && f) return f(u, !0);
if (o) return o(u, !0);
throw new Error("Cannot find module '" + u + "'")
}
var l = n[u] = {
exports: {}
};
t[u][0].call(l.exports, function(e) {
var n = t[u][1][e];
return s(n ? n : e)
}, l, l.exports, r, t, n, i)
}
return n[u].exports
}
var o = typeof e == "function" && e;
for (var u = 0; u < i.length; u++) s(i[u]);
return s
}({
1: [function(e, t, n) {
var r = [];
for (var i = 0; i < 128; i++) r[i] = i === 36 || i >= 65 && i <= 90 || i === 95 || i >= 97 && i <= 122;
var s = [];
for (var i = 0; i < 128; i++) s[i] = r[i] || i >= 48 && i <= 57;
t.exports = {
asciiIdentifierStartTable: r,
asciiIdentifierPartTable: s
}
}, {}],
2: [function(e, t, n) {
(function() {
var e = this,
r = e._,
i = {},
s = Array.prototype,
o = Object.prototype,
u = Function.prototype,
a = s.push,
f = s.slice,
l = s.concat,
c = o.toString,
h = o.hasOwnProperty,
p = s.forEach,
d = s.map,
v = s.reduce,
m = s.reduceRight,
g = s.filter,
y = s.every,
b = s.some,
w = s.indexOf,
E = s.lastIndexOf,
S = Array.isArray,
x = Object.keys,
T = u.bind,
N = function(e) {
if (e instanceof N) return e;
if (!(this instanceof N)) return new N(e);
this._wrapped = e
};
typeof n != "undefined" ? (typeof t != "undefined" && t.exports && (n = t.exports = N), n._ = N) : e._ = N, N.VERSION = "1.6.0";
var C = N.each = N.forEach = function(e, t, n) {
if (e == null) return e;
if (p && e.forEach === p) e.forEach(t, n);
else if (e.length === +e.length) {
for (var r = 0, s = e.length; r < s; r++)
if (t.call(n, e[r], r, e) === i) return
} else {
var o = N.keys(e);
for (var r = 0, s = o.length; r < s; r++)
if (t.call(n, e[o[r]], o[r], e) === i) return
}
return e
};
N.map = N.collect = function(e, t, n) {
var r = [];
return e == null ? r : d && e.map === d ? e.map(t, n) : (C(e, function(e, i, s) {
r.push(t.call(n, e, i, s))
}), r)
};
var k = "Reduce of empty array with no initial value";
N.reduce = N.foldl = N.inject = function(e, t, n, r) {
var i = arguments.length > 2;
e == null && (e = []);
if (v && e.reduce === v) return r && (t = N.bind(t, r)), i ? e.reduce(t, n) : e.reduce(t);
C(e, function(e, s, o) {
i ? n = t.call(r, n, e, s, o) : (n = e, i = !0)
});
if (!i) throw new TypeError(k);
return n
}, N.reduceRight = N.foldr = function(e, t, n, r) {
var i = arguments.length > 2;
e == null && (e = []);
if (m && e.reduceRight === m) return r && (t = N.bind(t, r)), i ? e.reduceRight(t, n) : e.reduceRight(t);
var s = e.length;
if (s !== +s) {
var o = N.keys(e);
s = o.length
}
C(e, function(u, a, f) {
a = o ? o[--s] : --s, i ? n = t.call(r, n, e[a], a, f) : (n = e[a], i = !0)
});
if (!i) throw new TypeError(k);
return n
}, N.find = N.detect = function(e, t, n) {
var r;
return L(e, function(e, i, s) {
if (t.call(n, e, i, s)) return r = e, !0
}), r
}, N.filter = N.select = function(e, t, n) {
var r = [];
return e == null ? r : g && e.filter === g ? e.filter(t, n) : (C(e, function(e, i, s) {
t.call(n, e, i, s) && r.push(e)
}), r)
}, N.reject = function(e, t, n) {
return N.filter(e, function(e, r, i) {
return !t.call(n, e, r, i)
}, n)
}, N.every = N.all = function(e, t, n) {
t || (t = N.identity);
var r = !0;
return e == null ? r : y && e.every === y ? e.every(t, n) : (C(e, function(e, s, o) {
if (!(r = r && t.call(n, e, s, o))) return i
}), !!r)
};
var L = N.some = N.any = function(e, t, n) {
t || (t = N.identity);
var r = !1;
return e == null ? r : b && e.some === b ? e.some(t, n) : (C(e, function(e, s, o) {
if (r || (r = t.call(n, e, s, o))) return i
}), !!r)
};
N.contains = N.include = function(e, t) {
return e == null ? !1 : w && e.indexOf === w ? e.indexOf(t) != -1 : L(e, function(e) {
return e === t
})
}, N.invoke = function(e, t) {
var n = f.call(arguments, 2),
r = N.isFunction(t);
return N.map(e, function(e) {
return (r ? t : e[t]).apply(e, n)
})
}, N.pluck = function(e, t) {
return N.map(e, N.property(t))
}, N.where = function(e, t) {
return N.filter(e, N.matches(t))
}, N.findWhere = function(e, t) {
return N.find(e, N.matches(t))
}, N.max = function(e, t, n) {
if (!t && N.isArray(e) && e[0] === +e[0] && e.length < 65535) return Math.max.apply(Math, e);
var r = -Infinity,
i = -Infinity;
return C(e, function(e, s, o) {
var u = t ? t.call(n, e, s, o) : e;
u > i && (r = e, i = u)
}), r
}, N.min = function(e, t, n) {
if (!t && N.isArray(e) && e[0] === +e[0] && e.length < 65535) return Math.min.apply(Math, e);
var r = Infinity,
i = Infinity;
return C(e, function(e, s, o) {
var u = t ? t.call(n, e, s, o) : e;
u < i && (r = e, i = u)
}), r
}, N.shuffle = function(e) {
var t, n = 0,
r = [];
return C(e, function(e) {
t = N.random(n++), r[n - 1] = r[t], r[t] = e
}), r
}, N.sample = function(e, t, n) {
return t == null || n ? (e.length !== +e.length && (e = N.values(e)), e[N.random(e.length - 1)]) : N.shuffle(e).slice(0, Math.max(0, t))
};
var A = function(e) {
return e == null ? N.identity : N.isFunction(e) ? e : N.property(e)
};
N.sortBy = function(e, t, n) {
return t = A(t), N.pluck(N.map(e, function(e, r, i) {
return {
value: e,
index: r,
criteria: t.call(n, e, r, i)
}
}).sort(function(e, t) {
var n = e.criteria,
r = t.criteria;
if (n !== r) {
if (n > r || n === void 0) return 1;
if (n < r || r === void 0) return -1
}
return e.index - t.index
}), "value")
};
var O = function(e) {
return function(t, n, r) {
var i = {};
return n = A(n), C(t, function(s, o) {
var u = n.call(r, s, o, t);
e(i, u, s)
}), i
}
};
N.groupBy = O(function(e, t, n) {
N.has(e, t) ? e[t].push(n) : e[t] = [n]
}), N.indexBy = O(function(e, t, n) {
e[t] = n
}), N.countBy = O(function(e, t) {
N.has(e, t) ? e[t] ++ : e[t] = 1
}), N.sortedIndex = function(e, t, n, r) {
n = A(n);
var i = n.call(r, t),
s = 0,
o = e.length;
while (s < o) {
var u = s + o >>> 1;
n.call(r, e[u]) < i ? s = u + 1 : o = u
}
return s
}, N.toArray = function(e) {
return e ? N.isArray(e) ? f.call(e) : e.length === +e.length ? N.map(e, N.identity) : N.values(e) : []
}, N.size = function(e) {
return e == null ? 0 : e.length === +e.length ? e.length : N.keys(e).length
}, N.first = N.head = N.take = function(e, t, n) {
return e == null ? void 0 : t == null || n ? e[0] : t < 0 ? [] : f.call(e, 0, t)
}, N.initial = function(e, t, n) {
return f.call(e, 0, e.length - (t == null || n ? 1 : t))
}, N.last = function(e, t, n) {
return e == null ? void 0 : t == null || n ? e[e.length - 1] : f.call(e, Math.max(e.length - t, 0))
}, N.rest = N.tail = N.drop = function(e, t, n) {
return f.call(e, t == null || n ? 1 : t)
}, N.compact = function(e) {
return N.filter(e, N.identity)
};
var M = function(e, t, n) {
return t && N.every(e, N.isArray) ? l.apply(n, e) : (C(e, function(e) {
N.isArray(e) || N.isArguments(e) ? t ? a.apply(n, e) : M(e, t, n) : n.push(e)
}), n)
};
N.flatten = function(e, t) {
return M(e, t, [])
}, N.without = function(e) {
return N.difference(e, f.call(arguments, 1))
}, N.partition = function(e, t) {
var n = [],
r = [];
return C(e, function(e) {
(t(e) ? n : r).push(e)
}), [n, r]
}, N.uniq = N.unique = function(e, t, n, r) {
N.isFunction(t) && (r = n, n = t, t = !1);
var i = n ? N.map(e, n, r) : e,
s = [],
o = [];
return C(i, function(n, r) {
if (t ? !r || o[o.length - 1] !== n : !N.contains(o, n)) o.push(n), s.push(e[r])
}), s
}, N.union = function() {
return N.uniq(N.flatten(arguments, !0))
}, N.intersection = function(e) {
var t = f.call(arguments, 1);
return N.filter(N.uniq(e), function(e) {
return N.every(t, function(t) {
return N.contains(t, e)
})
})
}, N.difference = function(e) {
var t = l.apply(s, f.call(arguments, 1));
return N.filter(e, function(e) {
return !N.contains(t, e)
})
}, N.zip = function() {
var e = N.max(N.pluck(arguments, "length").concat(0)),
t = new Array(e);
for (var n = 0; n < e; n++) t[n] = N.pluck(arguments, "" + n);
return t
}, N.object = function(e, t) {
if (e == null) return {};
var n = {};
for (var r = 0, i = e.length; r < i; r++) t ? n[e[r]] = t[r] : n[e[r][0]] = e[r][1];
return n
}, N.indexOf = function(e, t, n) {
if (e == null) return -1;
var r = 0,
i = e.length;
if (n) {
if (typeof n != "number") return r = N.sortedIndex(e, t), e[r] === t ? r : -1;
r = n < 0 ? Math.max(0, i + n) : n
}
if (w && e.indexOf === w) return e.indexOf(t, n);
for (; r < i; r++)
if (e[r] === t) return r;
return -1
}, N.lastIndexOf = function(e, t, n) {
if (e == null) return -1;
var r = n != null;
if (E && e.lastIndexOf === E) return r ? e.lastIndexOf(t, n) : e.lastIndexOf(t);
var i = r ? n : e.length;
while (i--)
if (e[i] === t) return i;
return -1
}, N.range = function(e, t, n) {
arguments.length <= 1 && (t = e || 0, e = 0), n = arguments[2] || 1;
var r = Math.max(Math.ceil((t - e) / n), 0),
i = 0,
s = new Array(r);
while (i < r) s[i++] = e, e += n;
return s
};
var _ = function() {};
N.bind = function(e, t) {
var n, r;
if (T && e.bind === T) return T.apply(e, f.call(arguments, 1));
if (!N.isFunction(e)) throw new TypeError;
return n = f.call(arguments, 2), r = function() {
if (this instanceof r) {
_.prototype = e.prototype;
var i = new _;
_.prototype = null;
var s = e.apply(i, n.concat(f.call(arguments)));
return Object(s) === s ? s : i
}
return e.apply(t, n.concat(f.call(arguments)))
}
}, N.partial = function(e) {
var t = f.call(arguments, 1);
return function() {
var n = 0,
r = t.slice();
for (var i = 0, s = r.length; i < s; i++) r[i] === N && (r[i] = arguments[n++]);
while (n < arguments.length) r.push(arguments[n++]);
return e.apply(this, r)
}
}, N.bindAll = function(e) {
var t = f.call(arguments, 1);
if (t.length === 0) throw new Error("bindAll must be passed function names");
return C(t, function(t) {
e[t] = N.bind(e[t], e)
}), e
}, N.memoize = function(e, t) {
var n = {};
return t || (t = N.identity),
function() {
var r = t.apply(this, arguments);
return N.has(n, r) ? n[r] : n[r] = e.apply(this, arguments)
}
}, N.delay = function(e, t) {
var n = f.call(arguments, 2);
return setTimeout(function() {
return e.apply(null, n)
}, t)
}, N.defer = function(e) {
return N.delay.apply(N, [e, 1].concat(f.call(arguments, 1)))
}, N.throttle = function(e, t, n) {
var r, i, s, o = null,
u = 0;
n || (n = {});
var a = function() {
u = n.leading === !1 ? 0 : N.now(), o = null, s = e.apply(r, i), r = i = null
};
return function() {
var f = N.now();
!u && n.leading === !1 && (u = f);
var l = t - (f - u);
return r = this, i = arguments, l <= 0 ? (clearTimeout(o), o = null, u = f, s = e.apply(r, i), r = i = null) : !o && n.trailing !== !1 && (o = setTimeout(a, l)), s
}
}, N.debounce = function(e, t, n) {
var r, i, s, o, u, a = function() {
var f = N.now() - o;
f < t ? r = setTimeout(a, t - f) : (r = null, n || (u = e.apply(s, i), s = i = null))
};
return function() {
s = this, i = arguments, o = N.now();
var f = n && !r;
return r || (r = setTimeout(a, t)), f && (u = e.apply(s, i), s = i = null), u
}
}, N.once = function(e) {
var t = !1,
n;
return function() {
return t ? n : (t = !0, n = e.apply(this, arguments), e = null, n)
}
}, N.wrap = function(e, t) {
return N.partial(t, e)
}, N.compose = function() {
var e = arguments;
return function() {
var t = arguments;
for (var n = e.length - 1; n >= 0; n--) t = [e[n].apply(this, t)];
return t[0]
}
}, N.after = function(e, t) {
return function() {
if (--e < 1) return t.apply(this, arguments)
}
}, N.keys = function(e) {
if (!N.isObject(e)) return [];
if (x) return x(e);
var t = [];
for (var n in e) N.has(e, n) && t.push(n);
return t
}, N.values = function(e) {
var t = N.keys(e),
n = t.length,
r = new Array(n);
for (var i = 0; i < n; i++) r[i] = e[t[i]];
return r
}, N.pairs = function(e) {
var t = N.keys(e),
n = t.length,
r = new Array(n);
for (var i = 0; i < n; i++) r[i] = [t[i], e[t[i]]];
return r
}, N.invert = function(e) {
var t = {},
n = N.keys(e);
for (var r = 0, i = n.length; r < i; r++) t[e[n[r]]] = n[r];
return t
}, N.functions = N.methods = function(e) {
var t = [];
for (var n in e) N.isFunction(e[n]) && t.push(n);
return t.sort()
}, N.extend = function(e) {
return C(f.call(arguments, 1), function(t) {
if (t)
for (var n in t) e[n] = t[n]
}), e
}, N.pick = function(e) {
var t = {},
n = l.apply(s, f.call(arguments, 1));
return C(n, function(n) {
n in e && (t[n] = e[n])
}), t
}, N.omit = function(e) {
var t = {},
n = l.apply(s, f.call(arguments, 1));
for (var r in e) N.contains(n, r) || (t[r] = e[r]);
return t
}, N.defaults = function(e) {
return C(f.call(arguments, 1), function(t) {
if (t)
for (var n in t) e[n] === void 0 && (e[n] = t[n])
}), e
}, N.clone = function(e) {
return N.isObject(e) ? N.isArray(e) ? e.slice() : N.extend({}, e) : e
}, N.tap = function(e, t) {
return t(e), e
};
var D = function(e, t, n, r) {
if (e === t) return e !== 0 || 1 / e == 1 / t;
if (e == null || t == null) return e === t;
e instanceof N && (e = e._wrapped), t instanceof N && (t = t._wrapped);
var i = c.call(e);
if (i != c.call(t)) return !1;
switch (i) {
case "[object String]":
return e == String(t);
case "[object Number]":
return e != +e ? t != +t : e == 0 ? 1 / e == 1 / t : e == +t;
case "[object Date]":
case "[object Boolean]":
return +e == +t;
case "[object RegExp]":
return e.source == t.source && e.global == t.global && e.multiline == t.multiline && e.ignoreCase == t.ignoreCase
}
if (typeof e != "object" || typeof t != "object") return !1;
var s = n.length;
while (s--)
if (n[s] == e) return r[s] == t;
var o = e.constructor,
u = t.constructor;
if (o !== u && !(N.isFunction(o) && o instanceof o && N.isFunction(u) && u instanceof u) && "constructor" in e && "constructor" in t) return !1;
n.push(e), r.push(t);
var a = 0,
f = !0;
if (i == "[object Array]") {
a = e.length, f = a == t.length;
if (f)
while (a--)
if (!(f = D(e[a], t[a], n, r))) break
} else {
for (var l in e)
if (N.has(e, l)) {
a++;
if (!(f = N.has(t, l) && D(e[l], t[l], n, r))) break
}
if (f) {
for (l in t)
if (N.has(t, l) && !(a--)) break;
f = !a
}
}
return n.pop(), r.pop(), f
};
N.isEqual = function(e, t) {
return D(e, t, [], [])
}, N.isEmpty = function(e) {
if (e == null) return !0;
if (N.isArray(e) || N.isString(e)) return e.length === 0;
for (var t in e)
if (N.has(e, t)) return !1;
return !0
}, N.isElement = function(e) {
return !!e && e.nodeType === 1
}, N.isArray = S || function(e) {
return c.call(e) == "[object Array]"
}, N.isObject = function(e) {
return e === Object(e)
}, C(["Arguments", "Function", "String", "Number", "Date", "RegExp"], function(e) {
N["is" + e] = function(t) {
return c.call(t) == "[object " + e + "]"
}
}), N.isArguments(arguments) || (N.isArguments = function(e) {
return !!e && !!N.has(e, "callee")
}), typeof /./ != "function" && (N.isFunction = function(e) {
return typeof e == "function"
}), N.isFinite = function(e) {
return isFinite(e) && !isNaN(parseFloat(e))
}, N.isNaN = function(e) {
return N.isNumber(e) && e != +e
}, N.isBoolean = function(e) {
return e === !0 || e === !1 || c.call(e) == "[object Boolean]"
}, N.isNull = function(e) {
return e === null
}, N.isUndefined = function(e) {
return e === void 0
}, N.has = function(e, t) {
return h.call(e, t)
}, N.noConflict = function() {
return e._ = r, this
}, N.identity = function(e) {
return e
}, N.constant = function(e) {
return function() {
return e
}
}, N.property = function(e) {
return function(t) {
return t[e]
}
}, N.matches = function(e) {
return function(t) {
if (t === e) return !0;
for (var n in e)
if (e[n] !== t[n]) return !1;
return !0
}
}, N.times = function(e, t, n) {
var r = Array(Math.max(0, e));
for (var i = 0; i < e; i++) r[i] = t.call(n, i);
return r
}, N.random = function(e, t) {
return t == null && (t = e, e = 0), e + Math.floor(Math.random() * (t - e + 1))
}, N.now = Date.now || function() {
return (new Date).getTime()
};
var P = {
escape: {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
}
};
P.unescape = N.invert(P.escape);
var H = {
escape: new RegExp("[" + N.keys(P.escape).join("") + "]", "g"),
unescape: new RegExp("(" + N.keys(P.unescape).join("|") + ")", "g")
};
N.each(["escape", "unescape"], function(e) {
N[e] = function(t) {
return t == null ? "" : ("" + t).replace(H[e], function(t) {
return P[e][t]
})
}
}), N.result = function(e, t) {
if (e == null) return void 0;
var n = e[t];
return N.isFunction(n) ? n.call(e) : n
}, N.mixin = function(e) {
C(N.functions(e), function(t) {
var n = N[t] = e[t];
N.prototype[t] = function() {
var e = [this._wrapped];
return a.apply(e, arguments), q.call(this, n.apply(N, e))
}
})
};
var B = 0;
N.uniqueId = function(e) {
var t = ++B + "";
return e ? e + t : t
}, N.templateSettings = {
evaluate: /<%([\s\S]+?)%>/g,
interpolate: /<%=([\s\S]+?)%>/g,
escape: /<%-([\s\S]+?)%>/g
};
var j = /(.)^/,
F = {
"'": "'",
"\\": "\\",
"\r": "r",
"\n": "n",
" ": "t",
"\u2028": "u2028",
"\u2029": "u2029"
},
I = /\\|'|\r|\n|\t|\u2028|\u2029/g;
N.template = function(e, t, n) {
var r;
n = N.defaults({}, n, N.templateSettings);
var i = new RegExp([(n.escape || j).source, (n.interpolate || j).source, (n.evaluate || j).source].join("|") + "|$", "g"),
s = 0,
o = "__p+='";
e.replace(i, function(t, n, r, i, u) {
return o += e.slice(s, u).replace(I, function(e) {
return "\\" + F[e]
}), n && (o += "'+\n((__t=(" + n + "))==null?'':_.escape(__t))+\n'"), r && (o += "'+\n((__t=(" + r + "))==null?'':__t)+\n'"), i && (o += "';\n" + i + "\n__p+='"), s = u + t.length, t
}), o += "';\n", n.variable || (o = "with(obj||{}){\n" + o + "}\n"), o = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + o + "return __p;\n";
try {
r = new Function(n.variable || "obj", "_", o)
} catch (u) {
throw u.source = o, u
}
if (t) return r(t, N);
var a = function(e) {
return r.call(this, e, N)
};
return a.source = "function(" + (n.variable || "obj") + "){\n" + o + "}", a
}, N.chain = function(e) {
return N(e).chain()
};
var q = function(e) {
return this._chain ? N(e).chain() : e
};
N.mixin(N), C(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function(e) {
var t = s[e];
N.prototype[e] = function() {
var n = this._wrapped;
return t.apply(n, arguments), (e == "shift" || e == "splice") && n.length === 0 && delete n[0], q.call(this, n)
}
}), C(["concat", "join", "slice"], function(e) {
var t = s[e];
N.prototype[e] = function() {
return q.call(this, t.apply(this._wrapped, arguments))
}
}), N.extend(N.prototype, {
chain: function() {
return this._chain = !0, this
},
value: function() {
return this._wrapped
}
}), typeof define == "function" && define.amd && ace.define("underscore", [], function() {
return N
})
}).call(this)
}, {}],
3: [function(e, t, n) {
var r = e("underscore"),
i = e("events"),
s = e("./vars.js"),
o = e("./messages.js"),
u = e("./lex.js").Lexer,
a = e("./reg.js"),
f = e("./state.js").state,
l = e("./style.js"),
c = function() {
"use strict";
function I(e, t) {
return e = e.trim(), /^[+-]W\d{3}$/g.test(e) ? !0 : p[e] === undefined && h[e] === undefined && t.type !== "jslint" && !m[e] ? (G("E001", t, e), !1) : !0
}
function q(e) {
return Object.prototype.toString.call(e) === "[object String]"
}
function R(e, t) {
return e ? !e.identifier || e.value !== t ? !1 : !0 : !1
}
function U(e) {
if (!e.reserved) return !1;
var t = e.meta;
if (t && t.isFutureReservedWord && f.option.inES5()) {
if (!t.es5) return !1;
if (t.strictOnly && !f.option.strict && !f.directive["use strict"]) return !1;
if (e.isProperty) return !1
}
return !0
}
function z(e, t) {
return e.replace(/\{([^{}]*)\}/g, function(e, n) {
var r = t[n];
return typeof r == "string" || typeof r == "number" ? r : e
})
}
function W(e, t) {
Object.keys(t).forEach(function(n) {
if (r.has(c.blacklist, n)) return;
e[n] = t[n]
})
}
function X() {
f.option.esnext && W(M, s.newEcmaIdentifiers), f.option.couch && W(M, s.couch), f.option.qunit && W(M, s.qunit), f.option.rhino && W(M, s.rhino), f.option.shelljs && (W(M, s.shelljs), W(M, s.node)), f.option.typed && W(M, s.typed), f.option.phantom && W(M, s.phantom), f.option.prototypejs && W(M, s.prototypejs), f.option.node && (W(M, s.node), W(M, s.typed)), f.option.devel && W(M, s.devel), f.option.dojo && W(M, s.dojo), f.option.browser && (W(M, s.browser), W(M, s.typed)), f.option.nonstandard && W(M, s.nonstandard), f.option.jasmine && W(M, s.jasmine), f.option.jquery && W(M, s.jquery), f.option.mootools && W(M, s.mootools), f.option.worker && W(M, s.worker), f.option.wsh && W(M, s.wsh), f.option.globalstrict && f.option.strict !== !1 && (f.option.strict = !0), f.option.yui && W(M, s.yui), f.option.mocha && W(M, s.mocha), f.option.inMoz = function(e) {
return f.option.moz
}, f.option.inESNext = function(e) {
return f.option.moz || f.option.esnext
}, f.option.inES5 = function() {
return !f.option.es3
}, f.option.inES3 = function(e) {
return e ? !f.option.moz && !f.option.esnext && f.option.es3 : f.option.es3
}
}
function V(e, t, n) {
var r = Math.floor(t / f.lines.length * 100),
i = o.errors[e].desc;
throw {
name: "JSHintError",
line: t,
character: n,
message: i + " (" + r + "% scanned).",
raw: i,
code: e
}
}
function $(e, t, n, r) {
return c.undefs.push([e, t, n, r])
}
function J() {
var e = f.ignoredLines;
if (r.isEmpty(e)) return;
c.errors = r.reject(c.errors, function(t) {
return e[t.line]
})
}
function K(e, t, n, r, i, s) {
var u, a, l, h;
if (/^W\d{3}$/.test(e)) {
if (f.ignored[e]) return;
h = o.warnings[e]
} else /E\d{3}/.test(e) ? h = o.errors[e] : /I\d{3}/.test(e) && (h = o.info[e]);
return t = t || f.tokens.next, t.id === "(end)" && (t = f.tokens.curr), a = t.line || 0, u = t.from || 0, l = {
id: "(error)",
raw: h.desc,
code: h.code,
evidence: f.lines[a - 1] || "",
line: a,
character: u,
scope: c.scope,
a: n,
b: r,
c: i,
d: s
}, l.reason = z(h.desc, l), c.errors.push(l), J(), c.errors.length >= f.option.maxerr && V("E043", a, u), l
}
function Q(e, t, n, r, i, s, o) {
return K(e, {
line: t,
from: n
}, r, i, s, o)
}
function G(e, t, n, r, i, s) {
K(e, t, n, r, i, s)
}
function Y(e, t, n, r, i, s, o) {
return G(e, {
line: t,
from: n
}, r, i, s, o)
}
function Z(e, t) {
var n;
return n = {
id: "(internal)",
elem: e,
value: t
}, c.internals.push(n), n
}
function et(e, t) {
t = t || {};
var n = t.type,
i = t.token,
s = t.islet;
n === "exception" && r.has(w["(context)"], e) && w[e] !== !0 && !f.option.node && K("W002", f.tokens.next, e), r.has(w, e) && !w["(global)"] && (w[e] === !0 ? f.option.latedef && (f.option.latedef === !0 && r.contains([w[e], n], "unction") || !r.contains([w[e], n], "unction")) && K("W003", f.tokens.next, e) : ((!f.option.shadow || r.contains(["inner", "outer"], f.option.shadow)) && n !== "exception" || w["(blockscope)"].getlabel(e)) && K("W004", f.tokens.next, e)), w["(context)"] && r.has(w["(context)"], e) && n !== "function" && f.option.shadow === "outer" && K("W123", f.tokens.next, e), s ? w["(blockscope)"].current.add(e, n, f.tokens.curr) : (w["(blockscope)"].shadow(e), w[e] = n, i && (w["(tokens)"][e] = i), Xt(w, e, {
unused: t.unused || !1
}), w["(global)"] ? (S[e] = w, r.has(x, e) && (f.option.latedef && (f.option.latedef === !0 && r.contains([w[e], n], "unction") || !r.contains([w[e], n], "unction")) && K("W003", f.tokens.next, e), delete x[e])) : D[e] = w)
}
function tt() {
var e = f.tokens.next,
t = e.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g) || [],
n = {};
if (e.type === "globals") {
t.forEach(function(e) {
e = e.split(":");
var t = (e[0] || "").trim(),
r = (e[1] || "").trim();
t.charAt(0) === "-" ? (t = t.slice(1), r = !1, c.blacklist[t] = t, delete M[t]) : n[t] = r === "true"
}), W(M, n);
for (var i in n) r.has(n, i) && (g[i] = e)
}
e.type === "exported" && t.forEach(function(e) {
y[e] = !0
}), e.type === "members" && (A = A || {}, t.forEach(function(e) {
var t = e.charAt(0),
n = e.charAt(e.length - 1);
t === n && (t === '"' || t === "'") && (e = e.substr(1, e.length - 2).replace('\\"', '"')), A[e] = !1
}));
var s = ["maxstatements", "maxparams", "maxdepth", "maxcomplexity", "maxerr", "maxlen", "indent"];
if (e.type === "jshint" || e.type === "jslint") t.forEach(function(t) {
t = t.split(":");
var n = (t[0] || "").trim(),
r = (t[1] || "").trim();
if (!I(n, e)) return;
if (s.indexOf(n) >= 0) {
if (r !== "false") {
r = +r;
if (typeof r != "number" || !isFinite(r) || r <= 0 || Math.floor(r) !== r) {
G("E032", e, t[1].trim());
return
}
f.option[n] = r
} else f.option[n] = n === "indent" ? 4 : !1;
return
}
if (n === "validthis") {
if (w["(global)"]) return void G("E009");
if (r !== "true" && r !== "false") return void G("E002", e);
f.option.validthis = r === "true";
return
}
if (n === "quotmark") {
switch (r) {
case "true":
case "false":
f.option.quotmark = r === "true";
break;
case "double":
case "single":
f.option.quotmark = r;
break;
default:
G("E002", e)
}
return
}
if (n === "shadow") {
switch (r) {
case "true":
f.option.shadow = !0;
break;
case "outer":
f.option.shadow = "outer";
break;
case "false":
case "inner":
f.option.shadow = "inner";
break;
default:
G("E002", e)
}
return
}
if (n === "unused") {
switch (r) {
case "true":
f.option.unused = !0;
break;
case "false":
f.option.unused = !1;
break;
case "vars":
case "strict":
f.option.unused = r;
break;
default:
G("E002", e)
}
return
}
if (n === "latedef") {
switch (r) {
case "true":
f.option.latedef = !0;
break;
case "false":
f.option.latedef = !1;
break;
case "nofunc":
f.option.latedef = "nofunc";
break;
default:
G("E002", e)
}
return
}
if (n === "ignore") {
switch (r) {
case "start":
f.ignoreLinterErrors = !0;
break;
case "end":
f.ignoreLinterErrors = !1;
break;
case "line":
f.ignoredLines[e.line] = !0, J();
break;
default:
G("E002", e)
}
return
}
var i = /^([+-])(W\d{3})$/g.exec(n);
if (i) {
f.ignored[i[2]] = i[1] === "-";
return
}
var o;
if (r === "true" || r === "false") {
e.type === "jslint" ? (o = v[n] || n, f.option[o] = r === "true", d[o] !== undefined && (f.option[o] = !f.option[o])) : f.option[n] = r === "true", n === "newcap" && (f.option["(explicitNewcap)"] = !0);
return
}
G("E002", e)
}), X()
}
function nt(e) {
var t = e || 0,
n = 0,
r;
while (n <= t) r = C[n], r || (r = C[n] = k.token()), n += 1;
return r
}
function rt(t, n) {
switch (f.tokens.curr.id) {
case "(number)":
f.tokens.next.id === "." && K("W005", f.tokens.curr);
break;
case "-":
(f.tokens.next.id === "-" || f.tokens.next.id === "--") && K("W006");
break;
case "+":
(f.tokens.next.id === "+" || f.tokens.next.id === "++") && K("W007")
}
if (f.tokens.curr.type === "(string)" || f.tokens.curr.identifier) e = f.tokens.curr.value;
t && f.tokens.next.id !== t && (n ? f.tokens.next.id === "(end)" ? G("E019", n, n.id) : G("E020", f.tokens.next, t, n.id, n.line, f.tokens.next.value) : (f.tokens.next.type !== "(identifier)" || f.tokens.next.value !== t) && K("W116", f.tokens.next, t, f.tokens.next.value)), f.tokens.prev = f.tokens.curr, f.tokens.curr = f.tokens.next;
for (;;) {
f.tokens.next = C.shift() || k.token(), f.tokens.next || V("E041", f.tokens.curr.line);
if (f.tokens.next.id === "(end)" || f.tokens.next.id === "(error)") return;
f.tokens.next.check && f.tokens.next.check();
if (f.tokens.next.isSpecial) tt();
else if (f.tokens.next.id !== "(endline)") break
}
}
function it(e) {
return e.infix || !e.identifier && !!e.led
}
function st() {
var e = f.tokens.curr,
t = f.tokens.next;
return t.id === ";" || t.id === "}" || t.id === ":" ? !0 : it(t) === it(e) || e.id === "yield" && f.option.inMoz(!0) ? e.line !== t.line : !1
}
function ot(t, n) {
var i, s = !1,
o = !1,
u = !1;
!n && f.tokens.next.value === "let" && nt(0).value === "(" && (f.option.inMoz(!0) || K("W118", f.tokens.next, "let expressions"), u = !0, w["(blockscope)"].stack(), rt("let"), rt("("), f.syntax.let.fud.call(f.syntax.let.fud, !1), rt(")")), f.tokens.next.id === "(end)" && G("E006", f.tokens.curr);
var a = f.option.asi && f.tokens.prev.line < f.tokens.curr.line && r.contains(["]", ")"], f.tokens.prev.id) && r.contains(["[", "("], f.tokens.curr.id);
a && K("W014", f.tokens.curr, f.tokens.curr.id), rt(), n && (e = "anonymous", w["(verb)"] = f.tokens.curr.value);
if (n === !0 && f.tokens.curr.fud) i = f.tokens.curr.fud();
else {
f.tokens.curr.nud ? i = f.tokens.curr.nud() : G("E030", f.tokens.curr, f.tokens.curr.id);
while (t < f.tokens.next.lbp && !st()) s = f.tokens.curr.value === "Array", o = f.tokens.curr.value === "Object", i && (i.value || i.first && i.first.value) && (i.value !== "new" || i.first && i.first.value && i.first.value === ".") && (s = !1, i.value !== f.tokens.curr.value && (o = !1)), rt(), s && f.tokens.curr.id === "(" && f.tokens.next.id === ")" && K("W009", f.tokens.curr), o && f.tokens.curr.id === "(" && f.tokens.next.id === ")" && K("W010", f.tokens.curr), i && f.tokens.curr.led ? i = f.tokens.curr.led(i) : G("E033", f.tokens.curr, f.tokens.curr.id)
}
return u && w["(blockscope)"].unstack(), i
}
function ut(e, t) {
e = e || f.tokens.curr, t = t || f.tokens.next, !f.option.laxbreak && e.line !== t.line && K("W014", t, t.value)
}
function at(e) {
e = e || f.tokens.curr, e.line !== f.tokens.next.line && K("E022", e, e.value)
}
function ft(e, t) {
e.line !== t.line && (f.option.laxcomma || (lt.first && (K("I001"), lt.first = !1), K("W014", e, t.value)))
}
function lt(e) {
e = e || {}, e.peek ? ft(f.tokens.prev, f.tokens.curr) : (ft(f.tokens.curr, f.tokens.next), rt(","));
if (f.tokens.next.identifier && (!e.property || !f.option.inES5())) switch (f.tokens.next.value) {
case "break":
case "case":
case "catch":
case "continue":
case "default":
case "do":
case "else":
case "finally":
case "for":
case "if":
case "in":
case "instanceof":
case "return":
case "switch":
case "throw":
case "try":
case "var":
case "let":
case "while":
case "with":
return G("E024", f.tokens.next, f.tokens.next.value), !1
}
if (f.tokens.next.type === "(punctuator)") switch (f.tokens.next.value) {
case "}":
case "]":
case ",":
if (e.allowTrailing) return !0;
case ")":
return G("E024", f.tokens.next, f.tokens.next.value), !1
}
return !0
}
function ct(e, t) {
var n = f.syntax[e];
if (!n || typeof n != "object") f.syntax[e] = n = {
id: e,
lbp: t,
value: e
};
return n
}
function ht(e) {
return ct(e, 0)
}
function pt(e, t) {
var n = ht(e);
return n.identifier = n.reserved = !0, n.fud = t, n
}
function dt(e, t) {
var n = pt(e, t);
return n.block = !0, n
}
function vt(e) {
var t = e.id.charAt(0);
if (t >= "a" && t <= "z" || t >= "A" && t <= "Z") e.identifier = e.reserved = !0;
return e
}
function mt(e, t) {
var n = ct(e, 150);
return vt(n), n.nud = typeof t == "function" ? t : function() {
this.right = ot(150), this.arity = "unary";
if (this.id === "++" || this.id === "--") f.option.plusplus ? K("W016", this, this.id) : this.right && (!this.right.identifier || U(this.right)) && this.right.id !== "." && this.right.id !== "[" && K("W017", this);
return this
}, n
}
function gt(e, t) {
var n = ht(e);
return n.type = e, n.nud = t, n
}
function yt(e, t) {
var n = gt(e, t);
return n.identifier = !0, n.reserved = !0, n
}
function bt(e, t) {
var n = gt(e, t && t.nud || function() {
return this
});
return t = t || {}, t.isFutureReservedWord = !0, n.value = e, n.identifier = !0, n.reserved = !0, n.meta = t, n
}
function wt(e, t) {
return yt(e, function() {
return typeof t == "function" && t(this), this
})
}
function Et(e, t, n, r) {
var i = ct(e, n);
return vt(i), i.infix = !0, i.led = function(i) {
return r || ut(f.tokens.prev, f.tokens.curr), e === "in" && i.id === "!" && K("W018", i, "!"), typeof t == "function" ? t(i, this) : (this.left = i, this.right = ot(n), this)
}, i
}
function St(e) {
var t = ct(e, 42);
return t.led = function(e) {
return f.option.inESNext() || K("W104", f.tokens.curr, "arrow function syntax (=>)"), ut(f.tokens.prev, f.tokens.curr), this.left = e, this.right = Jt(undefined, undefined, !1, e), this
}, t
}
function xt(e, t) {
var n = ct(e, 100);
return n.led = function(e) {
ut(f.tokens.prev, f.tokens.curr);
var n = ot(100);
return R(e, "NaN") || R(n, "NaN") ? K("W019", this) : t && t.apply(this, [e, n]), (!e || !n) && V("E041", f.tokens.curr.line), e.id === "!" && K("W018", e, "!"), n.id === "!" && K("W018", n, "!"), this.left = e, this.right = n, this
}, n
}
function Tt(e) {
return e && (e.type === "(number)" && +e.value === 0 || e.type === "(string)" && e.value === "" || e.type === "null" && !f.option.eqnull || e.type === "true" || e.type === "false" || e.type === "undefined")
}
function Nt(e, t) {
if (f.option.notypeof) return !1;
if (!e || !t) return !1;
var n = ["undefined", "object", "boolean", "number", "string", "function", "xml", "object", "unknown"];
return t.type === "(identifier)" && t.value === "typeof" && e.type === "(string)" ? !r.contains(n, e.value) : !1
}
function Ct(e) {
function n(e) {
if (typeof e != "object") return;
return e.right === "prototype" ? e : n(e.left)
}
function r(e) {
while (!e.identifier && typeof e.left == "object") e = e.left;
if (e.identifier && t.indexOf(e.value) >= 0) return e.value
}
var t = ["Array", "ArrayBuffer", "Boolean", "Collator", "DataView", "Date", "DateTimeFormat", "Error", "EvalError", "Float32Array", "Float64Array", "Function", "Infinity", "Intl", "Int16Array", "Int32Array", "Int8Array", "Iterator", "Number", "NumberFormat", "Object", "RangeError", "ReferenceError", "RegExp", "StopIteration", "String", "SyntaxError", "TypeError", "Uint16Array", "Uint32Array", "Uint8Array", "Uint8ClampedArray", "URIError"],
i = n(e);
if (i) return r(i)
}
function kt(e, t, n) {
var r = Et(e, typeof t == "function" ? t : function(e, t) {
t.left = e;
if (e) {
if (f.option.freeze) {
var n = Ct(e);
n && K("W121", e, n)
}
M[e.value] === !1 && D[e.value]["(global)"] === !0 ? K("W020", e) : e["function"] && K("W021", e, e.value), w[e.value] === "const" && G("E013", e, e.value);
if (e.id === ".") return e.left ? e.left.value === "arguments" && !f.directive["use strict"] && K("E031", t) : K("E031", t), t.right = ot(10), t;
if (e.id === "[") return f.tokens.curr.left.first ? f.tokens.curr.left.first.forEach(function(e) {
e && w[e.value] === "const" && G("E013", e, e.value)
}) : e.left ? e.left.value === "arguments" && !f.directive["use strict"] && K("E031", t) : K("E031", t), t.right = ot(10), t;
if (e.identifier && !U(e)) return w[e.value] === "exception" && K("W022", e), t.right = ot(10), t;
e === f.syntax["function"] && K("W023", f.tokens.curr)
}
G("E031", t)
}, n);
return r.exps = !0, r.assign = !0, r
}
function Lt(e, t, n) {
var r = ct(e, n);
return vt(r), r.led = typeof t == "function" ? t : function(e) {
return f.option.bitwise && K("W016", this, this.id), this.left = e, this.right = ot(n), this
}, r
}
function At(e) {
return kt(e, function(e, t) {
f.option.bitwise && K("W016", t, t.id);
if (e) return e.id === "." || e.id === "[" || e.identifier && !U(e) ? (ot(10), t) : (e === f.syntax["function"] && K("W023", f.tokens.curr), t);
G("E031", t)
}, 20)
}
function Ot(e) {
var t = ct(e, 150);
return t.led = function(e) {
return f.option.plusplus ? K("W016", this, this.id) : (!e.identifier || U(e)) && e.id !== "." && e.id !== "[" && K("W017", this), this.left = e, this
}, t
}
function Mt(e, t) {
if (!f.tokens.next.identifier) return;
rt();
var n = f.tokens.curr,
r = f.tokens.curr.value;
return U(n) ? t && f.option.inES5() ? r : e && r === "undefined" ? r : (K("W024", f.tokens.curr, f.tokens.curr.id), r) : r
}
function _t(e, t) {
var n = Mt(e, t);
if (n) return n;
f.tokens.curr.id === "function" && f.tokens.next.id === "(" ? K("W025") : G("E030", f.tokens.next, f.tokens.next.value)
}
function Dt(e) {
var t = 0,
n;
if (f.tokens.next.id !== ";" || O) return;
for (;;) {
do n = nt(t), t += 1; while (n.id != "(end)" && n.id === "(comment)");
if (n.reach) return;
if (n.id !== "(endline)") {
if (n.id === "function") {
f.option.latedef === !0 && K("W026", n);
break
}
K("W027", n, n.value, e);
break
}
}
}
function Pt() {
f.tokens.next.id !== ";" ? f.option.asi || (!f.option.lastsemic || f.tokens.next.id !== "}" || f.tokens.next.line !== f.tokens.curr.line) && Q("W033", f.tokens.curr.line, f.tokens.curr.character) : rt(";")
}
function Ht() {
var e, t = N,
n, i = D,
s = f.tokens.next;
if (s.id === ";") {
rt(";");
return
}
var o = U(s);
o && s.meta && s.meta.isFutureReservedWord && nt().id === ":" && (K("W024", s, s.id), o = !1);
if (s.value === "module" && s.type === "(identifier)" && nt().type === "(identifier)") {
f.option.inESNext() || K("W119", f.tokens.curr, "module"), rt("module");
var u = _t();
et(u, {
type: "unused",
token: f.tokens.curr
}), rt("from"), rt("(string)"), Pt();
return
}
if (r.has(["[", "{"], s.value) && on().isDestAssign) {
f.option.inESNext() || K("W104", f.tokens.curr, "destructuring expression"), e = Yt(), e.forEach(function(e) {
$(w, "W117", e.token, e.id)
}), rt("="), Zt(e, ot(10, !0)), rt(";");
return
}
s.identifier && !o && nt().id === ":" && (rt(), rt(":"), D = Object.create(i), et(s.value, {
type: "label"
}), !f.tokens.next.labelled && f.tokens.next.value !== "{" && K("W028", f.tokens.next, s.value, f.tokens.next.value), f.tokens.next.label = s.value, s = f.tokens.next);
if (s.id === "{") {
var a = w["(verb)"] === "case" && f.tokens.curr.value === ":";
Ft(!0, !0, !1, !1, a);
return
}
return n = ot(0, !0), n && (!n.identifier || n.value !== "function") && n.type !== "(punctuator)" && !f.directive["use strict"] && f.option.globalstrict && f.option.strict && K("E007"), s.block || (!f.option.expr && (!n || !n.exps) ? K("W030", f.tokens.curr) : f.option.nonew && n && n.left && n.id === "(" && n.left.id === "new" && K("W031", s), Pt()), N = t, D = i, n
}
function Bt(e) {
var t = [],
n;
while (!f.tokens.next.reach && f.tokens.next.id !== "(end)") f.tokens.next.id === ";" ? (n = nt(), (!n || n.id !== "(" && n.id !== "[") && K("W032"), rt(";")) : t.push(Ht(e === f.tokens.next.line));
return t
}
function jt() {
var e, t, n;
for (;;) {
if (f.tokens.next.id === "(string)") {
t = nt(0);
if (t.id === "(endline)") {
e = 1;
do n = nt(e), e += 1; while (n.id === "(endline)");
if (n.id !== ";") {
if (n.id !== "(string)" && n.id !== "(number)" && n.id !== "(regexp)" && n.identifier !== !0 && n.id !== "}") break;
K("W033", f.tokens.next)
} else t = n
} else if (t.id === "}") K("W033", t);
else if (t.id !== ";") break;
rt(), f.directive[f.tokens.curr.value] && K("W034", f.tokens.curr, f.tokens.curr.value), f.tokens.curr.value === "use strict" && (f.option["(explicitNewcap)"] || (f.option.newcap = !0), f.option.undef = !0), f.directive[f.tokens.curr.value] = !0, t.id === ";" && rt(";");
continue
}
break
}
}
function Ft(e, t, n, i, s) {
var o, u = T,
a = N,
l, c = D,
h, p, d;
T = e;
if (!e || !f.option.funcscope) D = Object.create(D);
h = f.tokens.next;
var v = w["(metrics)"];
v.nestedBlockDepth += 1, v.verifyMaxNestedBlockDepthPerFunction();
if (f.tokens.next.id === "{") {
rt("{"), w["(blockscope)"].stack(), p = f.tokens.curr.line;
if (f.tokens.next.id !== "}") {
N += f.option.indent;
while (!e && f.tokens.next.from > N) N += f.option.indent;
if (n) {
l = {};
for (d in f.directive) r.has(f.directive, d) && (l[d] = f.directive[d]);
jt(), f.option.strict && w["(context)"]["(global)"] && !l["use strict"] && !f.directive["use strict"] && K("E007")
}
o = Bt(p), v.statementCount += o.length, n && (f.directive = l), N -= f.option.indent
}
rt("}", h), w["(blockscope)"].unstack(), N = a
} else if (!e)
if (n) {
l = {}, t && !i && !f.option.inMoz(!0) && G("W118", f.tokens.curr, "function closure expressions");
if (!t)
for (d in f.directive) r.has(f.directive, d) && (l[d] = f.directive[d]);
ot(10), f.option.strict && w["(context)"]["(global)"] && !l["use strict"] && !f.directive["use strict"] && K("E007")
} else G("E021", f.tokens.next, "{", f.tokens.next.value);
else w["(nolet)"] = !0, (!t || f.option.curly) && K("W116", f.tokens.next, "{", f.tokens.next.value), O = !0, N += f.option.indent, o = [Ht()], N -= f.option.indent, O = !1, delete w["(nolet)"];
switch (w["(verb)"]) {
case "break":
case "continue":
case "return":
case "throw":
if (s) break;
default:
w["(verb)"] = null
}
if (!e || !f.option.funcscope) D = c;
return T = u, e && f.option.noempty && (!o || o.length === 0) && K("W035"), v.nestedBlockDepth -= 1, o
}
function It(e) {
A && typeof A[e] != "boolean" && K("W036", f.tokens.curr, e), typeof L[e] == "number" ? L[e] += 1 : L[e] = 1
}
function qt(e) {
var t = e.value,
n = Object.getOwnPropertyDescriptor(x, t);
n ? n.value.push(e.line) : x[t] = [e.line]
}
function Ut() {
var e = {};
e.exps = !0, w["(comparray)"].stack();
var t = !1;
return f.tokens.next.value !== "for" && (t = !0, f.option.inMoz(!0) || K("W116", f.tokens.next, "for", f.tokens.next.value), w["(comparray)"].setState("use"), e.right = ot(10)), rt("for"), f.tokens.next.value === "each" && (rt("each"), f.option.inMoz(!0) || K("W118", f.tokens.curr, "for each")), rt("("), w["(comparray)"].setState("define"), e.left = ot(130), r.contains(["in", "of"], f.tokens.next.value) ? rt() : G("E045", f.tokens.curr), w["(comparray)"].setState("generate"), ot(10), rt(")"), f.tokens.next.value === "if" && (rt("if"), rt("("), w["(comparray)"].setState("filter"), e.filter = ot(10), rt(")")), t || (w["(comparray)"].setState("use"), e.right = ot(10)), rt("]"), w["(comparray)"].unstack(), e
}
function zt() {
var e = Mt(!1, !0);
return e || (f.tokens.next.id === "(string)" ? (e = f.tokens.next.value, rt()) : f.tokens.next.id === "(number)" && (e = f.tokens.next.value.toString(), rt())), e === "hasOwnProperty" && K("W001"), e
}
function Wt(e) {
var t, n, i = [],
s, o = [],
u, a = !1;
if (e) {
if (Array.isArray(e)) {
for (var l in e) {
t = e[l];
if (t.value === "...") {
f.option.inESNext() || K("W104", t, "spread/rest operator");
continue
}
t.value !== "," && (i.push(t.value), et(t.value, {
type: "unused",
token: t
}))
}
return i
}
if (e.identifier === !0) return et(e.value, {
type: "unused",
token: e
}), [e]
}
n = f.tokens.next, rt("(");
if (f.tokens.next.id === ")") {
rt(")");
return
}
for (;;) {
if (r.contains(["{", "["], f.tokens.next.id)) {
o = Yt();
for (u in o) u = o[u], u.id && (i.push(u.id), et(u.id, {
type: "unused",
token: u.token
}))
} else f.tokens.next.value === "..." ? (f.option.inESNext() || K("W104", f.tokens.next, "spread/rest operator"), rt("..."), s = _t(!0), i.push(s), et(s, {
type: "unused",
token: f.tokens.curr
})) : (s = _t(!0), i.push(s), et(s, {
type: "unused",
token: f.tokens.curr
}));
a && f.tokens.next.id !== "=" && G("E051", f.tokens.current), f.tokens.next.id === "=" && (f.option.inESNext() || K("W119", f.tokens.next, "default parameters"), rt("="), a = !0, ot(10));
if (f.tokens.next.id !== ",") return rt(")", n), i;
lt()
}
}
function Xt(e, t, n) {
e["(properties)"][t] || (e["(properties)"][t] = {
unused: !1
}), r.extend(e["(properties)"][t], n)
}
function Vt(e, t, n) {
return e["(properties)"][t] ? e["(properties)"][t][n] || null : null
}
function $t(e, t, n, i) {
var s = {
"(name)": e,
"(breakage)": 0,
"(loopage)": 0,
"(scope)": n,
"(tokens)": {},
"(properties)": {},
"(catch)": !1,
"(global)": !1,
"(line)": null,
"(character)": null,
"(metrics)": null,
"(statement)": null,
"(context)": null,
"(blockscope)": null,
"(comparray)": null,
"(generator)": null,
"(params)": null
};
return t && r.extend(s, {
"(line)": t.line,
"(character)": t.character,
"(metrics)": Kt(t)
}), r.extend(s, i), s["(context)"] && (s["(blockscope)"] = s["(context)"]["(blockscope)"], s["(comparray)"] = s["(context)"]["(comparray)"]), s
}
function Jt(t, n, i, s) {
var o, u = f.option,
a = f.ignored,
l = D;
return f.option = Object.create(f.option), f.ignored = Object.create(f.ignored), D = Object.create(D), w = $t(t || '"' + e + '"', f.tokens.next, D, {
"(statement)": n,
"(context)": w,
"(generator)": i ? !0 : null
}), o = w, f.tokens.curr.funct = w, E.push(w), t && et(t, {
type: "function"
}), w["(params)"] = Wt(s), w["(metrics)"].verifyMaxParametersPerFunction(w["(params)"]), c.undefs = r.filter(c.undefs, function(e) {
return !r.contains(r.union(s), e[2])
}), Ft(!1, !0, !0, s ? !0 : !1), !f.option.noyield && i && w["(generator)"] !== "yielded" && K("W124", f.tokens.curr), w["(metrics)"].verifyMaxStatementsPerFunction(), w["(metrics)"].verifyMaxComplexityPerFunction(), w["(unusedOption)"] = f.option.unused, D = l, f.option = u, f.ignored = a, w["(last)"] = f.tokens.curr.line, w["(lastcharacter)"] = f.tokens.curr.character, r.map(Object.keys(w), function(e) {
if (e[0] === "(") return;
w["(blockscope)"].unshadow(e)
}), w = w["(context)"], o
}
function Kt(e) {
return {
statementCount: 0,
nestedBlockDepth: -1,
ComplexityCount: 1,
verifyMaxStatementsPerFunction: function() {
f.option.maxstatements && this.statementCount > f.option.maxstatements && K("W071", e, this.statementCount)
},
verifyMaxParametersPerFunction: function(t) {
t = t || [], f.option.maxparams && t.length > f.option.maxparams && K("W072", e, t.length)
},
verifyMaxNestedBlockDepthPerFunction: function() {
f.option.maxdepth && this.nestedBlockDepth > 0 && this.nestedBlockDepth === f.option.maxdepth + 1 && K("W073", null, this.nestedBlockDepth)
},
verifyMaxComplexityPerFunction: function() {
var t = f.option.maxcomplexity,
n = this.ComplexityCount;
t && n > t && K("W074", e, n)
}
}
}
function Qt() {
w["(metrics)"].ComplexityCount += 1
}
function Gt(e) {
var t, n;
e && (t = e.id, n = e.paren, t === "," && (e = e.exprs[e.exprs.length - 1]) && (t = e.id, n = n || e.paren));
switch (t) {
case "=":
case "+=":
case "-=":
case "*=":
case "%=":
case "&=":
case "|=":
case "^=":
case "/=":
!n && !f.option.boss && K("W084")
}
}
function Yt() {
var e, t, n = [];
f.option.inESNext() || K("W104", f.tokens.curr, "destructuring expression");
var i = function() {
var e;
if (r.contains(["[", "{"], f.tokens.next.value)) {
t = Yt();
for (var s in t) s = t[s], n.push({
id: s.id,
token: s.token
})
} else f.tokens.next.value === "," ? n.push({
id: null,
token: f.tokens.curr
}) : f.tokens.next.value === "(" ? (rt("("), i(), rt(")")) : (e = _t(), e && n.push({
id: e,
token: f.tokens.curr
}))
};
if (f.tokens.next.value === "[") {
rt("["), i();
while (f.tokens.next.value !== "]") rt(","), i();
rt("]")
} else if (f.tokens.next.value === "{") {
rt("{"), e = _t(), f.tokens.next.value === ":" ? (rt(":"), i()) : n.push({
id: e,
token: f.tokens.curr
});
while (f.tokens.next.value !== "}") rt(","), e = _t(), f.tokens.next.value === ":" ? (rt(":"), i()) : n.push({
id: e,
token: f.tokens.curr
});
rt("}")
}
return n
}
function Zt(e, t) {
var n = t.first;
if (!n) return;
r.zip(e, Array.isArray(n) ? n : [n]).forEach(function(e) {
var t = e[0],
n = e[1];
t && n ? t.first = n : t && t.first && !n && K("W080", t.first, t.first.value)
})
}
function rn(e) {
return f.option.inESNext() || K("W104", f.tokens.curr, "class"), e ? (this.name = _t(), et(this.name, {
type: "unused",
token: f.tokens.curr
})) : f.tokens.next.identifier && f.tokens.next.value !== "extends" && (this.name = _t()), sn(this), this
}
function sn(e) {
var t = f.directive["use strict"];
f.tokens.next.value === "extends" && (rt("extends"), e.heritage = ot(10)), f.directive["use strict"] = !0, rt("{"), e.body = f.syntax["{"].nud(!0), f.directive["use strict"] = t
}
function un() {
var e = on();
e.notJson ? (!f.option.inESNext() && e.isDestAssign && K("W104", f.tokens.curr, "destructuring assignment"), Bt()) : (f.option.laxbreak = !0, f.jsonMode = !0, fn())
}
function fn() {
function e() {
var e = {},
t = f.tokens.next;
rt("{");
if (f.tokens.next.id !== "}")
for (;;) {
if (f.tokens.next.id === "(end)") G("E026", f.tokens.next, t.line);
else {
if (f.tokens.next.id === "}") {
K("W094", f.tokens.curr);
break
}
f.tokens.next.id === "," ? G("E028", f.tokens.next) : f.tokens.next.id !== "(string)" && K("W095", f.tokens.next, f.tokens.next.value)
}
e[f.tokens.next.value] === !0 ? K("W075", f.tokens.next, f.tokens.next.value) : f.tokens.next.value === "__proto__" && !f.option.proto || f.tokens.next.value === "__iterator__" && !f.option.iterator ? K("W096", f.tokens.next, f.tokens.next.value) : e[f.tokens.next.value] = !0, rt(), rt(":"), fn();
if (f.tokens.next.id !== ",") break;
rt(",")
}
rt("}")
}
function t() {
var e = f.tokens.next;
rt("[");
if (f.tokens.next.id !== "]")
for (;;) {
if (f.tokens.next.id === "(end)") G("E027", f.tokens.next, e.line);
else {
if (f.tokens.next.id === "]") {
K("W094", f.tokens.curr);
break
}
f.tokens.next.id === "," && G("E028", f.tokens.next)
}
fn();
if (f.tokens.next.id !== ",") break;
rt(",")
}
rt("]")
}
switch (f.tokens.next.id) {
case "{":
e();
break;
case "[":
t();
break;
case "true":
case "false":
case "null":
case "(number)":
case "(string)":
rt();
break;
case "-":
rt("-"), rt("(number)");
break;
default:
G("E003", f.tokens.next)
}
}
var e, t, n = {
"<": !0,
"<=": !0,
"==": !0,
"===": !0,
"!==": !0,
"!=": !0,
">": !0,
">=": !0,
"+": !0,
"-": !0,
"*": !0,
"/": !0,
"%": !0
},
h = {
asi: !0,
bitwise: !0,
boss: !0,
browser: !0,
camelcase: !0,
couch: !0,
curly: !0,
debug: !0,
devel: !0,
dojo: !0,
eqeqeq: !0,
eqnull: !0,
notypeof: !0,
es3: !0,
es5: !0,
esnext: !0,
moz: !0,
evil: !0,
expr: !0,
forin: !0,
funcscope: !0,
globalstrict: !0,
immed: !0,
iterator: !0,
jasmine: !0,
jquery: !0,
lastsemic: !0,
laxbreak: !0,
laxcomma: !0,
loopfunc: !0,
mootools: !0,
multistr: !0,
freeze: !0,
newcap: !0,
noarg: !0,
node: !0,
noempty: !0,
nonbsp: !0,
nonew: !0,
nonstandard: !0,
phantom: !0,
plusplus: !0,
proto: !0,
prototypejs: !0,
qunit: !0,
rhino: !0,
shelljs: !0,
typed: !0,
undef: !0,
scripturl: !0,
strict: !0,
sub: !0,
supernew: !0,
validthis: !0,
withstmt: !0,
worker: !0,
wsh: !0,
yui: !0,
mocha: !0,
noyield: !0,
onecase: !0,
regexp: !0,
regexdash: !0
},
p = {
maxlen: !1,
indent: !1,
maxerr: !1,
predef: !1,
globals: !1,
quotmark: !1,
scope: !1,
maxstatements: !1,
maxdepth: !1,
maxparams: !1,
maxcomplexity: !1,
shadow: !1,
unused: !0,
latedef: !1,
ignore: !1
},
d = {
bitwise: !0,
forin: !0,
newcap: !0,
plusplus: !0,
regexp: !0,
undef: !0,
eqeqeq: !0,
strict: !0
},
v = {
eqeq: "eqeqeq",
windows: "wsh",
sloppy: "strict"
},
m = {
nomen: !0,
onevar: !0,
passfail: !0,
white: !0,
gcl: !0,
smarttabs: !0,
trailing: !0
},
g, y, b = ["closure", "exception", "global", "label", "outer", "unused", "var"],
w, E, S, x, T, N, C, k, L, A, O, M, D, P, H, B, j = [],
F = new i.EventEmitter;
gt("(number)", function() {
return this
}), gt("(string)", function() {
return this
}), gt("(template)", function() {
return this
}), f.syntax["(identifier)"] = {
type: "(identifier)",
lbp: 0,
identifier: !0,
nud: function() {
var t = this.value,
n = D[t],
r, i;
typeof n == "function" ? n = undefined : !w["(blockscope)"].current.has(t) && typeof n == "boolean" && (r = w, w = E[0], et(t, {
type: "var"
}), n = w, w = r), i = w["(blockscope)"].getlabel(t);
if (w === n || i) switch (i ? i[t]["(type)"] : w[t]) {
case "unused":
i ? i[t]["(type)"] = "var" : w[t] = "var";
break;
case "unction":
i ? i[t]["(type)"] = "function" : w[t] = "function", this["function"] = !0;
break;
case "const":
Xt(w, t, {
unused: !1
});
break;
case "function":
this["function"] = !0;
break;
case "label":
K("W037", f.tokens.curr, t)
} else if (w["(global)"]) typeof M[t] != "boolean" && (e !== "typeof" && e !== "delete" || f.tokens.next && (f.tokens.next.value === "." || f.tokens.next.value === "[")) && (w["(comparray)"].check(t) || $(w, "W117", f.tokens.curr, t)), qt(f.tokens.curr);
else switch (w[t]) {
case "closure":
case "function":
case "var":
case "unused":
K("W038", f.tokens.curr, t);
break;
case "label":
K("W037", f.tokens.curr, t);
break;
case "outer":
case "global":
break;
default:
if (n === !0) w[t] = !0;
else if (n === null) K("W039", f.tokens.curr, t), qt(f.tokens.curr);
else if (typeof n != "object")(e !== "typeof" && e !== "delete" || f.tokens.next && (f.tokens.next.value === "." || f.tokens.next.value === "[")) && $(w, "W117", f.tokens.curr, t), w[t] = !0, qt(f.tokens.curr);
else switch (n[t]) {
case "function":
case "unction":
this["function"] = !0, n[t] = "closure", w[t] = n["(global)"] ? "global" : "outer";
break;
case "var":
case "unused":
n[t] = "closure", w[t] = n["(global)"] ? "global" : "outer";
break;
case "const":
Xt(n, t, {
unused: !1
});
break;
case "closure":
w[t] = n["(global)"] ? "global" : "outer";
break;
case "label":
K("W037", f.tokens.curr, t)
}
}
return this
},
led: function() {
G("E033", f.tokens.next, f.tokens.next.value)
}
}, gt("(regexp)", function() {
return this
}), ht("(endline)"), ht("(begin)"), ht("(end)").reach = !0, ht("(error)").reach = !0, ht("}").reach = !0, ht(")"), ht("]"), ht('"').reach = !0, ht("'").reach = !0, ht(";"), ht(":").reach = !0, ht("#"), yt("else"), yt("case").reach = !0, yt("catch"), yt("default").reach = !0, yt("finally"), wt("arguments", function(e) {
f.directive["use strict"] && w["(global)"] && K("E008", e)
}), wt("eval"), wt("false"), wt("Infinity"), wt("null"), wt("this", function(e) {
f.directive["use strict"] && !f.option.validthis && (w["(statement)"] && w["(name)"].charAt(0) > "Z" || w["(global)"]) && K("W040", e)
}), wt("true"), wt("undefined"), kt("=", "assign", 20), kt("+=", "assignadd", 20), kt("-=", "assignsub", 20), kt("*=", "assignmult", 20), kt("/=", "assigndiv", 20).nud = function() {
G("E014")
}, kt("%=", "assignmod", 20), At("&=", "assignbitand", 20), At("|=", "assignbitor", 20), At("^=", "assignbitxor", 20), At("<<=", "assignshiftleft", 20), At(">>=", "assignshiftright", 20), At(">>>=", "assignshiftrightunsigned", 20), Et(",", function(e, t) {
var n;
t.exprs = [e];
if (!lt({
peek: !0
})) return t;
for (;;) {
if (!(n = ot(10))) break;
t.exprs.push(n);
if (f.tokens.next.value !== "," || !lt()) break
}
return t
}, 10, !0), Et("?", function(e, t) {
return Qt(), t.left = e, t.right = ot(10), rt(":"), t["else"] = ot(10), t
}, 30);
var Rt = 40;
Et("||", function(e, t) {
return Qt(), t.left = e, t.right = ot(Rt), t
}, Rt), Et("&&", "and", 50), Lt("|", "bitor", 70), Lt("^", "bitxor", 80), Lt("&", "bitand", 90), xt("==", function(e, t) {
var n = f.option.eqnull && (e.value === "null" || t.value === "null");
switch (!0) {
case !n && f.option.eqeqeq:
this.from = this.character, K("W116", this, "===", "==");
break;
case Tt(e):
K("W041", this, "===", e.value);
break;
case Tt(t):
K("W041", this, "===", t.value);
break;
case Nt(t, e):
K("W122", this, t.value);
break;
case Nt(e, t):
K("W122", this, e.value)
}
return this
}), xt("===", function(e, t) {
return Nt(t, e) ? K("W122", this, t.value) : Nt(e, t) && K("W122", this, e.value), this
}), xt("!=", function(e, t) {
var n = f.option.eqnull && (e.value === "null" || t.value === "null");
return !n && f.option.eqeqeq ? (this.from = this.character, K("W116", this, "!==", "!=")) : Tt(e) ? K("W041", this, "!==", e.value) : Tt(t) ? K("W041", this, "!==", t.value) : Nt(t, e) ? K("W122", this, t.value) : Nt(e, t) && K("W122", this, e.value), this
}), xt("!==", function(e, t) {
return Nt(t, e) ? K("W122", this, t.value) : Nt(e, t) && K("W122", this, e.value), this
}), xt("<"), xt(">"), xt("<="), xt(">="), Lt("<<", "shiftleft", 120), Lt(">>", "shiftright", 120), Lt(">>>", "shiftrightunsigned", 120), Et("in", "in", 120), Et("instanceof", "instanceof", 120), Et("+", function(e, t) {
var n = ot(130);
return e && n && e.id === "(string)" && n.id === "(string)" ? (e.value += n.value, e.character = n.character, !f.option.scripturl && a.javascriptURL.test(e.value) && K("W050", e), e) : (t.left = e, t.right = n, t)
}, 130), mt("+", "num"), mt("+++", function() {
return K("W007"), this.right = ot(150), this.arity = "unary", this
}), Et("+++", function(e) {
return K("W007"), this.left = e, this.right = ot(130), this
}, 130), Et("-", "sub", 130), mt("-", "neg"), mt("---", function() {
return K("W006"), this.right = ot(150), this.arity = "unary", this
}), Et("---", function(e) {
return K("W006"), this.left = e, this.right = ot(130), this
}, 130), Et("*", "mult", 140), Et("/", "div", 140), Et("%", "mod", 140), Ot("++", "postinc"), mt("++", "preinc"), f.syntax["++"].exps = !0, Ot("--", "postdec"), mt("--", "predec"), f.syntax["--"].exps = !0, mt("delete", function() {
var e = ot(10);
return (!e || e.id !== "." && e.id !== "[") && K("W051"), this.first = e, this
}).exps = !0, mt("~", function() {
return f.option.bitwise && K("W052", this, "~"), ot(150), this
}), mt("...", function() {
return f.option.inESNext() || K("W104", this, "spread/rest operator"), f.tokens.next.identifier || G("E030", f.tokens.next, f.tokens.next.value), ot(150), this
}), mt("!", function() {
return this.right = ot(150), this.arity = "unary", this.right || V("E041", this.line || 0), n[this.right.id] === !0 && K("W018", this, "!"), this
}), mt("typeof", "typeof"), mt("new", function() {
var e = ot(155),
t;
if (e && e.id !== "function")
if (e.identifier) {
e["new"] = !0;
switch (e.value) {
case "Number":
case "String":
case "Boolean":
case "Math":
case "JSON":
K("W053", f.tokens.prev, e.value);
break;
case "Function":
f.option.evil || K("W054");
break;
case "Date":
case "RegExp":
case "this":
break;
default:
e.id !== "function" && (t = e.value.substr(0, 1), f.option.newcap && (t < "A" || t > "Z") && !r.has(S, e.value) && K("W055", f.tokens.curr))
}
} else e.id !== "." && e.id !== "[" && e.id !== "(" && K("W056", f.tokens.curr);
else f.option.supernew || K("W057", this);
return f.tokens.next.id !== "(" && !f.option.supernew && K("W058", f.tokens.curr, f.tokens.curr.value), this.first = e, this
}), f.syntax["new"].exps = !0, mt("void").exps = !0, Et(".", function(e, t) {
var n = _t(!1, !0);
return typeof n == "string" && It(n), t.left = e, t.right = n, n && n === "hasOwnProperty" && f.tokens.next.value === "=" && K("W001"), !e || e.value !== "arguments" || n !== "callee" && n !== "caller" ? !f.option.evil && e && e.value === "document" && (n === "write" || n === "writeln") && K("W060", e) : f.option.noarg ? K("W059", e, n) : f.directive["use strict"] && G("E008"), !f.option.evil && (n === "eval" || n === "execScript") && K("W061"), t
}, 160, !0), Et("(", function(e, t) {
f.option.immed && e && !e.immed && e.id === "function" && K("W062");
var n = 0,
r = [];
e && e.type === "(identifier)" && e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/) && "Number String Boolean Date Object Error".indexOf(e.value) === -1 && (e.value === "Math" ? K("W063", e) : f.option.newcap && K("W064", e));
if (f.tokens.next.id !== ")")
for (;;) {
r[r.length] = ot(10), n += 1;
if (f.tokens.next.id !== ",") break;
lt()
}
return rt(")"), typeof e == "object" && (f.option.inES3() && e.value === "parseInt" && n === 1 && K("W065", f.tokens.curr), f.option.evil || (e.value === "eval" || e.value === "Function" || e.value === "execScript" ? (K("W061", e), r[0] && [0].id === "(string)" && Z(e, r[0].value)) : !r[0] || r[0].id !== "(string)" || e.value !== "setTimeout" && e.value !== "setInterval" ? r[0] && r[0].id === "(string)" && e.value === "." && e.left.value === "window" && (e.right === "setTimeout" || e.right === "setInterval") && (K("W066", e), Z(e, r[0].value)) : (K("W066", e), Z(e, r[0].value))), !e.identifier && e.id !== "." && e.id !== "[" && e.id !== "(" && e.id !== "&&" && e.id !== "||" && e.id !== "?" && K("W067", e)), t.left = e, t
}, 155, !0).exps = !0, mt("(", function() {
var e, t = [],
n, i, s = 0,
o, u = 1;
do n = nt(s), n.value === "(" ? u += 1 : n.value === ")" && (u -= 1), s += 1, i = nt(s); while ((u !== 0 || n.value !== ")") && i.value !== "=>" && i.value !== ";" && i.type !== "(end)");
f.tokens.next.id === "function" && (f.tokens.next.immed = !0);
var a = [];
if (f.tokens.next.id !== ")")
for (;;) {
if (i.value === "=>" && r.contains(["{", "["], f.tokens.next.value)) {
e = f.tokens.next, e.left = Yt(), t.push(e);
for (var l in e.left) a.push(e.left[l].token)
} else a.push(ot(10));
if (f.tokens.next.id !== ",") break;
lt()
}
rt(")", this), f.option.immed && a[0] && a[0].id === "function" && f.tokens.next.id !== "(" && (f.tokens.next.id !== "." || nt().value !== "call" && nt().value !== "apply") && K("W068", this);
if (f.tokens.next.value === "=>") return a;
if (!a.length) return;
return a.length > 1 ? (o = Object.create(f.syntax[","]), o.exprs = a) : o = a[0], o && (o.paren = !0), o
}), St("=>"), Et("[", function(e, t) {
var n = ot(10),
r;
return n && n.type === "(string)" && (!f.option.evil && (n.value === "eval" || n.value === "execScript") && K("W061", t), It(n.value), !f.option.sub && a.identifier.test(n.value) && (r = f.syntax[n.value], (!r || !U(r)) && K("W069", f.tokens.prev, n.value))), rt("]", t), n && n.value === "hasOwnProperty" && f.tokens.next.value === "=" && K("W001"), t.left = e, t.right = n, t
}, 160, !0), mt("[", function() {
var e = on(!0);
if (e.isCompArray) return f.option.inESNext() || K("W119", f.tokens.curr, "array comprehension"), Ut();
e.isDestAssign && !f.option.inESNext() && K("W104", f.tokens.curr, "destructuring assignment");
var t = f.tokens.curr.line !== f.tokens.next.line;
this.first = [], t && (N += f.option.indent, f.tokens.next.from === N + f.option.indent && (N += f.option.indent));
while (f.tokens.next.id !== "(end)") {
while (f.tokens.next.id === ",") f.option.inES5() || K("W070"), rt(",");
if (f.tokens.next.id === "]") break;
this.first.push(ot(10));
if (f.tokens.next.id !== ",") break;
lt({
allowTrailing: !0
});
if (f.tokens.next.id === "]" && !f.option.inES5(!0)) {
K("W070", f.tokens.curr);
break
}
}
return t && (N -= f.option.indent), rt("]", this), this
}, 160),
function(e) {
e.nud = function(e) {
function c(e, t) {
a[e] && r.has(a, e) ? K("W075", f.tokens.next, i) : a[e] = {}, a[e].basic = !0, a[e].basictkn = t
}
function h(e, t) {
a[e] && r.has(a, e) ? (a[e].basic || a[e].setter) && K("W075", f.tokens.next, i) : a[e] = {}, a[e].setter = !0, a[e].setterToken = t
}
function p(e) {
a[e] && r.has(a, e) ? (a[e].basic || a[e].getter) && K("W075", f.tokens.next, i) : a[e] = {}, a[e].getter = !0, a[e].getterToken = f.tokens.curr
}
var t, n, i, s, o, u, a = {},
l = "";
t = f.tokens.curr.line !== f.tokens.next.line, t && (N += f.option.indent, f.tokens.next.from === N + f.option.indent && (N += f.option.indent));
for (;;) {
if (f.tokens.next.id === "}") break;
e && f.tokens.next.value === "static" && (rt("static"), l = "static ");
if (f.tokens.next.value === "get" && nt().id !== ":") rt("get"), f.option.inES5(!e) || G("E034"), i = zt(), !i && !f.option.inESNext() && G("E035"), e && i === "constructor" && G("E049", f.tokens.next, "class getter method", i), i && p(l + i), o = f.tokens.next, n = Jt(), s = n["(params)"], i && s && K("W076", o, s[0], i);
else if (f.tokens.next.value === "set" && nt().id !== ":") rt("set"), f.option.inES5(!e) || G("E034"), i = zt(), !i && !f.option.inESNext() && G("E035"), e && i === "constructor" && G("E049", f.tokens.next, "class setter method", i), i && h(l + i, f.tokens.next), o = f.tokens.next, n = Jt(), s = n["(params)"], i && (!s || s.length !== 1) && K("W077", o, i);
else {
u = !1, f.tokens.next.value === "*" && f.tokens.next.type === "(punctuator)" && (f.option.inESNext() || K("W104", f.tokens.next, "generator functions"), rt("*"), u = !0), i = zt(), c(l + i, f.tokens.next);
if (typeof i != "string") break;
f.tokens.next.value === "(" ? (f.option.inESNext() || K("W104", f.tokens.curr, "concise methods"), Jt(i, undefined, u)) : e || (rt(":"), ot(10))
}
e && i === "prototype" && G("E049", f.tokens.next, "class method", i), It(i);
if (e) {
l = "";
continue
}
if (f.tokens.next.id !== ",") break;
lt({
allowTrailing: !0,
property: !0
}), f.tokens.next.id === "," ? K("W070", f.tokens.curr) : f.tokens.next.id === "}" && !f.option.inES5(!0) && K("W070", f.tokens.curr)
}
t && (N -= f.option.indent), rt("}", this);
if (f.option.inES5())
for (var d in a) r.has(a, d) && a[d].setter && !a[d].getter && K("W078", a[d].setterToken);
return this
}, e.fud = function() {
G("E036", f.tokens.curr)
}
}(ht("{"));
var en = pt("const", function(e) {
var t, n, i;
f.option.inESNext() || K("W104", f.tokens.curr, "const"), this.first = [];
for (;;) {
var s = [];
r.contains(["{", "["], f.tokens.next.value) ? (t = Yt(), i = !1) : (t = [{
id: _t(),
token: f.tokens.curr
}], i = !0);
for (var o in t) t.hasOwnProperty(o) && (o = t[o], w[o.id] === "const" && K("E011", null, o.id), w["(global)"] && M[o.id] === !1 && K("W079", o.token, o.id), o.id && (et(o.id, {
token: o.token,
type: "const",
unused: !0
}), s.push(o.token)));
if (e) break;
this.first = this.first.concat(s), f.tokens.next.id !== "=" && K("E012", f.tokens.curr, f.tokens.curr.value), f.tokens.next.id === "=" && (rt("="), f.tokens.next.id === "undefined" && K("W080", f.tokens.prev, f.tokens.prev.value), nt(0).id === "=" && f.tokens.next.identifier && K("W120", f.tokens.next, f.tokens.next.value), n = ot(10), i ? t[0].first = n : Zt(s, n));
if (f.tokens.next.id !== ",") break;
lt()
}
return this
});
en.exps = !0;
var tn = pt("var", function(e) {
var t, n, i;
this.first = [];
for (;;) {
var s = [];
r.contains(["{", "["], f.tokens.next.value) ? (t = Yt(), n = !1) : (t = [{
id: _t(),
token: f.tokens.curr
}], n = !0);
for (var o in t) t.hasOwnProperty(o) && (o = t[o], f.option.inESNext() && w[o.id] === "const" && K("E011", null, o.id), w["(global)"] && M[o.id] === !1 && K("W079", o.token, o.id), o.id && (et(o.id, {
type: "unused",
token: o.token
}), s.push(o.token)));
if (e) break;
this.first = this.first.concat(s), f.tokens.next.id === "=" && (rt("="), f.tokens.next.id === "undefined" && K("W080", f.tokens.prev, f.tokens.prev.value), nt(0).id === "=" && f.tokens.next.identifier && K("W120", f.tokens.next, f.tokens.next.value), i = ot(10), n ? t[0].first = i : Zt(s, i));
if (f.tokens.next.id !== ",") break;
lt()
}
return this
});
tn.exps = !0;
var nn = pt("let", function(e) {
var t, n, i, s;
f.option.inESNext() || K("W104", f.tokens.curr, "let"), f.tokens.next.value === "(" ? (f.option.inMoz(!0) || K("W118", f.tokens.next, "let block"), rt("("), w["(blockscope)"].stack(), s = !0) : w["(nolet)"] && G("E048", f.tokens.curr), this.first = [];
for (;;) {
var o = [];
r.contains(["{", "["], f.tokens.next.value) ? (t = Yt(), n = !1) : (t = [{
id: _t(),
token: f.tokens.curr.value
}], n = !0);
for (var u in t) t.hasOwnProperty(u) && (u = t[u], f.option.inESNext() && w[u.id] === "const" && K("E011", null, u.id), w["(global)"] && M[u.id] === !1 && K("W079", u.token, u.id), u.id && !w["(nolet)"] && (et(u.id, {
type: "unused",
token: u.token,
islet: !0
}), o.push(u.token)));
if (e) break;
this.first = this.first.concat(o), f.tokens.next.id === "=" && (rt("="), f.tokens.next.id === "undefined" && K("W080", f.tokens.prev, f.tokens.prev.value), nt(0).id === "=" && f.tokens.next.identifier && K("W120", f.tokens.next, f.tokens.next.value), i = ot(10), n ? t[0].first = i : Zt(o, i));
if (f.tokens.next.id !== ",") break;
lt()
}
return s && (rt(")"), Ft(!0, !0), this.block = !0, w["(blockscope)"].unstack()), this
});
nn.exps = !0, dt("class", function() {
return rn.call(this, !0)
}), dt("function", function() {
var e = !1;
f.tokens.next.value === "*" && (rt("*"), f.option.inESNext(!0) ? e = !0 : K("W119", f.tokens.curr, "function*")), T && K("W082", f.tokens.curr);
var t = _t();
return w[t] === "const" && K("E011", null, t), et(t, {
type: "unction",
token: f.tokens.curr
}), Jt(t, {
statement: !0
}, e), f.tokens.next.id === "(" && f.tokens.next.line === f.tokens.curr.line && G("E039"), this
}), mt("function", function() {
var e = !1;
f.tokens.next.value === "*" && (f.option.inESNext() || K("W119", f.tokens.curr, "function*"), rt("*"), e = !0);
var t = Mt();
return Jt(t, undefined, e), !f.option.loopfunc && w["(loopage)"] && K("W083"), this
}), dt("if", function() {
var e = f.tokens.next;
return Qt(), f.condition = !0, rt("("), Gt(ot(0)), rt(")", e), f.condition = !1, Ft(!0, !0), f.tokens.next.id === "else" && (rt("else"), f.tokens.next.id === "if" || f.tokens.next.id === "switch" ? Ht(!0) : Ft(!0, !0)), this
}), dt("try", function() {
function t() {
var e = D,
t;
rt("catch"), rt("("), D = Object.create(e), t = f.tokens.next.value, f.tokens.next.type !== "(identifier)" && (t = null, K("E030", f.tokens.next, t)), rt(), w = $t("(catch)", f.tokens.next, D, {
"(context)": w,
"(breakage)": w["(breakage)"],
"(loopage)": w["(loopage)"],
"(statement)": !1,
"(catch)": !0
}), t && et(t, {
type: "exception"
}), f.tokens.next.value === "if" && (f.option.inMoz(!0) || K("W118", f.tokens.curr, "catch filter"), rt("if"), ot(0)), rt(")"), f.tokens.curr.funct = w, E.push(w), Ft(!1), D = e, w["(last)"] = f.tokens.curr.line, w["(lastcharacter)"] = f.tokens.curr.character, w = w["(context)"]
}
var e;
Ft(!0);
while (f.tokens.next.id === "catch") Qt(), e && !f.option.inMoz(!0) && K("W118", f.tokens.next, "multiple catch blocks"), t(), e = !0;
if (f.tokens.next.id === "finally") {
rt("finally"), Ft(!0);
return
}
return e || G("E021", f.tokens.next, "catch", f.tokens.next.value), this
}), dt("while", function() {
var e = f.tokens.next;
return w["(breakage)"] += 1, w["(loopage)"] += 1, Qt(), rt("("), Gt(ot(0)), rt(")", e), Ft(!0, !0), w["(breakage)"] -= 1, w["(loopage)"] -= 1, this
}).labelled = !0, dt("with", function() {
var e = f.tokens.next;
return f.directive["use strict"] ? G("E010", f.tokens.curr) : f.option.withstmt || K("W085", f.tokens.curr), rt("("), ot(0), rt(")", e), Ft(!0, !0), this
}), dt("switch", function() {
var e = f.tokens.next,
t = !1,
n = !1;
w["(breakage)"] += 1, rt("("), Gt(ot(0)), rt(")", e), e = f.tokens.next, rt("{"), f.tokens.next.from === N && (n = !0), n || (N += f.option.indent), this.cases = [];
for (;;) switch (f.tokens.next.id) {
case "case":
switch (w["(verb)"]) {
case "yield":
case "break":
case "case":
case "continue":
case "return":
case "switch":
case "throw":
break;
default:
a.fallsThrough.test(f.lines[f.tokens.next.line - 2]) || K("W086", f.tokens.curr, "case")
}
rt("case"), this.cases.push(ot(0)), Qt(), t = !0, rt(":"), w["(verb)"] = "case";
break;
case "default":
switch (w["(verb)"]) {
case "yield":
case "break":
case "continue":
case "return":
case "throw":
break;
default:
this.cases.length && (a.fallsThrough.test(f.lines[f.tokens.next.line - 2]) || K("W086", f.tokens.curr, "default"))
}
rt("default"), t = !0, rt(":");
break;
case "}":
n || (N -= f.option.indent), rt("}", e), w["(breakage)"] -= 1, w["(verb)"] = undefined;
return;
case "(end)":
G("E023", f.tokens.next, "}");
return;
default:
N += f.option.indent;
if (t) switch (f.tokens.curr.id) {
case ",":
G("E040");
return;
case ":":
t = !1, Bt();
break;
default:
G("E025", f.tokens.curr);
return
} else {
if (f.tokens.curr.id !== ":") {
G("E021", f.tokens.next, "case", f.tokens.next.value);
return
}
rt(":"), G("E024", f.tokens.curr, ":"), Bt()
}
N -= f.option.indent
}
}).labelled = !0, pt("debugger", function() {
return f.option.debug || K("W087", this), this
}).exps = !0,
function() {
var e = pt("do", function() {
w["(breakage)"] += 1, w["(loopage)"] += 1, Qt(), this.first = Ft(!0, !0), rt("while");
var e = f.tokens.next;
return rt("("), Gt(ot(0)), rt(")", e), w["(breakage)"] -= 1, w["(loopage)"] -= 1, this
});
e.labelled = !0, e.exps = !0
}(), dt("for", function() {
var e, t = f.tokens.next,
n = !1,
i = null;
t.value === "each" && (i = t, rt("each"), f.option.inMoz(!0) || K("W118", f.tokens.curr, "for each")), w["(breakage)"] += 1, w["(loopage)"] += 1, Qt(), rt("(");
var s, o = 0,
u = ["in", "of"];
do s = nt(o), ++o; while (!r.contains(u, s.value) && s.value !== ";" && s.type !== "(end)");
if (r.contains(u, s.value)) {
!f.option.inESNext() && s.value === "of" && G("W104", s, "for of");
if (f.tokens.next.id === "var") rt("var"), f.syntax["var"].fud.call(f.syntax["var"].fud, !0);
else if (f.tokens.next.id === "let") rt("let"), n = !0, w["(blockscope)"].stack(), f.syntax.let.fud.call(f.syntax.let.fud, !0);
else if (!f.tokens.next.identifier) G("E030", f.tokens.next, f.tokens.next.type), rt();
else {
switch (w[f.tokens.next.value]) {
case "unused":
w[f.tokens.next.value] = "var";
break;
case "var":
break;
default:
w["(blockscope)"].getlabel(f.tokens.next.value) || K("W088", f.tokens.next, f.tokens.next.value)
}
rt()
}
rt(s.value), ot(20), rt(")", t), e = Ft(!0, !0), f.option.forin && e && (e.length > 1 || typeof e[0] != "object" || e[0].value !== "if") && K("W089", this), w["(breakage)"] -= 1, w["(loopage)"] -= 1
} else {
i && G("E045", i);
if (f.tokens.next.id !== ";")
if (f.tokens.next.id === "var") rt("var"), f.syntax["var"].fud.call(f.syntax["var"].fud);
else if (f.tokens.next.id === "let") rt("let"), n = !0, w["(blockscope)"].stack(), f.syntax.let.fud.call(f.syntax.let.fud);
else
for (;;) {
ot(0, "for");
if (f.tokens.next.id !== ",") break;
lt()
}
at(f.tokens.curr), rt(";"), f.tokens.next.id !== ";" && Gt(ot(0)), at(f.tokens.curr), rt(";"), f.tokens.next.id === ";" && G("E021", f.tokens.next, ")", ";");
if (f.tokens.next.id !== ")")
for (;;) {
ot(0, "for");
if (f.tokens.next.id !== ",") break;
lt()
}
rt(")", t), Ft(!0, !0), w["(breakage)"] -= 1, w["(loopage)"] -= 1
}
return n && w["(blockscope)"].unstack(), this
}).labelled = !0, pt("break", function() {
var e = f.tokens.next.value;
return w["(breakage)"] === 0 && K("W052", f.tokens.next, this.value), f.option.asi || at(this), f.tokens.next.id !== ";" && !f.tokens.next.reach && f.tokens.curr.line === f.tokens.next.line && (w[e] !== "label" ? K("W090", f.tokens.next, e) : D[e] !== w && K("W091", f.tokens.next, e), this.first = f.tokens.next, rt()), Dt("break"), this
}).exps = !0, pt("continue", function() {
var e = f.tokens.next.value;
return w["(breakage)"] === 0 && K("W052", f.tokens.next, this.value), f.option.asi || at(this), f.tokens.next.id !== ";" && !f.tokens.next.reach ? f.tokens.curr.line === f.tokens.next.line && (w[e] !== "label" ? K("W090", f.tokens.next, e) : D[e] !== w && K("W091", f.tokens.next, e), this.first = f.tokens.next, rt()) : w["(loopage)"] || K("W052", f.tokens.next, this.value), Dt("continue"), this
}).exps = !0, pt("return", function() {
return this.line === f.tokens.next.line ? f.tokens.next.id !== ";" && !f.tokens.next.reach && (this.first = ot(0), this.first && this.first.type === "(punctuator)" && this.first.value === "=" && !this.first.paren && !f.option.boss && Q("W093", this.first.line, this.first.character)) : f.tokens.next.type === "(punctuator)" && ["[", "{", "+", "-"].indexOf(f.tokens.next.value) > -1 && at(this), Dt("return"), this
}).exps = !0,
function(e) {
e.exps = !0, e.lbp = 25
}(mt("yield", function() {
var e = f.tokens.prev;
return f.option.inESNext(!0) && !w["(generator)"] ? ("(catch)" !== w["(name)"] || !w["(context)"]["(generator)"]) && G("E046", f.tokens.curr, "yield") : f.option.inESNext() || K("W104", f.tokens.curr, "yield"), w["(generator)"] = "yielded", this.line === f.tokens.next.line || !f.option.inMoz(!0) ? (f.tokens.next.id !== ";" && !f.tokens.next.reach && f.tokens.next.nud && (ut(f.tokens.curr, f.tokens.next), this.first = ot(10), this.first.type === "(punctuator)" && this.first.value === "=" && !this.first.paren && !f.option.boss && Q("W093", this.first.line, this.first.character)), f.option.inMoz(!0) && f.tokens.next.id !== ")" && (e.lbp > 30 || !e.assign && !st() || e.id === "yield") && G("E050", this)) : f.option.asi || at(this), this
})), pt("throw", function() {
return at(this), this.first = ot(20), Dt("throw"), this
}).exps = !0, pt("import", function() {
f.option.inESNext() || K("W119", f.tokens.curr, "import");
if (f.tokens.next.type === "(string)") return rt("(string)"), this;
if (f.tokens.next.identifier) this.name = _t(), et(this.name, {
type: "unused",
token: f.tokens.curr
});
else {
rt("{");
for (;;) {
if (f.tokens.next.value === "}") {
rt("}");
break
}
var e;
f.tokens.next.type === "default" ? (e = "default", rt("default")) : e = _t(), f.tokens.next.value === "as" && (rt("as"), e = _t()), et(e, {
type: "unused",
token: f.tokens.curr
});
if (f.tokens.next.value !== ",") {
if (f.tokens.next.value === "}") {
rt("}");
break
}
G("E024", f.tokens.next, f.tokens.next.value);
break
}
rt(",")
}
}
return rt("from"), rt("(string)"), this
}).exps = !0, pt("export", function() {
f.option.inESNext() || K("W119", f.tokens.curr, "export");
if (f.tokens.next.type === "default") {
rt("default");
if (f.tokens.next.id === "function" || f.tokens.next.id === "class") this.block = !0;
return this.exportee = ot(10), this
}
if (f.tokens.next.value === "{") {
rt("{");
for (;;) {
y[_t()] = !0;
if (f.tokens.next.value !== ",") {
if (f.tokens.next.value === "}") {
rt("}");
break
}
G("E024", f.tokens.next, f.tokens.next.value);
break
}
rt(",")
}
return this
}
return f.tokens.next.id === "var" ? (rt("var"), y[f.tokens.next.value] = !0, f.syntax["var"].fud.call(f.syntax["var"].fud)) : f.tokens.next.id === "let" ? (rt("let"), y[f.tokens.next.value] = !0, f.syntax.let.fud.call(f.syntax.let.fud)) : f.tokens.next.id === "const" ? (rt("const"), y[f.tokens.next.value] = !0, f.syntax["const"].fud.call(f.syntax["const"].fud)) : f.tokens.next.id === "function" ? (this.block = !0, rt("function"), y[f.tokens.next.value] = !0, f.syntax["function"].fud()) : f.tokens.next.id === "class" ? (this.block = !0, rt("class"), y[f.tokens.next.value] = !0, f.syntax["class"].fud()) : G("E024", f.tokens.next, f.tokens.next.value), this
}).exps = !0, bt("abstract"), bt("boolean"), bt("byte"), bt("char"), bt("class", {
es5: !0,
nud: rn
}), bt("double"), bt("enum", {
es5: !0
}), bt("export", {
es5: !0
}), bt("extends", {
es5: !0
}), bt("final"), bt("float"), bt("goto"), bt("implements", {
es5: !0,
strictOnly: !0
}), bt("import", {
es5: !0
}), bt("int"), bt("interface", {
es5: !0,
strictOnly: !0
}), bt("long"), bt("native"), bt("package", {
es5: !0,
strictOnly: !0
}), bt("private", {
es5: !0,
strictOnly: !0
}), bt("protected", {
es5: !0,
strictOnly: !0
}), bt("public", {
es5: !0,
strictOnly: !0
}), bt("short"), bt("static", {
es5: !0,
strictOnly: !0
}), bt("super", {
es5: !0
}), bt("synchronized"), bt("transient"), bt("volatile");
var on = function() {
var e, t, n = -1,
i = 0,
s = {};
r.contains(["[", "{"], f.tokens.curr.value) && (i += 1);
do {
e = n === -1 ? f.tokens.next : nt(n), t = nt(n + 1), n += 1, r.contains(["[", "{"], e.value) ? i += 1 : r.contains(["]", "}"], e.value) && (i -= 1);
if (e.identifier && e.value === "for" && i === 1) {
s.isCompArray = !0, s.notJson = !0;
break
}
if (r.contains(["}", "]"], e.value) && t.value === "=" && i === 0) {
s.isDestAssign = !0, s.notJson = !0;
break
}
e.value === ";" && (s.isBlock = !0, s.notJson = !0)
} while (i > 0 && e.id !== "(end)" && n < 15);
return s
},
an = function() {
function i(e) {
var t = n.variables.filter(function(t) {
if (t.value === e) return t.undef = !1, e
}).length;
return t !== 0
}
function s(e) {
var t = n.variables.filter(function(t) {
if (t.value === e && !t.undef) return t.unused === !0 && (t.unused = !1), e
}).length;
return t === 0
}
var e = function() {
this.mode = "use", this.variables = []
},
t = [],
n;
return {
stack: function() {
n = new e, t.push(n)
},
unstack: function() {
n.variables.filter(function(e) {
e.unused && K("W098", e.token, e.value), e.undef && $(e.funct, "W117", e.token, e.value)
}), t.splice(-1, 1), n = t[t.length - 1]
},
setState: function(e) {
r.contains(["use", "define", "generate", "filter"], e) && (n.mode = e)
},
check: function(e) {
if (!n) return;
return n && n.mode === "use" ? (s(e) && n.variables.push({
funct: w,
token: f.tokens.curr,
value: e,
undef: !0,
unused: !1
}), !0) : n && n.mode === "define" ? (i(e) || n.variables.push({
funct: w,
token: f.tokens.curr,
value: e,
undef: !1,
unused: !0
}), !0) : n && n.mode === "generate" ? ($(w, "W117", f.tokens.curr, e), !0) : n && n.mode === "filter" ? (s(e) && $(w, "W117", f.tokens.curr, e), !0) : !1
}
}
},
ln = function() {
function n() {
for (var t in e)
if (e[t]["(type)"] === "unused" && f.option.unused) {
var n = e[t]["(token)"],
r = n.line,
i = n.character;
Q("W098", r, i, t)
}
}
var e = {},
t = [e];
return {
stack: function() {
e = {}, t.push(e)
},
unstack: function() {
n(), t.splice(t.length - 1, 1), e = r.last(t)
},
getlabel: function(e) {
for (var n = t.length - 1; n >= 0; --n)
if (r.has(t[n], e) && !t[n][e]["(shadowed)"]) return t[n]
},
shadow: function(e) {
for (var n = t.length - 1; n >= 0; n--) r.has(t[n], e) && (t[n][e]["(shadowed)"] = !0)
},
unshadow: function(e) {
for (var n = t.length - 1; n >= 0; n--) r.has(t[n], e) && (t[n][e]["(shadowed)"] = !1)
},
current: {
has: function(t) {
return r.has(e, t)
},
add: function(t, n, r) {
e[t] = {
"(type)": n,
"(token)": r,
"(shadowed)": !1
}
}
}
}
},
cn = function(e, n, i) {
function v(e, t) {
if (!e) return;
!Array.isArray(e) && typeof e == "object" && (e = Object.keys(e)), e.forEach(t)
}
var o, a, l, h, p = {},
d = {};
n = r.clone(n), f.reset(), n && n.scope ? c.scope = n.scope : (c.errors = [], c.undefs = [], c.internals = [], c.blacklist = {}, c.scope = "(main)"), M = Object.create(null), W(M, s.ecmaIdentifiers), W(M, s.reservedVars), W(M, i || {}), g = Object.create(null), y = Object.create(null);
if (n) {
v(n.predef || null, function(e) {
var t, r;
e[0] === "-" ? (t = e.slice(1), c.blacklist[t] = t) : (r = Object.getOwnPropertyDescriptor(n.predef, e), M[e] = r ? r.value : !1)
}), v(n.exported || null, function(e) {
y[e] = !0
}), delete n.predef, delete n.exported, h = Object.keys(n);
for (l = 0; l < h.length; l++) /^-W\d{3}$/g.test(h[l]) ? d[h[l].slice(1)] = !0 : (p[h[l]] = n[h[l]], h[l] === "newcap" && n[h[l]] === !1 && (p["(explicitNewcap)"] = !0))
}
f.option = p, f.ignored = d, f.option.indent = f.option.indent || 4, f.option.maxerr = f.option.maxerr || 50, N = 1, S = Object.create(M), D = S, w = $t("(global)", null, D, {
"(global)": !0,
"(blockscope)": ln(),
"(comparray)": an(),
"(metrics)": Kt(f.tokens.next)
}), E = [w], B = [], P = null, L = {}, A = null, x = {}, T = !1, C = [], H = [];
if (!q(e) && !Array.isArray(e)) return Y("E004", 0), !1;
t = {get isJSON() {
return f.jsonMode
},
getOption: function(e) {
return f.option[e] || null
},
getCache: function(e) {
return f.cache[e]
},
setCache: function(e, t) {
f.cache[e] = t
},
warn: function(e, t) {
Q.apply(null, [e, t.line, t.char].concat(t.data))
},
on: function(e, t) {
e.split(" ").forEach(function(e) {
F.on(e, t)
}.bind(this))
}
}, F.removeAllListeners(), (j || []).forEach(function(e) {
e(t)
}), f.tokens.prev = f.tokens.curr = f.tokens.next = f.syntax["(begin)"], k = new u(e), k.on("warning", function(e) {
Q.apply(null, [e.code, e.line, e.character].concat(e.data))
}), k.on("error", function(e) {
Y.apply(null, [e.code, e.line, e.character].concat(e.data))
}), k.on("fatal", function(e) {
V("E041", e.line, e.from)
}), k.on("Identifier", function(e) {
F.emit("Identifier", e)
}), k.on("String", function(e) {
F.emit("String", e)
}), k.on("Number", function(e) {
F.emit("Number", e)
}), k.start();
for (var m in n) r.has(n, m) && I(m, f.tokens.curr);
X(), W(M, i || {}), lt.first = !0;
try {
rt();
switch (f.tokens.next.id) {
case "{":
case "[":
un();
break;
default:
jt(), f.directive["use strict"] && !f.option.globalstrict && !f.option.node && !f.option.phantom && K("W097", f.tokens.prev), Bt()
}
rt(f.tokens.next && f.tokens.next.value !== "." ? "(end)" : undefined), w["(blockscope)"].unstack();
var b = function(e, t) {
do {
if (typeof t[e] == "string") return t[e] === "unused" ? t[e] = "var" : t[e] === "unction" && (t[e] = "closure"), !0;
t = t["(context)"]
} while (t);
return !1
},
O = function(e, t) {
if (!x[e]) return;
var n = [];
for (var r = 0; r < x[e].length; r += 1) x[e][r] !== t && n.push(x[e][r]);
n.length === 0 ? delete x[e] : x[e] = n
},
R = function(e, t, n, r) {
var i = t.line,
s = t.character;
r === undefined && (r = f.option.unused), r === !0 && (r = "last-param");
var o = {
vars: ["var"],
"last-param": ["var", "param"],
strict: ["var", "param", "last-param"]
};
r && o[r] && o[r].indexOf(n) !== -1 && Q("W098", i, s, e), H.push({
name: e,
line: i,
character: s
})
},
U = function(e, t) {
var n = e[t],
i = e["(tokens)"][t];
if (t.charAt(0) === "(") return;
if (n !== "unused" && n !== "unction" && n !== "const") return;
if (e["(params)"] && e["(params)"].indexOf(t) !== -1) return;
if (e["(global)"] && r.has(y, t)) return;
if (n === "const" && !Vt(e, t, "unused")) return;
R(t, i, "var")
};
for (o = 0; o < c.undefs.length; o += 1) a = c.undefs[o].slice(0), b(a[2].value, a[0]) ? O(a[2].value, a[2].line) : f.option.undef && K.apply(K, a.slice(1));
E.forEach(function(e) {
if (e["(unusedOption)"] === !1) return;
for (var t in e) r.has(e, t) && U(e, t);
if (!e["(params)"]) return;
var n = e["(params)"].slice(),
i = n.pop(),
s, o;
while (i) {
s = e[i], o = e["(unusedOption)"] || f.option.unused, o = o === !0 ? "last-param" : o;
if (i === "undefined") return;
if (s === "unused" || s === "unction") R(i, e["(tokens)"][i], "param", e["(unusedOption)"]);
else if (o === "last-param") return;
i = n.pop()
}
});
for (var z in g) r.has(g, z) && !r.has(S, z) && !r.has(y, z) && R(z, g[z], "var")
} catch ($) {
if (!$ || $.name !== "JSHintError") throw $;
var J = f.tokens.next || {};
c.errors.push({
scope: "(main)",
raw: $.raw,
code: $.code,
reason: $.message,
line: $.line || J.line,
character: $.character || J.from
}, null)
}
if (c.scope === "(main)") {
n = n || {};
for (o = 0; o < c.internals.length; o += 1) a = c.internals[o], n.scope = a.elem, cn(a.value, n, i)
}
return c.errors.length === 0
};
return cn.addModule = function(e) {
j.push(e)
}, cn.addModule(l.register), cn.data = function() {
var e = {
functions: [],
options: f.option
},
t = [],
n = [],
i, s, o, u, a, l;
cn.errors.length && (e.errors = cn.errors), f.jsonMode && (e.json = !0);
for (a in x) r.has(x, a) && t.push({
name: a,
line: x[a]
});
t.length > 0 && (e.implieds = t), B.length > 0 && (e.urls = B), l = Object.keys(D), l.length > 0 && (e.globals = l);
for (o = 1; o < E.length; o += 1) {
s = E[o], i = {};
for (u = 0; u < b.length; u += 1) i[b[u]] = [];
for (u = 0; u < b.length; u += 1) i[b[u]].length === 0 && delete i[b[u]];
i.name = s["(name)"], i.param = s["(params)"], i.line = s["(line)"], i.character = s["(character)"], i.last = s["(last)"], i.lastcharacter = s["(lastcharacter)"], i.metrics = {
complexity: s["(metrics)"].ComplexityCount,
parameters: (s["(params)"] || []).length,
statements: s["(metrics)"].statementCount
}, e.functions.push(i)
}
H.length > 0 && (e.unused = H), n = [];
for (a in L)
if (typeof L[a] == "number") {
e.member = L;
break
}
return e
}, cn.jshint = cn, cn
}();
typeof n == "object" && n && (n.JSHINT = c)
}, {
"./lex.js": 4,
"./messages.js": 5,
"./reg.js": 6,
"./state.js": 7,
"./style.js": 8,
"./vars.js": 9,
events: 10,
underscore: 2
}],
4: [function(e, t, n) {
"use strict";
function c() {
var e = [];
return {
push: function(t) {
e.push(t)
},
check: function() {
for (var t = 0; t < e.length; ++t) e[t]();
e.splice(0, e.length)
}
}
}
function h(e) {
var t = e;
typeof t == "string" && (t = t.replace(/\r\n/g, "\n").replace(/\r/g, "\n").split("\n")), t[0] && t[0].substr(0, 2) === "#!" && (t[0].indexOf("node") !== -1 && (o.option.node = !0), t[0] = ""), this.emitter = new i.EventEmitter, this.source = e, this.setLines(t), this.prereg = !0, this.line = 0, this.char = 1, this.from = 1, this.input = "", this.inComment = !1;
for (var n = 0; n < o.option.indent; n += 1) o.tab += " "
}
var r = e("underscore"),
i = e("events"),
s = e("./reg.js"),
o = e("./state.js").state,
u = e("../data/ascii-identifier-data.js"),
a = u.asciiIdentifierStartTable,
f = u.asciiIdentifierPartTable,
l = {
Identifier: 1,
Punctuator: 2,
NumericLiteral: 3,
StringLiteral: 4,
Comment: 5,
Keyword: 6,
NullLiteral: 7,
BooleanLiteral: 8,
RegExp: 9,
TemplateLiteral: 10
};
h.prototype = {
_lines: [],
getLines: function() {
return this._lines = o.lines, this._lines
},
setLines: function(e) {
this._lines = e, o.lines = this._lines
},
peek: function(e) {
return this.input.charAt(e || 0)
},
skip: function(e) {
e = e || 1, this.char += e, this.input = this.input.slice(e)
},
on: function(e, t) {
e.split(" ").forEach(function(e) {
this.emitter.on(e, t)
}.bind(this))
},
trigger: function() {
this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments))
},
triggerAsync: function(e, t, n, r) {
n.push(function() {
r() && this.trigger(e, t)
}.bind(this))
},
scanPunctuator: function() {
var e = this.peek(),
t, n, r;
switch (e) {
case ".":
if (/^[0-9]$/.test(this.peek(1))) return null;
if (this.peek(1) === "." && this.peek(2) === ".") return {
type: l.Punctuator,
value: "..."
};
case "(":
case ")":
case ";":
case ",":
case "{":
case "}":
case "[":
case "]":
case ":":
case "~":
case "?":
return {
type: l.Punctuator,
value: e
};
case "#":
return {
type: l.Punctuator,
value: e
};
case "":
return null
}
return t = this.peek(1), n = this.peek(2), r = this.peek(3), e === ">" && t === ">" && n === ">" && r === "=" ? {
type: l.Punctuator,
value: ">>>="
} : e === "=" && t === "=" && n === "=" ? {
type: l.Punctuator,
value: "==="
} : e === "!" && t === "=" && n === "=" ? {
type: l.Punctuator,
value: "!=="
} : e === ">" && t === ">" && n === ">" ? {
type: l.Punctuator,
value: ">>>"
} : e === "<" && t === "<" && n === "=" ? {
type: l.Punctuator,
value: "<<="
} : e === ">" && t === ">" && n === "=" ? {
type: l.Punctuator,
value: ">>="
} : e === "=" && t === ">" ? {
type: l.Punctuator,
value: e + t
} : e === t && "+-<>&|".indexOf(e) >= 0 ? {
type: l.Punctuator,
value: e + t
} : "<>=!+-*%&|^".indexOf(e) >= 0 ? t === "=" ? {
type: l.Punctuator,
value: e + t
} : {
type: l.Punctuator,
value: e
} : e === "/" ? t === "=" && /\/=(?!(\S*\/[gim]?))/.test(this.input) ? {
type: l.Punctuator,
value: "/="
} : {
type: l.Punctuator,
value: "/"
} : null
},
scanComments: function() {
function s(e, t, n) {
var r = ["jshint", "jslint", "members", "member", "globals", "global", "exported"],
i = !1,
s = e + t,
o = "plain";
return n = n || {}, n.isMultiline && (s += "*/"), r.forEach(function(n) {
if (i) return;
if (e === "//" && n !== "jshint") return;
t.substr(0, n.length) === n && (i = !0, e += n, t = t.substr(n.length)), !i && t.charAt(0) === " " && t.substr(1, n.length) === n && (i = !0, e = e + " " + n, t = t.substr(n.length + 1));
if (!i) return;
switch (n) {
case "member":
o = "members";
break;
case "global":
o = "globals";
break;
default:
o = n
}
}), {
type: l.Comment,
commentType: o,
value: s,
body: t,
isSpecial: i,
isMultiline: n.isMultiline || !1,
isMalformed: n.isMalformed || !1
}
}
var e = this.peek(),
t = this.peek(1),
n = this.input.substr(2),
r = this.line,
i = this.char;
if (e === "*" && t === "/") return this.trigger("error", {
code: "E018",
line: r,
character: i
}), this.skip(2), null;
if (e !== "/" || t !== "*" && t !== "/") return null;
if (t === "/") return this.skip(this.input.length), s("//", n);
var o = "";
if (t === "*") {
this.inComment = !0, this.skip(2);
while (this.peek() !== "*" || this.peek(1) !== "/")
if (this.peek() === "") {
o += "\n";
if (!this.nextLine()) return this.trigger("error", {
code: "E017",
line: r,
character: i
}), this.inComment = !1, s("/*", o, {
isMultiline: !0,
isMalformed: !0
})
} else o += this.peek(), this.skip();
return this.skip(2), this.inComment = !1, s("/*", o, {
isMultiline: !0
})
}
},
scanKeyword: function() {
var e = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),
t = ["if", "in", "do", "var", "for", "new", "try", "let", "this", "else", "case", "void", "with", "enum", "while", "break", "catch", "throw", "const", "yield", "class", "super", "return", "typeof", "delete", "switch", "export", "import", "default", "finally", "extends", "function", "continue", "debugger", "instanceof"];
return e && t.indexOf(e[0]) >= 0 ? {
type: l.Keyword,
value: e[0]
} : null
},
scanIdentifier: function() {
function i(e) {
return e > 256
}
function s(e) {
return e > 256
}
function o(e) {
return /^[0-9a-fA-F]$/.test(e)
}
var e = "",
t = 0,
n, r, u = function() {
t += 1;
if (this.peek(t) !== "u") return null;
var e = this.peek(t + 1),
n = this.peek(t + 2),
r = this.peek(t + 3),
i = this.peek(t + 4),
u;
return o(e) && o(n) && o(r) && o(i) ? (u = parseInt(e + n + r + i, 16), f[u] || s(u) ? (t += 5, "\\u" + e + n + r + i) : null) : null
}.bind(this),
c = function() {
var e = this.peek(t),
n = e.charCodeAt(0);
return n === 92 ? u() : n < 128 ? a[n] ? (t += 1, e) : null : i(n) ? (t += 1, e) : null
}.bind(this),
h = function() {
var e = this.peek(t),
n = e.charCodeAt(0);
return n === 92 ? u() : n < 128 ? f[n] ? (t += 1, e) : null : s(n) ? (t += 1, e) : null
}.bind(this);
r = c();
if (r === null) return null;
e = r;
for (;;) {
r = h();
if (r === null) break;
e += r
}
switch (e) {
case "true":
case "false":
n = l.BooleanLiteral;
break;
case "null":
n = l.NullLiteral;
break;
default:
n = l.Identifier
}
return {
type: n,
value: e
}
},
scanNumericLiteral: function() {
function s(e) {
return /^[0-9]$/.test(e)
}
function o(e) {
return /^[0-7]$/.test(e)
}
function u(e) {
return /^[0-9a-fA-F]$/.test(e)
}
function a(e) {
return e === "$" || e === "_" || e === "\\" || e >= "a" && e <= "z" || e >= "A" && e <= "Z"
}
var e = 0,
t = "",
n = this.input.length,
r = this.peek(e),
i;
if (r !== "." && !s(r)) return null;
if (r !== ".") {
t = this.peek(e), e += 1, r = this.peek(e);
if (t === "0") {
if (r === "x" || r === "X") {
e += 1, t += r;
while (e < n) {
r = this.peek(e);
if (!u(r)) break;
t += r, e += 1
}
if (t.length <= 2) return {
type: l.NumericLiteral,
value: t,
isMalformed: !0
};
if (e < n) {
r = this.peek(e);
if (a(r)) return null
}
return {
type: l.NumericLiteral,
value: t,
base: 16,
isMalformed: !1
}
}
if (o(r)) {
e += 1, t += r, i = !1;
while (e < n) {
r = this.peek(e);
if (s(r)) i = !0;
else if (!o(r)) break;
t += r, e += 1
}
if (e < n) {
r = this.peek(e);
if (a(r)) return null
}
return {
type: l.NumericLiteral,
value: t,
base: 8,
isMalformed: !1
}
}
s(r) && (e += 1, t += r)
}
while (e < n) {
r = this.peek(e);
if (!s(r)) break;
t += r, e += 1
}
}
if (r === ".") {
t += r, e += 1;
while (e < n) {
r = this.peek(e);
if (!s(r)) break;
t += r, e += 1
}
}
if (r === "e" || r === "E") {
t += r, e += 1, r = this.peek(e);
if (r === "+" || r === "-") t += this.peek(e), e += 1;
r = this.peek(e);
if (!s(r)) return null;
t += r, e += 1;
while (e < n) {
r = this.peek(e);
if (!s(r)) break;
t += r, e += 1
}
}
if (e < n) {
r = this.peek(e);
if (a(r)) return null
}
return {
type: l.NumericLiteral,
value: t,
base: 10,
isMalformed: !isFinite(t)
}
},
scanTemplateLiteral: function() {
if (!o.option.esnext || this.peek() !== "`") return null;
var e = this.line,
t = this.char,
n = 1,
r = "";
this.skip();
while (this.peek() !== "`") {
while (this.peek() === "") {
if (!this.nextLine()) return this.trigger("error", {
code: "E052",
line: e,
character: t
}), {
type: l.TemplateLiteral,
value: r,
isUnclosed: !0
};
r += "\n"
}
var i = this.peek();
this.skip(n), r += i
}
return this.skip(), {
type: l.TemplateLiteral,
value: r,
isUnclosed: !1
}
},
scanStringLiteral: function(e) {
var t = this.peek();
if (t !== '"' && t !== "'") return null;
this.triggerAsync("warning", {
code: "W108",
line: this.line,
character: this.char
}, e, function() {
return o.jsonMode && t !== '"'
});
var n = "",
r = this.line,
i = this.char,
s = !1;
this.skip();
e: while (this.peek() !== t) {
while (this.peek() === "") {
s ? (s = !1, this.triggerAsync("warning", {
code: "W043",
line: this.line,
character: this.char
}, e, function() {
return !o.option.multistr
}), this.triggerAsync("warning", {
code: "W042",
line: this.line,
character: this.char
}, e, function() {
return o.jsonMode && o.option.multistr
})) : this.trigger("warning", {
code: "W112",
line: this.line,
character: this.char
});
if (!this.nextLine()) return this.trigger("error", {
code: "E029",
line: r,
character: i
}), {
type: l.StringLiteral,
value: n,
isUnclosed: !0,
quote: t
};
if (this.peek() == t) break e
}
s = !1;
var u = this.peek(),
a = 1;
u < " " && this.trigger("warning", {
code: "W113",
line: this.line,
character: this.char,
data: ["<non-printable>"]
});
if (u === "\\") {
this.skip(), u = this.peek();
switch (u) {
case "'":
this.triggerAsync("warning", {
code: "W114",
line: this.line,
character: this.char,
data: ["\\'"]
}, e, function() {
return o.jsonMode
});
break;
case "b":
u = "\\b";
break;
case "f":
u = "\\f";
break;
case "n":
u = "\\n";
break;
case "r":
u = "\\r";
break;
case "t":
u = "\\t";
break;
case "0":
u = "\\0";
var f = parseInt(this.peek(1), 10);
this.triggerAsync("warning", {
code: "W115",
line: this.line,
character: this.char
}, e, function() {
return f >= 0 && f <= 7 && o.directive["use strict"]
});
break;
case "u":
u = String.fromCharCode(parseInt(this.input.substr(1, 4), 16)), a = 5;
break;
case "v":
this.triggerAsync("warning", {
code: "W114",
line: this.line,
character: this.char,
data: ["\\v"]
}, e, function() {
return o.jsonMode
}), u = "";
break;
case "x":
var c = parseInt(this.input.substr(1, 2), 16);
this.triggerAsync("warning", {
code: "W114",
line: this.line,
character: this.char,
data: ["\\x-"]
}, e, function() {
return o.jsonMode
}), u = String.fromCharCode(c), a = 3;
break;
case "\\":
u = "\\\\";
break;
case '"':
u = '\\"';
break;
case "/":
break;
case "":
s = !0, u = "";
break;
case "!":
if (n.slice(n.length - 2) === "<") break;
default:
this.trigger("warning", {
code: "W044",
line: this.line,
character: this.char
})
}
}
n += u, this.skip(a)
}
return this.skip(), {
type: l.StringLiteral,
value: n,
isUnclosed: !1,
quote: t
}
},
scanRegExp: function() {
var e = 0,
t = this.input.length,
n = this.peek(),
r = n,
i = "",
s = [],
o = !1,
u = !1,
a, f = function() {
n < " " && (o = !0, this.trigger("warning", {
code: "W048",
line: this.line,
character: this.char
})), n === "<" && (o = !0, this.trigger("warning", {
code: "W049",
line: this.line,
character: this.char,
data: [n]
}))
}.bind(this);
if (!this.prereg || n !== "/") return null;
e += 1, a = !1;
while (e < t) {
n = this.peek(e), r += n, i += n;
if (u) {
n === "]" && (this.peek(e - 1) !== "\\" || this.peek(e - 2) === "\\") && (u = !1), n === "\\" && (e += 1, n = this.peek(e), i += n, r += n, f()), e += 1;
continue
}
if (n === "\\") {
e += 1, n = this.peek(e), i += n, r += n, f();
if (n === "/") {
e += 1;
continue
}
if (n === "[") {
e += 1;
continue
}
}
if (n === "[") {
u = !0, e += 1;
continue
}
if (n === "/") {
i = i.substr(0, i.length - 1), a = !0, e += 1;
break
}
e += 1
}
if (!a) return this.trigger("error", {
code: "E015",
line: this.line,
character: this.from
}), void this.trigger("fatal", {
line: this.line,
from: this.from
});
while (e < t) {
n = this.peek(e);
if (!/[gim]/.test(n)) break;
s.push(n), r += n, e += 1
}
try {
new RegExp(i, s.join(""))
} catch (c) {
o = !0, this.trigger("error", {
code: "E016",
line: this.line,
character: this.char,
data: [c.message]
})
}
return {
type: l.RegExp,
value: r,
flags: s,
isMalformed: o
}
},
scanNonBreakingSpaces: function() {
return o.option.nonbsp ? this.input.search(/(\u00A0)/) : -1
},
scanUnsafeChars: function() {
return this.input.search(s.unsafeChars)
},
next: function(e) {
this.from = this.char;
var t;
if (/\s/.test(this.peek())) {
t = this.char;
while (/\s/.test(this.peek())) this.from += 1, this.skip()
}
var n = this.scanComments() || this.scanStringLiteral(e) || this.scanTemplateLiteral();
return n ? n : (n = this.scanRegExp() || this.scanPunctuator() || this.scanKeyword() || this.scanIdentifier() || this.scanNumericLiteral(), n ? (this.skip(n.value.length), n) : null)
},
nextLine: function() {
var e;
if (this.line >= this.getLines().length) return !1;
this.input = this.getLines()[this.line], this.line += 1, this.char = 1, this.from = 1;
var t = this.input.trim(),
n = function() {
return r.some(arguments, function(e) {
return t.indexOf(e) === 0
})
},
i = function() {
return r.some(arguments, function(e) {
return t.indexOf(e, t.length - e.length) !== -1
})
};
o.ignoreLinterErrors === !0 && !n("/*", "//") && !i("*/") && (this.input = ""), e = this.scanNonBreakingSpaces(), e >= 0 && this.trigger("warning", {
code: "W125",
line: this.line,
character: e + 1
}), this.input = this.input.replace(/\t/g, o.tab), e = this.scanUnsafeChars(), e >= 0 && this.trigger("warning", {
code: "W100",
line: this.line,
character: e
});
if (o.option.maxlen && o.option.maxlen < this.input.length) {
var u = this.inComment || n.call(t, "//") || n.call(t, "/*"),
a = !u || !s.maxlenException.test(t);
a && this.trigger("warning", {
code: "W101",
line: this.line,
character: this.input.length
})
}
return !0
},
start: function() {
this.nextLine()
},
token: function() {
function n(e, t) {
if (!e.reserved) return !1;
var n = e.meta;
if (n && n.isFutureReservedWord && o.option.inES5()) {
if (!n.es5) return !1;
if (n.strictOnly && !o.option.strict && !o.directive["use strict"]) return !1;
if (t) return !1
}
return !0
}
var e = c(),
t, i = function(t, i, s) {
var u;
t !== "(endline)" && t !== "(end)" && (this.prereg = !1);
if (t === "(punctuator)") {
switch (i) {
case ".":
case ")":
case "~":
case "#":
case "]":
this.prereg = !1;
break;
default:
this.prereg = !0
}
u = Object.create(o.syntax[i] || o.syntax["(error)"])
}
if (t === "(identifier)") {
if (i === "return" || i === "case" || i === "typeof") this.prereg = !0;
r.has(o.syntax, i) && (u = Object.create(o.syntax[i] || o.syntax["(error)"]), n(u, s && t === "(identifier)") || (u = null))
}
return u || (u = Object.create(o.syntax[t])), u.identifier = t === "(identifier)", u.type = u.type || t, u.value = i, u.line = this.line, u.character = this.char, u.from = this.from, s && u.identifier && (u.isProperty = s), u.check = e.check, u
}.bind(this);
for (;;) {
if (!this.input.length) return i(this.nextLine() ? "(endline)" : "(end)", "");
t = this.next(e);
if (!t) {
this.input.length && (this.trigger("error", {
code: "E024",
line: this.line,
character: this.char,
data: [this.peek()]
}), this.input = "");
continue
}
switch (t.type) {
case l.StringLiteral:
return this.triggerAsync("String", {
line: this.line,
"char": this.char,
from: this.from,
value: t.value,
quote: t.quote
}, e, function() {
return !0
}), i("(string)", t.value);
case l.TemplateLiteral:
return this.trigger("Template", {
line: this.line,
"char": this.char,
from: this.from,
value: t.value
}), i("(template)", t.value);
case l.Identifier:
this.trigger("Identifier", {
line: this.line,
"char": this.char,
from: this.form,
name: t.value,
isProperty: o.tokens.curr.id === "."
});
case l.Keyword:
case l.NullLiteral:
case l.BooleanLiteral:
return i("(identifier)", t.value, o.tokens.curr.id === ".");
case l.NumericLiteral:
return t.isMalformed && this.trigger("warning", {
code: "W045",
line: this.line,
character: this.char,
data: [t.value]
}), this.triggerAsync("warning", {
code: "W114",
line: this.line,
character: this.char,
data: ["0x-"]
}, e, function() {
return t.base === 16 && o.jsonMode
}), this.triggerAsync("warning", {
code: "W115",
line: this.line,
character: this.char
}, e, function() {
return o.directive["use strict"] && t.base === 8
}), this.trigger("Number", {
line: this.line,
"char": this.char,
from: this.from,
value: t.value,
base: t.base,
isMalformed: t.malformed
}), i("(number)", t.value);
case l.RegExp:
return i("(regexp)", t.value);
case l.Comment:
o.tokens.curr.comment = !0;
if (t.isSpecial) return {
id: "(comment)",
value: t.value,
body: t.body,
type: t.commentType,
isSpecial: t.isSpecial,
line: this.line,
character: this.char,
from: this.from
};
break;
case "":
break;
default:
return i("(punctuator)", t.value)
}
}
}
}, n.Lexer = h
}, {
"../data/ascii-identifier-data.js": 1,
"./reg.js": 6,
"./state.js": 7,
events: 10,
underscore: 2
}],
5: [function(e, t, n) {
"use strict";
var r = e("underscore"),
i = {
E001: "Bad option: '{a}'.",
E002: "Bad option value.",
E003: "Expected a JSON value.",
E004: "Input is neither a string nor an array of strings.",
E005: "Input is empty.",
E006: "Unexpected early end of program.",
E007: 'Missing "use strict" statement.',
E008: "Strict violation.",
E009: "Option 'validthis' can't be used in a global scope.",
E010: "'with' is not allowed in strict mode.",
E011: "const '{a}' has already been declared.",
E012: "const '{a}' is initialized to 'undefined'.",
E013: "Attempting to override '{a}' which is a constant.",
E014: "A regular expression literal can be confused with '/='.",
E015: "Unclosed regular expression.",
E016: "Invalid regular expression.",
E017: "Unclosed comment.",
E018: "Unbegun comment.",
E019: "Unmatched '{a}'.",
E020: "Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.",
E021: "Expected '{a}' and instead saw '{b}'.",
E022: "Line breaking error '{a}'.",
E023: "Missing '{a}'.",
E024: "Unexpected '{a}'.",
E025: "Missing ':' on a case clause.",
E026: "Missing '}' to match '{' from line {a}.",
E027: "Missing ']' to match '[' from line {a}.",
E028: "Illegal comma.",
E029: "Unclosed string.",
E030: "Expected an identifier and instead saw '{a}'.",
E031: "Bad assignment.",
E032: "Expected a small integer or 'false' and instead saw '{a}'.",
E033: "Expected an operator and instead saw '{a}'.",
E034: "get/set are ES5 features.",
E035: "Missing property name.",
E036: "Expected to see a statement and instead saw a block.",
E037: null,
E038: null,
E039: "Function declarations are not invocable. Wrap the whole function invocation in parens.",
E040: "Each value should have its own case label.",
E041: "Unrecoverable syntax error.",
E042: "Stopping.",
E043: "Too many errors.",
E044: null,
E045: "Invalid for each loop.",
E046: "A yield statement shall be within a generator function (with syntax: `function*`)",
E047: null,
E048: "Let declaration not directly within block.",
E049: "A {a} cannot be named '{b}'.",
E050: "Mozilla requires the yield expression to be parenthesized here.",
E051: "Regular parameters cannot come after default parameters.",
E052: "Unclosed template literal."
},
s = {
W001: "'hasOwnProperty' is a really bad name.",
W002: "Value of '{a}' may be overwritten in IE 8 and earlier.",
W003: "'{a}' was used before it was defined.",
W004: "'{a}' is already defined.",
W005: "A dot following a number can be confused with a decimal point.",
W006: "Confusing minuses.",
W007: "Confusing plusses.",
W008: "A leading decimal point can be confused with a dot: '{a}'.",
W009: "The array literal notation [] is preferable.",
W010: "The object literal notation {} is preferable.",
W011: null,
W012: null,
W013: null,
W014: "Bad line breaking before '{a}'.",
W015: null,
W016: "Unexpected use of '{a}'.",
W017: "Bad operand.",
W018: "Confusing use of '{a}'.",
W019: "Use the isNaN function to compare with NaN.",
W020: "Read only.",
W021: "'{a}' is a function.",
W022: "Do not assign to the exception parameter.",
W023: "Expected an identifier in an assignment and instead saw a function invocation.",
W024: "Expected an identifier and instead saw '{a}' (a reserved word).",
W025: "Missing name in function declaration.",
W026: "Inner functions should be listed at the top of the outer function.",
W027: "Unreachable '{a}' after '{b}'.",
W028: "Label '{a}' on {b} statement.",
W030: "Expected an assignment or function call and instead saw an expression.",
W031: "Do not use 'new' for side effects.",
W032: "Unnecessary semicolon.",
W033: "Missing semicolon.",
W034: 'Unnecessary directive "{a}".',
W035: "Empty block.",
W036: "Unexpected /*member '{a}'.",
W037: "'{a}' is a statement label.",
W038: "'{a}' used out of scope.",
W039: "'{a}' is not allowed.",
W040: "Possible strict violation.",
W041: "Use '{a}' to compare with '{b}'.",
W042: "Avoid EOL escaping.",
W043: "Bad escaping of EOL. Use option multistr if needed.",
W044: "Bad or unnecessary escaping.",
W045: "Bad number '{a}'.",
W046: "Don't use extra leading zeros '{a}'.",
W047: "A trailing decimal point can be confused with a dot: '{a}'.",
W048: "Unexpected control character in regular expression.",
W049: "Unexpected escaped character '{a}' in regular expression.",
W050: "JavaScript URL.",
W051: "Variables should not be deleted.",
W052: "Unexpected '{a}'.",
W053: "Do not use {a} as a constructor.",
W054: "The Function constructor is a form of eval.",
W055: "A constructor name should start with an uppercase letter.",
W056: "Bad constructor.",
W057: "Weird construction. Is 'new' necessary?",
W058: "Missing '()' invoking a constructor.",
W059: "Avoid arguments.{a}.",
W060: "document.write can be a form of eval.",
W061: "eval can be harmful.",
W062: "Wrap an immediate function invocation in parens to assist the reader in understanding that the expression is the result of a function, and not the function itself.",
W063: "Math is not a function.",
W064: "Missing 'new' prefix when invoking a constructor.",
W065: "Missing radix parameter.",
W066: "Implied eval. Consider passing a function instead of a string.",
W067: "Bad invocation.",
W068: "Wrapping non-IIFE function literals in parens is unnecessary.",
W069: "['{a}'] is better written in dot notation.",
W070: "Extra comma. (it breaks older versions of IE)",
W071: "This function has too many statements. ({a})",
W072: "This function has too many parameters. ({a})",
W073: "Blocks are nested too deeply. ({a})",
W074: "This function's cyclomatic complexity is too high. ({a})",
W075: "Duplicate key '{a}'.",
W076: "Unexpected parameter '{a}' in get {b} function.",
W077: "Expected a single parameter in set {a} function.",
W078: "Setter is defined without getter.",
W079: "Redefinition of '{a}'.",
W080: "It's not necessary to initialize '{a}' to 'undefined'.",
W081: null,
W082: "Function declarations should not be placed in blocks. Use a function expression or move the statement to the top of the outer function.",
W083: "Don't make functions within a loop.",
W084: "Assignment in conditional expression",
W085: "Don't use 'with'.",
W086: "Expected a 'break' statement before '{a}'.",
W087: "Forgotten 'debugger' statement?",
W088: "Creating global 'for' variable. Should be 'for (var {a} ...'.",
W089: "The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.",
W090: "'{a}' is not a statement label.",
W091: "'{a}' is out of scope.",
W093: "Did you mean to return a conditional instead of an assignment?",
W094: "Unexpected comma.",
W095: "Expected a string and instead saw {a}.",
W096: "The '{a}' key may produce unexpected results.",
W097: 'Use the function form of "use strict".',
W098: "'{a}' is defined but never used.",
W099: null,
W100: "This character may get silently deleted by one or more browsers.",
W101: "Line is too long.",
W102: null,
W103: "The '{a}' property is deprecated.",
W104: "'{a}' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).",
W105: "Unexpected {a} in '{b}'.",
W106: "Identifier '{a}' is not in camel case.",
W107: "Script URL.",
W108: "Strings must use doublequote.",
W109: "Strings must use singlequote.",
W110: "Mixed double and single quotes.",
W112: "Unclosed string.",
W113: "Control character in string: {a}.",
W114: "Avoid {a}.",
W115: "Octal literals are not allowed in strict mode.",
W116: "Expected '{a}' and instead saw '{b}'.",
W117: "'{a}' is not defined.",
W118: "'{a}' is only available in Mozilla JavaScript extensions (use moz option).",
W119: "'{a}' is only available in ES6 (use esnext option).",
W120: "You might be leaking a variable ({a}) here.",
W121: "Extending prototype of native object: '{a}'.",
W122: "Invalid typeof value '{a}'",
W123: "'{a}' is already defined in outer scope.",
W124: "A generator function shall contain a yield statement.",
W125: "This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp"
},
o = {
I001: "Comma warnings can be turned off with 'laxcomma'.",
I002: null,
I003: "ES5 option is now set per default"
};
n.errors = {}, n.warnings = {}, n.info = {}, r.each(i, function(e, t) {
n.errors[t] = {
code: t,
desc: e
}
}), r.each(s, function(e, t) {
n.warnings[t] = {
code: t,
desc: e
}
}), r.each(o, function(e, t) {
n.info[t] = {
code: t,
desc: e
}
})
}, {
underscore: 2
}],
6: [function(e, t, n) {
"use string";
n.unsafeString = /@cc|<\/?|script|\]\s*\]|<\s*!|</i, n.unsafeChars = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, n.needEsc = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/, n.needEscGlobal = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, n.starSlash = /\*\//, n.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/, n.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i, n.fallsThrough = /^\s*\/\*\s*falls?\sthrough\s*\*\/\s*$/, n.maxlenException = /^(?:(?:\/\/|\/\*|\*) ?)?[^ ]+$/
}, {}],
7: [function(e, t, n) {
"use strict";
var r = {
syntax: {},
reset: function() {
this.tokens = {
prev: null,
next: null,
curr: null
}, this.option = {}, this.ignored = {}, this.directive = {}, this.jsonMode = !1, this.jsonWarnings = [], this.lines = [], this.tab = "", this.cache = {}, this.ignoredLines = {}, this.ignoreLinterErrors = !1
}
};
n.state = r
}, {}],
8: [function(e, t, n) {
"use strict";
n.register = function(e) {
e.on("Identifier", function(n) {
if (e.getOption("proto")) return;
n.name === "__proto__" && e.warn("W103", {
line: n.line,
"char": n.char,
data: [n.name]
})
}), e.on("Identifier", function(n) {
if (e.getOption("iterator")) return;
n.name === "__iterator__" && e.warn("W104", {
line: n.line,
"char": n.char,
data: [n.name]
})
}), e.on("Identifier", function(n) {
if (!e.getOption("camelcase")) return;
n.name.replace(/^_+|_+$/g, "").indexOf("_") > -1 && !n.name.match(/^[A-Z0-9_]*$/) && e.warn("W106", {
line: n.line,
"char": n.from,
data: [n.name]
})
}), e.on("String", function(n) {
var r = e.getOption("quotmark"),
i;
if (!r) return;
r === "single" && n.quote !== "'" && (i = "W109"), r === "double" && n.quote !== '"' && (i = "W108"), r === !0 && (e.getCache("quotmark") || e.setCache("quotmark", n.quote), e.getCache("quotmark") !== n.quote && (i = "W110")), i && e.warn(i, {
line: n.line,
"char": n.char
})
}), e.on("Number", function(n) {
n.value.charAt(0) === "." && e.warn("W008", {
line: n.line,
"char": n.char,
data: [n.value]
}), n.value.substr(n.value.length - 1) === "." && e.warn("W047", {
line: n.line,
"char": n.char,
data: [n.value]
}), /^00+/.test(n.value) && e.warn("W046", {
line: n.line,
"char": n.char,
data: [n.value]
})
}), e.on("String", function(n) {
var r = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i;
if (e.getOption("scripturl")) return;
r.test(n.value) && e.warn("W107", {
line: n.line,
"char": n.char
})
})
}
}, {}],
9: [function(e, t, n) {
"use strict";
n.reservedVars = {
arguments: !1,
NaN: !1
}, n.ecmaIdentifiers = {
Array: !1,
Boolean: !1,
Date: !1,
decodeURI: !1,
decodeURIComponent: !1,
encodeURI: !1,
encodeURIComponent: !1,
Error: !1,
eval: !1,
EvalError: !1,
Function: !1,
hasOwnProperty: !1,
isFinite: !1,
isNaN: !1,
JSON: !1,
Math: !1,
Number: !1,
Object: !1,
parseInt: !1,
parseFloat: !1,
RangeError: !1,
ReferenceError: !1,
RegExp: !1,
String: !1,
SyntaxError: !1,
TypeError: !1,
URIError: !1
}, n.newEcmaIdentifiers = {
Set: !1,
Map: !1,
WeakMap: !1,
WeakSet: !1,
Proxy: !1,
Promise: !1
}, n.browser = {
Audio: !1,
Blob: !1,
addEventListener: !1,
applicationCache: !1,
atob: !1,
blur: !1,
btoa: !1,
CanvasGradient: !1,
CanvasPattern: !1,
CanvasRenderingContext2D: !1,
clearInterval: !1,
clearTimeout: !1,
close: !1,
closed: !1,
CustomEvent: !1,
DOMParser: !1,
defaultStatus: !1,
document: !1,
Element: !1,
ElementTimeControl: !1,
event: !1,
FileReader: !1,
FormData: !1,
focus: !1,
frames: !1,
getComputedStyle: !1,
HTMLElement: !1,
HTMLAnchorElement: !1,
HTMLBaseElement: !1,
HTMLBlockquoteElement: !1,
HTMLBodyElement: !1,
HTMLBRElement: !1,
HTMLButtonElement: !1,
HTMLCanvasElement: !1,
HTMLDirectoryElement: !1,
HTMLDivElement: !1,
HTMLDListElement: !1,
HTMLFieldSetElement: !1,
HTMLFontElement: !1,
HTMLFormElement: !1,
HTMLFrameElement: !1,
HTMLFrameSetElement: !1,
HTMLHeadElement: !1,
HTMLHeadingElement: !1,
HTMLHRElement: !1,
HTMLHtmlElement: !1,
HTMLIFrameElement: !1,
HTMLImageElement: !1,
HTMLInputElement: !1,
HTMLIsIndexElement: !1,
HTMLLabelElement: !1,
HTMLLayerElement: !1,
HTMLLegendElement: !1,
HTMLLIElement: !1,
HTMLLinkElement: !1,
HTMLMapElement: !1,
HTMLMenuElement: !1,
HTMLMetaElement: !1,
HTMLModElement: !1,
HTMLObjectElement: !1,
HTMLOListElement: !1,
HTMLOptGroupElement: !1,
HTMLOptionElement: !1,
HTMLParagraphElement: !1,
HTMLParamElement: !1,
HTMLPreElement: !1,
HTMLQuoteElement: !1,
HTMLScriptElement: !1,
HTMLSelectElement: !1,
HTMLStyleElement: !1,
HTMLTableCaptionElement: !1,
HTMLTableCellElement: !1,
HTMLTableColElement: !1,
HTMLTableElement: !1,
HTMLTableRowElement: !1,
HTMLTableSectionElement: !1,
HTMLTextAreaElement: !1,
HTMLTitleElement: !1,
HTMLUListElement: !1,
HTMLVideoElement: !1,
history: !1,
Image: !1,
length: !1,
localStorage: !1,
location: !1,
matchMedia: !1,
MessageChannel: !1,
MessageEvent: !1,
MessagePort: !1,
MouseEvent: !1,
moveBy: !1,
moveTo: !1,
MutationObserver: !1,
name: !1,
Node: !1,
NodeFilter: !1,
NodeList: !1,
navigator: !1,
onbeforeunload: !0,
onblur: !0,
onerror: !0,
onfocus: !0,
onload: !0,
onresize: !0,
onunload: !0,
open: !1,
openDatabase: !1,
opener: !1,
Option: !1,
parent: !1,
print: !1,
removeEventListener: !1,
resizeBy: !1,
resizeTo: !1,
screen: !1,
scroll: !1,
scrollBy: !1,
scrollTo: !1,
sessionStorage: !1,
setInterval: !1,
setTimeout: !1,
SharedWorker: !1,
status: !1,
SVGAElement: !1,
SVGAltGlyphDefElement: !1,
SVGAltGlyphElement: !1,
SVGAltGlyphItemElement: !1,
SVGAngle: !1,
SVGAnimateColorElement: !1,
SVGAnimateElement: !1,
SVGAnimateMotionElement: !1,
SVGAnimateTransformElement: !1,
SVGAnimatedAngle: !1,
SVGAnimatedBoolean: !1,
SVGAnimatedEnumeration: !1,
SVGAnimatedInteger: !1,
SVGAnimatedLength: !1,
SVGAnimatedLengthList: !1,
SVGAnimatedNumber: !1,
SVGAnimatedNumberList: !1,
SVGAnimatedPathData: !1,
SVGAnimatedPoints: !1,
SVGAnimatedPreserveAspectRatio: !1,
SVGAnimatedRect: !1,
SVGAnimatedString: !1,
SVGAnimatedTransformList: !1,
SVGAnimationElement: !1,
SVGCSSRule: !1,
SVGCircleElement: !1,
SVGClipPathElement: !1,
SVGColor: !1,
SVGColorProfileElement: !1,
SVGColorProfileRule: !1,
SVGComponentTransferFunctionElement: !1,
SVGCursorElement: !1,
SVGDefsElement: !1,
SVGDescElement: !1,
SVGDocument: !1,
SVGElement: !1,
SVGElementInstance: !1,
SVGElementInstanceList: !1,
SVGEllipseElement: !1,
SVGExternalResourcesRequired: !1,
SVGFEBlendElement: !1,
SVGFEColorMatrixElement: !1,
SVGFEComponentTransferElement: !1,
SVGFECompositeElement: !1,
SVGFEConvolveMatrixElement: !1,
SVGFEDiffuseLightingElement: !1,
SVGFEDisplacementMapElement: !1,
SVGFEDistantLightElement: !1,
SVGFEFloodElement: !1,
SVGFEFuncAElement: !1,
SVGFEFuncBElement: !1,
SVGFEFuncGElement: !1,
SVGFEFuncRElement: !1,
SVGFEGaussianBlurElement: !1,
SVGFEImageElement: !1,
SVGFEMergeElement: !1,
SVGFEMergeNodeElement: !1,
SVGFEMorphologyElement: !1,
SVGFEOffsetElement: !1,
SVGFEPointLightElement: !1,
SVGFESpecularLightingElement: !1,
SVGFESpotLightElement: !1,
SVGFETileElement: !1,
SVGFETurbulenceElement: !1,
SVGFilterElement: !1,
SVGFilterPrimitiveStandardAttributes: !1,
SVGFitToViewBox: !1,
SVGFontElement: !1,
SVGFontFaceElement: !1,
SVGFontFaceFormatElement: !1,
SVGFontFaceNameElement: !1,
SVGFontFaceSrcElement: !1,
SVGFontFaceUriElement: !1,
SVGForeignObjectElement: !1,
SVGGElement: !1,
SVGGlyphElement: !1,
SVGGlyphRefElement: !1,
SVGGradientElement: !1,
SVGHKernElement: !1,
SVGICCColor: !1,
SVGImageElement: !1,
SVGLangSpace: !1,
SVGLength: !1,
SVGLengthList: !1,
SVGLineElement: !1,
SVGLinearGradientElement: !1,
SVGLocatable: !1,
SVGMPathElement: !1,
SVGMarkerElement: !1,
SVGMaskElement: !1,
SVGMatrix: !1,
SVGMetadataElement: !1,
SVGMissingGlyphElement: !1,
SVGNumber: !1,
SVGNumberList: !1,
SVGPaint: !1,
SVGPathElement: !1,
SVGPathSeg: !1,
SVGPathSegArcAbs: !1,
SVGPathSegArcRel: !1,
SVGPathSegClosePath: !1,
SVGPathSegCurvetoCubicAbs: !1,
SVGPathSegCurvetoCubicRel: !1,
SVGPathSegCurvetoCubicSmoothAbs: !1,
SVGPathSegCurvetoCubicSmoothRel: !1,
SVGPathSegCurvetoQuadraticAbs: !1,
SVGPathSegCurvetoQuadraticRel: !1,
SVGPathSegCurvetoQuadraticSmoothAbs: !1,
SVGPathSegCurvetoQuadraticSmoothRel: !1,
SVGPathSegLinetoAbs: !1,
SVGPathSegLinetoHorizontalAbs: !1,
SVGPathSegLinetoHorizontalRel: !1,
SVGPathSegLinetoRel: !1,
SVGPathSegLinetoVerticalAbs: !1,
SVGPathSegLinetoVerticalRel: !1,
SVGPathSegList: !1,
SVGPathSegMovetoAbs: !1,
SVGPathSegMovetoRel: !1,
SVGPatternElement: !1,
SVGPoint: !1,
SVGPointList: !1,
SVGPolygonElement: !1,
SVGPolylineElement: !1,
SVGPreserveAspectRatio: !1,
SVGRadialGradientElement: !1,
SVGRect: !1,
SVGRectElement: !1,
SVGRenderingIntent: !1,
SVGSVGElement: !1,
SVGScriptElement: !1,
SVGSetElement: !1,
SVGStopElement: !1,
SVGStringList: !1,
SVGStylable: !1,
SVGStyleElement: !1,
SVGSwitchElement: !1,
SVGSymbolElement: !1,
SVGTRefElement: !1,
SVGTSpanElement: !1,
SVGTests: !1,
SVGTextContentElement: !1,
SVGTextElement: !1,
SVGTextPathElement: !1,
SVGTextPositioningElement: !1,
SVGTitleElement: !1,
SVGTransform: !1,
SVGTransformList: !1,
SVGTransformable: !1,
SVGURIReference: !1,
SVGUnitTypes: !1,
SVGUseElement: !1,
SVGVKernElement: !1,
SVGViewElement: !1,
SVGViewSpec: !1,
SVGZoomAndPan: !1,
TimeEvent: !1,
top: !1,
URL: !1,
WebSocket: !1,
window: !1,
Worker: !1,
XMLHttpRequest: !1,
XMLSerializer: !1,
XPathEvaluator: !1,
XPathException: !1,
XPathExpression: !1,
XPathNamespace: !1,
XPathNSResolver: !1,
XPathResult: !1
}, n.devel = {
alert: !1,
confirm: !1,
console: !1,
Debug: !1,
opera: !1,
prompt: !1
}, n.worker = {
importScripts: !0,
postMessage: !0,
self: !0
}, n.nonstandard = {
escape: !1,
unescape: !1
}, n.couch = {
require: !1,
respond: !1,
getRow: !1,
emit: !1,
send: !1,
start: !1,
sum: !1,
log: !1,
exports: !1,
module: !1,
provides: !1
}, n.node = {
__filename: !1,
__dirname: !1,
GLOBAL: !1,
global: !1,
module: !1,
require: !1,
Buffer: !0,
console: !0,
exports: !0,
process: !0,
setTimeout: !0,
clearTimeout: !0,
setInterval: !0,
clearInterval: !0,
setImmediate: !0,
clearImmediate: !0
}, n.phantom = {
phantom: !0,
require: !0,
WebPage: !0,
console: !0,
exports: !0
}, n.qunit = {
asyncTest: !1,
deepEqual: !1,
equal: !1,
expect: !1,
module: !1,
notDeepEqual: !1,
notEqual: !1,
notPropEqual: !1,
notStrictEqual: !1,
ok: !1,
propEqual: !1,
QUnit: !1,
raises: !1,
start: !1,
stop: !1,
strictEqual: !1,
test: !1,
"throws": !1
}, n.rhino = {
defineClass: !1,
deserialize: !1,
gc: !1,
help: !1,
importClass: !1,
importPackage: !1,
java: !1,
load: !1,
loadClass: !1,
Packages: !1,
print: !1,
quit: !1,
readFile: !1,
readUrl: !1,
runCommand: !1,
seal: !1,
serialize: !1,
spawn: !1,
sync: !1,
toint32: !1,
version: !1
}, n.shelljs = {
target: !1,
echo: !1,
exit: !1,
cd: !1,
pwd: !1,
ls: !1,
find: !1,
cp: !1,
rm: !1,
mv: !1,
mkdir: !1,
test: !1,
cat: !1,
sed: !1,
grep: !1,
which: !1,
dirs: !1,
pushd: !1,
popd: !1,
env: !1,
exec: !1,
chmod: !1,
config: !1,
error: !1,
tempdir: !1
}, n.typed = {
ArrayBuffer: !1,
ArrayBufferView: !1,
DataView: !1,
Float32Array: !1,
Float64Array: !1,
Int16Array: !1,
Int32Array: !1,
Int8Array: !1,
Uint16Array: !1,
Uint32Array: !1,
Uint8Array: !1,
Uint8ClampedArray: !1
}, n.wsh = {
ActiveXObject: !0,
Enumerator: !0,
GetObject: !0,
ScriptEngine: !0,
ScriptEngineBuildVersion: !0,
ScriptEngineMajorVersion: !0,
ScriptEngineMinorVersion: !0,
VBArray: !0,
WSH: !0,
WScript: !0,
XDomainRequest: !0
}, n.dojo = {
dojo: !1,
dijit: !1,
dojox: !1,
define: !1,
require: !1
}, n.jquery = {
$: !1,
jQuery: !1
}, n.mootools = {
$: !1,
$$: !1,
Asset: !1,
Browser: !1,
Chain: !1,
Class: !1,
Color: !1,
Cookie: !1,
Core: !1,
Document: !1,
DomReady: !1,
DOMEvent: !1,
DOMReady: !1,
Drag: !1,
Element: !1,
Elements: !1,
Event: !1,
Events: !1,
Fx: !1,
Group: !1,
Hash: !1,
HtmlTable: !1,
IFrame: !1,
IframeShim: !1,
InputValidator: !1,
instanceOf: !1,
Keyboard: !1,
Locale: !1,
Mask: !1,
MooTools: !1,
Native: !1,
Options: !1,
OverText: !1,
Request: !1,
Scroller: !1,
Slick: !1,
Slider: !1,
Sortables: !1,
Spinner: !1,
Swiff: !1,
Tips: !1,
Type: !1,
typeOf: !1,
URI: !1,
Window: !1
}, n.prototypejs = {
$: !1,
$$: !1,
$A: !1,
$F: !1,
$H: !1,
$R: !1,
$break: !1,
$continue: !1,
$w: !1,
Abstract: !1,
Ajax: !1,
Class: !1,
Enumerable: !1,
Element: !1,
Event: !1,
Field: !1,
Form: !1,
Hash: !1,
Insertion: !1,
ObjectRange: !1,
PeriodicalExecuter: !1,
Position: !1,
Prototype: !1,
Selector: !1,
Template: !1,
Toggle: !1,
Try: !1,
Autocompleter: !1,
Builder: !1,
Control: !1,
Draggable: !1,
Draggables: !1,
Droppables: !1,
Effect: !1,
Sortable: !1,
SortableObserver: !1,
Sound: !1,
Scriptaculous: !1
}, n.yui = {
YUI: !1,
Y: !1,
YUI_config: !1
}, n.mocha = {
describe: !1,
it: !1,
before: !1,
after: !1,
beforeEach: !1,
afterEach: !1,
suite: !1,
test: !1,
setup: !1,
teardown: !1
}, n.jasmine = {
jasmine: !1,
describe: !1,
it: !1,
xit: !1,
beforeEach: !1,
afterEach: !1,
setFixtures: !1,
loadFixtures: !1,
spyOn: !1,
expect: !1,
runs: !1,
waitsFor: !1,
waits: !1
}
}, {}],
10: [function(e, t, n) {
function r() {
this._events = this._events || {}, this._maxListeners = this._maxListeners || undefined
}
function i(e) {
return typeof e == "function"
}
function s(e) {
return typeof e == "number"
}
function o(e) {
return typeof e == "object" && e !== null
}
function u(e) {
return e === void 0
}
t.exports = r, r.EventEmitter = r, r.prototype._events = undefined, r.prototype._maxListeners = undefined, r.defaultMaxListeners = 10, r.prototype.setMaxListeners = function(e) {
if (!s(e) || e < 0 || isNaN(e)) throw TypeError("n must be a positive number");
return this._maxListeners = e, this
}, r.prototype.emit = function(e) {
var t, n, r, s, a, f;
this._events || (this._events = {});
if (e === "error")
if (!this._events.error || o(this._events.error) && !this._events.error.length) throw t = arguments[1], t instanceof Error ? t : TypeError('Uncaught, unspecified "error" event.');
n = this._events[e];
if (u(n)) return !1;
if (i(n)) switch (arguments.length) {
case 1:
n.call(this);
break;
case 2:
n.call(this, arguments[1]);
break;
case 3:
n.call(this, arguments[1], arguments[2]);
break;
default:
r = arguments.length, s = new Array(r - 1);
for (a = 1; a < r; a++) s[a - 1] = arguments[a];
n.apply(this, s)
} else if (o(n)) {
r = arguments.length, s = new Array(r - 1);
for (a = 1; a < r; a++) s[a - 1] = arguments[a];
f = n.slice(), r = f.length;
for (a = 0; a < r; a++) f[a].apply(this, s)
}
return !0
}, r.prototype.addListener = function(e, t) {
var n;
if (!i(t)) throw TypeError("listener must be a function");
this._events || (this._events = {}), this._events.newListener && this.emit("newListener", e, i(t.listener) ? t.listener : t), this._events[e] ? o(this._events[e]) ? this._events[e].push(t) : this._events[e] = [this._events[e], t] : this._events[e] = t;
if (o(this._events[e]) && !this._events[e].warned) {
var n;
u(this._maxListeners) ? n = r.defaultMaxListeners : n = this._maxListeners, n && n > 0 && this._events[e].length > n && (this._events[e].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[e].length), console.trace())
}
return this
}, r.prototype.on = r.prototype.addListener, r.prototype.once = function(e, t) {
function r() {
this.removeListener(e, r), n || (n = !0, t.apply(this, arguments))
}
if (!i(t)) throw TypeError("listener must be a function");
var n = !1;
return r.listener = t, this.on(e, r), this
}, r.prototype.removeListener = function(e, t) {
var n, r, s, u;
if (!i(t)) throw TypeError("listener must be a function");
if (!this._events || !this._events[e]) return this;
n = this._events[e], s = n.length, r = -1;
if (n === t || i(n.listener) && n.listener === t) delete this._events[e], this._events.removeListener && this.emit("removeListener", e, t);
else if (o(n)) {
for (u = s; u-- > 0;)
if (n[u] === t || n[u].listener && n[u].listener === t) {
r = u;
break
}
if (r < 0) return this;
n.length === 1 ? (n.length = 0, delete this._events[e]) : n.splice(r, 1), this._events.removeListener && this.emit("removeListener", e, t)
}
return this
}, r.prototype.removeAllListeners = function(e) {
var t, n;
if (!this._events) return this;
if (!this._events.removeListener) return arguments.length === 0 ? this._events = {} : this._events[e] && delete this._events[e], this;
if (arguments.length === 0) {
for (t in this._events) {
if (t === "removeListener") continue;
this.removeAllListeners(t)
}
return this.removeAllListeners("removeListener"), this._events = {}, this
}
n = this._events[e];
if (i(n)) this.removeListener(e, n);
else
while (n.length) this.removeListener(e, n[n.length - 1]);
return delete this._events[e], this
}, r.prototype.listeners = function(e) {
var t;
return !this._events || !this._events[e] ? t = [] : i(this._events[e]) ? t = [this._events[e]] : t = this._events[e].slice(), t
}, r.listenerCount = function(e, t) {
var n;
return !e._events || !e._events[t] ? n = 0 : i(e._events[t]) ? n = 1 : n = e._events[t].length, n
}
}, {}]
}, {}, [3])(3)
}), ace.define("ace/mode/javascript_worker", ["require", "exports", "module", "ace/lib/oop", "ace/worker/mirror", "ace/mode/javascript/jshint"], function(require, exports, module) {
"use strict";
function startRegex(e) {
return RegExp("^(" + e.join("|") + ")")
}
var oop = require("../lib/oop"),
Mirror = require("../worker/mirror").Mirror,
lint = require("./javascript/jshint").JSHINT,
disabledWarningsRe = startRegex(["Bad for in variable '(.+)'.", 'Missing "use strict"']),
errorsRe = startRegex(["Unexpected", "Expected ", "Confusing (plus|minus)", "\\{a\\} unterminated regular expression", "Unclosed ", "Unmatched ", "Unbegun comment", "Bad invocation", "Missing space after", "Missing operator at"]),
infoRe = startRegex(["Expected an assignment", "Bad escapement of EOL", "Unexpected comma", "Unexpected space", "Missing radix parameter.", "A leading decimal point can", "\\['{a}'\\] is better written in dot notation.", "'{a}' used out of scope"]),
JavaScriptWorker = exports.JavaScriptWorker = function(e) {
Mirror.call(this, e), this.setTimeout(500), this.setOptions()
};
oop.inherits(JavaScriptWorker, Mirror),
function() {
this.setOptions = function(e) {
this.options = e || {
esnext: !0,
moz: !0,
devel: !0,
browser: !0,
node: !0,
laxcomma: !0,
laxbreak: !0,
lastsemic: !0,
onevar: !1,
passfail: !1,
maxerr: 100,
expr: !0,
multistr: !0,
globalstrict: !0
}, this.doc.getValue() && this.deferredUpdate.schedule(100)
}, this.changeOptions = function(e) {
oop.mixin(this.options, e), this.doc.getValue() && this.deferredUpdate.schedule(100)
}, this.isValidJS = function(str) {
try {
eval("throw 0;" + str)
} catch (e) {
if (e === 0) return !0
}
return !1
}, this.onUpdate = function() {
var e = this.doc.getValue();
e = e.replace(/^#!.*\n/, "\n");
if (!e) {
this.sender.emit("jslint", []);
return
}
var t = [],
n = this.isValidJS(e) ? "warning" : "error";
lint(e, this.options);
var r = lint.errors,
i = !1;
for (var s = 0; s < r.length; s++) {
var o = r[s];
if (!o) continue;
var u = o.raw,
a = "warning";
if (u == "Missing semicolon.") {
var f = o.evidence.substr(o.character);
f = f.charAt(f.search(/\S/)), n == "error" && f && /[\w\d{(['"]/.test(f) ? (o.reason = 'Missing ";" before statement', a = "error") : a = "info"
} else {
if (disabledWarningsRe.test(u)) continue;
infoRe.test(u) ? a = "info" : errorsRe.test(u) ? (i = !0, a = n) : u == "'{a}' is not defined." ? a = "warning" : u == "'{a}' is defined but never used." && (a = "info")
}
t.push({
row: o.line - 1,
column: o.character - 1,
text: o.reason,
type: a,
raw: u
}), i
}
this.sender.emit("jslint", t)
}
}.call(JavaScriptWorker.prototype)
}), ace.define("ace/lib/es5-shim", ["require", "exports", "module"], function(e, t, n) {
function r() {}
function w(e) {
try {
return Object.defineProperty(e, "sentinel", {}), "sentinel" in e
} catch (t) {}
}
function H(e) {
return e = +e, e !== e ? e = 0 : e !== 0 && e !== 1 / 0 && e !== -1 / 0 && (e = (e > 0 || -1) * Math.floor(Math.abs(e))), e
}
function B(e) {
var t = typeof e;
return e === null || t === "undefined" || t === "boolean" || t === "number" || t === "string"
}
function j(e) {
var t, n, r;
if (B(e)) return e;
n = e.valueOf;
if (typeof n == "function") {
t = n.call(e);
if (B(t)) return t
}
r = e.toString;
if (typeof r == "function") {
t = r.call(e);
if (B(t)) return t
}
throw new TypeError
}
Function.prototype.bind || (Function.prototype.bind = function(t) {
var n = this;
if (typeof n != "function") throw new TypeError("Function.prototype.bind called on incompatible " + n);
var i = u.call(arguments, 1),
s = function() {
if (this instanceof s) {
var e = n.apply(this, i.concat(u.call(arguments)));
return Object(e) === e ? e : this
}
return n.apply(t, i.concat(u.call(arguments)))
};
return n.prototype && (r.prototype = n.prototype, s.prototype = new r, r.prototype = null), s
});
var i = Function.prototype.call,
s = Array.prototype,
o = Object.prototype,
u = s.slice,
a = i.bind(o.toString),
f = i.bind(o.hasOwnProperty),
l, c, h, p, d;
if (d = f(o, "__defineGetter__")) l = i.bind(o.__defineGetter__), c = i.bind(o.__defineSetter__), h = i.bind(o.__lookupGetter__), p = i.bind(o.__lookupSetter__);
if ([1, 2].splice(0).length != 2)
if (! function() {
function e(e) {
var t = new Array(e + 2);
return t[0] = t[1] = 0, t
}
var t = [],
n;
t.splice.apply(t, e(20)), t.splice.apply(t, e(26)), n = t.length, t.splice(5, 0, "XXX"), n + 1 == t.length;
if (n + 1 == t.length) return !0
}()) Array.prototype.splice = function(e, t) {
var n = this.length;
e > 0 ? e > n && (e = n) : e == void 0 ? e = 0 : e < 0 && (e = Math.max(n + e, 0)), e + t < n || (t = n - e);
var r = this.slice(e, e + t),
i = u.call(arguments, 2),
s = i.length;
if (e === n) s && this.push.apply(this, i);
else {
var o = Math.min(t, n - e),
a = e + o,
f = a + s - o,
l = n - a,
c = n - o;
if (f < a)
for (var h = 0; h < l; ++h) this[f + h] = this[a + h];
else if (f > a)
for (h = l; h--;) this[f + h] = this[a + h];
if (s && e === c) this.length = c, this.push.apply(this, i);
else {
this.length = c + s;
for (h = 0; h < s; ++h) this[e + h] = i[h]
}
}
return r
};
else {
var v = Array.prototype.splice;
Array.prototype.splice = function(e, t) {
return arguments.length ? v.apply(this, [e === void 0 ? 0 : e, t === void 0 ? this.length - e : t].concat(u.call(arguments, 2))) : []
}
}
Array.isArray || (Array.isArray = function(t) {
return a(t) == "[object Array]"
});
var m = Object("a"),
g = m[0] != "a" || !(0 in m);
Array.prototype.forEach || (Array.prototype.forEach = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = arguments[1],
s = -1,
o = r.length >>> 0;
if (a(t) != "[object Function]") throw new TypeError;
while (++s < o) s in r && t.call(i, r[s], s, n)
}), Array.prototype.map || (Array.prototype.map = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0,
s = Array(i),
o = arguments[1];
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
for (var u = 0; u < i; u++) u in r && (s[u] = t.call(o, r[u], u, n));
return s
}), Array.prototype.filter || (Array.prototype.filter = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0,
s = [],
o, u = arguments[1];
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
for (var f = 0; f < i; f++) f in r && (o = r[f], t.call(u, o, f, n) && s.push(o));
return s
}), Array.prototype.every || (Array.prototype.every = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0,
s = arguments[1];
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
for (var o = 0; o < i; o++)
if (o in r && !t.call(s, r[o], o, n)) return !1;
return !0
}), Array.prototype.some || (Array.prototype.some = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0,
s = arguments[1];
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
for (var o = 0; o < i; o++)
if (o in r && t.call(s, r[o], o, n)) return !0;
return !1
}), Array.prototype.reduce || (Array.prototype.reduce = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0;
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
if (!i && arguments.length == 1) throw new TypeError("reduce of empty array with no initial value");
var s = 0,
o;
if (arguments.length >= 2) o = arguments[1];
else
do {
if (s in r) {
o = r[s++];
break
}
if (++s >= i) throw new TypeError("reduce of empty array with no initial value")
} while (!0);
for (; s < i; s++) s in r && (o = t.call(void 0, o, r[s], s, n));
return o
}), Array.prototype.reduceRight || (Array.prototype.reduceRight = function(t) {
var n = F(this),
r = g && a(this) == "[object String]" ? this.split("") : n,
i = r.length >>> 0;
if (a(t) != "[object Function]") throw new TypeError(t + " is not a function");
if (!i && arguments.length == 1) throw new TypeError("reduceRight of empty array with no initial value");
var s, o = i - 1;
if (arguments.length >= 2) s = arguments[1];
else
do {
if (o in r) {
s = r[o--];
break
}
if (--o < 0) throw new TypeError("reduceRight of empty array with no initial value")
} while (!0);
do o in this && (s = t.call(void 0, s, r[o], o, n)); while (o--);
return s
});
if (!Array.prototype.indexOf || [0, 1].indexOf(1, 2) != -1) Array.prototype.indexOf = function(t) {
var n = g && a(this) == "[object String]" ? this.split("") : F(this),
r = n.length >>> 0;
if (!r) return -1;
var i = 0;
arguments.length > 1 && (i = H(arguments[1])), i = i >= 0 ? i : Math.max(0, r + i);
for (; i < r; i++)
if (i in n && n[i] === t) return i;
return -1
};
if (!Array.prototype.lastIndexOf || [0, 1].lastIndexOf(0, -3) != -1) Array.prototype.lastIndexOf = function(t) {
var n = g && a(this) == "[object String]" ? this.split("") : F(this),
r = n.length >>> 0;
if (!r) return -1;
var i = r - 1;
arguments.length > 1 && (i = Math.min(i, H(arguments[1]))), i = i >= 0 ? i : r - Math.abs(i);
for (; i >= 0; i--)
if (i in n && t === n[i]) return i;
return -1
};
Object.getPrototypeOf || (Object.getPrototypeOf = function(t) {
return t.__proto__ || (t.constructor ? t.constructor.prototype : o)
});
if (!Object.getOwnPropertyDescriptor) {
var y = "Object.getOwnPropertyDescriptor called on a non-object: ";
Object.getOwnPropertyDescriptor = function(t, n) {
if (typeof t != "object" && typeof t != "function" || t === null) throw new TypeError(y + t);
if (!f(t, n)) return;
var r, i, s;
r = {
enumerable: !0,
configurable: !0
};
if (d) {
var u = t.__proto__;
t.__proto__ = o;
var i = h(t, n),
s = p(t, n);
t.__proto__ = u;
if (i || s) return i && (r.get = i), s && (r.set = s), r
}
return r.value = t[n], r
}
}
Object.getOwnPropertyNames || (Object.getOwnPropertyNames = function(t) {
return Object.keys(t)
});
if (!Object.create) {
var b;
Object.prototype.__proto__ === null ? b = function() {
return {
__proto__: null
}
} : b = function() {
var e = {};
for (var t in e) e[t] = null;
return e.constructor = e.hasOwnProperty = e.propertyIsEnumerable = e.isPrototypeOf = e.toLocaleString = e.toString = e.valueOf = e.__proto__ = null, e
}, Object.create = function(t, n) {
var r;
if (t === null) r = b();
else {
if (typeof t != "object") throw new TypeError("typeof prototype[" + typeof t + "] != 'object'");
var i = function() {};
i.prototype = t, r = new i, r.__proto__ = t
}
return n !== void 0 && Object.defineProperties(r, n), r
}
}
if (Object.defineProperty) {
var E = w({}),
S = typeof document == "undefined" || w(document.createElement("div"));
if (!E || !S) var x = Object.defineProperty
}
if (!Object.defineProperty || x) {
var T = "Property description must be an object: ",
N = "Object.defineProperty called on non-object: ",
C = "getters & setters can not be defined on this javascript engine";
Object.defineProperty = function(t, n, r) {
if (typeof t != "object" && typeof t != "function" || t === null) throw new TypeError(N + t);
if (typeof r != "object" && typeof r != "function" || r === null) throw new TypeError(T + r);
if (x) try {
return x.call(Object, t, n, r)
} catch (i) {}
if (f(r, "value"))
if (d && (h(t, n) || p(t, n))) {
var s = t.__proto__;
t.__proto__ = o, delete t[n], t[n] = r.value, t.__proto__ = s
} else t[n] = r.value;
else {
if (!d) throw new TypeError(C);
f(r, "get") && l(t, n, r.get), f(r, "set") && c(t, n, r.set)
}
return t
}
}
Object.defineProperties || (Object.defineProperties = function(t, n) {
for (var r in n) f(n, r) && Object.defineProperty(t, r, n[r]);
return t
}), Object.seal || (Object.seal = function(t) {
return t
}), Object.freeze || (Object.freeze = function(t) {
return t
});
try {
Object.freeze(function() {})
} catch (k) {
Object.freeze = function(t) {
return function(n) {
return typeof n == "function" ? n : t(n)
}
}(Object.freeze)
}
Object.preventExtensions || (Object.preventExtensions = function(t) {
return t
}), Object.isSealed || (Object.isSealed = function(t) {
return !1
}), Object.isFrozen || (Object.isFrozen = function(t) {
return !1
}), Object.isExtensible || (Object.isExtensible = function(t) {
if (Object(t) === t) throw new TypeError;
var n = "";
while (f(t, n)) n += "?";
t[n] = !0;
var r = f(t, n);
return delete t[n], r
});
if (!Object.keys) {
var L = !0,
A = ["toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor"],
O = A.length;
for (var M in {
toString: null
}) L = !1;
Object.keys = function I(e) {
if (typeof e != "object" && typeof e != "function" || e === null) throw new TypeError("Object.keys called on a non-object");
var I = [];
for (var t in e) f(e, t) && I.push(t);
if (L)
for (var n = 0, r = O; n < r; n++) {
var i = A[n];
f(e, i) && I.push(i)
}
return I
}
}
Date.now || (Date.now = function() {
return (new Date).getTime()
});
var _ = " \n\f\r \u00a0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff";
if (!String.prototype.trim || _.trim()) {
_ = "[" + _ + "]";
var D = new RegExp("^" + _ + _ + "*"),
P = new RegExp(_ + _ + "*$");
String.prototype.trim = function() {
return String(this).replace(D, "").replace(P, "")
}
}
var F = function(e) {
if (e == null) throw new TypeError("can't convert " + e + " to object");
return Object(e)
}
})