Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save wsy5555621/e5afa57212a898de1bfd4bffa29dbd04 to your computer and use it in GitHub Desktop.
Save wsy5555621/e5afa57212a898de1bfd4bffa29dbd04 to your computer and use it in GitHub Desktop.
/*!
*
* ap/v1.13.0
* Wed Dec 12 2018 15:41:56 GMT+0800 (GMT+08:00)
*
*/
var global = self
, __appxStartTime = (global = self,
Date.now())
, AFAppX = function(e) {
var t = {};
function n(r) {
if (t[r])
return t[r].exports;
var a = t[r] = {
i: r,
l: !1,
exports: {}
};
return e[r].call(a.exports, a, a.exports, n),
a.l = !0,
a.exports
}
return n.m = e,
n.c = t,
n.d = function(e, t, r) {
n.o(e, t) || Object.defineProperty(e, t, {
enumerable: !0,
get: r
})
}
,
n.r = function(e) {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
value: "Module"
}),
Object.defineProperty(e, "__esModule", {
value: !0
})
}
,
n.t = function(e, t) {
if (1 & t && (e = n(e)),
8 & t)
return e;
if (4 & t && "object" == typeof e && e && e.__esModule)
return e;
var r = Object.create(null);
if (n.r(r),
Object.defineProperty(r, "default", {
enumerable: !0,
value: e
}),
2 & t && "string" != typeof e)
for (var a in e)
n.d(r, a, function(t) {
return e[t]
}
.bind(null, a));
return r
}
,
n.n = function(e) {
var t = e && e.__esModule ? function() {
return e.default
}
: function() {
return e
}
;
return n.d(t, "a", t),
t
}
,
n.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t)
}
,
n.p = "",
n(n.s = 3)
}([function(e, t) {
function n() {
return e.exports = n = Object.assign || function(e) {
for (var t = 1; t < arguments.length; t++) {
var n = arguments[t];
for (var r in n)
Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
}
return e
}
,
n.apply(this, arguments)
}
e.exports = n
}
, function(e, t, n) {
"use strict";
var r = n(4)
, a = n(2);
function o(e, t) {
return t.encode ? t.strict ? r(e) : encodeURIComponent(e) : e
}
t.extract = function(e) {
return e.split("?")[1] || ""
}
,
t.parse = function(e, t) {
var n = function(e) {
var t;
switch (e.arrayFormat) {
case "index":
return function(e, n, r) {
t = /\[(\d*)\]$/.exec(e),
e = e.replace(/\[\d*\]$/, ""),
t ? (void 0 === r[e] && (r[e] = {}),
r[e][t[1]] = n) : r[e] = n
}
;
case "bracket":
return function(e, n, r) {
t = /(\[\])$/.exec(e),
e = e.replace(/\[\]$/, ""),
t ? void 0 !== r[e] ? r[e] = [].concat(r[e], n) : r[e] = [n] : r[e] = n
}
;
default:
return function(e, t, n) {
void 0 !== n[e] ? n[e] = [].concat(n[e], t) : n[e] = t
}
}
}(t = a({
arrayFormat: "none"
}, t))
, r = Object.create(null);
return "string" != typeof e ? r : (e = e.trim().replace(/^(\?|#|&)/, "")) ? (e.split("&").forEach(function(e) {
var t = e.replace(/\+/g, " ").split("=")
, a = t.shift()
, o = t.length > 0 ? t.join("=") : void 0;
o = void 0 === o ? null : decodeURIComponent(o),
n(decodeURIComponent(a), o, r)
}),
Object.keys(r).sort().reduce(function(e, t) {
var n = r[t];
return Boolean(n) && "object" == typeof n && !Array.isArray(n) ? e[t] = function e(t) {
return Array.isArray(t) ? t.sort() : "object" == typeof t ? e(Object.keys(t)).sort(function(e, t) {
return Number(e) - Number(t)
}).map(function(e) {
return t[e]
}) : t
}(n) : e[t] = n,
e
}, Object.create(null))) : r
}
,
t.stringify = function(e, t) {
var n = function(e) {
switch (e.arrayFormat) {
case "index":
return function(t, n, r) {
return null === n ? [o(t, e), "[", r, "]"].join("") : [o(t, e), "[", o(r, e), "]=", o(n, e)].join("")
}
;
case "bracket":
return function(t, n) {
return null === n ? o(t, e) : [o(t, e), "[]=", o(n, e)].join("")
}
;
default:
return function(t, n) {
return null === n ? o(t, e) : [o(t, e), "=", o(n, e)].join("")
}
}
}(t = a({
encode: !0,
strict: !0,
arrayFormat: "none"
}, t));
return e ? Object.keys(e).sort().map(function(r) {
var a = e[r];
if (void 0 === a)
return "";
if (null === a)
return o(r, t);
if (Array.isArray(a)) {
var i = [];
return a.slice().forEach(function(e) {
void 0 !== e && i.push(n(r, e, i.length))
}),
i.join("&")
}
return o(r, t) + "=" + o(a, t)
}).filter(function(e) {
return e.length > 0
}).join("&") : ""
}
}
, function(e, t) {
var n = Array.prototype.slice;
e.exports = function(e) {
return n.call(arguments, 1).forEach(function(t) {
t && "object" == typeof t && Object.keys(t).forEach(function(n) {
e[n] = t[n]
})
}),
e
}
}
, function(e, t, n) {
e.exports = n(5)
}
, function(e, t, n) {
"use strict";
e.exports = function(e) {
return encodeURIComponent(e).replace(/[!'()*]/g, function(e) {
return "%" + e.charCodeAt(0).toString(16).toUpperCase()
})
}
}
, function(e, t, n) {
"use strict";
n.r(t);
var r = n(0)
, a = n.n(r)
, o = n(2)
, i = n.n(o);
if (!global.Symbol) {
var c = 0
, s = function(e) {
return "$$_appx_symbol_" + e + "_" + ++c + "_$$"
};
s.iterator = s("Symbol.iterator"),
global.Symbol = s
}
Object.assign = i.a;
var l, u = n(1), f = n.n(u);
function p(e) {
return e && "object" == typeof e ? Object.keys(e) : []
}
function d() {
return l
}
self.__getStartupParams = d;
var h = self;
function g() {
if (h.__appxStartupParams)
return h.__appxStartupParams;
var e = d();
if (e)
return e;
var t = location.href
, n = t.indexOf("?");
if (e = {},
-1 !== n) {
var r = t.slice(n + 1);
v(e = f.a.parse(r))
}
return e
}
function v(e) {
h.__appxStartupParams = e,
function(e) {
p(e).length && (l = e)
}(e)
}
var m = navigator.swuserAgent || navigator.userAgent
, y = {
OS: "web",
ide: m.indexOf("AlipayIDE") > -1,
browser: m.indexOf("Android") > -1 ? "android" : m.match(/iPhone|iPad/i) ? "ios" : "unknown"
}
, b = {}
, w = function() {
return !!g().debug || "DEBUG" === g().nbsn || y.ide
};
function I(e) {
var t = b[e];
if (void 0 === t) {
var n = g().debug;
n && (b[e] = t = !!n.match(new RegExp("\\b" + e + "\\b")))
}
return t
}
function P(e) {
console.log.apply(console, e)
}
function k() {
if (w()) {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
P(t)
}
}
function C(e) {
if (I(e)) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
P(["[" + e + "]"].concat(n))
}
}
var A = self;
function T(e) {
e.message || (e = new Error(e)),
A.onerror ? A.onerror(e.message, e.sourceURL, e.line, e.column, e) : console.error(e)
}
self;
function S() {
this.allListeners = {}
}
var O = S.prototype = {
_addListener: function(e, t, n) {
var r = this;
void 0 === n && (n = {});
var a = e;
Array.isArray(a) || (a = [a]);
var o = this.allListeners;
return a.forEach(function(e) {
var r = o[e] = o[e] || [];
-1 === r.indexOf(t) && (n.prepend ? r.unshift(t) : r.push(t))
}),
{
remove: function() {
r.removeListener(a, t)
}
}
},
addListener: function(e, t) {
return this._addListener(e, t)
},
prependListener: function(e, t) {
return this._addListener(e, t, {
prepend: !0
})
},
listeners: function(e) {
return e ? this.allListeners[e] || [] : this.allListeners
},
listenerCount: function(e) {
if (e)
return this.listeners(e).length;
for (var t = this.allListeners, n = Object.keys(t), r = 0, a = 0, o = n.length; a < o; a++) {
var i = n[a];
r += t[i] && t[i].length || 0
}
return r
},
emit: function(e) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
var o = e;
Array.isArray(o) || (o = [o]);
var i = a()({}, this.allListeners);
o.forEach(function(e) {
var t = i[e];
t && t.concat().forEach(function(e) {
try {
e.apply(void 0, n)
} catch (e) {
T(e)
}
})
})
},
removeListener: function(e, t) {
var n = e;
Array.isArray(n) || (n = [n]);
var r = this.allListeners;
n.forEach(function(e) {
var n = r[e];
if (n)
if (t) {
var a = n.indexOf(t);
-1 !== a && n.splice(a, 1)
} else
delete r[e]
})
}
};
O.on = O.addListener,
O.off = O.removeListener;
var E = S
, x = new E
, M = {}
, _ = {
registerComponent: function(e, t) {
M[e] && console.warn("Page " + e + " is already declared!"),
M[e] = t
},
getComponent: function(e) {
return M[e] && M[e]()
},
getRunnable: function(e) {
return _.getComponent(e)
}
}
, B = _
, D = {
tabsConfig: {},
pagesConfig: {},
currentPageConfig: null,
currentComponentConfig: null
}
, j = "__appxPageId"
, R = new RegExp("[&?]" + j + "=(\\d+)(?:&|$)");
function L(e) {
var t, n = new URL(e), r = n.hash.slice(1), a = n.search, o = a.match(R);
return o && (t = parseInt(o[1], 10),
a = a.replace(R, "")),
"?" === a.charAt(0) && (a = a.slice(1)),
{
id: t = t || D.tabsConfig[r] || 0,
pagePath: r,
queryString: a
}
}
var U = 10
, N = 100
, F = N;
function $(e, t) {
return t ? D.tabsConfig[e] : ++F
}
function V(e) {
var t = e.getId();
return t >= U && t <= N
}
function W(e, t) {
return !(!e || !t) && e.slice(0, t.length) === t
}
var q = function(e, t) {
var n = e
, r = ""
, a = n.indexOf("?");
if (-1 !== a && (r = n.slice(a + 1),
n = n.slice(0, a)),
"/" === n.charAt(0))
n = n.slice(1);
else if (t) {
n = function(e, t) {
if (W(e, "/"))
return e;
W(e, "./") || W(e, "../") || (e = "./" + e);
var n = t.split("/");
n[n.length - 1] && n.pop();
var r = [];
return n.concat(e.split("/")).forEach(function(e) {
e && "." !== e && (".." === e ? r.pop() : r.push(e))
}),
r.join("/")
}(n, t.getPagePath())
}
return "" + n + (r = r ? "?" + r : r)
};
function z(e) {
var t = e;
"/" === t.charAt(0) && (t = e.slice(1));
var n = t.indexOf("?");
if (-1 !== n && (t = t.slice(0, n)),
!B.getRunnable(t))
return console.error("framework error: can not find page: " + e),
!0
}
var X, J, G = self, K = G.importScripts, H = G.AlipayJSBridge, Y = G.fetch;
function Z() {}
H && (X = H.call,
J = H.callSync);
var Q = {}
, ee = {};
self.bootstrapSubPackage = function(e, t) {
var n = t.success;
Q[e] = 1,
n(),
ee[e] && (ee[e](),
delete ee[e])
}
;
var te = void 0 !== K;
function ne(e, t) {
var n = g().appxCli
, r = function(e) {
var t = self.appXAppJson;
if (!t || !t.app.subPackages)
return !1;
for (var n = t.app.subPackages, r = 0; r < n.length; r++) {
var a = n[r]
, o = a.root + "/";
if (W(e, o))
for (var i = a.pages, c = void 0 === i ? [] : i, s = 0, l = c.length; s < l; s++)
if (o + c[s] === e)
return a.root
}
return !1
}(e);
if (r) {
var a = D.bridge.call;
if (Q[r])
t();
else {
te && a("showLoading");
var o = function() {
!function(e, t) {
var n = "/" + e;
if (te)
K(n + "/index.worker.js"),
t();
else {
var r = document.createElement("script");
r.src = n + "/index.js",
document.head.appendChild(r),
ee[e] = t
}
}(r, function() {
te && D.bridge.call("hideLoading"),
t()
})
};
n ? o() : a("loadSubPackage", {
packages: [r]
}, o)
}
} else
t()
}
var re = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, ae = f.a;
function oe(e) {
var t = e.pagePath
, n = e.pageId
, r = e.queryString
, a = this.getPageById(n);
if (a)
return a;
var o = B.getComponent(t);
if (!o)
throw new Error("[WORKER] page '" + t + "' not found!");
var i = {};
return r && (i = ae.parse(r)),
a = o({
id: n,
query: i,
pagePath: t
}),
this.pushPage(a),
a
}
function ie(e, t) {
var n = t.pageUrl
, r = t.viewId
, a = this.getPageObject(n)
, o = a.pagePath
, i = a.queryString
, c = $()
, s = oe.call(this, {
pagePath: o,
pageId: c,
queryString: i
});
return e({
url: function(e) {
var t = e.pagePath
, n = e.pageId
, r = e.queryString;
return "#" + t + "?" + j + "=" + n + (r ? "&" + r : "")
}({
pagePath: o,
pageId: c,
queryString: ae.stringify(s.query)
}),
viewId: r,
pagePath: o
}),
s
}
var ce, se = {
newPage: oe,
reLaunch: function(e, t) {
var n = this
, r = e.url
, a = t.pushWindow
, o = t.switchTab
, i = this.getCurrentPageImpl()
, c = q(r, i);
ne(c, function() {
z(c) || (n.clearAllPages(),
$(n.getPageObject(c).pagePath, 1) ? n.switchTab({
url: "/" + c
}, {
doSwitch: o,
currentPage: i
}) : ie.call(n, a, {
pageUrl: c
}).fromPage = i)
})
},
navigateTo: function(e, t) {
var n = this
, r = e.url
, a = e.viewId
, o = t.pushWindow
, i = this.getCurrentPageImpl()
, c = q(r, i);
ne(c, function() {
z(c) || (i.hide(),
ie.call(n, o, {
pageUrl: c,
viewId: a
}).fromPage = i)
})
},
redirectTo: function(e, t) {
var n = this
, r = e.url
, a = t.pushWindow
, o = this.getCurrentPageImpl()
, i = q(r, o);
ne(i, function() {
z(i) || (V(o) ? n.clearAllPages() : o.unload(),
ie.call(n, a, {
pageUrl: i
}).fromPage = o)
})
},
switchTab: function(e, t) {
var n = this
, r = void 0 === t ? {} : t
, a = r.doSwitch
, o = r.currentPage
, i = e.url
, c = re(e, ["url"])
, s = q(i, this.getCurrentPageImpl());
ne(s, function() {
if (!z(s)) {
var e = n.getPageObject(s).pagePath;
if (function(e) {
var t = this
, n = e.url
, r = e.currentPage || this.getCurrentPageImpl()
, a = this.getPageObject(n)
, o = a.pagePath
, i = a.queryString
, c = function() {
oe.call(t, {
pagePath: o,
pageId: $(o, 1),
queryString: i
}).fromPage = r
};
if (!this.isTabShow())
return this.clearAllPages(),
x.emit("switchTab", {
page: r
}),
void c();
var s = this.getCurrentPagesImpl()
, l = this.getPagesByTabPath(o);
if ((s.length || l.length) && (s !== l || 1 !== s.length)) {
x.emit("switchTab", {
page: r
});
for (var u = s.concat(), f = u.length - 1; f >= 1; f--)
u[f].unload();
if (s === l)
u[0].show();
else {
1 === u.length && u[0].hide(),
this.setCurrentPagesImpl(l, o);
var p = l[0];
p ? (p.fromPage = r,
p.show()) : c()
}
}
}
.call(n, {
url: s,
currentPage: o
}),
a)
a({
pagePath: e
});
else {
var t = n.getCurrentPageImpl();
t && (t.isLoaded() ? t.onTabItemTap(c) : (t.tabProps = c,
t._fromTabItemTap = 1))
}
}
})
},
destroyPageByUrl: function(e) {
var t = L(e).id
, n = this.getAllPages();
if (1 !== n.length || n[0].getId() !== t) {
var r = this.getPageById(t);
r && r.unload()
}
},
getPageByUrl: function(e) {
var t = L(e).id;
return this.getPageById(t)
},
pausePageByUrl: function(e) {
var t = this.getPageByUrl(e);
t && t.hide()
},
resumePageByUrl: function(e) {
var t = this.getPageByUrl(e);
t && t.show()
}
}, le = self;
var ue, fe;
self;
function pe(e, t) {
if (void 0 === t && (t = null),
e)
try {
for (var n = arguments.length, r = new Array(n > 2 ? n - 2 : 0), a = 2; a < n; a++)
r[a - 2] = arguments[a];
return e.apply(t, r)
} catch (e) {
T(e)
}
}
function de(e) {
var t = ue._tabCaches;
p(t).forEach(function(n) {
var r = t[n];
if (r)
for (var a = r.length - 1; a >= 0; a -= 1)
if (r[a] === e)
return void r.splice(a, 1)
})
}
function he() {
return fe
}
function ge(e) {
if (void 0 === e && (e = {}),
ue)
throw new Error("App() can only be called once");
return fe = e,
function(e) {
ce = e,
le.__appImpl = ce
}(ue = new ve(e)),
x.emit("appCreated", ue),
fe
}
function ve(e) {
this._tabCaches = {},
this._currentTabPath = "",
this.publicInstance = e,
this.shown = !0
}
ve.prototype = a()({}, se, {
pushPage: function(e) {
var t = ye();
if (!t.length) {
var n = ue._currentTabPath = e.getPagePath();
t = ue._tabCaches[n] = []
}
t.push(e)
},
popPage: de,
getAllPages: function() {
var e = []
, t = this._tabCaches;
return p(t).forEach(function(n) {
var r = t[n];
r && (e = e.concat(r))
}),
e
},
isTabShow: function() {
var e = ue._tabCaches
, t = p(e).filter(function(t) {
return !!e[t].length
});
return !!t.length && t.every(function(t) {
return V(e[t][0])
})
},
clearAllPages: function() {
var e = this._tabCaches;
this._tabCaches = {},
p(e).forEach(function(t) {
var n = e[t];
n && n.concat().reverse().forEach(function(e) {
return e.unload()
})
}),
this._currentTabPath = ""
},
getPagesByTabPath: function(e) {
return this._tabCaches[e] || []
},
getPageById: function(e) {
return this.getPageBy(function(t) {
return t.getId() === e
})
},
getPageObject: function(e) {
var t = e.indexOf("?")
, n = ""
, r = e;
return -1 !== t && (n = e.slice(t + 1),
r = r.slice(0, t)),
"/" === r.charAt(0) && (r = r.slice(1)),
{
queryString: n,
pagePath: r
}
},
getPageBy: function(e) {
var t = ue._tabCaches;
for (var n in t)
if (t.hasOwnProperty(n)) {
var r = t[n];
if (r)
for (var a = r.length - 1; a >= 0; a -= 1)
if (e(r[a]))
return r[a]
}
return null
},
launch: function(e) {
void 0 === e && (e = {}),
this.$launchTime = Date.now(),
this.launchOptions = e,
x.emit("launch", e),
k("framework: App onLaunch");
var t = this.publicInstance
, n = t.onLaunch
, r = t.onShow;
pe(n, t, e),
pe(r, t, e),
this.shown = !0
},
hide: function(e) {
if (void 0 === e && (e = !0),
this.shown = !1,
x.emit("background"),
k("framework: App onHide"),
e) {
var t = be();
t && t.hide()
}
pe(this.publicInstance.onHide, this.publicInstance)
},
show: function(e, t) {
void 0 === t && (t = !0),
this.shown = !0;
var n = e || {};
k("framework: App onShow"),
x.emit("foreground", n);
var r = be();
if (pe(this.publicInstance.onShow, this.publicInstance, n),
t && !n.path) {
var a = be();
a && a === r && a.show()
}
},
error: function(e) {
pe(this.publicInstance.onError, this.publicInstance, e)
},
navigateBack: function(e, t) {
void 0 === e && (e = {});
var n = e.delta
, r = void 0 === n ? 1 : n;
if ("number" != typeof r)
return "delta must be number!";
var a = this.getCurrentPagesImpl().length;
if (1 === a)
return "already top of navigation";
r >= a && (r = a - 1),
t({
delta: r
})
},
setCurrentPagesImpl: function(e, t) {
var n = t || this._currentTabPath;
e.length && (n = e[0].getPagePath()),
this._currentTabPath = n,
this._tabCaches[n] = e
},
getCurrentPagesImpl: ye,
getCurrentPageImpl: be
}),
x.addListener("pageUnload", function(e) {
de(e.page)
});
var me = [];
function ye() {
if (!ue)
return [];
var e = ue._tabCaches
, t = ue._currentTabPath;
return t ? (e[t] = e[t] || [],
e[t]) : me
}
function be() {
var e = ye();
return e[e.length - 1]
}
function we() {
return ye().map(function(e) {
return e.publicInstance
})
}
function Ie() {
return ue
}
var Pe, ke = function(e) {
return e.ap_framework_sceneId
}, Ce = self;
Ce.addEventListener("install", function() {
Ce.skipWaiting && "function" == typeof Ce.skipWaiting && Ce.skipWaiting()
});
var Ae = !0
, Te = [];
function Se(e) {
C("framework", "[WORKER] App Received Message:", e.data);
var t = e.data
, n = t.pagePath
, r = t.viewId;
n && ne(n, function() {
var t = Ie()
, a = e.data
, o = a.queryString
, i = a.id
, c = t.newPage({
pagePath: n,
queryString: o,
pageId: i
});
if (c.setViewId(r),
c.setPort(e.ports[0]),
c.$loadTime)
c.refresh();
else {
if (!Pe) {
var s = {
path: n
}
, l = g()
, u = l.query
, p = l.referrerInfo;
u && (s.query = f.a.parse(u)),
s.scene = ke(g()),
p && (s.referrerInfo = JSON.parse(p)),
Pe = !0,
t.launch(s)
}
var d = ye();
d && d[d.length - 1] === c && c.load()
}
})
}
Ce.addEventListener("message", function(e) {
Ae ? Se(e) : Te.push(e)
});
var Oe = {}
, Ee = {
registerComponent: function(e, t) {
Oe[e] || (Oe[e] = t)
},
getComponent: function(e) {
return Oe[e] && Oe[e]()
}
};
function xe(e) {
return Ee.getComponent(e)
}
function Me(e, t) {
return t.forEach(function(t) {
-1 === e.indexOf(t) && e.push(t)
}),
e
}
var _e = /^\./
, Be = /[^.[\]]+|\[(?:(-?\d+)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g
, De = /\\(\\)?/g
, je = {};
function Re(e) {
if (je[e])
return je[e];
var t = [];
return _e.test(e) && t.push(""),
e.replace(Be, function(e, n, r, a) {
var o = e;
r ? o = a.replace(De, "$1") : n && (o = parseInt(n, 10)),
t.push(o)
}),
je[e] = t,
t
}
function Le(e, t) {
if (e === t)
return !0;
if ("object" != typeof e || null === e || "object" != typeof t || null === t)
return !1;
var n = p(e)
, r = p(t)
, a = n.length;
if (a !== r.length)
return !1;
for (var o = 0; o < a; o++) {
var i = n[o];
if (!t.hasOwnProperty(i))
return !1;
if (e[i] !== t[i])
return !1
}
return !0
}
var Ue = "t"
, Ne = "i"
, Fe = "d"
, $e = "o"
, Ve = 2
, We = 1
, qe = 2
, ze = "d"
, Xe = "o"
, Je = "u"
, Ge = "e";
function Ke(e, t) {
return e ? function(e) {
return Array.isArray(e)
}(e) ? e.slice() : a()({}, e) : t ? [] : {}
}
function He(e, t, n, r, a) {
var o = n[0];
return (a && e === t || !e) && (e = Ke(t, function(e) {
return "number" == typeof e
}(o))),
1 === n.length ? r(e, o) : (t && (t = t[o]),
e[o] = He(e[o], t, n.slice(1), r, !0),
e)
}
function Ye(e, t) {
var n = a()({}, e);
return p(t).forEach(function(e) {
var r = Re(e);
He(n, n, r, function(n, r) {
return n[r] = t[e],
n
})
}),
Le(n, e) ? e : n
}
function Ze(e, t) {
var n = a()({}, e);
return p(t).forEach(function(e) {
var r = Re(e);
He(n, n, r, function(n, r) {
var a = n[r];
return Array.isArray(a) && ((a = a.concat()).splice.apply(a, t[e]),
n[r] = a),
n
})
}),
Le(n, e) ? e : n
}
function Qe(e) {
return e === Ye ? We : qe
}
function et(e, t, n) {
t && p(t).forEach(function(r) {
if (r in e)
throw new Error("Tried to merge two objects with the same key: `" + r + "`. This conflict is due to `" + n + "` of a component mixin.");
e[r] = t[r]
})
}
function tt(e, t, n, r) {
void 0 === r && (r = []);
var a = e.mixins;
(void 0 === a ? [] : a).forEach(function(e) {
e[n] && pe.apply(void 0, [e[n], t].concat(r))
}),
e[n] && pe.apply(void 0, [e[n], t].concat(r))
}
var nt = /^on[A-Z]/;
function rt(e, t) {
var n, r = t.is, o = t.usingComponents;
Ee.registerComponent(r, function() {
if (n)
return n;
var t, c = {}, s = function(t, n) {
return void 0 === n && (n = !0),
function(e, t, n, r) {
var a = this;
if (void 0 === n && (n = !1),
void 0 === r && (r = []),
n && n[t])
return n[t];
var o = e.mixins
, i = {};
(void 0 === o ? [] : o).forEach(function(e) {
var n = e[t];
"function" == typeof n && (n = n.apply(a, r)),
et(i, n, t)
});
var c = e[t];
return "function" == typeof c && (c = c.apply(this, r)),
et(i, c, t),
n && (n[t] = i),
i
}(e, t, n ? c : n)
};
return (n = function(e, t, o) {
this.is = r,
this.id = t,
this.page = e,
this.triggerEventHandlers = {};
var i = this
, c = this.publicInstance = Object.create(s("methods"), {
setData: {
value: function(e, t) {
return i.setData(Ye, e, t)
}
},
$spliceData: {
value: function(e, t) {
return i.setData(Ze, e, t)
}
}
});
c.is = r,
c.$id = t,
c.$page = e.publicInstance,
c.data = s("data", !1),
this.computedDeps = a()({}, n.computedDeps),
this.prevData = c.data,
c.props = s("props"),
this.setComponentConfig(o, !0)
}
).data = s("data"),
n.props = s("props"),
n.getAllComponents = function() {
return t || (t = [r],
p(o).forEach(function(e) {
var n = xe(o[e]).getAllComponents();
Me(t, n)
}),
t)
}
,
n.prototype = {
setData: function(e, t, n) {
var r, a = this.id, o = this.publicInstance;
if (this.unloaded)
console.log('setData(...) can only update a mounted component. This usually means you called setData() on a unmounted component. Please check the code for the "' + this.is + '" component of "' + this.page.getPagePath() + '" page.');
else {
this.prevData = o.data,
o.data = e(o.data, t);
var i = ((r = {})[Ue] = Ve,
r[Ne] = a,
r[$e] = Qe(e),
r[Fe] = t,
r)
, c = n || {};
"function" == typeof n && (c = {
complete: n
}),
this.page.setRemoteData(i, c)
}
},
setComponentConfig: function(e, t) {
var n = e[Xe]
, r = e[ze];
n && (this.ownerId = n);
var o = this.publicInstance
, c = o.props;
if (r) {
var s = r[Ge]
, l = r[Je];
(s && s.length || l && p(l).length) && (o.props = a()({}, o.props)),
s && s.forEach(function(e) {
delete o.props[e]
}),
l && i()(o.props, this.normalizeProps(l))
}
t || c === o.props && this.prevData === o.data || (this.update(c, this.prevData),
this.prevData = o.data)
},
normalizeProps: function(e) {
var t = this
, n = a()({}, e);
return p(e).forEach(function(r) {
r.match(nt) && (n[r] = t.getTriggerEventHandler(r, e[r]))
}),
n
},
getTriggerEventHandler: function(e, t) {
var n = this;
if (!t)
return t;
var r = this.triggerEventHandlers
, a = r[e];
return a || (a = r[e] = function() {
for (var e = arguments.length, t = new Array(e), r = 0; r < e; r++)
t[r] = arguments[r];
return n.triggerEvent.apply(n, [a.method].concat(t))
}
),
a.method = t,
a
},
triggerEvent: function(e) {
var t = this.page.getComponentInstance(this.ownerId);
if (t) {
var n = t.publicInstance;
n[e] || console.warn(t.is + ": can not find event handle method: " + e);
for (var r = arguments.length, a = new Array(r > 1 ? r - 1 : 0), o = 1; o < r; o++)
a[o - 1] = arguments[o];
return pe.apply(void 0, [n[e], n].concat(a))
}
},
ready: function() {
tt(e, this.publicInstance, "didMount")
},
update: function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
tt(e, this.publicInstance, "didUpdate", n)
},
unload: function() {
this.unloaded = !0,
tt(e, this.publicInstance, "didUnmount")
}
},
n
})
}
function at(e) {
var t = D.currentComponentConfig;
if (t)
return rt(e, t);
console.warn("invalid Component usage!")
}
function ot() {}
var it = {
getCallbackId: function() {
return this.callbackSeq = this.callbackSeq || 0,
this.callbackSeq += 2,
this.callbackSeq
},
setId: function(e) {
this.id = e
},
getId: function() {
return this.id
},
getPagePath: function() {
return this.pagePath
},
onMessage: function(e) {
var t = this;
if (!this.unloaded) {
var n = e.data;
"string" == typeof n && (n = JSON.parse(n).data);
var r = function(n) {
var r = n.method
, a = n.args
, o = n.caller
, i = n.successCallback
, c = n.errorCallback;
"console" !== r && C("framework", "[" + t.pageType + "] Page " + t.pagePath + " onMessage", n);
var s = o && o.split(".") || []
, l = t;
if (s.forEach(function(e) {
l = l && l[e]
}),
l) {
var u, f = a.concat();
if (i ? f.push(function() {
for (var e = arguments.length, n = new Array(e), r = 0; r < e; r++)
n[r] = arguments[r];
t.callRemote.apply(t, ["self", "invokeCallback", i].concat(n))
}) : f.push(ot),
c ? f.push(function() {
for (var e = arguments.length, n = new Array(e), r = 0; r < e; r++)
n[r] = arguments[r];
t.callRemote.apply(t, ["self", "invokeCallback", c].concat(n))
}) : f.push(ot),
l[r])
return void (u = l)[r].apply(u, f)
}
C("framework", "[" + t.pageType + "] Page " + t.pagePath + " unhandled message", e.data)
};
Array.isArray(n) ? n.forEach(r) : r(n)
}
},
invokeCallback: function(e) {
if (!this.unloaded) {
var t = this.callbacks;
if (t) {
if (e && t[e]) {
for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++)
r[a - 1] = arguments[a];
t[e].apply(t, r)
}
e % 2 == 0 && (e -= 1),
delete t[e],
delete t[e + 1]
}
}
},
getRemoteObj: function(e, t) {
for (var n = arguments.length, r = new Array(n > 2 ? n - 2 : 0), a = 2; a < n; a++)
r[a - 2] = arguments[a];
var o, i;
if (!this.unloaded)
return "function" == typeof r[r.length - 2] ? (this.callbacks = this.callbacks || {},
o = this.getCallbackId() - 1,
this.callbacks[o] = r[r.length - 2],
i = o + 1,
this.callbacks[i] = r[r.length - 1],
r.pop(),
r.pop()) : "function" == typeof r[r.length - 1] && (this.callbacks = this.callbacks || {},
o = this.getCallbackId() - 1,
this.callbacks[o] = r[r.length - 1],
i = o + 1,
r.pop()),
{
caller: e,
method: t,
id: this.getId(),
successCallback: o,
errorCallback: i,
args: r
}
},
callRemote: function() {
var e = this.getRemoteObj.apply(this, arguments);
this.isBatching ? this.pendingMessage.push(e) : this.postMessage(e)
}
}
, ct = {
updateNativeComponents: function(e) {
var t = e.nativeComponents;
if (t) {
var n = this.getNativeComponents();
Object.keys(t).forEach(function(e) {
var r = t[e];
if (r) {
var o = n[e] = n[e] || {};
a()(o, r)
} else
n[e] && delete n[e]
})
}
},
getNativeComponents: function() {
return this._nativeComponents = this._nativeComponents || {}
},
fireNativeComponentEvent: function(e, t, n) {
var r = this.getNativeComponents()[e];
if (r) {
var o = r.events
, i = void 0 === o ? {} : o
, c = r.dataset
, s = r.tagName
, l = r.offsetLeft
, u = r.offsetTop;
if (i[t]) {
var f, p, d = i[t], h = d[0], g = d[1], v = d[2];
if (1 === g ? p = this.publicInstance : 2 === g && (p = this.getComponentInstance(v)) && (p = p.publicInstance),
p && (f = p[h]),
f) {
var m = {
id: e,
tagName: s,
offsetLeft: l,
offsetTop: u,
dataset: c
};
this.batchedUpdates(function() {
f.call(p, a()({
type: t,
timeStamp: Date.now(),
target: a()({}, m, {
targetDataset: c
}),
currentTarget: m
}, n))
})
} else
console.warn("can not find native component method", r, p, v, g, n)
}
} else
console.warn("can not find native component", e, t, n)
}
}
, st = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, lt = ["onShareAppMessage", "onReachBottom", "onPageScroll"];
function ut(e) {
var t = e.port
, n = e.id
, r = e.query
, o = e.pagePath;
if (!(this instanceof ut))
return new ut({
port: t,
id: n,
query: r,
pagePath: o
});
this.$startTime = Date.now(),
this.onMessage = this.onMessage.bind(this),
this.componentInstances = {},
t && this.setPort(t);
var c = D.pagesConfig[o].user || {}
, s = c.events
, l = void 0 === s ? {} : s
, u = st(c, ["events"]);
i()(this, {
pagePath: o,
id: n,
events: l,
bridge: D.bridge,
pendingData: [],
pendingMessage: [],
pendingCallbacks: [],
initialCallbacks: [],
self: this,
query: r,
pageType: "WORKER"
});
var f = this
, p = this.publicInstance = Object.create(a()({
route: o
}, u), {
setData: {
value: function(e, t) {
return f.setData(Ye, e, t)
}
},
$spliceData: {
value: function(e, t) {
return f.setData(Ze, e, t)
}
},
$getComponentBy: {
value: this.getComponentBy.bind(this)
}
});
"function" == typeof p.data && (p.data = p.data() || {})
}
var ft = {};
ut.prototype = a()({}, it, ct, {
load: function() {
this.port && (this.$loadTime || (this.$loadTime = Date.now(),
this._disableRemoteData = !0,
k("framework: page onLoad", this.pagePath),
x.emit("pageLoad", {
page: this
}),
pe(this.publicInstance.onLoad, this.publicInstance, this.query),
Ie().shown && this.show(),
this._fromTabItemTap && this.onTabItemTap(this.tabProps),
this._disableRemoteData = !1),
this.startRender())
},
fireEvent: function(e) {
var t = this.getEventHandle(e);
if (t) {
for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++)
r[a - 1] = arguments[a];
return t.apply(this.publicInstance, r)
}
},
getEventHandle: function(e) {
var t = this.events;
if ("object" == typeof t && "function" == typeof t[e])
return t[e]
},
refresh: function() {
this.unmountAllComponents(),
this.startRender(!0)
},
show: function() {
this.unloaded || (this.$loadTime ? this.shown || (this.shown = !0,
x.emit("enterPage", {
page: this
}),
this.executeUserMethod("onShow"),
k("framework: page onShow", this.pagePath)) : this.load())
},
pullDownRefresh: function(e) {
x.emit("pullDownRefresh", {
page: this
}),
this.executeUserMethod("onPullDownRefresh", [e])
},
hide: function() {
this.unloaded || this.$loadTime && this.shown && (this.shown = !1,
x.emit("leavePage", {
page: this
}),
x.emit("pageHide", {
page: this
}),
this.executeUserMethod("onHide"),
k("framework: page onHide", this.pagePath))
},
unload: function() {
k("framework: page onUnload", this.pagePath),
!this.unloaded && this.$loadTime ? (this.unloaded = !0,
this.clearPort(),
this.unmountAllComponents(),
pe(this.publicInstance.onUnload, this.publicInstance),
x.emit("leavePage", {
page: this
}),
x.emit("pageUnload", {
page: this
})) : x.emit("pageUnload", {
page: this
})
},
unmountAllComponents: function() {
var e = this.componentInstances;
this.componentInstances = {},
p(e).forEach(function(t) {
e[t].unload()
})
},
isLoaded: function() {
return !!this.$loadTime && !this.unloaded
},
startRender: function(e) {
var t = this.publicInstance
, n = this.id
, r = {};
lt.forEach(function(e) {
var n = t[e];
"function" == typeof n && n !== function() {}
&& (r[e] = !0)
});
var o = {};
(function(e) {
if (e in ft)
return ft[e];
var t = []
, n = D.pagesConfig[e].system.usingComponents;
return n && (p(n).forEach(function(e) {
var r = xe(n[e]).getAllComponents();
Me(t, r)
}),
ft[e] = t),
t
}
)(this.pagePath).forEach(function(e) {
var t = xe(e);
o[e] = {
props: t.props,
data: a()({}, t.data)
}
}),
this.callRemote("self", "startRender", {
id: n,
isRefresh: e,
publicInstance: r,
componentsConfig: o,
data: a()({}, t.data)
})
},
getViewId: function() {
return this.publicInstance.$viewId
},
setViewId: function(e) {
this.publicInstance.$viewId = e
},
getComponentInstance: function(e) {
return "1" === String(e) ? this : this.componentInstances[e]
},
getComponentBy: function(e, t) {
void 0 === t && (t = {});
var n = []
, r = this.componentInstances;
if (r)
for (var a = p(r), o = 0; o < a.length; o++) {
var i = r[a[o]].publicInstance;
if (e(i) && (n.push(i),
t.returnOnFirstMatch))
return n
}
return n
},
triggerComponentEvent: function(e, t, n) {
var r = this.getComponentInstance(e);
r && this.batchedUpdates(function() {
pe(r.publicInstance[t], r.publicInstance, n)
})
},
onTabItemTap: function(e) {
this.executeUserMethod("onTabItemTap", [e])
},
unmountComponents: function(e) {
var t = this.componentInstances;
e.forEach(function(e) {
t[e] && (t[e].unload(),
delete t[e])
})
},
updateComponents: function(e) {
var t = this
, n = this.componentInstances
, r = e.m || []
, a = e.u || [];
r.forEach(function(e) {
var r = e.i;
if (n[r])
n[r].setComponentConfig(e);
else if (e.s) {
var a = xe(e.s);
n[r] = new a(t,r,e),
n[r].ready()
}
});
var o = a.concat().reverse();
this.unmountComponents(o)
},
ready: function(e) {
var t = this;
this.unloaded || this.readied || this.batchedUpdates(function() {
t.readied = !0,
t.update(e),
x.emit("pageReady", {
page: t
}),
t.initialCallbacks.forEach(function(e) {
return e()
}),
t.executeUserMethod("onReady"),
k("framework: page onReady", t.pagePath)
})
},
update: function(e) {
var t = this;
e && this.batchedUpdates(function() {
t.updateComponents(e),
t.updateNativeComponents(e)
})
},
postMessage: function(e) {
!this.unloaded && this.port && (C("framework", "[WORKER] Page " + this.pagePath + " postMessage", e),
this.port.postMessage(JSON.stringify({
data: e
})))
},
console: function(e) {
function t(t) {
return e.apply(this, arguments)
}
return t.toString = function() {
return e.toString()
}
,
t
}(function(e) {
console[e].apply(console, [].slice.call(arguments, 1, -2))
}),
clearPort: function() {
this.port && (this.port.onmessage = null,
this.port = null)
},
setPort: function(e) {
this.port !== e && (this.clearPort(),
this.port = e,
e.onmessage = this.onMessage)
},
setData: function(e, t, n) {
if (this.unloaded)
console.log('setData(...) can only update a loaded page. This usually means you called setData() on a unloaded page. Please check the code for the "' + this.pagePath + '" page.');
else if (t) {
this.publicInstance.data = e(this.publicInstance.data, t);
var r, a = n || {};
if ("function" == typeof n && (a = {
complete: r = n
}),
this._disableRemoteData)
r && this.initialCallbacks.push(r);
else {
var o, i = ((o = {})[Ue] = 1,
o[Fe] = t,
o[$e] = Qe(e),
o);
this.setRemoteData(i, a)
}
}
},
executeUserMethod: function(e, t) {
var n = this;
void 0 === t && (t = []),
this.batchedUpdates(function() {
pe.apply(void 0, [n.publicInstance[e], n.publicInstance].concat(t))
})
},
onPageScroll: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
this.executeUserMethod("onPageScroll", t)
},
onReachBottom: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
this.executeUserMethod("onReachBottom", t)
},
batchedUpdates: function(e) {
if (this.isBatching)
return e();
this.isBatching = !0;
try {
e()
} finally {
this.isBatching = !1
}
this.flushToRender()
},
onRenderEvent: function(e) {
if (this.publicInstance[e]) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
this.executeUserMethod(e, n)
} else
console.warn(this.getPagePath() + ": can not find event handle method: " + e)
},
setRemoteData: function(e, t) {
var n = (void 0 === t ? {} : t).complete;
this.pendingData.push(e),
n && this.pendingCallbacks.push(n),
this.isBatching || this.flushToRender()
},
flushToRender: function() {
if (!this.unloaded && (this.pendingData.length || this.pendingMessage.length)) {
var e, t = this.pendingData, n = this.pendingCallbacks, r = this.pendingMessage;
if (t.length)
this.pendingData = [],
this.pendingCallbacks = [],
n.length && (e = function() {
n.forEach(function(e) {
return e()
})
}
),
r.unshift(this.getRemoteObj("self", "receiveData", t, e));
this.pendingMessage = [],
this.postMessage(r)
}
}
});
var pt = function(e) {
void 0 === e && (e = {});
var t = D.tabsConfig
, n = D.currentPageConfig
, r = D.pagesConfig;
if (n) {
var a = n.pagePath
, o = n.tabIndex;
o && (t[a] = o),
r[a] = {
system: n,
user: e
},
B.registerComponent(a, function() {
return ut
})
} else
console.warn("invalid Page usage!")
};
function dt(e) {
this.config = a()({}, e),
this.config.duration = this.config.duration || 400,
this.config.timeFunction = this.config.timeFunction || "linear",
this.config.transformOrigin = this.config.transformOrigin || "50% 50% 0",
this.animations = [],
this.currentAnimation = []
}
var ht = dt.prototype = {
step: function(e) {
return this.animations.push({
config: a()({}, this.config, e),
animation: this.currentAnimation
}),
this.currentAnimation = [],
this
},
export: function() {
var e = this.animations;
return this.animations = [],
e
}
};
["opacity", "backgroundColor", "width", "height", "top", "left", "bottom", "right", "rotate", "rotateX", "rotateY", "rotateZ", "rotate3d", "skew", "skewX", "skewY", "scale", "scaleX", "scaleY", "scaleZ", "scale3d", "translate", "translateX", "translateY", "translateZ", "translate3d"].forEach(function(e) {
ht[e] = function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
return this.currentAnimation.push([e, n]),
this
}
});
var gt = dt;
function vt(e, t) {
void 0 === t && (t = {});
var n = t
, r = n.homepage
, o = void 0 !== r && r
, i = n.args
, c = void 0 === i ? [] : i
, s = n.caller
, l = void 0 === s ? "bridge" : s
, u = ye()
, f = t.page || (o ? u && u[0] : be());
if (f) {
var p = [l, e].concat(c)
, d = p[p.length - 1];
if (d)
if ("object" == typeof d) {
var h = d
, g = h.success
, v = h.fail
, m = h.complete;
(g || v || m) && (p[p.length - 1] = d = a()({}, d),
delete d.success,
delete d.fail,
delete d.complete,
p.push(function() {
g && g.apply(void 0, arguments),
m && m.apply(void 0, arguments)
}),
p.push(function() {
v && v.apply(void 0, arguments),
m && m.apply(void 0, arguments)
}))
} else
"function" == typeof d && p.push(d);
f.callRemote.apply(f, p)
} else
console.warn("Can not getCurrentPage for callBridge.worker!", e, t)
}
function mt(e) {
var t = e.indexOf("#");
return -1 !== t && (e = e.slice(0, t)),
-1 !== (t = e.indexOf("?")) && (e = e.slice(0, t)),
e
}
function yt(e) {
var t = g().url;
return !e || !t || mt(t) === mt(e)
}
self;
function bt(e, t) {
void 0 === e && (e = {});
var n = e
, r = n.complete
, a = n.success
, o = n.fail;
t && t.error ? o && o(t) : a && a(t),
r && r(t)
}
var wt, It = self;
function Pt(e) {
if (wt || g().enablePolyfillWorker)
return e(wt);
It.registration.pushManager.getSubscription().then(function(t) {
t && t.applicationId ? (wt = t.applicationId,
e(wt)) : setTimeout(function() {
Pt(e)
}, 150)
}).catch(function(e) {
T(e)
})
}
function kt(e) {
return null == e ? "^" + String(e) : "string" == typeof e ? "$" + e : "number" == typeof e ? "n" + e : "boolean" == typeof e ? "b" + e : null
}
function Ct() {
this.clear()
}
Ct.prototype = {
constructor: Ct,
_getEntry: function(e) {
for (var t = this._entries, n = 0, r = t.length; n < r; n++)
if (t[n][0] === e)
return {
index: n,
value: t[n]
}
},
get: function(e) {
var t = kt(e);
if (null !== t)
return this._store[t];
var n = this._getEntry(e);
return n && n.value[1]
},
entries: function() {
var e = this
, t = [];
return Object.keys(this._store).forEach(function(n) {
t.push([n, e._store[n]])
}),
t.concat(this._entries)
},
forEach: function(e, t) {
var n = this;
this.entries().forEach(function(r) {
e.call(t, r[1], r[0], n)
})
},
set: function(e, t) {
var n = kt(e);
if (null === n) {
var r = this._getEntry(e);
r ? r.value[1] = t : this._entries.push([e, t])
} else
this._store[n] = t
},
delete: function(e) {
var t = kt(e);
if (null === t) {
var n = this._getEntry(e);
n && this._entries.splice(n.index, 1)
} else
delete this._store[t]
},
clear: function() {
this._store = {},
this._entries = []
}
};
var At = Ct
, Tt = self
, St = !!y.ide
, Ot = "ios" === y.browser
, Et = !Ot
, xt = new E;
function Mt() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
C.apply(void 0, ["framework"].concat(t))
}
function _t() {}
function Bt(e) {
try {
e = JSON.parse(e)
} catch (e) {}
return e
}
function Dt(e) {
return void 0 === e
}
function jt(e) {
return e && "object" == typeof e
}
function Rt(e) {
return "function" == typeof e
}
var Lt = 0
, Ut = {};
var Nt = {
error: 1,
errorMessage: "malformed uri arguments"
};
function Ft(e, t) {
Mt("receive push data", e);
var n = {
param: e.param,
viewId: e.viewId,
preventDefault: t
}
, r = e && e.requestId;
e && e.func ? (n.eventName = e.func,
qt(n)) : e && e.beforeunload ? (n.eventName = "beforeunload",
n.param = {},
qt(n)) : null != r ? Rt(Ut[r += ""]) ? (Ut[r](e.param),
delete Ut[r]) : Mt("unknown requestId", e) : console.error("unknown push data", e)
}
function $t(e) {
return "_$" + e
}
function Vt(e) {
return "_data_$" + e
}
function Wt(e) {
return e && "object" == typeof e && "NBPageUrl"in e && delete (e = a()({}, e)).NBPageUrl,
e
}
function qt(e) {
var t = e.eventName
, n = e.preventDefault
, r = $t(t)
, o = Vt(t)
, i = xt.listenerCount(t)
, c = xt.listenerCount(r)
, s = xt.listenerCount(o);
if (c || i || s) {
var l = {
name: t,
type: t,
preventDefault: n
};
if (jt(e.param) && Et ? a()(l, e.param) : l.data = e.param,
l.viewId = e.viewId,
xt.emit(t, l),
c) {
var u = a()({}, l);
delete u.viewId,
u.data = Wt(u.data),
xt.emit(r, u)
}
if (s) {
var f = Wt(l.data);
xt.emit(o, f)
}
}
}
var zt = {
call: X || function(e, t, n) {
var r = "console" === g().apiMessageChannel;
!function(e, t, n) {
Pt(function(r) {
var o = ++Lt
, i = {
data: e.options,
requestId: o,
applicationId: r
};
e.apiName && (i.action = e.apiName);
var c, s = JSON.stringify(i);
if (n)
try {
var l = encodeURIComponent(s);
c = "https://alipay.kylinBridge/?data=" + l
} catch (n) {
return e.callback && e.callback(a()({}, Nt)),
T(n),
t("", "")
}
e.callback && (Ut[o + ""] = e.callback),
t(c, s)
})
}({
apiName: e,
options: t,
callback: n
}, function(e, t) {
r ? console.log("kylinBridge://" + t) : e && Y(e)
}, !r)
}
,
callSync: J || function(e, t) {
var n = null
, r = function(e) {
var t = "_sw_jsonp_" + ++Lt
, n = {
action: e.apiName,
data: e.options,
applicationId: wt,
callback: t
}
, r = e.callback;
Tt[t] = function(e) {
delete Tt[t],
Rt(r) && r(e)
}
;
try {
var o = encodeURIComponent(JSON.stringify(n));
return "https://alipay.kylinbridge/?data=" + o
} catch (e) {
Tt[t](a()({}, Nt)),
T(e)
}
return ""
}({
apiName: e,
options: t,
callback: function(e) {
n = e
}
});
return r && function(e) {
try {
K(e)
} catch (t) {
console.error(t, e)
}
}(r),
"string" == typeof n ? Bt(n) : n
}
};
St && (window.callRender = vt),
St || (Ot || g().enablePolyfillWorker) && Tt.document ? Tt.document.addEventListener("push", function(e) {
Ft(e.data, e.preventDefault ? function() {
e.preventDefault()
}
: _t)
}) : Tt.addEventListener("push", function(e) {
var t = Bt(e.data.text()) || {}
, n = _t
, r = !1
, a = (t.param || {}).clientId;
a && (n = function() {
r = !0
}
),
Ft(t, n),
a && !r && Gt.callBridge("internalAPI", {
method: "executeDefaultBehavior",
param: {
clientId: a
}
})
});
var Xt = {}
, Jt = {
popTo: 1,
switchTab: 1,
onAppPerfEvent: 1,
pushWindow: 1,
remoteLog: 1,
reportData: 1
}
, Gt = {
injectAPI: function(e) {
Xt = e
},
getAPI: function() {
return Xt
},
emitUserEvent: function(e) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
return xt.emit.apply(xt, [$t(e)].concat(n))
},
emitUserEventData: function(e) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
return xt.emit.apply(xt, [Vt(e)].concat(n))
},
onUserEvent: function(e, t) {
return xt.on($t(e), t)
},
offUserEvent: function(e, t) {
return xt.off($t(e), t)
},
onUserEventData: function(e, t) {
return xt.on(Vt(e), t)
},
offUserEventData: function(e, t) {
return xt.off(Vt(e), t)
},
on: function() {
return xt.on.apply(xt, arguments)
},
off: function() {
return xt.off.apply(xt, arguments)
},
emit: function() {
return xt.emit.apply(xt, arguments)
},
callBridge: function(e, t, n) {
Mt("callBridge", e, t);
var r = Jt[e] ? void 0 : n;
I("framework") && !Jt[e] && (r = function(r) {
r && r.error ? Mt("callBridge error", e, t, r) : Mt("callBridge success", e, t, r),
n && n(r)
}
),
zt.call(e, t, r)
},
callBridgeSync: function(e, t) {
Mt("callBridgeSync", e, t);
var n = zt.callSync(e, t);
return Mt("callBridgeSync return", e, t, n),
n && n.error && Mt("callBridgeSync error:", e, t, n),
n
},
call: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
var r, a = t[0] + "", o = function(e) {
var t = Xt[e];
return !t || !1 !== t.callback
}(a), i = function(e) {
return Ht("on", e)
}(a), c = function(e) {
return Ht("off", e)
}(a);
function s(e, n) {
var s, l, u, f;
s = t[1],
Dt(l = t[2]) && Rt(s) && (l = s,
s = {}),
!jt(s) && t.length >= 2 && (s = {}),
Dt(s) && (s = {});
var p = function(t) {
"error"in t || "errorMessage"in t ? (n && n(t),
u.fail && u.fail(t)) : (e && e(t),
u.success && u.success(t)),
u.complete && u.complete(t),
l && l(t)
}
, d = Qt(a, s);
if (d)
return Mt("api call validate return", a, s, d),
u = en(s),
void p(d);
var h = Zt(a, s, l) || {};
if (Mt("api call", a, s, h),
r = function(e) {
var t = e || {};
i && (t = function(e) {
var t = {};
Dt(e.data) || (t = jt(t = e.data) ? t : {
data: t
});
return t
}(t)),
Mt("api call return" + ((t = an(t = nn(a, t, h, s))) && t.error ? " error" : ""), a, s, h, e, t),
p(t)
}
,
u = en(h),
Rt(f = tn(a)))
f(h, r, s, l);
else if (i)
on(i, rn(a, "start")),
function(e, t, n) {
var r = Kt[e];
r || (r = Kt[e] = new At);
r.get(t) || r.set(t, n)
}(i, l, r),
Gt.onUserEvent(i, r);
else if (c)
!function(e, t) {
var n = Kt[e];
if (n)
if (t) {
var r = n.get(t);
r && (Gt.offUserEvent(e, r),
n.delete(t))
} else
n.forEach(function(t) {
Gt.offUserEvent(e, t)
}),
n.clear()
}(c, l),
on(c, rn(a, "end"));
else {
var g = Yt(a);
o ? zt.call(g, h, r) : zt.call(g, h)
}
}
return !o || (i || c) ? s() : new Promise(s)
},
callSync: function() {
var e, t, n;
e = (arguments.length <= 0 ? void 0 : arguments[0]) + "",
!jt(t = arguments.length <= 1 ? void 0 : arguments[1]) && arguments.length >= 2 && (t = {}),
Dt(t) && (t = {});
var r = Qt(e, t);
if (r)
return Mt("api callSync validate return", e, t, r),
r;
var a, o, i = Zt(e, t) || {};
return Rt(n = tn(e)) ? a = n(i, t) : jt(a = zt.callSync(Yt(e), i)) && (o = an(o = nn(e, a, i, t))),
Mt("api callSync return" + ((o = o || a) && o.error ? " error" : ""), e, t, i, a, o),
o
}
}
, Kt = {};
function Ht(e, t) {
var n = Xt[t]
, r = ""
, a = "off" === e ? /^off([A-Z])(\w+)/ : /^on([A-Z])(\w+)/;
return n && a.test(t) && (t = t.match(a),
!(r = n.m) && t[1] && t[2] && (r = t[1].toLowerCase() + t[2])),
r
}
function Yt(e) {
var t = Xt[e];
return t && t.m ? t.m : e
}
function Zt(e, t, n) {
var r, o = Xt[e], i = t;
return i && i.page && (r = (i = a()({}, i)).viewId = i.page.$viewId,
delete i.page),
o && o.b && (i = a()({}, i),
i = o.b(i, n) || i),
!r || !i || "viewId"in i || (i.viewId = r),
i
}
function Qt(e, t) {
var n = Xt[e];
return !(!n || !n.v) && n.v(t)
}
function en(e) {
var t = {};
return Rt((e = e || {}).success) && (t.success = e.success,
delete e.success),
Rt(e.fail) && (t.fail = e.fail,
delete e.fail),
Rt(e.complete) && (t.complete = e.complete,
delete e.complete),
t
}
function tn(e) {
var t = Xt[e];
return !(!t || !t.d) && t.d
}
function nn(e, t, n, r) {
var o = Xt[e];
if (o && o.a) {
var i = a()({}, t);
return o.a(i, n, r) || i
}
return t
}
function rn(e, t) {
var n = Xt[e];
return !(!n || !n[t]) && n[t]
}
function an(e) {
return "string" == typeof e.error && (e.error = parseInt(e.error, 10)),
0 === e.error && (delete e.error,
delete e.errorMessage),
e
}
function on(e, t) {
(Kt[e] || []).length || Rt(t) && t()
}
var cn = Gt;
var sn = function(e) {
var t = e.callBridge;
function n(e, n) {
var r = e.pagePath;
t("switchTab", {
tag: r,
recreate: n
})
}
function r(e, n) {
var r = e.url
, a = e.pagePath
, o = e.viewId;
t("pushWindow", {
url: r,
viewId: o,
launchParamsTag: a,
param: n
})
}
return {
reLaunch: function(e) {
Ie().reLaunch({
url: e.url
}, {
pushWindow: function(e) {
return r(e, {
closeAllWindow: !0,
animationType: "none"
})
},
switchTab: function(e) {
return n(e, !0)
}
}),
bt(e)
},
navigateTo: function(e) {
Ie().navigateTo({
url: e.url,
viewId: e.viewId
}, {
pushWindow: r
}),
bt(e)
},
switchTab: function(e) {
Ie().switchTab({
url: e.url
}, {
doSwitch: n
}),
bt(e)
},
redirectTo: function(e) {
Ie().redirectTo({
url: e.url
}, {
pushWindow: function(e) {
r(e, {
closeCurrentWindow: !0,
animationType: "none"
})
}
}),
bt(e)
},
navigateBack: function(e) {
void 0 === e && (e = {});
var n = Ie().navigateBack({
delta: e.delta
}, function(e) {
var n = e.delta;
t("popTo", {
index: -n
})
});
n ? bt(e, {
error: n
}) : bt(e)
}
}
}(cn)
, ln = a()({
renderTarget: "web",
on: function(e, t) {
return cn.onUserEvent(e, t),
{
remove: function() {
cn.offUserEvent(e, t)
}
}
},
emit: function() {
cn.emitUserEvent.apply(cn, arguments)
},
call: function() {
cn.callBridge.apply(cn, arguments)
}
}, sn, {
postMessage: function(e) {
vt("fireMessage", {
args: [e]
})
},
createAnimation: function(e) {
return void 0 === e && (e = {}),
new gt(e)
},
pageScrollTo: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
vt("pageScrollTo", {
args: t
})
}
});
!function(e, t) {
if (!g().appxCli) {
var n = self.appXAppJson
, r = n && n.app.preloadRule;
r && x.addListener("pageLoad", function(e) {
var n = e.page.getPagePath()
, a = r[n];
a && t.call("loadSubPackage", a)
})
}
function o(e, t) {
var n = Ie();
if (n)
return n;
console.error("Can not find app when " + e + "!", t)
}
e.on("appResume", function(n) {
var r = o("appResume", n);
if (r) {
var a, i = n.data, c = i.query, s = i.page, l = i.referrerInfo, u = i.shouldNotReLaunch, p = i.NBPageUrl, d = {};
if (s) {
"/" === s.charAt(0) && (s = s.slice(1)),
a = s;
var h = s.indexOf("?");
-1 !== h && (a = s.slice(0, h)),
d.path = a,
D.pagesConfig[a] || (e.call("toast", {
content: "页面已失效!",
type: "exception"
}),
T(new Error("Page " + a + " Not Found when appResume")),
c = null,
s = null,
d = {})
}
c && (c = f.a.parse(c),
d.query = c),
l && (d.referrerInfo = JSON.parse(l)),
d.scene = ke(n.data),
r.show(d, yt(p)),
u ? r.clearAllPages() : d.path && ("/" !== s.charAt(0) && (s = "/" + s),
t.reLaunch({
url: s
}))
}
}),
e.on("appPause", function(e) {
var t = yt(e.data.NBPageUrl)
, n = o("appPause", e);
n && n.hide(t)
}),
e.on("beforeDestroy", function(e) {
var t = e.data.NBPageUrl;
if (yt(t)) {
var n = o("beforeDestroy", e);
n && n.destroyPageByUrl(t)
}
}),
e.on("pagePause", function(e) {
var t = e.data.NBPageUrl;
if (yt(t)) {
var n = o("pagePause", e);
n && n.pausePageByUrl(t)
}
}),
e.on("pageResume", function(e) {
var t = e.data.NBPageUrl;
if (yt(t)) {
var n = o("pageResume", e);
n && n.resumePageByUrl(t)
}
}),
e.on("tabClick", function(e) {
var t = e.data
, n = t.tag
, r = t.from
, i = void 0 === r ? "user" : r
, c = t.text
, s = t.index
, l = o("tabClick", e);
if (l) {
var u, f = {
from: i,
pagePath: n,
text: c,
index: s
}, p = l.getCurrentPageImpl();
e.preventDefault && p && p.getEventHandle("beforeTabItemTap") && p.fireEvent("beforeTabItemTap", a()({}, f, {
preventDefault: function() {
u = !0,
e.preventDefault()
}
})),
u || l.switchTab(a()({
url: "/" + n
}, f))
}
})
}(cn, ln),
D.bridge = ln;
var un = ln;
var fn = navigator.userAgent || navigator.swuserAgent
, pn = fn.match(/AlipayClient\/(\d+\.\d+\.\d+)/)
, dn = fn.match(/UCBS\/(\d+\.\d+)/)
, hn = pn && pn[1] || "100.0.0"
, gn = (dn && dn[1],
fn.indexOf("Android") > -1)
, vn = !!fn.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
, mn = fn.indexOf("AlipayIDE") > -1
, yn = "1.13.0"
, bn = {}
, wn = {}
, In = !(!dn || !dn[1]) || vn;
function Pn(e) {
if (wn[e])
return wn[e];
for (var t = [], n = e.split("."), r = 0; r < n.length; r++)
t.push(parseInt(n[r], 10));
return wn[e] = t,
t
}
function kn(e, t) {
if (e && t) {
var n = e + "__" + t;
if (n in bn)
return bn[n];
e = Pn(e),
t = Pn(t);
for (var r, a, o = 0; o < e.length; o++) {
if ((r = t[o] || 0) > (a = e[o] || 0)) {
bn[n] = -1;
break
}
if (r < a) {
bn[n] = 1;
break
}
}
return bn[n] = bn[n] || 0,
bn[n]
}
return 0
}
function Cn(e) {
return kn(hn, e)
}
cn.callInternalAPI = function(e, t, n) {
if (void 0 === t && (t = {}),
g().isInternalApp)
cn.callBridge(e, t, n);
else {
var r = {
method: e,
param: t
};
"viewId"in t && (r.viewId = t.viewId),
cn.callBridge("internalAPI", r, n)
}
}
,
cn.callInternalAPISync = function(e, t) {
if (void 0 === t && (t = {}),
g().isInternalApp)
return cn.callBridgeSync(e, t);
var n = {
method: e,
param: t
};
return "viewId"in t && (n.viewId = t.viewId),
cn.callBridgeSync("internalAPI", n)
}
;
var An = cn
, Tn = self
, Sn = !1;
Tn.onerror = function(e, t, n, r, a) {
void 0 === e && (e = ""),
void 0 === t && (t = ""),
void 0 === n && (n = 0),
void 0 === r && (r = 0);
var o = a || {}
, i = [e, t, n, r, o];
try {
var c = Ie();
c && c.error(e);
try {
(o.stack || "").split("\n").splice(0, 3)
} catch (e) {}
o.column,
o.line,
o.message,
o.sourceURL
} catch (e) {
console.error("[WORKER] report catch error", e)
}
console.error("[WORKER] onerror", i)
}
,
mn && (Tn.onerror = Tn.ideOnError),
Tn.bootstrapApp = function(e) {
var t = e.success;
function n() {
if (function() {
var e = global;
if ("undefined" != typeof Function) {
var t = function() {
if (arguments.length > 0 && "return this" === arguments[arguments.length - 1])
return function() {
return n
}
}
, n = {};
(t.prototype = Function.prototype).constructor = t,
e.Function = t
}
var r = setTimeout
, a = setInterval;
e.setTimeout = function(e, t) {
if ("function" == typeof e)
return r(e, t)
}
,
e.setInterval = function(e, t) {
if ("function" == typeof e)
return a(e, t)
}
}(),
!mn && !vn && !g().enablePolyfillWorker) {
var e = An.callInternalAPISync("getStartupParams") || {};
e.appId ? v(e) : console.error("callInternalAPISync getStartupParams error", e)
}
"DEBUG" !== g().nbsn && (G.importScripts = Z,
H && (H.call = function(e) {
if ("internalAPI" !== e) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
return X.apply(void 0, [e].concat(n))
}
}
,
J && (H.callSync = function(e) {
if ("internalAPI" !== e) {
for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++)
n[r - 1] = arguments[r];
return J.apply(void 0, [e].concat(n))
}
}
))),
t()
}
function r() {
vn && Sn || (Sn = !0,
n())
}
if (vn || !g().isNotTinyProcess || g().enablePolyfillWorker)
return r();
Ae = !1,
Pt(function() {
r(),
Ae = !0,
Te.forEach(Se),
Te = []
})
}
;
var On = p
, En = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
var xn = {};
Cn("10.1.35") >= 0 && (An.onUserEventData("customPopMenuClicked", function(e) {
void 0 === e && (e = {});
var t = e.index
, n = En(e, ["index"])
, r = be();
r && r.publicInstance.onPopMenuClick && r.publicInstance.onPopMenuClick(a()({
index: Number(t)
}, n))
}),
xn = {
setCustomPopMenu: {
b: function(e) {
var t = be();
e.viewId = t.getViewId()
}
}
});
var Mn = window.ideMockAP
, _n = a()({}, Mn)
, Bn = a()({}, a()({
hideAddToDesktopMenu: {
m: "hideOptionMenuItem",
b: function(e) {
e.scope = "single",
e.name = "add2Desktop"
}
},
hideAllAddToDesktopMenu: {
m: "hideOptionMenuItem",
b: function(e) {
e.scope = "all",
e.name = "add2Desktop"
}
},
hideFavoriteMenu: {
m: "hideOptionMenuItem",
b: function(e) {
e.scope = "single",
e.name = "favorite"
}
},
hideAllFavoriteMenu: {
m: "hideOptionMenuItem",
b: function(e) {
e.scope = "all",
e.name = "favorite"
}
}
}, xn));
An.injectAPI(Bn),
On(Bn).forEach(function(e) {
var t = Bn[e]
, n = _n
, r = t.ns
, a = t.topNS
, o = function(e) {
return /\w+Sync$/.test(e)
}(e) ? function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
return An.callSync.apply(null, [e].concat(n))
}
: function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
return An.call.apply(null, [e].concat(n))
}
;
r ? (n = n[r] = n[r] || {},
a && (_n[e] = o),
n[e] = o) : _n[e] = o
});
var Dn = _n;
var jn = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
function Rn(e) {
var t = this;
a()(this, e),
this.cameraRecordTimer = null,
this.doTimeoutCallback = function() {
t.cameraRecordTimer && (clearTimeout(t.cameraRecordTimer),
t.cameraRecordTimer = null),
t.timeoutCallback && t.timeoutCallback()
}
}
function Ln() {}
function Un(e, t) {
var n, r = ["refComponents." + this.element, e];
if (t) {
var a = t.success
, o = t.fail
, i = t.complete
, c = jn(t, ["success", "fail", "complete"]);
r.push(c),
r.push(function(e) {
a && a(e),
i && i(e)
}, function(e) {
o && o(e),
i && i(e)
})
}
(n = this.page).callRemote.apply(n, r)
}
var Nn = Rn.prototype = {
startRecord: function(e) {
var t = this
, n = e || {}
, r = n.success
, o = void 0 === r ? Ln : r
, i = n.fail
, c = void 0 === i ? Ln : i
, s = n.complete
, l = void 0 === s ? Ln : s
, u = n.timeoutCallback
, f = void 0 === u ? Ln : u
, p = jn(n, ["success", "fail", "complete", "timeoutCallback"]);
this.timeoutCallback = f,
clearTimeout(this.cameraRecordTimer),
this.cameraRecordTimer = setTimeout(function() {
t.doTimeoutCallback && t.doTimeoutCallback()
}, 3e4),
Un.call(this, "startRecord", a()({}, p || {}, {
success: o,
fail: c,
complete: function() {
t.cameraRecordTimer && (clearTimeout(t.cameraRecordTimer),
t.cameraRecordTimer = null),
l && l()
}
}))
}
};
["takePhoto", "stopRecord"].forEach(function(e) {
Nn[e] = function(t) {
Un.call(this, e, t)
}
});
var Fn = Rn;
function $n(e) {
a()(this, e)
}
var Vn = $n.prototype = {
getCenterLocation: function(e) {
(function(e, t) {
var n, r = ["refComponents." + this.element, e];
if (t) {
var a = t.success
, o = t.fail
, i = t.complete;
r.push(function(e) {
a && a(e),
i && i(e)
}, function(e) {
o && o(e),
i && i(e)
})
}
(n = this.page).callRemote.apply(n, r)
}
).call(this, "getCenterLocation", e)
}
};
["setProps", "moveToLocation", "gestureEnable", "showsScale", "showsCompass", "showRoute", "clearRoute", "updateComponents"].forEach(function(e) {
Vn[e] = function(t) {
this.page.callRemote("refComponents." + this.element, e, t)
}
});
var Wn = $n
, qn = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
function zn(e) {
a()(this, e)
}
var Xn = zn.prototype = {};
function Jn() {}
["play", "stop", "mute", "pause", "resume", "requestFullScreen", "exitFullScreen"].forEach(function(e) {
Xn[e] = function(t) {
var n = t || {}
, r = n.success
, o = void 0 === r ? Jn : r
, i = n.fail
, c = void 0 === i ? Jn : i
, s = n.complete
, l = void 0 === s ? Jn : s
, u = qn(n, ["success", "fail", "complete"]);
(function(e, t) {
An.call("NBComponent.sendMessage", a()({}, t, {
element: this.element,
actionType: e,
viewId: this.page.getViewId()
}))
}
).call(this, e, {
data: u,
success: o,
fail: c,
complete: l
})
}
});
var Gn = zn
, Kn = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
function Hn(e) {
a()(this, e)
}
var Yn = Hn.prototype = {};
function Zn() {}
["start", "stop", "pause", "resume", "switchCamera", "snapshot", "toggleTorch"].forEach(function(e) {
Yn[e] = function(t) {
var n = t || {}
, r = n.success
, o = void 0 === r ? Zn : r
, i = n.fail
, c = void 0 === i ? Zn : i
, s = n.complete
, l = void 0 === s ? Zn : s
, u = Kn(n, ["success", "fail", "complete"]);
(function(e, t) {
An.call("NBComponent.sendMessage", a()({}, t, {
element: this.element,
actionType: e,
viewId: this.page.getViewId()
}))
}
).call(this, e, {
data: u,
success: o,
fail: c,
complete: l
})
}
});
var Qn = Hn
, er = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
function tr(e) {
a()(this, e)
}
var nr = tr.prototype = {};
function rr() {}
["play", "stop", "pause", "setSpeed", "goToAndStop", "goToAndPlay", "playFromMinToMaxProgress", "playFromMinToMaxFrame", "getDuration"].forEach(function(e) {
nr[e] = function(t) {
var n = t || {}
, r = n.success
, o = void 0 === r ? rr : r
, i = n.fail
, c = void 0 === i ? rr : i
, s = n.complete
, l = void 0 === s ? rr : s
, u = er(n, ["success", "fail", "complete"]);
(function(e, t) {
An.call("NBComponent.sendMessage", a()({}, t, {
element: this.element,
actionType: e,
viewId: this.page.getViewId()
}))
}
).call(this, e, {
data: u,
success: o,
fail: c,
complete: l
})
}
});
var ar = tr
, or = {};
function ir(e, t) {
if (e) {
var n = {};
return On(t).forEach(function(r) {
n[r] = function(e, t) {
if (e) {
for (var n = 0, r = (t = Re(t)).length; e && n < r; )
e = e[t[n++]];
return n && n === r ? e : void 0
}
return e
}(e, t[r])
}),
n
}
}
function cr(e, t) {
return e && e.slice(0, t.length) === t
}
function sr(e) {
return e ? "string" == typeof e ? e : On(e).map(function(t) {
var n = t + "=";
return n += String(e[t]).replace(/,/g, ";").replace(/\^/g, "@").replace(/\=/g, "~")
}).join("^") : ""
}
var lr, ur = "TAC", fr = function() {
return "TinyAppBiz-" + g().appId
}, pr = An.callBridge, dr = or.trackerDataBuffer = {};
function hr(e) {
return sr(a()({}, e, {
SDKVersion: yn,
appId: g().appId
}))
}
function gr(e) {
var t = e.page;
if (t) {
var n = t.getPagePath()
, r = function(e) {
var t = or.trackerConfig
, n = or.trackerEnabled;
if (!t || !n)
return;
if (e in br)
return br[e];
var r = void 0;
return t.forEach(function(t) {
var n, a = {
eventCode: t.eventCode,
eventTarget: []
};
t.eventTarget.forEach(function(t) {
var r = t.page || "";
"/" === r.charAt(0) && (r = r.slice(1)),
r !== e && "ANY_PAGE" !== r || "click" !== t.trigger || (n = a).eventTarget.push(t)
}),
n && (r = r || []).push(n)
}),
br[e] = r,
r
}(n);
t.trackerConfig !== r && (t.trackerConfig = r,
C("framework", "[WORKER] push trackerConfig to page:", n, r),
t.callRemote("bridge", "setTrackerConfig", r))
}
}
or.trackerEnabled = !0,
x.prependListener("launch", function() {
!function(e) {
var t = g().appId;
pr("trackerConfig", {
requestType: "isTrackerEnable",
params: {
appId: t
}
}, function(n) {
void 0 === n && (n = {}),
C("framework", "[WORKER] isTrackerEnable", n),
n.error ? or.trackerEnabled = !0 : or.trackerEnabled = n.enable || !1,
pr("trackerConfig", {
requestType: "queryTrackerConfig",
params: {
appId: t
}
}, function(t) {
if (void 0 === t && (t = {}),
t && !t.error) {
k("framework: getTrackerConfig", t);
var n = t
, r = n.config
, a = void 0 === r ? [] : r
, o = n.env
, i = void 0 === o ? "release" : o;
or.trackerConfig = a,
or.trackerEnv = i,
e(or.trackerEnabled ? a : [])
}
})
})
}(function(e) {
yr(e)
})
}),
An.on("afterShare", function(e) {
x.emit("afterShare", {
page: be(),
event: e
})
}),
An.on("onShare", function() {
x.emit("share", {
page: be()
})
});
var vr = {}
, mr = !1;
function yr(e) {
gr({
page: be()
});
var t = {};
(e || []).forEach(function(e) {
e.eventTarget.forEach(function(n) {
var r = n.trigger;
"click" !== r && (t[r] = t[r] || [],
t[r].push({
eventCode: e.eventCode,
eventTarget: n
}))
})
}),
On(vr).forEach(function(e) {
vr[e].remove(),
delete vr[e]
}),
On(t).forEach(function(e) {
var n = t[e];
if (n && n.length) {
var r = function(t) {
var r = void 0 === t ? {} : t
, o = r.page
, i = r.params;
n.forEach(function(t) {
var n = t.eventCode
, r = t.eventTarget
, c = r.page;
if ("ANY_PAGE" === c || !c || !o || o.getPagePath() === c) {
var s, l = [o, n, {
dataConfig: r.data,
params: a()({}, i, {
$appTrigger: e
})
}];
if ("collect" === r.action)
(s = lr).collectTrackerData.apply(s, l);
else if ("report" === r.action) {
var u;
(u = lr).reportTrackerData.apply(u, l)
}
}
})
}
, o = function(e) {
var t = (void 0 === e ? {} : e).page;
r({
page: t
})
};
"launch" === e ? mr || (o(),
mr = !0) : vr[e] = "afterShare" === e ? x.prependListener(e, function(e) {
var t = void 0 === e ? {} : e
, n = t.page
, a = t.event;
r({
page: n,
params: {
shareResult: a.data.shareResult
}
})
}) : x.prependListener(e, o)
}
})
}
An.on("onTrackerConfigChange", function(e) {
var t = e && e.data && e.data.config || [];
or.trackerConfig = t,
br = {},
k("framework: onTrackerConfigChange", e),
yr(or.trackerEnabled ? t : [])
}),
An.on("onTrackerEnableChange", function(e) {
void 0 === e && (e = {});
var t = e.enable;
void 0 === t && e.data && (t = e.data.enable),
void 0 !== t && (or.trackerEnabled = t),
k("framework: onTrackerEnableChange", e),
yr(t ? or.trackerConfig : [])
});
var br = {};
x.prependListener("enterPage", gr);
var wr = {
reportAnalytics: function(e, t) {
or.trackerEnabled && pr("remoteLog", {
spmId: e,
param4: hr(t),
type: "behavior",
bizType: fr(),
actionId: "event",
logLevel: 1
})
},
$trackerAPI: lr = {
collectTrackerData: function(e, t, n) {
var r = n.dataConfig
, o = n.params
, i = void 0 === o ? {} : o;
if (or.trackerEnabled) {
var c = Ie()
, s = e && e.getId ? e : c.getPageById(e) || be();
if (s) {
var l = {}
, u = {}
, f = Date.now();
On(r).forEach(function(e) {
var t = r[e];
"$PAGE_TIME" !== t ? "$APP_TIME" !== t ? "$CURRENT_PAGE" !== t ? "$LAST_PAGE" !== t ? cr(t, "$APP.") ? u[e] = t.slice("$APP.".length) : l[e] = t : i[e] = s.fromPage && s.fromPage.getPagePath() : i[e] = s.getPagePath() : i[e] = f - c.$launchTime : i[e] = f - s.$loadTime
});
var p = ir(s.publicInstance.data, l)
, d = ir(c.publicInstance.globalData, u);
dr[t] = a()({}, dr[t], p, i, d)
}
}
},
reportTrackerData: function(e, t, n) {
var r = n.dataConfig
, a = n.params;
if (or.trackerEnabled) {
lr.collectTrackerData(e, t, {
dataConfig: r,
params: a
});
var o = dr[t]
, i = g().appId;
pr("remoteLog", {
bizType: fr(),
seedId: t,
actionId: "event",
param4: hr(o)
}),
pr("trackerConfig", {
requestType: "triggerUpload",
params: {
appId: i,
env: or.trackerEnv
}
}),
C("framework", "[WORKER] reportTrackerData", t, o, i),
dr[t] = {}
}
}
}
}
, Ir = global;
function Pr() {
var e = Ir.appXAppJson;
return (e && e.app || {}).$homepage
}
var kr = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
};
function Cr(e) {
var t = e || "";
return !t && be() && (t = be().getPagePath()),
{
spmId: "MiniApp_" + g().appId + "." + function(e) {
return e.replace(/\./g, "_DOT_")
}(t),
bizType: fr()
}
}
var Ar = function() {}
, Tr = function(e, t, n) {
var r = e.success
, o = void 0 === r ? Ar : r
, i = e.fail
, c = void 0 === i ? Ar : i
, s = e.complete
, l = void 0 === s ? Ar : s
, u = kr(e, ["success", "fail", "complete"]);
return a()({
success: function(e) {
o(e),
t && t(e),
l(e)
},
fail: function(e) {
c(e),
n && n(e),
l(e)
}
}, u)
};
function Sr(e) {
return e.charAt(0).toUpperCase() + e.slice(1)
}
var Or = An.callBridge
, Er = An.callBridgeSync
, xr = self;
function Mr(e, t, n) {
Or(e, t, n)
}
function _r(e, t, n, r, a) {
void 0 === r && (r = {});
var o = ["NBComponent.sendMessage", {
actionType: t,
element: e.id,
viewId: e._getPage().getViewId(),
data: n
}];
return a ? function(e, t) {
return xr.callAppXCanvasBridgeSync ? xr.callAppXCanvasBridgeSync(t) : Er(e, t)
}
.apply(void 0, o) : new Promise(function(e, t) {
o.push(function(n) {
n.error ? (t(n),
r.fail && r.fail(n)) : (e(n),
r.success && r.success(n)),
r.complete && r.complete(n)
}),
Mr.apply(void 0, o)
}
)
}
An.callBridge;
var Br = {
textMaxWidth: "100000000",
gcanvasCommandMap: {
clip: "p",
fill: "L",
rect: "w",
fillRect: "n",
strokeRect: "s",
clearRect: "c",
stroke: "x",
scale: "k",
rotate: "r",
translate: "l",
save: "v",
restore: "e",
fillText: "T",
moveTo: "g",
lineTo: "i",
arcTo: "h",
arc: "y",
transform: "f",
setTransform: "t",
beginPath: "b",
closePath: "o",
quadraticCurveTo: "u",
bezierCurveTo: "z",
setLineDash: "I",
strokeText: "U",
drawImage: "d",
drawCanvas: "R",
strokeStyle: "S",
shadowBlur: "Z",
shadowColor: "K",
shadowOffsetX: "X",
shadowOffsetY: "Y",
lineCap: "C",
lineWidth: "W",
lineJoin: "J",
miterLimit: "M",
font: "j",
textAlign: "A",
textBaseline: "E",
lineDashOffset: "N",
globalAlpha: "a",
globalCompositeOperation: "V",
pattern: "G",
fillStyle: "F",
linearGradient: "D",
radialGradient: "H"
},
replaceToken: function(e) {
return "string" == typeof e && (e = (e = (e = e.replace(/!/g, "!!")).replace(/,/g, "!,")).replace(/;/g, "!;")),
e
},
reverseReplaceToken: function(e) {
return "string" == typeof e && (e = (e = (e = e.replace(/!!/g, "!")).replace(/!,/g, ",")).replace(/!;/g, ";")),
e
},
valueToStr: function(e) {
return "boolean" == typeof e && (e = e ? "1" : "0"),
e
},
formatValue: function(e) {
if (!e)
return "";
if (Array.isArray(e))
for (var t = 0; t < e.length; t++) {
var n = e[t];
"number" == typeof n || (e[t] = this.valueToStr(n))
}
else
"string" == typeof e ? "null" !== e && e || (e = "") : "boolean" == typeof e && (e = this.valueToStr(e));
return e
},
isArgsValidArray: function(e) {
return e && Array.isArray(e)
},
formatDrawImageArgs: function(e, t) {
var n = e.width
, r = e.height;
return 2 === t.length ? t = [n, r, 0, 0, n, r, t[0], t[1], n, r] : 4 === t.length ? t = [n, r, 0, 0, n, r, t[0], t[1], t[2], t[3]] : 8 === t.length && (t = [n, r].concat(t)),
[e.id].concat(t)
},
_encodeDrawActions: function(e) {
for (var t = "", n = 0; n < e.length; n++)
"string" == typeof e[n] && (t += e[n]);
return t
},
_encodeDrawApi: function(e) {
e.args = this.formatValue(e.args),
"fillText" === e.action ? this.isArgsValidArray(e.args) && (e.args[0] = this.replaceToken(e.args[0]),
3 === e.args.length && e.args.push(this.textMaxWidth)) : "strokeText" === e.action ? this.isArgsValidArray(e.args) && (e.args[0] = this.replaceToken(e.args[0]),
3 === e.args.length && e.args.push(this.textMaxWidth)) : "setLineDash" === e.action && e.args && Array.isArray(e.args[0]) && (e.args = [e.args[0].length].concat(e.args[0]));
var t = this.gcanvasCommandMap[e.action];
if (t) {
return t + (Array.isArray(e.args) ? e.args.join(",") : e.args) + ";"
}
return ""
},
_encodeProperty: function(e) {
if (e.value = this.formatValue(e.value),
"fillStyle" === e.property || "strokeStyle" === e.property)
if (e.value && "object" == typeof e.value) {
var t = e.value
, n = [];
if (t && t.class) {
var r = "strokeStyle" === e.property;
if (e.property = t.class,
"pattern" === t.class || "linearGradient" === t.class || "radialGradient" === t.class) {
for (var a = 0; a < t.args.length; a++)
n[a] = t.args[a];
if ("pattern" === t.class)
;
else if ("linearGradient" === t.class) {
if (t.positions && t.positions.length > 0) {
for (var o in n.push(t.positions.length),
t.positions)
n.push(t.positions[o]);
for (var o in t.colors)
n.push(t.colors[o])
}
} else if ("radialGradient" === t.class && t.positions && t.positions.length > 0) {
for (var o in n.push(t.positions.length),
t.positions)
n.push(t.positions[o]);
for (var o in t.colors)
n.push(t.colors[o])
}
r && n.push("1")
}
}
e.value = n
} else
e.value && "string" == typeof e.value && e.value.length > 64 && (e.value = "");
else
"textAlign" === e.property ? e.value = this._encodeTextAlignValue(e.value) : "textBaseline" === e.property && (e.value = this._encodeTextBaseline(e.value));
var i = this.gcanvasCommandMap[e.property];
if (i) {
return i + (Array.isArray(e.value) ? e.value.join(",") : e.value) + ";"
}
return ""
},
_encodeTextAlignValue: function(e) {
var t = 0;
switch (e) {
case "start":
t = 0;
break;
case "end":
t = 1;
break;
case "left":
t = 2;
break;
case "center":
t = 3;
break;
case "right":
t = 4;
break;
default:
t = 0
}
return t
},
_encodeTextBaseline: function(e) {
var t = 0;
switch (e) {
case "alphabetic":
t = 0;
break;
case "middle":
t = 1;
break;
case "top":
t = 2;
break;
case "hanging":
t = 3;
break;
case "bottom":
t = 4;
break;
case "ideographic":
t = 5;
break;
default:
t = 0
}
return t
},
encodeDrawActions: function(e, t) {
return this.checkUseCompactProtocal(e) ? this._encodeDrawActions(t) : t
},
encodeDrawApi: function(e, t) {
return this.checkUseCompactProtocal(e) ? this._encodeDrawApi(t) : t
},
encodeProperty: function(e, t) {
return this.checkUseCompactProtocal(e) ? this._encodeProperty(t) : t
},
encodeProperties: function(e, t) {
if (this.checkUseCompactProtocal(e)) {
var n = [];
for (var r in t)
n.push(this._encodeProperty(t[r]));
return n
}
return t
},
putLoadedImage: function(e, t, n) {
e.localImageBuffer[t] = n
},
getLoadedImage: function(e, t) {
return e.localImageBuffer[t] ? e.localImageBuffer[t] : null
},
putLoadingImage: function(e, t) {
e.localImageLoadingBuffer[t] = 1
},
getLoadingImage: function(e, t) {
return e.localImageLoadingBuffer[t] ? e.localImageLoadingBuffer[t] : null
},
isValidImageInfo: function(e) {
return null != e && "" !== e.id && e.id >= 0 && e.width > 0 && e.height > 0
},
removeLoadingImage: function(e, t) {
delete e.localImageLoadingBuffer[t]
},
performLoadImage: function(e, t, n) {
for (var r = 0; r < t.length; r++)
this.putLoadingImage(e, t[r]);
var a = this
, o = function(t) {
if (t.data)
for (var n = t.data, r = 0; r < n.length; r++) {
var o = n[r];
a.putLoadedImage(e, o.url, o),
a.removeLoadingImage(e, o.url)
}
};
_r(e, "loadImage", {
urls: t
}, {
success: function(e) {
o(e)
},
fail: function(e) {
o(e)
},
complete: function() {
n()
}
}, !1)
},
isWaitImageLoadAction: function(e) {
return !("object" != typeof e || !e || "drawImage" !== e.action && (!e.property || "fillStyle" !== e.property && "strokeStyle" !== e.property || null == e.value || "object" != typeof e.value || "pattern" !== e.value.class))
},
parseImageUrlFromActionUrl: function(e) {
return e ? (e.args ? e.args : e.value.args)[0] : ""
},
getNotLoadingImageUrlFromAction: function(e, t) {
if (this.isWaitImageLoadAction(t)) {
var n = this.parseImageUrlFromActionUrl(t);
if (n && isNaN(n) && !this.getLoadingImage(e, n))
return n
}
return ""
},
replaceImageLoadActions: function(e, t) {
var n = ""
, r = e.action ? e.action : e.property;
if ("drawImage" === r)
n = this._encodeDrawApi({
action: r,
args: this.formatDrawImageArgs(t, e.args.slice(1))
});
else if ("fillStyle" === r || "strokeStyle" === r) {
var a = {
class: "pattern",
args: [t.id, t.width, t.height].concat(e.value.args.slice(1))
};
n = this._encodeProperty({
property: r,
value: a
})
}
return n
},
onImageLoadComplete: function(e, t) {
for (var n = 0; n < t.actions.length; n++) {
var r = t.actions[n]
, a = this.getNotLoadingImageUrlFromAction(e, r);
if (a) {
var o = this.getLoadedImage(e, a);
if (!this.isValidImageInfo(o)) {
t.actions[n] = "";
continue
}
t.actions[n] = this.replaceImageLoadActions(r, o)
}
}
this.flushDrawFrame(e, t)
},
flushDrawFrame: function(e, t) {
e.actionsShouldLoadImage = !1,
e._commitDrawFrame(t.reserve, t.actions, t.callback)
},
checkUseCompactProtocal: function(e) {
return e.enableCompactProtocol
}
}
, Dr = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, jr = ["fillStyle", "strokeStyle", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "textBaseline", "lineDashOffset", "textAlign", "globalCompositeOperation"];
function Rr(e) {
return "set" + Sr(e)
}
var Lr = jr.concat(["shadow", "fontSize", "font"]);
function Ur(e, t) {
var n = t.page
, r = t.enableNative;
this.callBackMap = {},
this.actions = [],
this.callId = 0,
this.id = e,
this.emitter = new E,
this.page = n,
this.enableNative = !1 !== r && In && g().hasNativeCanvas,
this.state = {
font: "10px Arial",
fontSize: 10,
fontWeight: "normal",
fontStyle: "normal",
fontFamily: "Arial"
},
this.enableNative && (this.enableCompactProtocol = g().nativeCanvasCompactProtocol,
this.protocolVersion = "1",
this.localImageBuffer = {},
this.localImageLoadingBuffer = {},
this.actionsShouldLoadImage = !1);
var a = this;
Lr.forEach(function(e) {
Object.defineProperty(a, e, {
configurable: !0,
set: function(t) {
a[Rr(e)](t)
}
})
})
}
var Nr = {
getImageData: {
v: function(e) {
return 0 === (Number(e.width) || 0) ? {
message: "the source width is 0"
} : 0 === (Number(e.height) || 0) ? {
message: "the source height is 0"
} : void 0
},
b: function(e) {
e.x = Number(e.x) || 0,
e.y = Number(e.y) || 0,
e.width = Number(e.width) || 0,
e.height = Number(e.height) || 0
},
a: function(e) {
e.data = new Uint8ClampedArray(e.data)
}
},
putImageData: {
v: function(e) {
return "number" != typeof e.width ? {
message: "width argument must be an Number"
} : "[object Uint8ClampedArray]" !== Object.prototype.toString.call(e.data) ? {
message: "data argument must be an Uint8ClampedArray"
} : void 0
},
b: function(e) {
e.x = Number(e.x) || 0,
e.y = Number(e.y) || 0,
e.height = "number" == typeof e.height ? e.height : e.data.length / e.width / 4 | 0,
e.data = Array.prototype.slice.call(e.data)
}
}
}
, Fr = Ur.prototype = {
_getPage: function() {
return this.page || be()
},
_commitDrawFrame: function(e, t, n) {
var r = Br.encodeDrawActions(this, t);
if (this.enableNative) {
var a = {
timeStamp: Date.now(),
actions: r,
reserve: e
};
this.enableCompactProtocol && (a.protocolVersion = this.protocolVersion),
Mr("NBComponent.sendMessage", {
actionType: "draw",
element: this.id,
viewId: this._getPage().getViewId(),
data: a
}, n)
} else
this._getPage().callRemote("refComponents." + this.id, "draw", r, e, function(e) {
"function" == typeof n && n(e)
})
},
draw: function(e, t) {
var n = this
, r = Br;
if (this.enableCompactProtocol) {
var a = [];
if (this.actionsShouldLoadImage)
for (var o = 0; o < this.actions.length; o++) {
var i = this.actions[o]
, c = r.getNotLoadingImageUrlFromAction(this, i);
c && a.indexOf(c) < 0 && a.push(c)
}
if (a.length > 0) {
var s = {
reserve: e,
actions: this.actions,
callback: t
};
r.performLoadImage(this, a, function() {
r.onImageLoadComplete(n, s)
})
}
if (null != a && a.length > 0 || this.localImageLoadingBuffer.length > 0)
return this.actionsShouldLoadImage = !1,
void (this.actions = [])
}
this.actionsShouldLoadImage = !1,
this._commitDrawFrame(e, this.actions, t),
this.actions = []
},
toDataURL: function(e) {
var t = this;
if (!this.enableNative)
return new Promise(function(n, r) {
vt("toDataURL", {
page: t._getPage(),
caller: "refComponents." + t.id,
args: [a()({}, e, {
success: function(t) {
n(t),
e.success && e.success(t)
},
fail: function(t) {
r(t),
e.fail && e.fail(t)
},
complete: function(t) {
e.complete && e.complete(t)
}
})]
})
}
)
},
toTempFilePath: function(e) {
var t = this;
return this.enableNative ? _r(this, "toTempFilePath", function(e) {
var t = a()({}, e);
return delete t.success,
delete t.error,
delete t.complete,
t
}(e), e) : new Promise(function(n, r) {
vt("toTempFilePath", {
page: t._getPage(),
caller: "refComponents." + t.id,
args: [a()({}, e, {
success: function(t) {
n(t),
e.success && e.success(t)
},
fail: function(t) {
r(t),
e.fail && e.fail(t)
},
complete: function(t) {
e.complete && e.complete(t)
}
})]
})
}
)
},
setShadow: function(e, t, n, r) {
void 0 === e && (e = 0),
void 0 === t && (t = 0),
void 0 === n && (n = 0),
void 0 === r && (r = "black"),
this.actions = this.actions.concat(Br.encodeProperties(this, [{
property: "shadowOffsetX",
value: e
}, {
property: "shadowOffsetY",
value: t
}, {
property: "shadowBlur",
value: n
}, {
property: "shadowColor",
value: r
}]))
},
setFontSize: function(e) {
this.state.font = this.state.font.replace(/\d+\.?\d*px/, e + "px"),
this.state.fontSize = e,
this.actions.push(Br.encodeProperty(this, {
property: "font",
value: this.state.font
}))
},
setFont: function(e) {
var t = this;
this.state.font = e;
var n = e.match(/^(([\w\-]+\s)*)(\d+px)(\/(\d+\.?\d*(px)?))?\s+(.*)/);
if (n) {
var r = n[1].trim().split(/\s/);
this.state.fontSize = parseFloat(n[3]),
this.state.fontFamily = n[7],
r.forEach(function(e) {
["italic", "oblique", "normal"].indexOf(e) > -1 ? t.state.fontStyle = e : ["bold", "normal"].indexOf(e) > -1 && (t.state.fontWeight = e)
})
}
this.actions.push(Br.encodeProperty(this, {
property: "font",
value: e
}))
},
createPattern: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
return this.enableCompactProtocol ? {
class: "pattern",
action: "createPattern",
args: t
} : (this.actions.push({
action: "createPattern",
callId: ++this.callId,
args: t
}),
{
$callId: this.callId
})
}
};
On(Nr).forEach(function(e) {
var t = Nr[e] || {};
Fr[e] = function(n) {
var r = this
, a = Tr(n)
, o = a.success
, i = a.fail
, c = Dr(a, ["success", "fail"]);
if (t && t.v) {
var s = t.v(c);
if (s)
return void i({
errorMessage: s.message,
error: s.message
})
}
return t && t.b && t.b(c),
this.enableNative ? _r(this, e, c, n) : new Promise(function(n, a) {
var s, l = ["refComponents." + r.id, e];
l.push(c, function(e) {
var r = e;
t.a && t.a(r),
n(r),
o && o(r)
}, function(e) {
a(e),
i && i(e)
}),
(s = r._getPage()).callRemote.apply(s, l)
}
)
}
}),
jr.forEach(function(e) {
Fr[Rr(e)] = function(t) {
if (this.enableCompactProtocol && ("fillStyle" === e || "strokeStyle" === e) && null != t && "object" == typeof t && "pattern" === t.class) {
var n = t.args[0];
if ("number" == typeof n)
;
else if ("string" == typeof n && n) {
var r = Br.getLoadedImage(this, n);
if (!r)
return this.actionsShouldLoadImage = !0,
void this.actions.push({
property: e,
value: t
});
if (!Br.isValidImageInfo(r))
return;
t.args = [r.id, r.width, r.height, t.args[1]]
} else
"object" == typeof n && Br.isValidImageInfo(n) && (t.args = [n.id, n.width, n.height, t.args[1]])
}
this.actions.push(Br.encodeProperty(this, {
property: e,
value: t
}))
}
}),
["createLinearGradient", "createRadialGradient", "createCircularGradient"].forEach(function(e) {
Fr[e] = function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
var a = n
, o = e;
"createCircularGradient" === o && (o = "createRadialGradient",
a = [a[0], a[1], 0, a[0], a[1], a[2]]);
var i = "";
if (i = "createLinearGradient" === o ? "linearGradient" : "radialGradient",
this.enableCompactProtocol)
return {
class: i,
positions: [],
colors: [],
args: a,
addColorStop: function(e, t) {
this.positions.push(e),
this.colors.push(t)
}
};
var c = [];
return this.actions.push({
action: o,
nested: c,
callId: ++this.callId,
args: a
}),
{
$callId: this.callId,
addColorStop: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
c.push({
action: "addColorStop",
args: t
})
}
}
}
}),
["clip", "fill", "rect", "fillRect", "strokeRect", "stroke", "scale", "rotate", "translate", "save", "restore", "clearRect", "fillText", "moveTo", "lineTo", "arcTo", "arc", "transform", "setTransform", "stroke", "beginPath", "closePath", "quadraticCurveTo", "bezierCurveTo", "setLineDash", "strokeText"].forEach(function(e) {
Fr[e] = function() {
for (var t = arguments.length, n = new Array(t), r = 0; r < t; r++)
n[r] = arguments[r];
this.actions.push(Br.encodeDrawApi(this, {
action: e,
args: n
}))
}
}),
Fr.isCanvasContext = 1,
Fr.drawImage = function(e) {
for (var t = e, n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++)
r[a - 1] = arguments[a];
if ("number" == typeof t)
this.actions.push(Br.encodeDrawApi(this, {
action: "drawImage",
args: [t].concat(r)
}));
else if ("string" == typeof t) {
if (this._getPage() && (t = function(e, t) {
if (!cr(e, "./") && !cr(e, "../"))
return e;
var n = t.split("/");
n[n.length - 1] && n.pop();
var r = [];
n.concat(e.split("/")).forEach(function(e) {
e && "." !== e && (".." === e ? r.pop() : r.push(e))
});
var a = r.join("/");
return cr(t, "/") && !cr(a, "/") && (a = "/" + a),
a
}(e, "/" + this._getPage().getPagePath())),
this.enableCompactProtocol) {
var o, i = Br.getLoadedImage(this, t);
if (!i)
return this.actionsShouldLoadImage = !0,
o = [t].concat(r),
void this.actions.push({
action: "drawImage",
args: o
});
if (!Br.isValidImageInfo(i))
return;
o = Br.formatDrawImageArgs(i, r)
} else
o = [t].concat(r);
this.actions.push(Br.encodeDrawApi(this, {
action: "drawImage",
args: o
}))
} else if (t && "object" == typeof t && Br.isValidImageInfo(t)) {
if (this.enableCompactProtocol) {
var c = Br.formatDrawImageArgs(t, r);
this.actions.push(Br.encodeDrawApi(this, {
action: "drawImage",
args: c
}))
}
} else
t && t.isCanvasContext && this.actions.push(Br.encodeDrawApi(this, {
action: "drawCanvas",
args: [t.id].concat(r)
}))
}
,
Fr.measureText = function(e) {
if (this.enableNative) {
var t = _r(this, "measureText", {
text: e,
font: this.state.font
}, void 0, !0);
return t || (t = {}),
t
}
var n = this.state
, r = n.fontSize
, a = n.fontFamily
, o = n.fontWeight
, i = n.fontStyle;
return An.callSync("measureText", {
text: e,
fontSize: r,
fontFamily: a,
fontWeight: o,
fontStyle: i
})
}
,
["tap", "longTap", "touchStart", "touchMove", "touchEnd", "touchCancel"].forEach(function(e) {
var t = e.charAt(0).toUpperCase() + e.slice(1);
An.on("nbcomponent.canvas.on" + t, function(t) {
var n = t.data
, r = (n.NBPageUrl,
n.element,
n.eventType,
n.callbackId,
n.type,
Dr(n, ["NBPageUrl", "element", "eventType", "callbackId", "type"]));
!function(e, t, n) {
var r = e.data
, a = r.NBPageUrl
, o = r.element
, i = Ie().getPageByUrl(a);
i ? i.fireNativeComponentEvent(o, t, n) : console.warn("page not exists", e)
}(t, e, r)
})
});
var $r = {
canvasToTempFilePath: function() {
for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++)
t[n] = arguments[n];
vt("toTempFilePath", {
caller: "refComponents." + t[0].canvasId,
args: t
})
},
createCanvasContext: function(e, t) {
return new Ur(e,a()({}, t, {
page: be()
}))
}
};
function Vr(e, t) {
this.id = e,
this.page = t
}
var Wr = Vr.prototype;
["play", "pause", "seek", "stop", "mute", "playbackRate", "requestFullScreen", "exitFullScreen", "showStatusBar", "hideStatusBar"].forEach(function(e) {
Wr[e] = function() {
for (var t, n = arguments.length, r = new Array(n), a = 0; a < n; a++)
r[a] = arguments[a];
(t = this.page).callRemote.apply(t, ["refComponents." + this.id, e].concat(r))
}
});
var qr = {
createVideoContext: function(e) {
return new Vr(e,be())
}
}
, zr = An.callBridge
, Xr = An.callBridgeSync
, Jr = 0;
function Gr(e) {
var t = this
, n = e.writes
, r = e.reads
, o = e.type;
this.id = String(++Jr),
this.callBackMap = {},
this.writes = n,
this.reads = r,
this.type = o,
this.emitter = new E,
On(this.writes).forEach(function(e) {
Object.defineProperty(t, e, {
set: function(t) {
var n;
this.writes[e].v && this.writes[e].v(t) || (this["_" + e] = t,
zr("set" + this.type + "Option", a()({}, this._getParams(), {
option: (n = {},
n[e] = t,
n)
})))
},
get: function() {
return "_" + e in this ? this["_" + e] : Xr("get" + this.type + "Option", a()({}, this._getParams(), {
optionName: e
}))[e]
}
})
}),
this.reads.forEach(function(e) {
Object.defineProperty(t, e, {
get: function() {
return Xr("get" + this.type + "Option", a()({}, this._getParams(), {
optionName: e
}))[e]
}
})
})
}
var Kr = Gr.prototype = {
_getParams: function() {
return {
bizIdentifier: g().appId,
audioPlayerID: this.id
}
},
_listen: function(e, t) {
var n = this
, r = this.emitter;
if (r.on(e, t),
1 === r.listenerCount() && zr("startMonitor" + this.type, this._getParams()),
1 === r.listenerCount(e) && !this.callBackMap[e]) {
var a = this.callBackMap[e] = function(t) {
var a = t.data
, o = void 0 === a ? {} : a;
o.audioPlayerID && o.audioPlayerID !== n.id || r.emit(e, t)
}
;
An.onUserEvent(e, a)
}
},
_unListen: function(e, t) {
var n = this.emitter;
if (n.off(e, t),
0 === n.listenerCount(e)) {
var r = this.callBackMap[e];
r && (An.offUserEvent(e, r),
delete this.callBackMap[e])
}
0 === n.listenerCount() && zr("stopMonitor" + this.type, this._getParams())
}
};
["Canplay", "Play", "Pause", "Stop", "Ended", "TimeUpdate", "Prev", "Next", "Error", "Waiting", "Seeking", "Seeked"].forEach(function(e) {
Kr["on" + e] = function(t) {
this._listen("on" + this.type + e, t)
}
,
Kr["off" + e] = function(t) {
this._unListen("on" + this.type + e, t)
}
}),
["play", "pause", "stop", "destroy"].forEach(function(e) {
Kr[e] = function() {
zr("" + e + this.type, a()({
playWithNoParam: !0
}, this._getParams()))
}
});
var Hr = Kr.destroy;
Kr.destroy = function() {
var e = this;
Hr.call(this),
zr("stopMonitor" + this.type, this._getParams()),
Object.keys(this.callBackMap).forEach(function(t) {
An.offUserEvent(t, e.callBackMap[t])
})
}
,
Kr.seek = function(e) {
zr("seek" + this.type, a()({}, this._getParams(), {
position: e
}))
}
;
var Yr = Gr;
function Zr(e, t) {
this.id = e,
this.page = t
}
var Qr, ea = Zr.prototype;
["play", "pause", "seek", "setSrc"].forEach(function(e) {
ea[e] = function() {
for (var t, n = arguments.length, r = new Array(n), a = 0; a < n; a++)
r[a] = arguments[a];
(t = this.page).callRemote.apply(t, ["refComponents." + this.id, e].concat(r))
}
});
var ta = {
createInnerAudioContext: function() {
return new Yr({
writes: {
src: {
v: function(e) {
return "string" != typeof e || 0 === e.length
}
},
startTime: {
v: function(e) {
return "number" != typeof e
}
},
autoplay: {
v: function(e) {
return "boolean" != typeof e
}
},
loop: {
v: function(e) {
return "boolean" != typeof e
}
},
obeyMuteSwitch: {
v: function(e) {
return "boolean" != typeof e
}
},
volume: {
v: function(e) {
return "number" != typeof e || e < 0 || e > 1
}
}
},
reads: ["duration", "currentTime", "paused", "buffered"],
type: "ForegroundAudio"
})
},
getBackgroundAudioManager: function() {
return Qr || (Qr = new Yr({
writes: {
src: {
v: function(e) {
return "string" != typeof e || 0 === e.length
}
},
startTime: {
v: function(e) {
return "number" != typeof e
}
},
title: {},
epname: {},
singer: {},
coverImgUrl: {},
webUrl: {}
},
reads: ["duration", "currentTime", "paused", "buffered"],
type: "BackgroundAudio"
}))
},
createAudioContext: function(e) {
return new Zr(e,be())
}
};
function na(e) {
for (var t = "", n = new Uint8Array(e), r = n.byteLength, a = 0; a < r; a++)
t += String.fromCharCode(n[a]);
return function(e) {
for (var t, n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", r = String(e), a = "", o = 0; r.charAt(0 | o) || (n = "=",
o % 1); ) {
o += .75;
var i = r.charCodeAt(o);
if (i > 255)
throw new Error('"btoa" failed');
var c = 63 & (t = t << 8 | i) >> 8 - o % 1 * 8;
a += n.charAt(c)
}
return a
}(t)
}
function ra(e) {
for (var t = function(e) {
var t = ""
, n = String(e).replace(/=+$/, "");
if (n.length % 4 == 1)
throw new Error('"atob" failed');
for (var r, a, o = 0, i = 0; a = n.charAt(i); )
i += 1,
~(a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(a)) && (r = o % 4 ? 64 * r + a : a,
o++ % 4 && (t += String.fromCharCode(255 & r >> (-2 * o & 6))));
return t
}(e), n = t.length, r = new Uint8Array(n), a = 0; a < n; a++)
r[a] = t.charCodeAt(a);
return r.buffer
}
var aa, oa = Cn("10.1.35") >= 0, ia = Cn("10.1.38") >= 0, ca = Cn("10.1.50") >= 0, sa = An.callBridge;
function la() {
ia && (this.callBackMap = {},
this.emitter = new E)
}
var ua = la.prototype = ia ? {
_listen: function(e, t) {
var n = this.emitter;
if (n.on(e, t),
1 === n.listenerCount(e) && !this.callBackMap[e]) {
var r = this.callBackMap[e] = function(t) {
t.frameBuffer && "string" == typeof t.frameBuffer && (t.frameBuffer = ra(t.frameBuffer)),
n.emit(e, t)
}
;
An.onUserEventData(e, r)
}
},
_unListen: function(e, t) {
var n = this.emitter;
if (n.off(e, t),
0 === n.listenerCount(e)) {
var r = this.callBackMap[e];
r && (An.offUserEventData(e, r),
delete this.callBackMap[e])
}
}
} : {}
, fa = ["Start", "Stop", "Error"];
ca && (fa = fa.concat(["Pause", "Resume"])),
fa.forEach(function(e) {
var t = "record" + e;
ua["on" + e] = function(e) {
An.onUserEventData(t, e)
}
,
ua["off" + e] = function(e) {
An.offUserEventData(t, e)
}
}),
ia && ["FrameRecorded"].forEach(function(e) {
ua["on" + e] = function(t) {
this._listen("record" + e, t)
}
,
ua["off" + e] = function(t) {
this._unListen("record" + e, t)
}
}),
ua.start = function(e) {
if (void 0 === e && (e = {}),
e = a()({}, {
format: "aac"
}, e),
-1 === ["aac", "mp3"].indexOf(e.format))
throw new Error("format格式非法");
gn && 0 == Cn("10.1.35") ? sa("startAudioRecord", e, function(e) {
2001 == e.error && An.emitUserEventData("recordError", e)
}) : sa("startAudioRecord", e)
}
;
var pa = ["stop"];
ca && (pa = pa.concat(["pause", "resume"])),
pa.forEach(function(e) {
ua[e] = function(t) {
void 0 === t && (t = {}),
sa(e + "AudioRecord", t)
}
});
var da, ha = oa ? {
getRecorderManager: function() {
return aa || (aa = new la)
}
} : {}, ga = Cn("10.1.35") >= 0, va = An.callBridge;
function ma() {
va("registerUpdateManager")
}
var ya = ma.prototype = {};
["checkForUpdate", "updateReady", "updateFailed"].forEach(function(e) {
var t = Sr(e);
ya["on" + t] = function(t) {
An.onUserEventData(e, t)
}
,
ya["off" + t] = function(t) {
An.offUserEventData(e, t)
}
}),
["applyUpdate"].forEach(function(e) {
ya[e] = function() {
va(e)
}
});
var ba = ga ? {
getUpdateManager: function() {
return da || (da = new ma)
}
} : {}
, wa = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, Ia = An.callInternalAPI
, Pa = Cn("10.1.35") >= 0
, ka = g().appId
, Ca = function() {}
, Aa = {};
Pa && ["getOpenUserInfo", "getPhoneNumber", "getIDNumber"].forEach(function(e) {
Aa[e] = function(t) {
var n = t.success
, r = void 0 === n ? Ca : n
, o = t.fail
, i = void 0 === o ? Ca : o
, c = t.complete
, s = void 0 === c ? Ca : c
, l = wa(t, ["success", "fail", "complete"]);
!function(e, t) {
Ia("appxrpc", {
operationType: "com.alipay.openapi.jsapi.invoke",
requestData: [a()({
appId: ka
}, e)]
}, t)
}(a()({
method: e
}, l), function(e) {
void 0 !== e.error ? i && i(e) : r && r(e),
s && s(e)
})
}
});
var Ta = Aa;
function Sa(e, t, n) {
var r, a, o, i, c, s, l = 0, u = !1, f = !1, p = !0, d = !t && 0 !== t && "function" == typeof requestAnimationFrame;
function h(t) {
var n = r
, o = a;
return r = a = void 0,
l = t,
i = e.apply(o, n)
}
function g(e, t) {
return d ? requestAnimationFrame(e) : setTimeout(e, t)
}
function v(e) {
var n = e - s;
return void 0 === s || n >= t || n < 0 || f && e - l >= o
}
function m() {
var e = Date.now();
if (v(e))
return y(e);
c = g(m, function(e) {
var n = e - l
, r = t - (e - s);
return f ? Math.min(r, o - n) : r
}(e))
}
function y(e) {
return c = void 0,
p && r ? h(e) : (r = a = void 0,
i)
}
t = +t || 0,
n && (u = n.leading,
o = (f = "maxWait"in n) ? Math.max(+n.maxWait || 0, t) : o,
p = "trailing"in n ? n.trailing : p);
var b = function() {
for (var e = Date.now(), n = v(e), o = arguments.length, p = new Array(o), d = 0; d < o; d++)
p[d] = arguments[d];
if (r = p,
a = this,
s = e,
n) {
if (void 0 === c)
return function(e) {
return l = e,
c = g(m, t),
u ? h(e) : i
}(s);
if (f)
return c = g(m, t),
h(s)
}
return void 0 === c && (c = g(m, t)),
i
};
return b.cancel = function() {
void 0 !== c && function(e) {
if (d)
return cancelAnimationFrame(e);
clearTimeout(e)
}(c),
l = 0,
r = s = a = c = void 0
}
,
b.flush = function() {
return void 0 === c ? i : y(Date.now())
}
,
b.pending = function() {
return void 0 !== c
}
,
b
}
var Oa = An.callBridge
, Ea = An.callInternalAPI
, xa = "SDKVersion=" + yn
, Ma = self
, _a = "digest"
, Ba = "all"
, Da = {};
function ja(e, t) {
var n = "my." + e + ".call";
Da[n] = Da[n] || {
call: 0,
success: 0
},
Da[n][t] = Da[n][t] + 1
}
function Ra(e) {
Oa("remoteLog", e)
}
function La(e) {
ja(e, "success"),
Na()
}
function Ua(e, t, n) {
var r = "my." + e + ".fail";
switch (Ba) {
case "digest":
Ra({
bizType: ur,
type: "behavior",
actionId: "event",
seedId: r,
param4: xa
});
break;
case "all":
Ra({
bizType: ur,
type: "behavior",
actionId: "event",
seedId: r,
param2: sr(t),
param3: sr(n),
param4: xa
});
default:
return
}
}
Ea("getConfig4Appx", {
key: "tinyApLogLevel"
}, function(e) {
if (void 0 === e && (e = {}),
e.configKey) {
var t;
try {
t = JSON.parse(e.configKey)
} catch (e) {
console.error(e)
}
t && (_a = t.apicall || _a,
Ba = t.exception || Ba)
}
});
var Na = function() {
var e = On(Da).map(function(e) {
var t = Da[e];
return e + "(" + t.call + "$" + t.success + ")"
}).join("|");
Da = {},
Ra({
bizType: ur,
type: "behavior",
actionId: "event",
seedId: "jsapi_call_result",
param2: e,
param4: xa
})
};
function Fa(e) {
return e.error && e.error < 0
}
function $a(e, t) {
Ma.__appxRemoteDebug && Cn("10.1.35") >= 0 && Ea("tinyAppStandardLog", {
category: "error",
message: t.errorMessage || t.errorMsg || t.error,
description: t.errorMessage || t.errorMsg || t.error,
logId: "JSAPI_" + e + "_" + t.error,
output: "ide"
})
}
Na = function(e, t, n) {
var r = !0
, a = !0;
return n && (r = "leading"in n ? n.leading : r,
a = "trailing"in n ? n.trailing : a),
Sa(e, t, {
leading: r,
maxWait: t,
trailing: a
})
}(Na, 500);
var Va = Cn("10.1.38")
, Wa = {}
, qa = function(e) {
var t = !1
, n = {
63300044: "https://gw.alipayobjects.com/as/g/appx-extra-component/mini-favorite/1.2.0/index.worker.js",
63300045: "https://gw.alipayobjects.com/as/g/zm-mini-app/creditCounter/0.0.43/index.worker.js",
63300062: "https://gw.alipayobjects.com/as/g/appx-extra-component/add2home/1.0.0/index.worker.js"
};
if (0 === Va && gn && n[e])
K(n[e]);
else if (Va < 0 && "63300044" === e)
K(n[e]);
else {
var r = An.callInternalAPISync("addPkgRes", {
resAppId: e
});
r && r.urls && r.urls.forEach(function(e) {
t || !function(e, t) {
return e && e.slice(0 - t.length) === t
}(e, "index.worker.js") || Wa[e] || (K(e),
t = !0,
Wa[e] = !0)
})
}
}
, za = {
"zm-evaluation": "63300045",
favorite: "63300044",
"favorite-modal": "63300055",
"add-to-home": "63300062"
}
, Xa = {
"ap.faceVerify": {
appId: "63300057",
minVersion: "10.1.50"
},
"ap.zimIdentity": {
appId: "63300057",
minVersion: "10.1.50"
}
}
, Ja = Cn("10.1.35") >= 0
, Ga = Cn("10.1.38") >= 0
, Ka = Cn("10.1.50") >= 0
, Ha = {
alert: {
object: {
confirmColor: Ga
}
},
confirm: {
object: {
cancelColor: Ga,
confirmColor: Ga
}
},
prompt: {
object: {
cancelColor: Ga,
confirmColor: Ga
}
},
navigateToMiniProgram: {
object: {
envVersion: 1,
version: Ja
}
},
navigateToMiniService: {
object: {
servicePage: 1
}
},
showActionSheet: {
object: {
badges: 1
}
},
camera: Ja && In,
createCanvasContext: {
return: {
measureText: 1,
getImageData: 1,
putImageData: 1,
globalCompositeOperation: 1,
draw: {
callback: 1
},
toDataURL: 1
}
},
createVideoContext: {
return: {
mute: 1,
stop: 1,
playbackRate: 1,
requestFullScreen: 1,
exitFullScreen: 1,
showStatusBar: 1,
hideStatusBar: 1
}
},
chooseImage: {
object: {
sizeType: 1
},
return: {
tempFiles: 1
}
},
previewImage: {
object: {
enableSavePhoto: 1,
enableShowPhotoDownload: Ja
}
},
component: 1,
cdp: In,
page: {
onOptionMenuClick: 1,
setData: {
callback: 1
},
$spliceData: 1,
onPopMenuClick: Ja,
onTabItemTap: Ja,
onPullIntercept: Ja,
onPullDownRefresh: {
object: {
from: 1
}
}
},
getLocation: {
object: {
type: 1
}
},
button: {
"open-type": {
share: 1,
lifestyle: Ja,
launchApp: Ja,
getAuthorize: Ja,
contactShare: Ja
}
},
datePicker: {
object: {
format: {
yyyy: 1,
"yyyy-MM": 1
}
}
},
getImageInfo: {
return: {
orientation: 1,
type: 1
}
},
getSystemInfo: {
return: {
storage: 1,
currentBattery: 1,
brand: 1,
fontSizeSetting: 1
}
},
getRecorderManager: {
return: {
onFrameRecorded: Ga,
offFrameRecorded: Ga,
pause: Ka,
resume: Ka,
onPause: Ka,
offPause: Ka,
onResume: Ka,
offResume: Ka
}
},
favorite: 1,
form: {
"report-submit": 1
},
lifestyle: {
onFollow: 1
},
"live-player": Ka && In,
"live-pusher": Ka && In,
lottie: Ja && In ? {
assetsPath: Ka
} : 0,
connectSocket: {
object: {
protocols: 1,
multiple: Ja
},
return: {
send: Ja,
close: Ja,
onMessage: Ja,
onOpen: Ja,
onClose: Ja,
onError: Ja,
offMessage: Ja,
offOpen: Ja,
offClose: Ja,
offError: Ja
}
},
closeSocket: {
object: {
code: 1,
reason: 1
}
},
scan: {
object: {
hideAlbum: 1,
actionType: Ga
}
},
"contact-button": {
"ext-info": 1,
size: 1,
color: 1,
icon: 1
},
"web-view": {
"app-id": 1
},
input: {
controlled: 1,
"random-number": 1,
"confirm-type": In,
"confirm-hold": In,
cursor: In,
"selection-start": In,
"selection-end": In,
type: {
numberpad: In && Ka,
digitpad: In && Ka,
idcardpad: In && Ka
}
},
switch: {
controlled: 1,
color: 1
},
textarea: {
controlled: 1,
fixed: Ja && In,
cursorSpacing: Ja && In,
cursor: Ja && In,
showConfirmBar: Ja && In,
selectionStart: Ja && In,
selectionEnd: Ja && In,
adjustPosition: Ja && In
},
checkbox: {
controlled: 1,
color: 1
},
radio: {
color: 1
},
video: {
"initial-time": In,
loop: In,
muted: In,
"show-fullscreen-btn": In,
"show-center-play-btn": In,
onLoading: In,
onStop: In,
direction: Ga && In,
onFullScreenChange: Ga && In,
"mobilenet-hint-type": Ka && In,
"poster-size": In
},
view: {
onTransitionEnd: 1,
onAnimationStart: 1,
onAnimationIteration: 1,
onAnimationEnd: 1,
onAppear: 1,
onDisappear: 1,
onFirstAppear: 1
},
"scroll-view": {
"enable-back-to-top": Ja
},
"cover-view": In,
"cover-image": In,
"movable-area": 1,
"movable-view": {
onTouchStart: 1,
onTouchMove: 1,
onTouchEnd: 1,
onTouchCancel: 1
},
"picker-view": {
"indicator-class": 1,
"mask-style": 1,
"mask-class": 1
},
map: {
onMarkerTap: {
return: {
latitude: 1,
longitude: 1
}
},
onTap: {
return: {
latitude: 1,
longitude: 1
}
},
onCalloutTap: {
return: {
latitude: 1,
longitude: 1
}
},
"include-padding": Ja,
"ground-overlays": Ja,
"tile-overlay": Ja,
setting: Ka
},
createMapContext: {
return: {
gestureEnable: 1,
showsScale: 1,
showsCompass: 1,
showRoute: 1,
clearRoute: 1,
updateComponents: Ja,
translateMarker: Ka
}
},
createWorker: Ja,
downloadFile: {
return: {
abort: Ja,
onProgressUpdate: Ja
}
},
uploadFile: {
return: {
abort: Ja,
onProgressUpdate: Ja
}
},
"rich-text": 1,
chooseVideo: {
return: {
tempFilePath: 1
}
}
};
var Ya = function() {
function e(e) {
this.actions = [],
this.page = e
}
var t = e.prototype;
return t.select = function(e) {
return this.selector = {
value: e
},
this
}
,
t.selectAll = function(e) {
return this.selector = {
value: e,
type: "all"
},
this
}
,
t.selectViewport = function() {
return this.selector = {
value: "viewport"
},
this
}
,
t.boundingClientRect = function() {
return this.selector && (this.actions.push({
selector: this.selector,
type: "rect"
}),
this.selector = null),
this
}
,
t.scrollOffset = function() {
return this.selector && (this.actions.push({
selector: this.selector,
type: "scroll"
}),
this.selector = null),
this
}
,
t.exec = function(e) {
var t = this.page || be();
t && t.callRemote("bridge", "createSelectorQuery", this.actions, e)
}
,
e
}();
var Za = Cn("10.1.35") >= 0
, Qa = function() {}
, eo = {};
function to() {
return "miniService" === Ie().launchOptions.scene
}
function no() {
var e = g();
return to() ? e.parentAppId : e.appId
}
function ro() {
var e = g();
return to() ? e.appId : void 0
}
function ao(e, t, n) {
void 0 === n && (n = {});
var r = e.serviceId
, o = e.servicePage;
return a()({
serviceId: r,
servicePage: o
}, n, {
params: {
referrerInfo: JSON.stringify(t)
}
})
}
function oo(e, t) {
t(e),
function(e) {
eo[e.serviceId] = {
success: e.success || Qa,
fail: e.fail || Qa,
complete: e.complete || Qa
}
}(e)
}
var io = {
navigateToMiniService: function(e) {
if (!(!to() || to() && Za))
throw new Error("miniService can't navigateTo miniService " + e.serviceId);
oo(e, function(e) {
var t = {
appId: no(),
sourceServiceId: ro(),
data: e.extraData
};
An.callBridge("navigateToMiniService", ao(e, t))
})
},
navigateBackFromMiniService: function(e) {
void 0 === e && (e = {}),
An.callBridge("navigateBackFromMiniService", {
data: e
})
}
};
Cn("10.1.38") >= 0 && (io.startMiniService = function(e) {
void 0 === e && (e = {}),
oo(e, function(e) {
var t = e.parentAppId
, n = e.sourceId
, r = e.extraData
, a = {
appId: t || no(),
sourceServiceId: n || ro(),
data: r
};
An.callInternalAPI("startMiniService", ao(e, a, {
parentAppId: t,
sourceId: n
}))
})
}
),
An.on("onMiniServiceMessage", function(e) {
var t = e.data
, n = eo[t.serviceId];
if (!n)
throw new Error("not find callback for " + t.serviceId);
var r = {
action: t.action,
data: t.data
};
t.error ? (r.error = t.error,
r.errorMessage = t.errorMessage || "",
n.fail(r)) : n.success(r),
n.complete(r),
delete eo[t.serviceId]
});
var co = io
, so = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, lo = An.callBridge
, uo = 0;
function fo() {
this.id = String(++uo),
this.callBackMap = {},
this.type = "SocketTask",
this.emitter = new E
}
var po = fo.prototype = {
_getParams: function() {
return {
bizIdentifier: g().appId,
socketTaskID: this.id
}
},
_listen: function(e, t) {
var n = this
, r = this.emitter;
if (r.on(e, t),
1 === r.listenerCount(e) && !this.callBackMap[e]) {
var a = this.callBackMap[e] = function(t) {
var a = t.data;
(void 0 === a ? {} : a).socketTaskID === n.id && r.emit(e, t)
}
;
An.onUserEvent(e, a)
}
},
_unListen: function(e, t) {
var n = this.emitter;
if (n.off(e, t),
0 === n.listenerCount(e)) {
var r = this.callBackMap[e];
r && (An.offUserEvent(e, r),
delete this.callBackMap[e])
}
},
__doAction: function(e, t) {
var n = go(e)
, r = n.success
, o = n.fail
, i = so(n, ["success", "fail"]);
lo(t, a()({}, i, this._getParams()), function(e) {
(e = vo(e)) && e.error ? o(e) : r(e)
})
},
send: function(e) {
this.__doAction(e, "sendSocketMessage")
},
close: function(e) {
this.__doAction(e, "closeSocket")
}
};
function ho() {}
["Close", "Error", "Message", "Open"].forEach(function(e) {
po["on" + e] = function(t) {
this._listen("on" + this.type + e, t)
}
,
po["off" + e] = function(t) {
this._unListen("on" + this.type + e, t)
}
});
var go = function(e) {
var t = e.success
, n = void 0 === t ? ho : t
, r = e.fail
, o = void 0 === r ? ho : r
, i = e.complete
, c = void 0 === i ? ho : i
, s = so(e, ["success", "fail", "complete"]);
return a()({
success: function(e) {
n(e),
c(e)
},
fail: function(e) {
o(e),
c(e)
}
}, s)
};
function vo(e) {
return "string" == typeof e.error && (e.error = parseInt(e.error, 10)),
0 === e.error && (delete e.error,
delete e.errorMessage),
e
}
var mo = {
connectSocket: function(e) {
var t = go(e)
, n = t.success
, r = t.fail
, o = so(t, ["success", "fail"])
, i = function(e) {
(e = vo(e)) && e.error ? r(e) : n(e)
};
if (e.multiple) {
var c = new fo;
return lo("connectSocket", a()({}, o, c._getParams()), i),
c
}
lo("connectSocket", o, i)
}
}
, yo = {
env: {
USER_DATA_PATH: "https://usr"
}
}
, bo = Cn("10.1.35") >= 0
, wo = An.callBridge;
var Io = 0;
function Po() {
this.id = String(++Io),
this.callBackMap = {},
this.emitter = new E
}
Po.prototype = {
_getParams: function() {
return {
bizIdentifier: g().appId,
workerId: this.id
}
},
_unListen: function(e, t) {
var n = this.emitter;
if (n.off(e, t),
0 === n.listenerCount(e)) {
var r = this.callBackMap[e];
r && (An.offUserEventData(e, r),
delete this.callBackMap[e])
}
},
_listen: function(e, t) {
var n = this
, r = this.emitter;
if (r.on(e, t),
1 === r.listenerCount(e) && !this.callBackMap[e]) {
var a = this.callBackMap[e] = function(t) {
void 0 === t && (t = {}),
t.workerId === n.id && r.emit(e, t.message)
}
;
An.onUserEventData(e, a)
}
},
postMessage: function(e) {
wo("multiWorkerPostMessage", a()({
message: e
}, this._getParams()))
},
onMessage: function(e) {
this._listen("multiWorkerMessage", e)
},
offMessage: function(e) {
this._unListen("multiWorkerMessage", e)
},
terminate: function() {
var e = this;
wo("multiWorkerTerminate", a()({}, this._getParams())),
Object.keys(this.callBackMap).forEach(function(t) {
An.offUserEvent(t, e.callBackMap[t])
})
}
};
var ko = bo ? {
createWorker: function(e) {
var t = new Po;
return wo("createWorker", a()({
scriptPath: e
}, t._getParams())),
t
}
} : {}
, Co = a()({}, ko)
, Ao = An.callInternalAPI
, To = "setOptionMenu"
, So = "showOptionMenu";
!gn && (To = "setTAOptionMenu",
So = "showTAOptionMenu");
var Oo = {
setOptionMenu: function(e, t) {
Ao(To, a()({}, e, {
viewId: t,
bizType: "tiny"
})),
Ao(So, {
viewId: t
})
}
};
function Eo() {
var e = be();
return e && e.getViewId()
}
var xo = An.callBridge;
var Mo = 0
, _o = {};
function Bo(e, t) {
this.intersectionObserverId = "pageMonitor-" + Mo++,
this.options = a()({
thresholds: [0],
initialRatio: 0,
selectAll: !1
}, e),
this.relativeInfo = [],
this.disconnected = !1,
this.page = t
}
Bo.prototype = {
relativeToViewport: function(e) {
return this.relativeInfo.push({
selector: null,
margins: e
}),
this
},
relativeTo: function(e, t) {
return this.relativeInfo.push({
selector: e,
margins: t
}),
this
},
observe: function(e, t) {
this.disconnected ? console.warn("已经取消监听") : (_o[this.intersectionObserverId] = t,
this.page.callRemote("bridge", "addIntersectionObserver", {
intersectionObserverId: this.intersectionObserverId,
options: this.options,
relativeInfo: this.relativeInfo,
targetSelector: e
}))
},
disconnect: function() {
this.disconnected || (this.page.callRemote("bridge", "removeIntersectionObserver", this.intersectionObserverId),
delete _o[this.intersectionObserverId],
this.disconnected = !0)
}
};
var Do = {
createIntersectionObserver: function(e) {
return new Bo(e,be())
},
_fireIntersectionObserver: function(e) {
e && "function" == typeof _o[e.intersectionObserverId] && _o[e.intersectionObserverId](e.info)
}
};
function jo(e, t) {
return "%s" === e ? t = function(e) {
return "object" == typeof e ? JSON.stringify(e) : e + ""
}(t) : "%c" === e ? t = function(e) {
var t = "" + e;
return 0 === t.indexOf("#") && (t = t.substr(1)),
3 === t.length && (t = t.replace(/(.)/g, "$1$1")),
t = parseInt(t, 16),
isNaN(t) && console.error(e + " is invalid hex color."),
t
}(t) : "%b" === e ? t = function(e) {
return "string" == typeof e && (e = e.replace(/^data:(\/|\w|\-|\.)+;base64,/i, "")),
e
}(t) : "%d" === e ? t = parseInt(t, 10) : "%f" === e && (t = parseFloat(t)),
t
}
function Ro(e, t, n) {
var r;
return n = n || {},
On(t).forEach(function(a) {
var o = t[a];
void 0 !== (o = (r = function(e) {
var t = (e || "").match(/(\w+)(%\w)$/i)
, n = {
k: e
};
return t && (n.k = t[1],
n.t = t[2]),
n
}(o)).k) && (a in e || a in n) && void 0 === e[o] && (e[o] = jo(r.t, void 0 === n[a] ? e[a] : n[a]),
o !== a && delete e[a])
}),
e
}
var Lo = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, Uo = Cn("10.1.35") >= 0
, No = An.callBridge
, Fo = new E;
function $o(e) {
return f.a.stringify(e)
}
var Vo = {
downloadFile: {
b: function(e, t) {
e.downloadTaskId = t.taskId,
Ro(e, {
headers: "header"
})
},
a: function(e) {
Ro(e, {
tempFilePath: "apFilePath",
errorCode: "error"
}),
delete e.tempFilePath
},
c: function(e) {
No("operateDownloadTask", {
downloadTaskId: e.taskId,
operationType: "abort"
})
},
p: "downloadTask"
},
uploadFile: {
b: function(e, t) {
e.uploadTaskId = t.taskId,
Ro(e, {
headers: "header",
fileName: "name",
fileType: "type"
}),
function(e) {
return /^[a-z0-9|]+$/i.test(e)
}(e.filePath) && (e.localId = e.filePath,
delete e.filePath)
},
a: function(e) {
2 === e.error && (e.error = 11)
},
c: function(e) {
No("operateUploadTask", {
uploadTaskId: e.taskId,
operationType: "abort"
})
},
p: "uploadTask"
}
};
Uo && a()(Vo, {
request: {
b: function(e, t) {
e.requestTaskId = t.taskId;
e.method = (e.method || "GET").toUpperCase(),
e.dataType = (e.dataType || "json").toLowerCase(),
e.responseType = e.dataType,
e.responseType = "base64" !== e.responseType ? "text" : "base64";
var n, r = e.headers = e.headers || {}, a = r["content-type"] = r["content-type"] || "application/json";
if (n = void 0 === e.data ? "" : "string" != typeof e.data ? a.indexOf("application/x-www-form-urlencoded") > -1 ? $o(e.data) : a.indexOf("application/json") > -1 ? JSON.stringify(e.data) : "object" == typeof e.data ? JSON.stringify(e.data) : e.data.toString() : e.data,
"GET" === e.method && (e.url = function(e, t) {
var n = t;
return "object" == typeof t && (n = $o(t)),
/\?/.test(e) ? /&$/.test(e) || /\?$/.test(e) || (n = "&" + n) : n = "?" + n,
e + n
}(e.url, e.data)),
e.data = n,
gn) {
var o = [];
On(e.headers).forEach(function(t) {
var n = {};
n[t] = e.headers[t],
o.push(n)
}),
e.headers = o
}
},
a: function(e, t) {
if ("json" === t.dataType && e.data)
try {
e.data = JSON.parse(e.data)
} catch (t) {
return e.error = 14,
void (e.errorMessage = "JSON parse data error")
}
if ("base64" === t.dataType && e.data && e.headers && (e.data = function(e, t) {
return e && t && (e = "data:" + t + ";base64," + e),
e
}(e.data, e.headers["Content-Type"])),
"status"in e) {
var n = e.status + "";
/^[45]/.test(n) && (e.error = 19,
e.errorMessage = "http status error")
}
},
c: function(e) {
No("operateRequestTask", {
requestTaskId: e.taskId,
operationType: "abort"
})
}
}
}),
["downloadTask", "uploadTask"].forEach(function(e) {
An.onUserEvent(e + "StateChange", function(t) {
var n = t.data
, r = n.downloadTaskId
, a = n.uploadTaskId
, o = Lo(n, ["downloadTaskId", "uploadTaskId"])
, i = "downloadTask" === e ? r : a;
Fo.emit("" + e + i + "progressUpdate", o)
})
});
var Wo = {};
On(Vo).forEach(function(e) {
var t = Vo[e] || {}
, n = 0;
Wo[e] = function(r) {
void 0 === r && (r = {}),
n += 1;
var o, i, c = r, s = c.success, l = c.fail, u = c.complete, f = Lo(r, ["success", "fail", "complete"]);
t && t.b && t.b(f, {
taskId: n
});
var p = function(e, r) {
return function(a) {
if (!i) {
i = !0;
var o = Tr({
success: s,
fail: l,
complete: u
}, e, r)
, c = o.success
, p = o.fail
, d = a || {};
t.a && t.a(d, f),
d = function(e) {
return "string" == typeof e.error && (e.error = parseInt(e.error, 10)),
0 === e.error && (delete e.error,
delete e.errorMessage),
e
}(d),
t.p && Fo.off("" + t.p + n + "progressUpdate"),
d && d.error ? p(d) : c(d)
}
}
}
, d = new Promise(function(e, t) {
o = p(e, t)
}
);
No(e, f, o);
var h = {
abort: function() {
t.c && t.c({
taskId: n
}),
o({
error: 9,
errorMessage: e + ":fail abort"
})
}
};
return t.p && (h = a()({}, h, {
onProgressUpdate: function(e) {
Fo.on("" + t.p + n + "progressUpdate", e)
}
})),
a()(d, h)
}
});
var qo = Wo
, zo = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, Xo = An.callBridge
, Jo = An.callBridgeSync
, Go = Cn("10.1.38") >= 0
, Ko = function(e) {
this.mode = e.mode,
this.size = e.size,
this.lastAccessedTime = e.lastAccessedTime,
this.lastModifiedTime = e.lastModifiedTime,
Object.defineProperty(this, "isDirectory", {
value: function() {
return e.is_directory
}
}),
Object.defineProperty(this, "isFile", {
value: function() {
return e.is_file
}
})
};
function Ho(e, t) {
return ["appendFile", "writeFile"].indexOf(e) > -1 && t.data instanceof ArrayBuffer && void 0 !== t.data.byteLength && (t.dataType = "ArrayBuffer",
t.data = na(t.data)),
t
}
function Yo(e, t) {
return "readFile" === e && "ArrayBuffer" === t.dataType && (t = ra(t.data)),
"stat" === e && (t = function(e) {
if (e.error)
return e;
var t = {};
return Array.isArray(e.stats) ? e.stats.forEach(function(e) {
t[e.path] = {
path: e.path,
stats: new Ko(e.stats)
}
}) : t = new Ko(e.stats),
{
stats: t
}
}(t)),
t
}
function Zo() {}
var Qo = Zo.prototype = {};
["mkdir", "rmdir", "readdir", "writeFile", "copyFile", "readFile", "saveFile", "appendFile", "removeSavedFile", "getSavedFileList", "getFileInfo", "access", "rename", "unlink", "unzip", "stat"].forEach(function(e) {
Qo[e] = function(t) {
void 0 === t && (t = {});
var n = t
, r = n.success
, o = n.fail
, i = n.complete
, c = zo(t, ["success", "fail", "complete"]);
Xo("fsManage", a()({
action: e
}, Ho(e, c)), function(t) {
(t = Yo(e, t)).error ? o && o(t) : r && r(t),
i && i(t)
})
}
,
"unzip" !== e && (Qo[e + "Sync"] = function(t) {
void 0 === t && (t = {});
var n = Jo("fsManage", a()({
action: e
}, Ho(e, t)));
return Yo(e, n)
}
)
});
var ei = Go ? {
getFileSystemManager: function() {
return new Zo
}
} : {}
, ti = 0
, ni = 0;
An.on("titleClick", function() {
var e = Date.now();
e - ni < 250 ? 5 === ++ti && (ti = 0,
An.callBridge("alert", {
title: yn + " 12-12 15:41:56",
message: "" + (g().version || g().appVersion || "-")
})) : ti = 0,
ni = e
});
var ri = An.callInternalAPI;
function ai(e) {
var t = be();
t && t.publicInstance.onOptionMenuClick && t.publicInstance.onOptionMenuClick(e)
}
x.addListener("pageLoad", function(e) {
var t = e.page;
(function() {
var e = Pr()
, t = On(D.tabsConfig)
, n = ye()[0].getPagePath();
return e && n !== e && -1 === t.indexOf(n)
}
)() && ri("showBackHome", {
viewId: t.getViewId()
})
}),
An.on("onBackHomeClick", function() {
var e = Pr();
e && ("/" !== e.charAt(0) && (e = "/" + e),
D.bridge.reLaunch({
url: e
}))
}),
x.addListener("pageLoad", function(e) {
var t = e.page;
if (Oo.setOptionMenu) {
var n = function(e) {
var t = self.appXAppJson
, n = void 0 === t ? {} : t
, r = n[e.getPagePath()]
, a = n.app;
return r && r.optionMenu || a && a.window && a.window.optionMenu
}(t);
n && Oo.setOptionMenu(n, t.getViewId())
}
}),
An.onUserEvent("tinyOptionMenu", ai),
An.onUserEvent("optionMenu", ai);
var oi = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}
, ii = An.callBridge
, ci = An.callInternalAPI;
function si(e) {
if (this && this.publicInstance.onShareAppMessage) {
var t = {};
e && e.target && "button" === e.target.tagName && (t.from = "button",
t.target = e.target);
var n = this.publicInstance.onShareAppMessage(t);
if ("object" != typeof n)
return console.error("请检查onShareAppMessage代码,需要返回一个对象,并包含必填参数"),
null;
li.call(this, "shareToAlipayContact", n)
}
}
function li(e, t) {
void 0 === t && (t = {});
var n = t
, r = n.fail
, o = n.success
, i = n.complete
, c = n.path
, s = oi(t, ["fail", "success", "complete", "path"]);
ci(e, a()({}, s, {
page: c || this.getPagePath()
}), function(e) {
fi(e),
!e.shareResult && r && r(e),
e.shareResult && o && o(e),
i && i(e)
})
}
function ui(e) {
var t, n = this && this.publicInstance.onShareAppMessage, r = Ie().publicInstance.onShareAppMessage;
if ("function" == typeof n || "function" == typeof r) {
var a = {
from: "menu"
};
if (e && e.data && e.data.webViewUrl && (a.webViewUrl = e.data.webViewUrl),
e && e.target && "button" === e.target.tagName && (a.from = "button",
a.target = e.target),
"object" != typeof (t = n ? n.call(this.publicInstance, a) : r.call(Ie().publicInstance, a)))
return console.error("请检查onShareAppMessage代码,需要返回一个对象,并包含必填参数"),
null;
li.call(this, "shareTinyAppMsg", t)
} else
ci("shareTinyAppMsg", {
page: this.getPagePath()
}, function(e) {
fi(e)
})
}
function fi(e) {
or.trackerEnabled && ii("remoteLog", a()({}, Cr(), {
actionId: "auto_share",
param4: sr({
SDKVersion: yn,
channel: e.channelName,
shareResult: e.shareResult
})
}))
}
x.addListener("pageLoad", function(e) {
var t = e.page;
"miniService" !== Ie().launchOptions.scene ? (t.startShare = ui,
t.shareToAlipayContact = si) : t.publicInstance.onShareAppMessage && ii("setShowShareMenu", {
showShareMenu: !0
})
}),
An.on("afterShare", function(e) {
fi(e.data)
}),
An.on("onShare", function(e) {
var t = be();
ui.call(t, e)
});
var pi = An.callBridge
, di = An.callInternalAPI
, hi = "SDKVersion=" + yn;
x.addListener("pageLoad", function(e) {
var t = e.page
, n = g()
, r = n.chInfo
, o = n.app_startup_type
, i = n.appId;
or.trackerEnabled && pi("reportData", {
spm: a()({
chInfo: r
}, Cr(t.getPagePath())),
spmDetail: {
appId: i,
app_startup_type: o
}
})
}),
x.addListener("launch", function() {
pi("setTabBar", {
actionType: "enable"
}),
di("onAppPerfEvent", {
state: "appLoaded"
}),
di("setAppxVersion", {
appxVersion: yn
}),
pi("remoteLog", {
bizType: ur,
type: "behavior",
actionId: "event",
seedId: "app.launch",
param4: hi
})
}),
x.addListener("foreground", function(e) {
e && (e._scene || e.scene) && di("onAppPerfEvent", {
state: "appResume"
})
});
var gi = !1;
x.addListener("pageReady", function(e) {
var t = e.page
, n = {
state: "pageLoaded",
page: t.getPagePath()
};
gi ? n.loadTime = Date.now() - t.$startTime : gi = !0,
di("onAppPerfEvent", n)
}),
An.on("titleClick", function() {
var e = be();
e && e.publicInstance.onTitleClick && e.publicInstance.onTitleClick()
}),
An.on("firePullToRefresh", function(e) {
var t = be();
if (t) {
var n = (e.data || {}).from || "manual";
t.pullDownRefresh({
from: n
})
}
return !1
}),
An.on("pullIntercept", function() {
var e = be();
e && e.publicInstance.onPullIntercept && e.publicInstance.onPullIntercept()
});
var vi, mi = function(e, t) {
var n = {};
for (var r in e)
Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
var a = 0;
for (r = Object.getOwnPropertySymbols(e); a < r.length; a++)
t.indexOf(r[a]) < 0 && (n[r[a]] = e[r[a]])
}
return n
}, yi = An.callBridge, bi = An.callBridgeSync, wi = An.callInternalAPI, Ii = An.callInternalAPISync, Pi = Cn("10.1.35") >= 0, ki = Cn("10.1.50") >= 0, Ci = function() {}, Ai = Pi ? {
createCameraContext: function(e) {
return new Fn({
element: e,
page: be()
})
},
createLottieContext: function(e) {
return new ar({
element: e,
page: be()
})
}
} : {}, Ti = ki ? {
createLivePlayerContext: function(e) {
return new Gn({
element: e,
page: be()
})
},
createLivePusherContext: function(e) {
return new Qn({
element: e,
page: be()
})
}
} : {}, Si = self, Oi = Si.appXRuntimeConfig, Ei = void 0 === Oi ? {} : Oi, xi = ["openInBrowser", "internalAPI"];
function Mi() {
return Si.appXAppJson && Si.appXAppJson.app && Si.appXAppJson.app.ext
}
var _i = a()({}, un, {
SDKVersion: yn,
getExtConfigSync: function() {
if (g().templateApp) {
if (vi)
return vi;
var e = Ii("getExtConfig", {});
return vi = e.error ? null : e.data
}
return Mi()
},
getExtConfig: function(e) {
var t = e.success
, n = void 0 === t ? Ci : t
, r = e.complete
, a = void 0 === r ? Ci : r
, o = e.fail
, i = void 0 === o ? Ci : o;
if (g().templateApp) {
if (vi)
return n({
data: vi
}),
a({
data: vi
}),
vi;
wi("getExtConfig", {}, function(e) {
e.error ? i(e) : (vi = e.data,
n(e)),
a(e)
})
} else {
var c = Mi();
n({
data: c
}),
a({
data: c
})
}
},
navigateTo: function(e) {
(function(e) {
void 0 === e && (e = {});
var t = self.appXRuntimeConfig
, n = t && t.navigationStackLimits || 10;
if (ye().length >= n) {
var r = e
, a = r.fail
, o = r.complete
, i = {
error: 1,
errorMessage: "depth can not be more than " + n
};
return a && a(i),
o && o(i),
!0
}
return !1
}
)(e) || un.navigateTo(a()({}, e, {
viewId: Eo()
}))
},
canIUse: function(e) {
return function(e, t) {
var n = t.split(".");
if (function(t) {
for (var r = e, a = 0; a < t; a++)
r = 0 === a ? e && e[n[a]] : r && r[n[a]];
return r
}(n.length))
return !0;
var r = Ha;
if (!Ha[n[0]] && On(za).indexOf(n[0]) > -1) {
qa(za[n[0]]);
var a = n[0].split("-").map(function(e) {
return Sr(e)
}).join("");
if (global["AppX" + a]) {
var o = global["AppX" + a].canIUse;
Ha[n[0]] = "function" == typeof o ? o({
compareSystemVersion: Cn
}) : o
} else
console.error("component " + n[0] + "'s canIUse is invalid")
}
var i = n[0]
, c = !1;
if (["ap"].indexOf(n[0]) > -1 && n.length > 1 ? (Ha[n[0]] = Ha[n[0]] || {},
i = n[0] + "." + n[1],
c = !Ha[n[0]][n[1]]) : c = !Ha[n[0]],
c && On(Xa).indexOf(i) > -1) {
var s = Xa[i];
if (Cn(s.minVersion) < 0)
n.length > 1 ? Ha[n[0]][n[1]] = !1 : Ha[n[0]] = !1;
else {
qa(s.appId);
var l = i.split(".")[i.split(".").length - 1]
, u = global["AppX" + Sr(l)];
if (u) {
var f = u.canIUse;
"function" == typeof f && (f = f({
compareSystemVersion: Cn
})),
n.length > 1 ? Ha[n[0]][n[1]] = f : Ha[n[0]] = f
} else
console.error("API " + i + "'s canIUse is invalid")
}
}
for (var p = 0; p < n.length; p++)
if (!(r = r[n[p]]))
return !1;
return !0
}(_i, e)
}
}, yo, Co, mo, qo, $r, ta, qr, wr, {
createSelectorQuery: function(e) {
var t = (void 0 === e ? {} : e).page;
return new Ya(t)
}
}, co, Oo, Ta, ha, ba, ei, Do, {
loadFontFace: function(e) {
var t = e.page;
t && t.$viewId;
var n = e.success
, r = e.fail
, a = e.complete
, o = mi(e, ["success", "fail", "complete"]);
(t || be()).callRemote("bridge", "loadFontFace", o, function(e) {
n && n(e),
a && a(e)
}, function(e) {
r && r(e),
a && a(e)
})
},
createMapContext: function(e) {
return new Wn({
element: e,
page: be()
})
},
stopPullDownRefresh: function(e) {
var t;
void 0 === e && (e = {});
var n = e.page;
n && (t = {
viewId: n.$viewId
}),
yi("restorePullToRefresh", t),
function(e, t) {
void 0 === e && (e = {});
var n = e
, r = n.complete
, a = n.success
, o = n.fail;
t && t.error ? o && o(t) : a && a(t),
r && r(t)
}(e)
},
hideKeyboard: function(e) {
var t;
void 0 === e && (e = {});
var n = e.page;
n && (t = {
viewId: n.$viewId
}),
wi("hideCustomKeyBoard", t),
(n || be()).callRemote("bridge", "hideKeyboard")
}
}, Dn, Ai, Ti, {
__reportFrameworkPerf: function(e) {
wi("onAppPerfEvent", {
state: "workerFrameworkLoaded",
loadTime: e
})
},
reportCustomError: function(e) {
e.column,
e.line,
e.message,
e.sourceURL,
e.column,
e.line,
e.message,
e.sourceURL
},
call: function(e, t, n) {
if (void 0 === t && (t = {}),
"reportData" == e && t && t.spm && "object" == typeof t.spm && yi("pageMonitor", {
actionType: "end"
}),
!1 === Ei.blacklistAPI || -1 === xi.indexOf(e)) {
var r = t
, o = n;
"function" == typeof r && (o = r,
r = {});
var i = a()({}, r);
i.page && (i.viewId = i.page.$viewId,
delete i.page),
i.success && delete i.success,
i.fail && delete i.fail,
i.complete && delete i.complete,
yi(e, i, function(e) {
e && e.error ? r.fail && r.fail(e) : r.success && r.success(e),
r.complete && r.complete(e),
o && o(e)
})
}
}
});
!function(e) {
An.on("nbcomponent.webview.onFromMessage", function(t) {
var n = t.viewId
, r = t.data
, o = r.callback
, i = r.type
, c = r.param
, s = r.element;
if (["navigateTo", "navigateBack", "switchTab", "reLaunch", "redirectTo", "getLocation"].indexOf(i) > -1) {
var l = a()({}, c, {
complete: function(e) {
An.callBridge("NBComponent.sendMessage", {
actionType: "postMessage",
viewId: n,
element: s,
data: {
callback: o,
res: {
type: "response",
res: e
}
}
})
}
});
e[i](l)
}
"webViewShare" === i && xo("startShare", {
bizType: "H5App_DD",
sendEvent: !0
})
}),
e.createWebViewContext = function(e) {
var t = Eo();
return {
postMessage: function(n) {
An.callBridge("NBComponent.sendMessage", {
actionType: "postMessage",
viewId: t,
element: e,
data: {
res: {
type: "message",
data: JSON.stringify(n)
}
}
})
}
}
}
}(_i),
p(Xa).forEach(function(e) {
var t = Xa[e];
if (!(Cn(t.minVersion) < 0)) {
var n = e.split(".")
, r = 2 === n.length ? n[0] : void 0
, a = 2 === n.length ? n[1] : n[0]
, o = _i;
r && (o = _i[r] || {}),
Object.defineProperty(o, a, {
enumerable: !0,
value: function(n) {
var r = Sr(a);
Si["AppX" + r] ? Si["AppX" + r](n, {
callBridge: yi,
callBridgeSync: bi
}) : (qa(t.appId || ""),
Si["AppX" + r] ? Si["AppX" + r](n, {
callBridge: yi,
callBridgeSync: bi
}) : console.error("API my." + e + " not found"))
}
})
}
}),
_i = function(e) {
var t = ["canIUse", "postMessage", "call", "createAnimation", "createMapContext", "pageScrollTo", "createCanvasContext", "createAudioContext", "createVideoContext", "reportAnalytics", "on", "emit"];
return On(e).reduce(function(n, r) {
return -1 === t.indexOf(r) && "function" == typeof e[r] ? n[r] = function() {
var t = arguments.length <= 0 ? void 0 : arguments[0];
if ("object" != typeof t)
return e[r].apply(e, arguments);
var n = a()({}, t);
if (delete n.fail,
delete n.success,
function(e) {
ja(e, "call"),
Na()
}(r),
/^.+Sync$/.test(r)) {
var o = e[r].call(e, t) || {};
if (o.error || o.errorMessage) {
if (Fa(o))
return o;
Ua(r, n, o),
$a(r, o)
} else
La(r);
return o
}
var i = (t = t || {}).success;
t.success = function(e) {
void 0 === e && (e = {}),
La(r),
"function" == typeof i && i(e)
}
;
var c = t.fail;
return t.fail = function(e) {
void 0 === e && (e = {}),
Fa(e) || (Ua(r, n, e),
$a(r, e)),
"function" == typeof c && c(e)
}
,
e[r](t)
}
: n[r] = e[r],
n
}, {})
}(_i),
console.log("ap/SDKVersion: " + yn),
D.bridge = _i;
var Bi = _i
, Di = Bi;
n.d(t, "bridge", function() {
return Bi
}),
n.d(t, "abridge", function() {
return Di
}),
n.d(t, "EventHub", function() {
return x
}),
n.d(t, "getApp", function() {
return he
}),
n.d(t, "App", function() {
return ge
}),
n.d(t, "getCurrentPagesImpl", function() {
return ye
}),
n.d(t, "getCurrentPageImpl", function() {
return be
}),
n.d(t, "getCurrentPages", function() {
return we
}),
n.d(t, "getAppImpl", function() {
return Ie
}),
n.d(t, "getStartupParams", function() {
return g
}),
n.d(t, "setStartupParams", function() {
return v
}),
n.d(t, "WorkerComponent", function() {
return at
}),
n.d(t, "Page", function() {
return pt
}),
n.d(t, "$global", function() {
return D
})
}
])
, __appxCosts = Date.now() - __appxStartTime;
AFAppX.bridge.__reportFrameworkPerf(__appxCosts),
console.log("framework: worker bundle costs " + __appxCosts + " ms");
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 0);
/******/ })
/************************************************************************/
/******/ ({
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/object/assign.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/object/assign.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(/*! core-js/library/fn/object/assign */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/object/assign.js"), __esModule: true };
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol.js":
/*!************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol.js ***!
\************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(/*! core-js/library/fn/symbol */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/index.js"), __esModule: true };
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol/iterator.js":
/*!*********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol/iterator.js ***!
\*********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(/*! core-js/library/fn/symbol/iterator */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/iterator.js"), __esModule: true };
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/extends.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/extends.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _assign = __webpack_require__(/*! ../core-js/object/assign */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/object/assign.js");
var _assign2 = _interopRequireDefault(_assign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _assign2.default || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/typeof.js":
/*!************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/typeof.js ***!
\************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _iterator = __webpack_require__(/*! ../core-js/symbol/iterator */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol/iterator.js");
var _iterator2 = _interopRequireDefault(_iterator);
var _symbol = __webpack_require__(/*! ../core-js/symbol */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/core-js/symbol.js");
var _symbol2 = _interopRequireDefault(_symbol);
var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof(obj);
} : function (obj) {
return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/object/assign.js":
/*!****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/object/assign.js ***!
\****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! ../../modules/es6.object.assign */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.assign.js");
module.exports = __webpack_require__(/*! ../../modules/$.core */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.core.js").Object.assign;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/index.js":
/*!***************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/index.js ***!
\***************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! ../../modules/es6.symbol */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.symbol.js");
__webpack_require__(/*! ../../modules/es6.object.to-string */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.to-string.js");
module.exports = __webpack_require__(/*! ../../modules/$.core */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.core.js").Symbol;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/iterator.js":
/*!******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/fn/symbol/iterator.js ***!
\******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! ../../modules/es6.string.iterator */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.string.iterator.js");
__webpack_require__(/*! ../../modules/web.dom.iterable */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/web.dom.iterable.js");
module.exports = __webpack_require__(/*! ../../modules/$.wks */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js")('iterator');
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.a-function.js":
/*!********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.a-function.js ***!
\********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(it){
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
return it;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.add-to-unscopables.js":
/*!****************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.add-to-unscopables.js ***!
\****************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(){ /* empty */ };
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.an-object.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.an-object.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(/*! ./$.is-object */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-object.js");
module.exports = function(it){
if(!isObject(it))throw TypeError(it + ' is not an object!');
return it;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.cof.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.cof.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var toString = {}.toString;
module.exports = function(it){
return toString.call(it).slice(8, -1);
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.core.js":
/*!**************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.core.js ***!
\**************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var core = module.exports = {version: '1.2.6'};
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.ctx.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.ctx.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// optional / simple context binding
var aFunction = __webpack_require__(/*! ./$.a-function */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.a-function.js");
module.exports = function(fn, that, length){
aFunction(fn);
if(that === undefined)return fn;
switch(length){
case 1: return function(a){
return fn.call(that, a);
};
case 2: return function(a, b){
return fn.call(that, a, b);
};
case 3: return function(a, b, c){
return fn.call(that, a, b, c);
};
}
return function(/* ...args */){
return fn.apply(that, arguments);
};
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.defined.js":
/*!*****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.defined.js ***!
\*****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
// 7.2.1 RequireObjectCoercible(argument)
module.exports = function(it){
if(it == undefined)throw TypeError("Can't call method on " + it);
return it;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.descriptors.js":
/*!*********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.descriptors.js ***!
\*********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(/*! ./$.fails */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.fails.js")(function(){
return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
});
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.enum-keys.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.enum-keys.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// all enumerable object keys, includes symbols
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js");
module.exports = function(it){
var keys = $.getKeys(it)
, getSymbols = $.getSymbols;
if(getSymbols){
var symbols = getSymbols(it)
, isEnum = $.isEnum
, i = 0
, key;
while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key);
}
return keys;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.export.js":
/*!****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.export.js ***!
\****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var global = __webpack_require__(/*! ./$.global */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js")
, core = __webpack_require__(/*! ./$.core */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.core.js")
, ctx = __webpack_require__(/*! ./$.ctx */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.ctx.js")
, PROTOTYPE = 'prototype';
var $export = function(type, name, source){
var IS_FORCED = type & $export.F
, IS_GLOBAL = type & $export.G
, IS_STATIC = type & $export.S
, IS_PROTO = type & $export.P
, IS_BIND = type & $export.B
, IS_WRAP = type & $export.W
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
, key, own, out;
if(IS_GLOBAL)source = name;
for(key in source){
// contains in native
own = !IS_FORCED && target && key in target;
if(own && key in exports)continue;
// export native or passed
out = own ? target[key] : source[key];
// prevent global pollution for namespaces
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
// bind timers to global for call from export context
: IS_BIND && own ? ctx(out, global)
// wrap global constructors for prevent change them in library
: IS_WRAP && target[key] == out ? (function(C){
var F = function(param){
return this instanceof C ? new C(param) : C(param);
};
F[PROTOTYPE] = C[PROTOTYPE];
return F;
// make static versions for prototype methods
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
}
};
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
$export.S = 4; // static
$export.P = 8; // proto
$export.B = 16; // bind
$export.W = 32; // wrap
module.exports = $export;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.fails.js":
/*!***************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.fails.js ***!
\***************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(exec){
try {
return !!exec();
} catch(e){
return true;
}
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.get-names.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.get-names.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
var toIObject = __webpack_require__(/*! ./$.to-iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js")
, getNames = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js").getNames
, toString = {}.toString;
var windowNames = typeof window == 'object' && Object.getOwnPropertyNames
? Object.getOwnPropertyNames(window) : [];
var getWindowNames = function(it){
try {
return getNames(it);
} catch(e){
return windowNames.slice();
}
};
module.exports.get = function getOwnPropertyNames(it){
if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it);
return getNames(toIObject(it));
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js":
/*!****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js ***!
\****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.has.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.has.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var hasOwnProperty = {}.hasOwnProperty;
module.exports = function(it, key){
return hasOwnProperty.call(it, key);
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.hide.js":
/*!**************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.hide.js ***!
\**************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js")
, createDesc = __webpack_require__(/*! ./$.property-desc */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.property-desc.js");
module.exports = __webpack_require__(/*! ./$.descriptors */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.descriptors.js") ? function(object, key, value){
return $.setDesc(object, key, createDesc(1, value));
} : function(object, key, value){
object[key] = value;
return object;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iobject.js":
/*!*****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iobject.js ***!
\*****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(/*! ./$.cof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.cof.js");
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
return cof(it) == 'String' ? it.split('') : Object(it);
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-array.js":
/*!******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-array.js ***!
\******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// 7.2.2 IsArray(argument)
var cof = __webpack_require__(/*! ./$.cof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.cof.js");
module.exports = Array.isArray || function(arg){
return cof(arg) == 'Array';
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-object.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-object.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(it){
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-create.js":
/*!*********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-create.js ***!
\*********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js")
, descriptor = __webpack_require__(/*! ./$.property-desc */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.property-desc.js")
, setToStringTag = __webpack_require__(/*! ./$.set-to-string-tag */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.set-to-string-tag.js")
, IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__(/*! ./$.hide */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.hide.js")(IteratorPrototype, __webpack_require__(/*! ./$.wks */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js")('iterator'), function(){ return this; });
module.exports = function(Constructor, NAME, next){
Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)});
setToStringTag(Constructor, NAME + ' Iterator');
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-define.js":
/*!*********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-define.js ***!
\*********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var LIBRARY = __webpack_require__(/*! ./$.library */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.library.js")
, $export = __webpack_require__(/*! ./$.export */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.export.js")
, redefine = __webpack_require__(/*! ./$.redefine */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.redefine.js")
, hide = __webpack_require__(/*! ./$.hide */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.hide.js")
, has = __webpack_require__(/*! ./$.has */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.has.js")
, Iterators = __webpack_require__(/*! ./$.iterators */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iterators.js")
, $iterCreate = __webpack_require__(/*! ./$.iter-create */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-create.js")
, setToStringTag = __webpack_require__(/*! ./$.set-to-string-tag */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.set-to-string-tag.js")
, getProto = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js").getProto
, ITERATOR = __webpack_require__(/*! ./$.wks */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js")('iterator')
, BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
, FF_ITERATOR = '@@iterator'
, KEYS = 'keys'
, VALUES = 'values';
var returnThis = function(){ return this; };
module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
$iterCreate(Constructor, NAME, next);
var getMethod = function(kind){
if(!BUGGY && kind in proto)return proto[kind];
switch(kind){
case KEYS: return function keys(){ return new Constructor(this, kind); };
case VALUES: return function values(){ return new Constructor(this, kind); };
} return function entries(){ return new Constructor(this, kind); };
};
var TAG = NAME + ' Iterator'
, DEF_VALUES = DEFAULT == VALUES
, VALUES_BUG = false
, proto = Base.prototype
, $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
, $default = $native || getMethod(DEFAULT)
, methods, key;
// Fix native
if($native){
var IteratorPrototype = getProto($default.call(new Base));
// Set @@toStringTag to native iterators
setToStringTag(IteratorPrototype, TAG, true);
// FF fix
if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
// fix Array#{values, @@iterator}.name in V8 / FF
if(DEF_VALUES && $native.name !== VALUES){
VALUES_BUG = true;
$default = function values(){ return $native.call(this); };
}
}
// Define iterator
if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
hide(proto, ITERATOR, $default);
}
// Plug for library
Iterators[NAME] = $default;
Iterators[TAG] = returnThis;
if(DEFAULT){
methods = {
values: DEF_VALUES ? $default : getMethod(VALUES),
keys: IS_SET ? $default : getMethod(KEYS),
entries: !DEF_VALUES ? $default : getMethod('entries')
};
if(FORCED)for(key in methods){
if(!(key in proto))redefine(proto, key, methods[key]);
} else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
}
return methods;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-step.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-step.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(done, value){
return {value: value, done: !!done};
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iterators.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iterators.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = {};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js":
/*!*********************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js ***!
\*********************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var $Object = Object;
module.exports = {
create: $Object.create,
getProto: $Object.getPrototypeOf,
isEnum: {}.propertyIsEnumerable,
getDesc: $Object.getOwnPropertyDescriptor,
setDesc: $Object.defineProperty,
setDescs: $Object.defineProperties,
getKeys: $Object.keys,
getNames: $Object.getOwnPropertyNames,
getSymbols: $Object.getOwnPropertySymbols,
each: [].forEach
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.keyof.js":
/*!***************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.keyof.js ***!
\***************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js")
, toIObject = __webpack_require__(/*! ./$.to-iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js");
module.exports = function(object, el){
var O = toIObject(object)
, keys = $.getKeys(O)
, length = keys.length
, index = 0
, key;
while(length > index)if(O[key = keys[index++]] === el)return key;
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.library.js":
/*!*****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.library.js ***!
\*****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = true;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.object-assign.js":
/*!***********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.object-assign.js ***!
\***********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// 19.1.2.1 Object.assign(target, source, ...)
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js")
, toObject = __webpack_require__(/*! ./$.to-object */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-object.js")
, IObject = __webpack_require__(/*! ./$.iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iobject.js");
// should work with symbols and should have deterministic property order (V8 bug)
module.exports = __webpack_require__(/*! ./$.fails */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.fails.js")(function(){
var a = Object.assign
, A = {}
, B = {}
, S = Symbol()
, K = 'abcdefghijklmnopqrst';
A[S] = 7;
K.split('').forEach(function(k){ B[k] = k; });
return a({}, A)[S] != 7 || Object.keys(a({}, B)).join('') != K;
}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
var T = toObject(target)
, $$ = arguments
, $$len = $$.length
, index = 1
, getKeys = $.getKeys
, getSymbols = $.getSymbols
, isEnum = $.isEnum;
while($$len > index){
var S = IObject($$[index++])
, keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
, length = keys.length
, j = 0
, key;
while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
}
return T;
} : Object.assign;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.property-desc.js":
/*!***********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.property-desc.js ***!
\***********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = function(bitmap, value){
return {
enumerable : !(bitmap & 1),
configurable: !(bitmap & 2),
writable : !(bitmap & 4),
value : value
};
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.redefine.js":
/*!******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.redefine.js ***!
\******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! ./$.hide */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.hide.js");
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.set-to-string-tag.js":
/*!***************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.set-to-string-tag.js ***!
\***************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var def = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js").setDesc
, has = __webpack_require__(/*! ./$.has */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.has.js")
, TAG = __webpack_require__(/*! ./$.wks */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js")('toStringTag');
module.exports = function(it, tag, stat){
if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.shared.js":
/*!****************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.shared.js ***!
\****************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var global = __webpack_require__(/*! ./$.global */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js")
, SHARED = '__core-js_shared__'
, store = global[SHARED] || (global[SHARED] = {});
module.exports = function(key){
return store[key] || (store[key] = {});
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.string-at.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.string-at.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var toInteger = __webpack_require__(/*! ./$.to-integer */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-integer.js")
, defined = __webpack_require__(/*! ./$.defined */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.defined.js");
// true -> String#at
// false -> String#codePointAt
module.exports = function(TO_STRING){
return function(that, pos){
var s = String(defined(that))
, i = toInteger(pos)
, l = s.length
, a, b;
if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
a = s.charCodeAt(i);
return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
? TO_STRING ? s.charAt(i) : a
: TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
};
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-integer.js":
/*!********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-integer.js ***!
\********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
// 7.1.4 ToInteger
var ceil = Math.ceil
, floor = Math.floor;
module.exports = function(it){
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js":
/*!********************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js ***!
\********************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(/*! ./$.iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iobject.js")
, defined = __webpack_require__(/*! ./$.defined */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.defined.js");
module.exports = function(it){
return IObject(defined(it));
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-object.js":
/*!*******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-object.js ***!
\*******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// 7.1.13 ToObject(argument)
var defined = __webpack_require__(/*! ./$.defined */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.defined.js");
module.exports = function(it){
return Object(defined(it));
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.uid.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.uid.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var id = 0
, px = Math.random();
module.exports = function(key){
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js":
/*!*************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js ***!
\*************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
var store = __webpack_require__(/*! ./$.shared */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.shared.js")('wks')
, uid = __webpack_require__(/*! ./$.uid */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.uid.js")
, Symbol = __webpack_require__(/*! ./$.global */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js").Symbol;
module.exports = function(name){
return store[name] || (store[name] =
Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name));
};
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.array.iterator.js":
/*!**************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.array.iterator.js ***!
\**************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var addToUnscopables = __webpack_require__(/*! ./$.add-to-unscopables */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.add-to-unscopables.js")
, step = __webpack_require__(/*! ./$.iter-step */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-step.js")
, Iterators = __webpack_require__(/*! ./$.iterators */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iterators.js")
, toIObject = __webpack_require__(/*! ./$.to-iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js");
// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__(/*! ./$.iter-define */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-define.js")(Array, 'Array', function(iterated, kind){
this._t = toIObject(iterated); // target
this._i = 0; // next index
this._k = kind; // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function(){
var O = this._t
, kind = this._k
, index = this._i++;
if(!O || index >= O.length){
this._t = undefined;
return step(1);
}
if(kind == 'keys' )return step(0, index);
if(kind == 'values')return step(0, O[index]);
return step(0, [index, O[index]]);
}, 'values');
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.assign.js":
/*!*************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.assign.js ***!
\*************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__(/*! ./$.export */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.export.js");
$export($export.S + $export.F, 'Object', {assign: __webpack_require__(/*! ./$.object-assign */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.object-assign.js")});
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.to-string.js":
/*!****************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.object.to-string.js ***!
\****************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.string.iterator.js":
/*!***************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.string.iterator.js ***!
\***************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var $at = __webpack_require__(/*! ./$.string-at */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.string-at.js")(true);
// 21.1.3.27 String.prototype[@@iterator]()
__webpack_require__(/*! ./$.iter-define */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iter-define.js")(String, 'String', function(iterated){
this._t = String(iterated); // target
this._i = 0; // next index
// 21.1.5.2.1 %StringIteratorPrototype%.next()
}, function(){
var O = this._t
, index = this._i
, point;
if(index >= O.length)return {value: undefined, done: true};
point = $at(O, index);
this._i += point.length;
return {value: point, done: false};
});
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.symbol.js":
/*!******************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.symbol.js ***!
\******************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// ECMAScript 6 symbols shim
var $ = __webpack_require__(/*! ./$ */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.js")
, global = __webpack_require__(/*! ./$.global */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.global.js")
, has = __webpack_require__(/*! ./$.has */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.has.js")
, DESCRIPTORS = __webpack_require__(/*! ./$.descriptors */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.descriptors.js")
, $export = __webpack_require__(/*! ./$.export */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.export.js")
, redefine = __webpack_require__(/*! ./$.redefine */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.redefine.js")
, $fails = __webpack_require__(/*! ./$.fails */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.fails.js")
, shared = __webpack_require__(/*! ./$.shared */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.shared.js")
, setToStringTag = __webpack_require__(/*! ./$.set-to-string-tag */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.set-to-string-tag.js")
, uid = __webpack_require__(/*! ./$.uid */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.uid.js")
, wks = __webpack_require__(/*! ./$.wks */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.wks.js")
, keyOf = __webpack_require__(/*! ./$.keyof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.keyof.js")
, $names = __webpack_require__(/*! ./$.get-names */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.get-names.js")
, enumKeys = __webpack_require__(/*! ./$.enum-keys */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.enum-keys.js")
, isArray = __webpack_require__(/*! ./$.is-array */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.is-array.js")
, anObject = __webpack_require__(/*! ./$.an-object */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.an-object.js")
, toIObject = __webpack_require__(/*! ./$.to-iobject */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.to-iobject.js")
, createDesc = __webpack_require__(/*! ./$.property-desc */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.property-desc.js")
, getDesc = $.getDesc
, setDesc = $.setDesc
, _create = $.create
, getNames = $names.get
, $Symbol = global.Symbol
, $JSON = global.JSON
, _stringify = $JSON && $JSON.stringify
, setter = false
, HIDDEN = wks('_hidden')
, isEnum = $.isEnum
, SymbolRegistry = shared('symbol-registry')
, AllSymbols = shared('symbols')
, useNative = typeof $Symbol == 'function'
, ObjectProto = Object.prototype;
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
var setSymbolDesc = DESCRIPTORS && $fails(function(){
return _create(setDesc({}, 'a', {
get: function(){ return setDesc(this, 'a', {value: 7}).a; }
})).a != 7;
}) ? function(it, key, D){
var protoDesc = getDesc(ObjectProto, key);
if(protoDesc)delete ObjectProto[key];
setDesc(it, key, D);
if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc);
} : setDesc;
var wrap = function(tag){
var sym = AllSymbols[tag] = _create($Symbol.prototype);
sym._k = tag;
DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, {
configurable: true,
set: function(value){
if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
setSymbolDesc(this, tag, createDesc(1, value));
}
});
return sym;
};
var isSymbol = function(it){
return typeof it == 'symbol';
};
var $defineProperty = function defineProperty(it, key, D){
if(D && has(AllSymbols, key)){
if(!D.enumerable){
if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {}));
it[HIDDEN][key] = true;
} else {
if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
D = _create(D, {enumerable: createDesc(0, false)});
} return setSymbolDesc(it, key, D);
} return setDesc(it, key, D);
};
var $defineProperties = function defineProperties(it, P){
anObject(it);
var keys = enumKeys(P = toIObject(P))
, i = 0
, l = keys.length
, key;
while(l > i)$defineProperty(it, key = keys[i++], P[key]);
return it;
};
var $create = function create(it, P){
return P === undefined ? _create(it) : $defineProperties(_create(it), P);
};
var $propertyIsEnumerable = function propertyIsEnumerable(key){
var E = isEnum.call(this, key);
return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key]
? E : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
var D = getDesc(it = toIObject(it), key);
if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
return D;
};
var $getOwnPropertyNames = function getOwnPropertyNames(it){
var names = getNames(toIObject(it))
, result = []
, i = 0
, key;
while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key);
return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
var names = getNames(toIObject(it))
, result = []
, i = 0
, key;
while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]);
return result;
};
var $stringify = function stringify(it){
if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
var args = [it]
, i = 1
, $$ = arguments
, replacer, $replacer;
while($$.length > i)args.push($$[i++]);
replacer = args[1];
if(typeof replacer == 'function')$replacer = replacer;
if($replacer || !isArray(replacer))replacer = function(key, value){
if($replacer)value = $replacer.call(this, key, value);
if(!isSymbol(value))return value;
};
args[1] = replacer;
return _stringify.apply($JSON, args);
};
var buggyJSON = $fails(function(){
var S = $Symbol();
// MS Edge converts symbol values to JSON as {}
// WebKit converts symbol values to JSON as null
// V8 throws on boxed symbols
return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
});
// 19.4.1.1 Symbol([description])
if(!useNative){
$Symbol = function Symbol(){
if(isSymbol(this))throw TypeError('Symbol is not a constructor');
return wrap(uid(arguments.length > 0 ? arguments[0] : undefined));
};
redefine($Symbol.prototype, 'toString', function toString(){
return this._k;
});
isSymbol = function(it){
return it instanceof $Symbol;
};
$.create = $create;
$.isEnum = $propertyIsEnumerable;
$.getDesc = $getOwnPropertyDescriptor;
$.setDesc = $defineProperty;
$.setDescs = $defineProperties;
$.getNames = $names.get = $getOwnPropertyNames;
$.getSymbols = $getOwnPropertySymbols;
if(DESCRIPTORS && !__webpack_require__(/*! ./$.library */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.library.js")){
redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
}
}
var symbolStatics = {
// 19.4.2.1 Symbol.for(key)
'for': function(key){
return has(SymbolRegistry, key += '')
? SymbolRegistry[key]
: SymbolRegistry[key] = $Symbol(key);
},
// 19.4.2.5 Symbol.keyFor(sym)
keyFor: function keyFor(key){
return keyOf(SymbolRegistry, key);
},
useSetter: function(){ setter = true; },
useSimple: function(){ setter = false; }
};
// 19.4.2.2 Symbol.hasInstance
// 19.4.2.3 Symbol.isConcatSpreadable
// 19.4.2.4 Symbol.iterator
// 19.4.2.6 Symbol.match
// 19.4.2.8 Symbol.replace
// 19.4.2.9 Symbol.search
// 19.4.2.10 Symbol.species
// 19.4.2.11 Symbol.split
// 19.4.2.12 Symbol.toPrimitive
// 19.4.2.13 Symbol.toStringTag
// 19.4.2.14 Symbol.unscopables
$.each.call((
'hasInstance,isConcatSpreadable,iterator,match,replace,search,' +
'species,split,toPrimitive,toStringTag,unscopables'
).split(','), function(it){
var sym = wks(it);
symbolStatics[it] = useNative ? sym : wrap(sym);
});
setter = true;
$export($export.G + $export.W, {Symbol: $Symbol});
$export($export.S, 'Symbol', symbolStatics);
$export($export.S + $export.F * !useNative, 'Object', {
// 19.1.2.2 Object.create(O [, Properties])
create: $create,
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
defineProperty: $defineProperty,
// 19.1.2.3 Object.defineProperties(O, Properties)
defineProperties: $defineProperties,
// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
// 19.1.2.7 Object.getOwnPropertyNames(O)
getOwnPropertyNames: $getOwnPropertyNames,
// 19.1.2.8 Object.getOwnPropertySymbols(O)
getOwnPropertySymbols: $getOwnPropertySymbols
});
// 24.3.2 JSON.stringify(value [, replacer [, space]])
$JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify});
// 19.4.3.5 Symbol.prototype[@@toStringTag]
setToStringTag($Symbol, 'Symbol');
// 20.2.1.9 Math[@@toStringTag]
setToStringTag(Math, 'Math', true);
// 24.3.3 JSON[@@toStringTag]
setToStringTag(global.JSON, 'JSON', true);
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/web.dom.iterable.js":
/*!************************************************************************************************************************************************!*\
!*** c:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/web.dom.iterable.js ***!
\************************************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
__webpack_require__(/*! ./es6.array.iterator */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/es6.array.iterator.js");
var Iterators = __webpack_require__(/*! ./$.iterators */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/core-js/library/modules/$.iterators.js");
Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array;
/***/ }),
/***/ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/webpack/buildin/global.js":
/*!******************************************************************************************************************************!*\
!*** C:/Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/webpack/buildin/global.js ***!
\******************************************************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || new Function("return this")();
} catch (e) {
// This works if the window reference is available
if (typeof window === "object") g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/***/ "./.tea/entryFiles-development/config$.js":
/*!************************************************!*\
!*** ./.tea/entryFiles-development/config$.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(global) {
var g = typeof global !== 'undefined' ? global : self;
g.appXRuntimeConfig = {};
g.appXAppJson = {
"app": {
"$homepage": "pages/todos/todos"
}
};
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/webpack/buildin/global.js */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/webpack/buildin/global.js")))
/***/ }),
/***/ "./.tea/entryFiles-development/index$.worker.js":
/*!******************************************************!*\
!*** ./.tea/entryFiles-development/index$.worker.js ***!
\******************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/extends.js");
var _extends3 = _interopRequireDefault(_extends2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var IDE_HACK_CODE = { X: 1 };var IDE_HACK_CODE_BACK = (0, _extends3.default)({}, IDE_HACK_CODE);
__webpack_require__(/*! ./config$ */ "./.tea/entryFiles-development/config$.js");
function success() {
__webpack_require__(/*! ../..//app */ "./app.js");
__webpack_require__(/*! ../../components/add-button/add-button */ "./components/add-button/add-button.js");
__webpack_require__(/*! ../../pages/plugin-comzbadge/index */ "./pages/plugin-comzbadge/index.js");
__webpack_require__(/*! ../../pages/plugin-comzloading/index */ "./pages/plugin-comzloading/index.js");
__webpack_require__(/*! ../../pages/todos/todos */ "./pages/todos/todos.js");
__webpack_require__(/*! ../../pages/add-todo/add-todo */ "./pages/add-todo/add-todo.js");
__webpack_require__(/*! ../../pages/account-login/index */ "./pages/account-login/index.js");
__webpack_require__(/*! ../../pages/plugin-debug/index */ "./pages/plugin-debug/index.js");
}
self.bootstrapApp ? self.bootstrapApp({ success: success }) : success();
/***/ }),
/***/ "./app.js":
/*!****************!*\
!*** ./app.js ***!
\****************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;(0, _afAppx.App)({
todos: [{ text: 'Learning Javascript', completed: true }, { text: 'Learning ES2016', completed: true }, { text: 'Learning 支付宝小程序', completed: false }],
userInfo: null,
getUserInfo: function getUserInfo() {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this.userInfo) resolve(_this.userInfo);
my.getAuthCode({
scopes: ['auth_user'],
success: function success(authcode) {
console.info(authcode);
my.getAuthUserInfo({
success: function success(res) {
_this.userInfo = res;
resolve(_this.userInfo);
},
fail: function fail() {
reject({});
}
});
},
fail: function fail() {
reject({});
}
});
});
}
});
/***/ }),
/***/ "./components/add-button/add-button.js":
/*!*********************************************!*\
!*** ./components/add-button/add-button.js ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var Component = _afAppx.WorkerComponent || function () {};
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentComponentConfig = { "is": "/components/add-button/add-button", "usingComponents": {} };
Component({
props: {
text: 'Button',
onClickMe: function onClickMe() {}
},
methods: {
onClickMe: function onClickMe() {
this.props.onClickMe();
}
}
});
/***/ }),
/***/ "./components/shared/wacomponent.js":
/*!******************************************!*\
!*** ./components/shared/wacomponent.js ***!
\******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _typeof2 = __webpack_require__(/*! babel-runtime/helpers/typeof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/typeof.js");
var _typeof3 = _interopRequireDefault(_typeof2);
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
'use strict';
module.exports = function WAComponent(factory) {
var optionMap = {
hehaviors: 'mixins',
data: 'data',
properties: 'props',
methods: 'methods',
attached: 'didMount',
moved: 'didUpdate',
detached: 'didUnmount',
relations: 'relations', // *这个要特殊处理
externalClasses: false // 这个支持不了 aliapp用不了动态 class
// 这些 vant 没有用到
// observers
// created
// ready
// lifetimes
// pageLifetimes
// definitionFilter
};
var transformerMap = {
properties: transformProps,
relations: transformRelations,
fallback: function fallback(x) {
return x;
}
};
function transformProps(properties) {
var props = {};
var candidate = undefined;
Object.keys(properties).forEach(function itor(key) {
candidate = properties[key];
if ((typeof candidate === 'undefined' ? 'undefined' : (0, _typeof3.default)(candidate)) === 'object') {
props[key] = candidate.value;
} else {
props[key] = candidate;
}
});
return props;
}
function transformRelations() {
// TODO: @sy
// 基本上所有组件都用到了,见
// https://gist.github.com/somarlyonks/94b7696604a52553cf1976f4ad15ac45
// 所以最好还是能实现 relations
// getRelationNodes TODO: @sy 注册 child 和data
}
function mapOptions(options, _map) {
var ret = {};
var transformer = transformerMap.fallback;
Object.keys(options).forEach(function itor(key) {
var targetKey = _map[key] || key;
var transformer = transformerMap[key] || transformerMap.fallback;
ret[targetKey] = transformer(options[key]);
});
console.log('options', ret);
return ret;
}
return function Component(options) {
var component = factory(mapOptions(options, optionMap));
console.log('factory', factory);
return component;
};
};
/***/ }),
/***/ "./pages/account-login/index.js":
/*!**************************************!*\
!*** ./pages/account-login/index.js ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentPageConfig = { "pagePath": "pages/account-login/index", "usingComponents": {} };
/* global getApp,Page,my */
/* eslint-disable camelcase */
/*
注意
- 这个插件是从微信小程序重构到百度小程序再重构到支付宝小程序
- 目前以 swan 作为宿主对象
*/
var swan = my;
var DwUtils = __webpack_require__(/*! ../../utils/dw */ "./utils/dw.js").DwUtils;
var appConfig = __webpack_require__(/*! ../../utils/config */ "./utils/config.js");
// var WxParse = require('../../wxParse/wxParse.js');
var app = (0, _afAppx.getApp)();
(0, _afAppx.Page)({
data: {
userInfo: {},
invitationUserInfo: {},
isLogin: false,
usernamePlaceholder: '用户名/邮箱/手机号',
siteuserData: null,
term: {},
showTerm: false,
getUserInfoSuccess: false,
loginResponse: {},
tabs: [
// { index: 0, name: '授权登录', key: 'allow_auth_dwapp' },
{ index: 1, name: '用户名登录', key: 'allow_username_dwapp' }, { index: 2, name: '手机登录', key: 'allow_mobile_dwapp' }],
activeIndex: 1,
sliderOffset: 0,
sliderLeft: 0,
mobile: '',
lock: false,
timer: 60,
timerStart: false,
currentView: 'usernameLogin',
invitation_code: ''
},
onLoad: function onLoad(options) {
var that = this;
if (options.invitation_code) {
that.setData({
invitation_code: options.invitation_code
});
}
this.resetSlider();
},
resetSlider: function resetSlider() {
var that = this;
swan.getSystemInfo({
success: function success(res) {
var sliderWidth = that.data.tabs.length === 3 ? 112 : 100;
that.setData({
sliderLeft: (res.windowWidth / that.data.tabs.length - sliderWidth) / 2,
sliderOffset: res.windowWidth / that.data.tabs.length * (that.data.activeIndex - 1)
});
}
});
},
loginWithOpenid: function loginWithOpenid() {
//
},
onShow: function onShow() {
var vm = this;
var installation = swan.getStorageSync('dwapp:installation') || {};
if (installation.siteuser_token) {
vm.setData({
isLogin: true,
getUserInfoSuccess: true
});
app.getCachedUserInfo(function (userInfo) {
vm.setData({
userInfo: userInfo
});
});
} else {
vm.setData({
getUserInfoSuccess: true
});
if (my) {
// TODO
return;
}
swan.showLoading({
title: '登录中...',
mask: true
});
app.getUserInfo(function (userInfo, login_data, user_data) {
vm.setData({
getUserInfoSuccess: true,
userInfo: userInfo
});
if (!installation.siteuser_token) {
vm.afterLoginAndGetUserInfo(login_data, user_data);
} else {
swan.hideLoading();
}
}, function () {
console.log('app.getUserInfo fail');
swan.login({
withCredentials: true,
success: function success(loginResponse) {
swan.hideLoading();
vm.setData({ loginResponse: loginResponse });
}
});
});
}
var data = {
invitation_code: vm.data.invitation_code,
page_id: appConfig.page.id
};
DwUtils.request('get/company_account/get_dwapp_login_data', data).then(function (response) {
var dshareconfig = response.data.dshareconfig;
var tabs = vm.data.tabs.filter(function (i) {
return dshareconfig[i.key];
});
var activeIndex = tabs.length ? tabs[0].index : 0;
vm.setData({
term: response.data.term,
invitationUserInfo: response.data.invitation_user,
siteuserData: response.data.profile.id ? response.data.profile : null,
// tabs: tabs,
activeIndex: tabs.length ? tabs[0].index : 0,
currentView: activeIndex === 1 ? 'usernameLogin' : 'mobileLogin',
usernamePlaceholder: dshareconfig.allow_mobile_dwapp ? '用户名/邮箱/手机号' : '用户名/邮箱'
});
// WxParse.wxParse('term.description', 'html', response.data.term.description, vm, 5);
vm.resetSlider();
});
},
clickGetUserInfo: function clickGetUserInfo(event) {
if (event.detail.errMsg === 'getUserInfo:ok') {
this.afterLoginAndGetUserInfo(this.data.loginResponse, event.detail);
this.setData({ getUserInfoSuccess: true });
}
},
afterLoginAndGetUserInfo: function afterLoginAndGetUserInfo(loginResponse, userInfo) {
var vm = this;
DwUtils.request('post/company_account/dwapp_login', { login_data: loginResponse, user_data: userInfo }).then(function (response) {
swan.hideLoading();
if (response.data.siteuser_token) {
vm.setSiteuserToken(response.data.siteuser_token);
swan.showToast({
title: '授权登录成功!',
icon: 'success',
duration: 3000
});
}
});
},
getPhoneNumber: function getPhoneNumber(e) {
var vm = this;
swan.showLoading({
title: '登录中...',
mask: true
});
var afterResolve = function afterResolve(response) {
swan.hideLoading();
if (response.data.siteuser_token) {
vm.setSiteuserToken(response.data.siteuser_token);
swan.showToast({
title: '登录成功!',
icon: 'success',
duration: 3000
});
swan.navigateBack();
}
};
var afterReject = function afterReject() {
swan.hideLoading();
swan.showModal({
title: '提示',
content: '获取手机号失败!请选择使用用户名或者手机号自动登录',
showCancel: false
});
};
if (appConfig.debug) {
app.getUserInfo(function (userInfo, login_data, user_data) {
var data = { login_data: login_data, user_data: user_data, phone_data: {} };
DwUtils.request('post/company_account/dwapp_login_with_mobile', data).then(function (response) {
afterResolve(response);
});
}, function () {
afterReject();
});
} else {
if (e.detail.encryptedData) {
var phone_data = e.detail;
app.getUserInfo(function (userInfo, login_data, user_data) {
var data = { login_data: login_data, user_data: user_data, phone_data: phone_data };
DwUtils.request('post/company_account/dwapp_login_with_mobile', data).then(function (response) {
afterResolve(response);
});
}, function () {
afterReject();
});
} else {
afterReject();
}
}
},
setUserinfo: function setUserinfo() {
if (this.data.userInfo && this.data.userInfo.nickName && this.data.userInfo.avatarUrl) {
var data = {
nickname: this.data.userInfo.nickName,
avatar: this.data.userInfo.avatarUrl
};
DwUtils.request('post/dmhome/set_userinfo', data).then(function (response) {
//
});
}
},
updateTimer: function updateTimer() {
var vm = this;
setTimeout(function () {
var timer = vm.data.timer - 1;
vm.setData({ timer: timer });
timer > 1 ? vm.updateTimer() : vm.stopTimer();
}, 1000);
},
stopTimer: function stopTimer() {
this.setData({
timer: 60,
timerStart: false
});
},
startTimer: function startTimer() {
this.setData({
timer: 60,
timerStart: true
});
this.updateTimer();
},
sendToken: function sendToken(event) {
var vm = this;
var tokenType = event.currentTarget.dataset.tokenType;
var requestUrl;
if (tokenType === 'login') {
requestUrl = 'post/company_account/send_siteuser_login_token';
} else if (tokenType === 'signup') {
requestUrl = 'post/company_account/send_siteuser_signup_token';
} else {
requestUrl = 'post/company_account/send_siteuser_reset_token';
}
if (this.data.timerStart || this.data.lock) return;
if (!this.validateMobile(this.data.mobile)) {
return vm.showModal('错误', '请填写正确的手机号');
}
this.setData({ lock: true });
swan.showLoading({ title: '发送中...' });
DwUtils.request(requestUrl, { mobile: this.data.mobile }).then(function (response) {
vm.setData({ lock: false });
swan.hideLoading();
if (response.data.status === 'success') {
vm.showModal('成功', response.data.message);
vm.startTimer();
} else {
vm.showModal('错误', response.data.message);
}
});
},
handleMobileInput: function handleMobileInput(event) {
this.setData({ mobile: event.detail.value });
},
validateMobile: function validateMobile(mobile) {
return mobile && /^1[\d]{10}$/.test(mobile);
},
tabClick: function tabClick(e) {
if (parseInt(e.currentTarget.id) === 1) {
this.setData({
currentView: 'usernameLogin'
});
} else if (parseInt(e.currentTarget.id) === 2) {
this.setData({
currentView: 'mobileLogin'
});
}
this.setData({
sliderOffset: e.currentTarget.offsetLeft,
activeIndex: e.currentTarget.id
});
},
getInstallation: function getInstallation() {
return swan.getStorageSync('dwapp:installation') || {};
},
setSiteuserToken: function setSiteuserToken(siteuser_token) {
var installation = swan.getStorageSync('dwapp:installation') || {};
installation.siteuser_token = siteuser_token;
swan.setStorageSync('dwapp:installation', installation);
this.setData({
isLogin: true
});
this.afterLogin();
},
handleLogout: function handleLogout() {
var vm = this;
swan.showModal({
title: '提示',
content: '你确定退出帐号?',
confirmText: '确认退出',
success: function success(response) {
if (response.confirm) {
var installation = swan.getStorageSync('dwapp:installation') || {};
delete installation.siteuser_token;
swan.setStorageSync('dwapp:installation', installation);
swan.removeStorageSync('siteuser_id');
vm.setData({
isLogin: false
});
}
}
});
},
showModal: function showModal(title, content) {
swan.showModal({ title: title, content: content, showCancel: false });
},
usernameLoginSubmit: function usernameLoginSubmit(data) {
if (this.getInstallation().siteuser_token) return;
var vm = this;
var formData = data.detail.value;
if (!formData.username || !formData.password) {
return swan.showModal({ title: '登录错误', content: '请填写完整账号和密码', showCancel: false });
}
swan.showLoading({ title: '登录中...' });
DwUtils.request('post/company_account/login', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.setSiteuserToken(response.data.siteuser_token);
swan.showToast({
title: '登录成功!',
icon: 'success',
duration: 3000
});
swan.navigateBack();
} else {
return swan.showModal({ title: '登录错误', content: response.data.message, showCancel: false });
}
});
},
usernameResetSubmit: function usernameResetSubmit(data) {
var vm = this;
var formData = data.detail.value;
if (!formData.email || !/@/.test(formData.email)) {
return vm.showModal('错误', '请填写正确的邮箱');
}
swan.showLoading({ title: '发送中...' });
DwUtils.request('post/dmhome/password_reset_email', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.showModal('成功', response.data.message);
} else {
vm.showModal('错误', response.data.message);
}
});
},
usernameSignupSubmit: function usernameSignupSubmit(data) {
var vm = this;
var formData = data.detail.value;
formData.invitation_code = vm.data.invitation_code;
if (!formData.email || !/@/.test(formData.email)) {
return vm.showModal('错误', '请填写正确的邮箱');
}
if (!formData.username || !formData.password1) {
return vm.showModal('错误', '请填写正确的用户名和密码');
}
if (!/^[a-z][a-z0-9_-]{3,}/.test(formData.username)) {
return vm.showModal('错误', '用户名为大于四位的字母和数字,必须以字母开头');
}
if (formData.password1 !== formData.password2) {
return vm.showModal('错误', '两次输入的密码不一致');
}
swan.showLoading({ title: '发送中...' });
DwUtils.request('post/company_account/signup', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.setSiteuserToken(response.data.siteuser_token);
swan.showToast({
title: '注册成功!',
icon: 'success',
duration: 3000
});
vm.goBack();
} else {
vm.showModal('错误', response.data.message);
}
});
},
mobileLoginSubmit: function mobileLoginSubmit(data) {
var vm = this;
var formData = data.detail.value;
if (!vm.validateMobile(formData.mobile) || !formData.code) {
return vm.showModal('错误', '请填写正确的手机号和验证码');
}
swan.showLoading({ title: '登录中...' });
DwUtils.request('post/company_account/login_with_mobile', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.setSiteuserToken(response.data.siteuser_token);
vm.showModal('成功', response.data.message);
vm.goBack();
} else {
vm.showModal('错误', response.data.message);
}
});
},
mobileSignupSubmit: function mobileSignupSubmit(data) {
var vm = this;
var formData = data.detail.value;
formData.invitation_code = vm.data.invitation_code;
if (!vm.validateMobile(formData.mobile) || !formData.code) {
return vm.showModal('错误', '请填写正确的手机号和验证码');
}
if (!formData.password1) {
return vm.showModal('错误', '请填写密码');
}
if (formData.password1 !== formData.password2) {
return vm.showModal('错误', '两次输入的密码不一致');
}
swan.showLoading({ title: '注册中...' });
DwUtils.request('post/company_account/signup_with_mobile', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.setSiteuserToken(response.data.siteuser_token);
vm.showModal('成功', response.data.message);
vm.goBack();
} else {
vm.showModal('错误', response.data.message);
}
});
},
mobileResetSubmit: function mobileResetSubmit(data) {
var vm = this;
var formData = data.detail.value;
if (!vm.validateMobile(formData.mobile) || !formData.code) {
return vm.showModal('错误', '请填写正确的手机号和验证码');
}
if (!formData.password1) {
return vm.showModal('错误', '请填写密码');
}
if (formData.password1 !== formData.password2) {
return vm.showModal('错误', '两次输入的密码不一致');
}
swan.showLoading({ title: '密码重置中...' });
DwUtils.request('post/company_account/reset_password_by_mobile', formData).then(function (response) {
swan.hideLoading();
if (response.data.status === 'success') {
vm.setSiteuserToken(response.data.siteuser_token);
vm.showModal('成功', response.data.message);
vm.goBack();
} else {
vm.showModal('错误', response.data.message);
}
});
},
handleUpdateView: function handleUpdateView(e) {
this.setData({
currentView: e.currentTarget.dataset.view
});
},
goBack: function goBack() {
swan.navigateBack();
},
goBackHome: function goBackHome() {
swan.switchTab({ url: '../default-home/index' });
},
afterLogin: function afterLogin() {
var vm = this;
// 所有登录之后要做的事统一放到一个请求处理
app.getUserInfo(function (userInfo, login_data, user_data) {
var data = { login_data: login_data, user_data: user_data };
DwUtils.request('post/company_account/after_dwapp_login', data).then(function (response) {
vm.setData({
siteuserData: response.data.siteuser ? response.data.siteuser : null
});
});
});
var pshop_id = swan.getStorageSync('pshop_id');
DwUtils.request('post/company_account/after_dwapp_login_with_pshop_id', { pshop_id: pshop_id }).then(function (response) {
console.log('post/company_account/after_dwapp_login_with_pshop_id', pshop_id, response);
if (response.data.siteuser) {
swan.setStorageSync('siteuser_id', response.data.siteuser.id);
}
});
},
openTerm: function openTerm() {
this.setData({
showTerm: true
});
},
closeTerm: function closeTerm() {
this.setData({
showTerm: false
});
}
});
/***/ }),
/***/ "./pages/add-todo/add-todo.js":
/*!************************************!*\
!*** ./pages/add-todo/add-todo.js ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentPageConfig = { "pagePath": "pages/add-todo/add-todo", "usingComponents": { "add-button": "/components/add-button/add-button" } };
var app = (0, _afAppx.getApp)();
(0, _afAppx.Page)({
data: {
inputValue: ''
},
onBlur: function onBlur(e) {
this.setData({
inputValue: e.detail.value
});
},
add: function add() {
app.todos = app.todos.concat([{
text: this.data.inputValue,
compeleted: false
}]);
my.navigateBack();
}
});
/***/ }),
/***/ "./pages/plugin-comzbadge/index.js":
/*!*****************************************!*\
!*** ./pages/plugin-comzbadge/index.js ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var Component = _afAppx.WorkerComponent || function () {};
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentComponentConfig = { "is": "/pages/plugin-comzbadge/index", "usingComponents": {} };
'use strict';
var WAComponent = __webpack_require__(/*! ../../components/shared/wacomponent.js */ "./components/shared/wacomponent.js");
Component = WAComponent(Component);
var DEFAULT_COLOR = '#fff';
var DEFAULT_BACKGROUND_COLOR = '#f44';
var DEFAULT_FONT_SIZE = 10;
var DEFAULT_BOX_SHADOW = '0 0 0 2px #fff';
Component({
methods: {
tN: function tN(e) {
console.log('123');
this.props.onTN('456');
}
},
attached: function attached() {
my.$wa = 1;
console.log('xxxxxxxxxx', this);
},
properties: {
color: {
type: String,
value: DEFAULT_COLOR
},
backgroundColor: {
type: String,
value: DEFAULT_BACKGROUND_COLOR
},
fontSize: {
type: Number,
value: DEFAULT_FONT_SIZE
},
boxShadow: {
type: String,
value: DEFAULT_BOX_SHADOW
},
onTN: function onTN(x) {
console.log(x, this, this.triggerEvent);
}
}
});
/***/ }),
/***/ "./pages/plugin-comzloading/index.js":
/*!*******************************************!*\
!*** ./pages/plugin-comzloading/index.js ***!
\*******************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var Component = _afAppx.WorkerComponent || function () {};
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentComponentConfig = { "is": "/pages/plugin-comzloading/index", "usingComponents": { "plugin-comzbadge": "/pages/plugin-comzbadge/index" } };
'use strict';
var WAComponent = __webpack_require__(/*! ../../components/shared/wacomponent.js */ "./components/shared/wacomponent.js");
Component = WAComponent(Component);
Component({
properties: {
type: {
type: String,
value: 'circle'
},
color: {
type: String
},
$waChildDidMound: {
value: function value() {}
}
},
methods: {
_didMount: function _didMount() {
console.log(2);
}
},
attached: function attached() {
console.log('xxxx', this, my.$wa);
}
});
/***/ }),
/***/ "./pages/plugin-debug/index.js":
/*!*************************************!*\
!*** ./pages/plugin-debug/index.js ***!
\*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentPageConfig = { "pagePath": "pages/plugin-debug/index", "usingComponents": {} };
/* global getCurrentPages,Page,my */
/* eslint-disable camelcase */
var wx = my;
var DwUtils = __webpack_require__(/*! ../../utils/dw */ "./utils/dw.js").DwUtils;
// var appConfig = require('../../utils/config')
var debugCounter = 0;
(0, _afAppx.Page)({
data: {
isLogin: false,
previousDwHref: null,
previousQrcode: null
},
onLoad: function onLoad(options) {
//
},
onShow: function onShow() {
this.getPreviousQrcode();
},
getPreviousQrcode: function getPreviousQrcode() {
var _this = this;
var pages = (0, _afAppx.getCurrentPages)();
if (pages.length >= 2) {
var page = pages.slice(-2, -1)[0];
var path = page.route;
var params = page.data.query || {};
var dwhrefPath = path.split('/').slice(-2, -1)[0];
var query = Object.keys(params).map(function (i) {
return i + '=' + params[i];
}).join('&');
var search = query ? '?' + query : '';
var dwhref = dwhrefPath + search;
this.setData({
previousDwHref: dwhref
});
DwUtils.fetch('get/dwapp/create_dwapp_qrcode', { dwhref: dwhref }).then(function (response) {
console.log('response', response);
var _response$data = response.data,
status = _response$data.status,
object = _response$data.object;
if (status === 'success') {
var qrcode = object.qrcode;
_this.setData({
previousQrcode: DwUtils.filters.qiniu(qrcode)
});
}
});
}
},
previewQrcode: function previewQrcode() {
wx.previewImage({
current: this.data.previousQrcode,
urls: [this.data.previousQrcode]
});
},
setEnableDebug: function setEnableDebug() {
wx.setEnableDebug({
enableDebug: Boolean(++debugCounter % 2)
});
},
goBack: function goBack() {
wx.navigateBack();
},
goBackHome: function goBackHome() {
wx.switchTab({ url: '../default-home/index' });
}
});
/***/ }),
/***/ "./pages/todos/todos.js":
/*!******************************!*\
!*** ./pages/todos/todos.js ***!
\******************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _extends2 = __webpack_require__(/*! babel-runtime/helpers/extends */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/extends.js");
var _extends3 = _interopRequireDefault(_extends2);
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
_afAppx.$global.currentPageConfig = { "pagePath": "pages/todos/todos", "usingComponents": { "add-button": "/components/add-button/add-button", "plugin-comzloading": "/pages/plugin-comzloading/index", "plugin-comzbadge": "/pages/plugin-comzbadge/index" } };
var app = (0, _afAppx.getApp)();
(0, _afAppx.Page)({
data: {},
onLoad: function onLoad() {
var _this = this;
app.getUserInfo().then(function (user) {
_this.setData({
user: user
});
}, function () {
// 获取用户信息失败
});
},
onShow: function onShow() {
this.setData({ todos: app.todos });
},
onTodoChanged: function onTodoChanged(e) {
var checkedTodos = e.detail.value;
app.todos = app.todos.map(function (todo) {
return (0, _extends3.default)({}, todo, {
completed: checkedTodos.indexOf(todo.text) > -1
});
});
this.setData({ todos: app.todos });
},
onTN: function onTN(x) {
console.log(x, x);
},
addTodo: function addTodo() {
my.navigateTo({ url: '../add-todo/add-todo' });
}
});
/***/ }),
/***/ "./utils/config.js":
/*!*************************!*\
!*** ./utils/config.js ***!
\*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
module.exports = {
"apiUrl": "http://testapi.demlution.com",
"app": {
"pages": ["pages/app_dwstore-card/index", "pages/default-home/index", "pages/account-login/index", "pages/charge/index", "pages/plugin-fxfont/index", "pages/plugin-redirect/index", "pages/default-id_59ff09f2e49d40b4d0faacca/index", "pages/feature-about/index", "pages/feature-contact/index", "pages/feature-search/index", "pages/list-product/index", "pages/detail-product/index", "pages/mall-cart/index", "pages/mall-checkout/index", "pages/list-news/index", "pages/detail-news/index", "pages/list-service/index", "pages/detail-service/index", "pages/list-activity/index", "pages/detail-activity/index", "pages/list-event/index", "pages/detail-event/index", "pages/list-post/index", "pages/detail-post/index", "pages/list-imageset/index", "pages/detail-imageset/index", "pages/forum-index/index", "pages/forum-list/index", "pages/forum-detail/index", "pages/forum-form/index", "pages/forum-profile/index", "pages/feature-home/index", "pages/feature-account/index", "pages/feature-notice/index", "pages/feature-invitation/index", "pages/feature-member/index", "pages/feature-credits/index", "pages/feature-gift/index", "pages/feature-form/index", "pages/feature-couponcard/index", "pages/feature-coupon/index", "pages/feature-gameinfo/index", "pages/feature-order/index", "pages/feature-favorites/index", "pages/feature-review/index", "pages/feature-addressbook/index", "pages/feature-pshop/index", "pages/feature-section_post/index", "pages/feature-section_favorites/index", "pages/feature-section_reply/index", "pages/feature-forum_topic/index", "pages/feature-forum_post/index", "pages/feature-forum_favorites/index", "pages/feature-forum_credits/index", "pages/app_dwstore-group/index", "pages/app_dwstore-pipeline/index", "pages/app_dwstore-my/index"],
"tabBar": {
"backgroundColor": "#fff",
"borderStyle": "black",
"color": "#616161",
"list": [{
"iconPath": "images/icon-0.png",
"pagePath": "pages/app_dwstore-card/index",
"selectedIconPath": "images/icon-selected-0.png",
"text": "名片"
}, {
"iconPath": "images/icon-1.png",
"pagePath": "pages/app_dwstore-group/index",
"selectedIconPath": "images/icon-selected-1.png",
"text": "群推广"
}, {
"iconPath": "images/icon-2.png",
"pagePath": "pages/app_dwstore-pipeline/index",
"selectedIconPath": "images/icon-selected-2.png",
"text": "人脉"
}, {
"iconPath": "images/icon-3.png",
"pagePath": "pages/app_dwstore-my/index",
"selectedIconPath": "images/icon-selected-3.png",
"text": "我"
}],
"position": "bottom",
"selectedColor": "#2b2b2b"
},
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "WeChat"
}
},
"buildDate": null,
"company": {
"agent_name": "上海一当网络科技有限公司",
"app_version": "2018-07-10 13:19",
"id": 500,
"name": "上海求真专修学校",
"nickname": "qiuzhen"
},
"debug": true,
"page": {
"id": 2678,
"name": "dwstore"
}
};
/***/ }),
/***/ "./utils/dw.js":
/*!*********************!*\
!*** ./utils/dw.js ***!
\*********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _typeof2 = __webpack_require__(/*! babel-runtime/helpers/typeof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/typeof.js");
var _typeof3 = _interopRequireDefault(_typeof2);
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
/* global my,getCurrentPages,swan */
var wx = my;
var WxParse = {};
var config = __webpack_require__(/*! ./config */ "./utils/config.js");
var shared = __webpack_require__(/*! ./dw_shared */ "./utils/dw_shared.js");
// var WxParse = require('../wxParse/wxParse.js')
var isSwan = (typeof swan === 'undefined' ? 'undefined' : (0, _typeof3.default)(swan)) === 'object';
var isMy = (typeof my === 'undefined' ? 'undefined' : (0, _typeof3.default)(my)) === 'object';
module.exports = shared.default.buildDw({
config: config,
WxParse: WxParse,
wx: isSwan ? swan : wx,
isSwan: isSwan,
isMy: isMy,
getCurrentPages: _afAppx.getCurrentPages
});
/***/ }),
/***/ "./utils/dw_shared.js":
/*!****************************!*\
!*** ./utils/dw_shared.js ***!
\****************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var _typeof2 = __webpack_require__(/*! babel-runtime/helpers/typeof */ "../../../../Program Files/ali/mini/resources/app/extensions/volans-ide-tiny-project.asar/node_modules/babel-runtime/helpers/typeof.js");
var _typeof3 = _interopRequireDefault(_typeof2);
var _afAppx = __webpack_require__(/*! @alipay/af-appx */ "@alipay/af-appx");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var globalThis = undefined;
var global = undefined;
var appXRuntimeConfig = undefined;
var self = undefined;
var window = undefined;
var document = undefined;
var location = undefined;
var XMLHttpRequest = undefined;
var AlipayJSBridge = undefined;
var AFAppX = undefined;
var importScripts = undefined;
var fetch = undefined;
var abridge = _afAppx.bridge;
var my = _afAppx.bridge;
/* eslint-disable */
var window = {
Array: Array,
Set: Set,
Promise: Promise,
Date: Date,
Error: Error,
Function: Function,
Math: Math,
Object: Object,
RegExp: RegExp,
String: String,
TypeError: TypeError,
setTimeout: setTimeout,
clearTimeout: clearTimeout,
setInterval: setInterval,
clearInterval: clearInterval,
parseInt: parseInt,
parseFloat: parseFloat,
Number: Number
};
module.exports = function (t) {
function n(r) {
if (e[r]) return e[r].exports;var i = e[r] = { i: r, l: !1, exports: {} };return t[r].call(i.exports, i, i.exports, n), i.l = !0, i.exports;
}var e = {};return n.m = t, n.c = e, n.d = function (t, e, r) {
n.o(t, e) || Object.defineProperty(t, e, { configurable: !1, enumerable: !0, get: r });
}, n.n = function (t) {
var e = t && t.__esModule ? function () {
return t.default;
} : function () {
return t;
};return n.d(e, "a", e), e;
}, n.o = function (t, n) {
return Object.prototype.hasOwnProperty.call(t, n);
}, n.p = "/Users/risent/Project/bazaar4/dstore/dist", n(n.s = 213);
}([function (t, n, e) {
var r = e(2),
i = e(34),
o = e(16),
u = e(17),
a = e(22),
c = "prototype",
s = function s(t, n, e) {
var f,
l,
h,
p,
v = t & s.F,
d = t & s.G,
y = t & s.S,
g = t & s.P,
m = t & s.B,
_ = d ? r : y ? r[n] || (r[n] = {}) : (r[n] || {})[c],
w = d ? i : i[n] || (i[n] = {}),
b = w[c] || (w[c] = {});d && (e = n);for (f in e) {
l = !v && _ && void 0 !== _[f], h = (l ? _ : e)[f], p = m && l ? a(h, r) : g && "function" == typeof h ? a(Function.call, h) : h, _ && u(_, f, h, t & s.U), w[f] != h && o(w, f, p), g && b[f] != h && (b[f] = h);
}
};r.core = i, s.F = 1, s.G = 2, s.S = 4, s.P = 8, s.B = 16, s.W = 32, s.U = 64, s.R = 128, t.exports = s;
}, function (t, n, e) {
var r = e(4);t.exports = function (t) {
if (!r(t)) throw TypeError(t + " is not an object!");return t;
};
}, function (t, n) {
var e = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")();"number" == typeof __g && (__g = e);
}, function (t, n) {
t.exports = function (t) {
try {
return !!t();
} catch (t) {
return !0;
}
};
}, function (t, n) {
t.exports = function (t) {
return "object" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) ? null !== t : "function" == typeof t;
};
}, function (t, n, e) {
var r = e(75)("wks"),
i = e(42),
o = e(2).Symbol,
u = "function" == typeof o;(t.exports = function (t) {
return r[t] || (r[t] = u && o[t] || (u ? o : i)("Symbol." + t));
}).store = r;
}, function (t, n) {
var e = t.exports = { version: "2.5.3" };"number" == typeof __e && (__e = e);
}, function (t, n, e) {
t.exports = !e(3)(function () {
return 7 != Object.defineProperty({}, "a", { get: function get() {
return 7;
} }).a;
});
}, function (t, n, e) {
var r = e(1),
i = e(154),
o = e(27),
u = Object.defineProperty;n.f = e(7) ? Object.defineProperty : function (t, n, e) {
if (r(t), n = o(n, !0), r(e), i) try {
return u(t, n, e);
} catch (t) {}if ("get" in e || "set" in e) throw TypeError("Accessors not supported!");return "value" in e && (t[n] = e.value), t;
};
}, function (t, n, e) {
var r = e(29),
i = Math.min;t.exports = function (t) {
return t > 0 ? i(r(t), 9007199254740991) : 0;
};
}, function (t, n, e) {
var r = e(28);t.exports = function (t) {
return Object(r(t));
};
}, function (t, n) {
t.exports = function (t) {
if ("function" != typeof t) throw TypeError(t + " is not a function!");return t;
};
}, function (t, n, e) {
var r = e(14),
i = e(6),
o = e(37),
u = e(40),
a = "prototype",
c = function c(t, n, e) {
var s,
f,
l,
h = t & c.F,
p = t & c.G,
v = t & c.S,
d = t & c.P,
y = t & c.B,
g = t & c.W,
m = p ? i : i[n] || (i[n] = {}),
_ = m[a],
w = p ? r : v ? r[n] : (r[n] || {})[a];p && (e = n);for (s in e) {
(f = !h && w && void 0 !== w[s]) && s in m || (l = f ? w[s] : e[s], m[s] = p && "function" != typeof w[s] ? e[s] : y && f ? o(l, r) : g && w[s] == l ? function (t) {
var n = function n(_n, e, r) {
if (this instanceof t) {
switch (arguments.length) {case 0:
return new t();case 1:
return new t(_n);case 2:
return new t(_n, e);}return new t(_n, e, r);
}return t.apply(this, arguments);
};return n[a] = t[a], n;
}(l) : d && "function" == typeof l ? o(Function.call, l) : l, d && ((m.virtual || (m.virtual = {}))[s] = l, t & c.R && _ && !_[s] && u(_, s, l)));
}
};c.F = 1, c.G = 2, c.S = 4, c.P = 8, c.B = 16, c.W = 32, c.U = 64, c.R = 128, t.exports = c;
}, function (t, n, e) {
var r = e(135)("wks"),
i = e(93),
o = e(14).Symbol,
u = "function" == typeof o;(t.exports = function (t) {
return r[t] || (r[t] = u && o[t] || (u ? o : i)("Symbol." + t));
}).store = r;
}, function (t, n) {
var e = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")();"number" == typeof __g && (__g = e);
}, function (t, n) {
var e = {}.hasOwnProperty;t.exports = function (t, n) {
return e.call(t, n);
};
}, function (t, n, e) {
var r = e(8),
i = e(41);t.exports = e(7) ? function (t, n, e) {
return r.f(t, n, i(1, e));
} : function (t, n, e) {
return t[n] = e, t;
};
}, function (t, n, e) {
var r = e(2),
i = e(16),
o = e(15),
u = e(42)("src"),
a = "toString",
c = Function[a],
s = ("" + c).split(a);e(34).inspectSource = function (t) {
return c.call(t);
}, (t.exports = function (t, n, e, a) {
var c = "function" == typeof e;c && (o(e, "name") || i(e, "name", n)), t[n] !== e && (c && (o(e, u) || i(e, u, t[n] ? "" + t[n] : s.join(String(n)))), t === r ? t[n] = e : a ? t[n] ? t[n] = e : i(t, n, e) : (delete t[n], i(t, n, e)));
})(Function.prototype, a, function () {
return "function" == typeof this && this[u] || c.call(this);
});
}, function (t, n, e) {
var r = e(0),
i = e(3),
o = e(28),
u = /"/g,
a = function a(t, n, e, r) {
var i = String(o(t)),
a = "<" + n;return "" !== e && (a += " " + e + '="' + String(r).replace(u, "&quot;") + '"'), a + ">" + i + "</" + n + ">";
};t.exports = function (t, n) {
var e = {};e[t] = n(a), r(r.P + r.F * i(function () {
var n = ""[t]('"');return n !== n.toLowerCase() || n.split('"').length > 3;
}), "String", e);
};
}, function (t, n, e) {
var r = e(63),
i = e(28);t.exports = function (t) {
return r(i(t));
};
}, function (t, n, e) {
var r = e(64),
i = e(41),
o = e(19),
u = e(27),
a = e(15),
c = e(154),
s = Object.getOwnPropertyDescriptor;n.f = e(7) ? s : function (t, n) {
if (t = o(t), n = u(n, !0), c) try {
return s(t, n);
} catch (t) {}if (a(t, n)) return i(!r.f.call(t, n), t[n]);
};
}, function (t, n, e) {
var r = e(15),
i = e(10),
o = e(103)("IE_PROTO"),
u = Object.prototype;t.exports = Object.getPrototypeOf || function (t) {
return t = i(t), r(t, o) ? t[o] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? u : null;
};
}, function (t, n, e) {
var r = e(11);t.exports = function (t, n, e) {
if (r(t), void 0 === n) return t;switch (e) {case 1:
return function (e) {
return t.call(n, e);
};case 2:
return function (e, r) {
return t.call(n, e, r);
};case 3:
return function (e, r, i) {
return t.call(n, e, r, i);
};}return function () {
return t.apply(n, arguments);
};
};
}, function (t, n) {
var e = {}.toString;t.exports = function (t) {
return e.call(t).slice(8, -1);
};
}, function (t, n, e) {
"use strict";
var r = e(3);t.exports = function (t, n) {
return !!t && r(function () {
n ? t.call(null, function () {}, 1) : t.call(null);
});
};
}, function (t, n, e) {
var r = e(32),
i = e(189),
o = e(132),
u = Object.defineProperty;n.f = e(33) ? Object.defineProperty : function (t, n, e) {
if (r(t), n = o(n, !0), r(e), i) try {
return u(t, n, e);
} catch (t) {}if ("get" in e || "set" in e) throw TypeError("Accessors not supported!");return "value" in e && (t[n] = e.value), t;
};
}, function (t, n) {
t.exports = function (t) {
return "object" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) ? null !== t : "function" == typeof t;
};
}, function (t, n, e) {
var r = e(4);t.exports = function (t, n) {
if (!r(t)) return t;var e, i;if (n && "function" == typeof (e = t.toString) && !r(i = e.call(t))) return i;if ("function" == typeof (e = t.valueOf) && !r(i = e.call(t))) return i;if (!n && "function" == typeof (e = t.toString) && !r(i = e.call(t))) return i;throw TypeError("Can't convert object to primitive value");
};
}, function (t, n) {
t.exports = function (t) {
if (void 0 == t) throw TypeError("Can't call method on " + t);return t;
};
}, function (t, n) {
var e = Math.ceil,
r = Math.floor;t.exports = function (t) {
return isNaN(t = +t) ? 0 : (t > 0 ? r : e)(t);
};
}, function (t, n, e) {
var r = e(0),
i = e(34),
o = e(3);t.exports = function (t, n) {
var e = (i.Object || {})[t] || Object[t],
u = {};u[t] = n(e), r(r.S + r.F * o(function () {
e(1);
}), "Object", u);
};
}, function (t, n, e) {
var r = e(22),
i = e(63),
o = e(10),
u = e(9),
a = e(120);t.exports = function (t, n) {
var e = 1 == t,
c = 2 == t,
s = 3 == t,
f = 4 == t,
l = 6 == t,
h = 5 == t || l,
p = n || a;return function (n, a, v) {
for (var d, y, g = o(n), m = i(g), _ = r(a, v, 3), w = u(m.length), b = 0, x = e ? p(n, w) : c ? p(n, 0) : void 0; w > b; b++) {
if ((h || b in m) && (d = m[b], y = _(d, b, g), t)) if (e) x[b] = y;else if (y) switch (t) {case 3:
return !0;case 5:
return d;case 6:
return b;case 2:
x.push(d);} else if (f) return !1;
}return l ? -1 : s || f ? f : x;
};
};
}, function (t, n, e) {
var r = e(26);t.exports = function (t) {
if (!r(t)) throw TypeError(t + " is not an object!");return t;
};
}, function (t, n, e) {
t.exports = !e(52)(function () {
return 7 != Object.defineProperty({}, "a", { get: function get() {
return 7;
} }).a;
});
}, function (t, n) {
var e = t.exports = { version: "2.5.3" };"number" == typeof __e && (__e = e);
}, function (t, n, e) {
"use strict";
if (e(7)) {
var r = e(43),
i = e(2),
o = e(3),
u = e(0),
a = e(85),
c = e(126),
s = e(22),
f = e(49),
l = e(41),
h = e(16),
p = e(51),
v = e(29),
d = e(9),
y = e(180),
g = e(45),
m = e(27),
_ = e(15),
w = e(65),
b = e(4),
x = e(10),
S = e(117),
O = e(46),
P = e(21),
k = e(47).f,
E = e(119),
j = e(42),
A = e(5),
M = e(31),
T = e(76),
F = e(83),
L = e(122),
I = e(57),
N = e(80),
D = e(48),
R = e(121),
C = e(170),
U = e(8),
G = e(20),
W = U.f,
V = G.f,
B = i.RangeError,
q = i.TypeError,
z = i.Uint8Array,
H = "ArrayBuffer",
J = "Shared" + H,
K = "BYTES_PER_ELEMENT",
Y = "prototype",
$ = Array[Y],
Q = c.ArrayBuffer,
X = c.DataView,
Z = M(0),
tt = M(2),
nt = M(3),
et = M(4),
rt = M(5),
it = M(6),
ot = T(!0),
ut = T(!1),
at = L.values,
ct = L.keys,
st = L.entries,
ft = $.lastIndexOf,
lt = $.reduce,
ht = $.reduceRight,
pt = $.join,
vt = $.sort,
dt = $.slice,
yt = $.toString,
gt = $.toLocaleString,
mt = A("iterator"),
_t = A("toStringTag"),
wt = j("typed_constructor"),
bt = j("def_constructor"),
xt = a.CONSTR,
St = a.TYPED,
Ot = a.VIEW,
Pt = "Wrong length!",
kt = M(1, function (t, n) {
return Tt(F(t, t[bt]), n);
}),
Et = o(function () {
return 1 === new z(new Uint16Array([1]).buffer)[0];
}),
jt = !!z && !!z[Y].set && o(function () {
new z(1).set({});
}),
At = function At(t, n) {
var e = v(t);if (e < 0 || e % n) throw B("Wrong offset!");return e;
},
Mt = function Mt(t) {
if (b(t) && St in t) return t;throw q(t + " is not a typed array!");
},
Tt = function Tt(t, n) {
if (!(b(t) && wt in t)) throw q("It is not a typed array constructor!");return new t(n);
},
Ft = function Ft(t, n) {
return Lt(F(t, t[bt]), n);
},
Lt = function Lt(t, n) {
for (var e = 0, r = n.length, i = Tt(t, r); r > e;) {
i[e] = n[e++];
}return i;
},
It = function It(t, n, e) {
W(t, n, { get: function get() {
return this._d[e];
} });
},
Nt = function Nt(t) {
var n,
e,
r,
i,
o,
u,
a = x(t),
c = arguments.length,
f = c > 1 ? arguments[1] : void 0,
l = void 0 !== f,
h = E(a);if (void 0 != h && !S(h)) {
for (u = h.call(a), r = [], n = 0; !(o = u.next()).done; n++) {
r.push(o.value);
}a = r;
}for (l && c > 2 && (f = s(f, arguments[2], 2)), n = 0, e = d(a.length), i = Tt(this, e); e > n; n++) {
i[n] = l ? f(a[n], n) : a[n];
}return i;
},
Dt = function Dt() {
for (var t = 0, n = arguments.length, e = Tt(this, n); n > t;) {
e[t] = arguments[t++];
}return e;
},
Rt = !!z && o(function () {
gt.call(new z(1));
}),
Ct = function Ct() {
return gt.apply(Rt ? dt.call(Mt(this)) : Mt(this), arguments);
},
Ut = { copyWithin: function copyWithin(t, n) {
return C.call(Mt(this), t, n, arguments.length > 2 ? arguments[2] : void 0);
}, every: function every(t) {
return et(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, fill: function fill(t) {
return R.apply(Mt(this), arguments);
}, filter: function filter(t) {
return Ft(this, tt(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0));
}, find: function find(t) {
return rt(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, findIndex: function findIndex(t) {
return it(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, forEach: function forEach(t) {
Z(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, indexOf: function indexOf(t) {
return ut(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, includes: function includes(t) {
return ot(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, join: function join(t) {
return pt.apply(Mt(this), arguments);
}, lastIndexOf: function lastIndexOf(t) {
return ft.apply(Mt(this), arguments);
}, map: function map(t) {
return kt(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, reduce: function reduce(t) {
return lt.apply(Mt(this), arguments);
}, reduceRight: function reduceRight(t) {
return ht.apply(Mt(this), arguments);
}, reverse: function reverse() {
for (var t, n = this, e = Mt(n).length, r = Math.floor(e / 2), i = 0; i < r;) {
t = n[i], n[i++] = n[--e], n[e] = t;
}return n;
}, some: function some(t) {
return nt(Mt(this), t, arguments.length > 1 ? arguments[1] : void 0);
}, sort: function sort(t) {
return vt.call(Mt(this), t);
}, subarray: function subarray(t, n) {
var e = Mt(this),
r = e.length,
i = g(t, r);return new (F(e, e[bt]))(e.buffer, e.byteOffset + i * e.BYTES_PER_ELEMENT, d((void 0 === n ? r : g(n, r)) - i));
} },
Gt = function Gt(t, n) {
return Ft(this, dt.call(Mt(this), t, n));
},
Wt = function Wt(t) {
Mt(this);var n = At(arguments[1], 1),
e = this.length,
r = x(t),
i = d(r.length),
o = 0;if (i + n > e) throw B(Pt);for (; o < i;) {
this[n + o] = r[o++];
}
},
Vt = { entries: function entries() {
return st.call(Mt(this));
}, keys: function keys() {
return ct.call(Mt(this));
}, values: function values() {
return at.call(Mt(this));
} },
Bt = function Bt(t, n) {
return b(t) && t[St] && "symbol" != (typeof n === "undefined" ? "undefined" : (0, _typeof3.default)(n)) && n in t && String(+n) == String(n);
},
qt = function qt(t, n) {
return Bt(t, n = m(n, !0)) ? l(2, t[n]) : V(t, n);
},
zt = function zt(t, n, e) {
return !(Bt(t, n = m(n, !0)) && b(e) && _(e, "value")) || _(e, "get") || _(e, "set") || e.configurable || _(e, "writable") && !e.writable || _(e, "enumerable") && !e.enumerable ? W(t, n, e) : (t[n] = e.value, t);
};xt || (G.f = qt, U.f = zt), u(u.S + u.F * !xt, "Object", { getOwnPropertyDescriptor: qt, defineProperty: zt }), o(function () {
yt.call({});
}) && (yt = gt = function gt() {
return pt.call(this);
});var Ht = p({}, Ut);p(Ht, Vt), h(Ht, mt, Vt.values), p(Ht, { slice: Gt, set: Wt, constructor: function constructor() {}, toString: yt, toLocaleString: Ct }), It(Ht, "buffer", "b"), It(Ht, "byteOffset", "o"), It(Ht, "byteLength", "l"), It(Ht, "length", "e"), W(Ht, _t, { get: function get() {
return this[St];
} }), t.exports = function (t, n, e, c) {
c = !!c;var s = t + (c ? "Clamped" : "") + "Array",
l = "get" + t,
p = "set" + t,
v = i[s],
g = v || {},
m = v && P(v),
_ = !v || !a.ABV,
x = {},
S = v && v[Y],
E = function E(t, e) {
var r = t._d;return r.v[l](e * n + r.o, Et);
},
j = function j(t, e, r) {
var i = t._d;c && (r = (r = Math.round(r)) < 0 ? 0 : r > 255 ? 255 : 255 & r), i.v[p](e * n + i.o, r, Et);
},
A = function A(t, n) {
W(t, n, { get: function get() {
return E(this, n);
}, set: function set(t) {
return j(this, n, t);
}, enumerable: !0 });
};_ ? (v = e(function (t, e, r, i) {
f(t, v, s, "_d");var o,
u,
a,
c,
l = 0,
p = 0;if (b(e)) {
if (!(e instanceof Q || (c = w(e)) == H || c == J)) return St in e ? Lt(v, e) : Nt.call(v, e);o = e, p = At(r, n);var g = e.byteLength;if (void 0 === i) {
if (g % n) throw B(Pt);if ((u = g - p) < 0) throw B(Pt);
} else if ((u = d(i) * n) + p > g) throw B(Pt);a = u / n;
} else a = y(e), u = a * n, o = new Q(u);for (h(t, "_d", { b: o, o: p, l: u, e: a, v: new X(o) }); l < a;) {
A(t, l++);
}
}), S = v[Y] = O(Ht), h(S, "constructor", v)) : o(function () {
v(1);
}) && o(function () {
new v(-1);
}) && N(function (t) {
new v(), new v(null), new v(1.5), new v(t);
}, !0) || (v = e(function (t, e, r, i) {
f(t, v, s);var o;return b(e) ? e instanceof Q || (o = w(e)) == H || o == J ? void 0 !== i ? new g(e, At(r, n), i) : void 0 !== r ? new g(e, At(r, n)) : new g(e) : St in e ? Lt(v, e) : Nt.call(v, e) : new g(y(e));
}), Z(m !== Function.prototype ? k(g).concat(k(m)) : k(g), function (t) {
t in v || h(v, t, g[t]);
}), v[Y] = S, r || (S.constructor = v));var M = S[mt],
T = !!M && ("values" == M.name || void 0 == M.name),
F = Vt.values;h(v, wt, !0), h(S, St, s), h(S, Ot, !0), h(S, bt, v), (c ? new v(1)[_t] == s : _t in S) || W(S, _t, { get: function get() {
return s;
} }), x[s] = v, u(u.G + u.W + u.F * (v != g), x), u(u.S, s, { BYTES_PER_ELEMENT: n }), u(u.S + u.F * o(function () {
g.of.call(v, 1);
}), s, { from: Nt, of: Dt }), K in S || h(S, K, n), u(u.P, s, Ut), D(s), u(u.P + u.F * jt, s, { set: Wt }), u(u.P + u.F * !T, s, Vt), r || S.toString == yt || (S.toString = yt), u(u.P + u.F * o(function () {
new v(1).slice();
}), s, { slice: Gt }), u(u.P + u.F * (o(function () {
return [1, 2].toLocaleString() != new v([1, 2]).toLocaleString();
}) || !o(function () {
S.toLocaleString.call([1, 2]);
})), s, { toLocaleString: Ct }), I[s] = T ? M : F, r || T || h(S, mt, F);
};
} else t.exports = function () {};
}, function (t, n, e) {
var r = e(175),
i = e(0),
o = e(75)("metadata"),
u = o.store || (o.store = new (e(178))()),
a = function a(t, n, e) {
var i = u.get(t);if (!i) {
if (!e) return;u.set(t, i = new r());
}var o = i.get(n);if (!o) {
if (!e) return;i.set(n, o = new r());
}return o;
},
c = function c(t, n, e) {
var r = a(n, e, !1);return void 0 !== r && r.has(t);
},
s = function s(t, n, e) {
var r = a(n, e, !1);return void 0 === r ? void 0 : r.get(t);
},
f = function f(t, n, e, r) {
a(e, r, !0).set(t, n);
},
l = function l(t, n) {
var e = a(t, n, !1),
r = [];return e && e.forEach(function (t, n) {
r.push(n);
}), r;
},
h = function h(t) {
return void 0 === t || "symbol" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) ? t : String(t);
},
p = function p(t) {
i(i.S, "Reflect", t);
};t.exports = { store: u, map: a, has: c, get: s, set: f, keys: l, key: h, exp: p };
}, function (t, n, e) {
var r = e(66);t.exports = function (t, n, e) {
if (r(t), void 0 === n) return t;switch (e) {case 1:
return function (e) {
return t.call(n, e);
};case 2:
return function (e, r) {
return t.call(n, e, r);
};case 3:
return function (e, r, i) {
return t.call(n, e, r, i);
};}return function () {
return t.apply(n, arguments);
};
};
}, function (t, n, e) {
var r = e(42)("meta"),
i = e(4),
o = e(15),
u = e(8).f,
a = 0,
c = Object.isExtensible || function () {
return !0;
},
s = !e(3)(function () {
return c(Object.preventExtensions({}));
}),
f = function f(t) {
u(t, r, { value: { i: "O" + ++a, w: {} } });
},
l = function l(t, n) {
if (!i(t)) return "symbol" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) ? t : ("string" == typeof t ? "S" : "P") + t;if (!o(t, r)) {
if (!c(t)) return "F";if (!n) return "E";f(t);
}return t[r].i;
},
h = function h(t, n) {
if (!o(t, r)) {
if (!c(t)) return !0;if (!n) return !1;f(t);
}return t[r].w;
},
p = function p(t) {
return s && v.NEED && c(t) && !o(t, r) && f(t), t;
},
v = t.exports = { KEY: r, NEED: !1, fastKey: l, getWeak: h, onFreeze: p };
}, function (t, n, e) {
var r = e(5)("unscopables"),
i = Array.prototype;void 0 == i[r] && e(16)(i, r, {}), t.exports = function (t) {
i[r][t] = !0;
};
}, function (t, n, e) {
var r = e(25),
i = e(67);t.exports = e(33) ? function (t, n, e) {
return r.f(t, n, i(1, e));
} : function (t, n, e) {
return t[n] = e, t;
};
}, function (t, n) {
t.exports = function (t, n) {
return { enumerable: !(1 & t), configurable: !(2 & t), writable: !(4 & t), value: n };
};
}, function (t, n) {
var e = 0,
r = Math.random();t.exports = function (t) {
return "Symbol(".concat(void 0 === t ? "" : t, ")_", (++e + r).toString(36));
};
}, function (t, n) {
t.exports = !1;
}, function (t, n, e) {
var r = e(156),
i = e(104);t.exports = Object.keys || function (t) {
return r(t, i);
};
}, function (t, n, e) {
var r = e(29),
i = Math.max,
o = Math.min;t.exports = function (t, n) {
return t = r(t), t < 0 ? i(t + n, 0) : o(t, n);
};
}, function (t, n, e) {
var r = e(1),
i = e(157),
o = e(104),
u = e(103)("IE_PROTO"),
a = function a() {},
c = "prototype",
_s = function s() {
var t,
n = e(101)("iframe"),
r = o.length,
i = "<",
u = ">";for (n.style.display = "none", e(105).appendChild(n), n.src = "javascript:", t = n.contentWindow.document, t.open(), t.write(i + "script" + u + "document.F=Object" + i + "/script" + u), t.close(), _s = t.F; r--;) {
delete _s[c][o[r]];
}return _s();
};t.exports = Object.create || function (t, n) {
var e;return null !== t ? (a[c] = r(t), e = new a(), a[c] = null, e[u] = t) : e = _s(), void 0 === n ? e : i(e, n);
};
}, function (t, n, e) {
var r = e(156),
i = e(104).concat("length", "prototype");n.f = Object.getOwnPropertyNames || function (t) {
return r(t, i);
};
}, function (t, n, e) {
"use strict";
var r = e(2),
i = e(8),
o = e(7),
u = e(5)("species");t.exports = function (t) {
var n = r[t];o && n && !n[u] && i.f(n, u, { configurable: !0, get: function get() {
return this;
} });
};
}, function (t, n) {
t.exports = function (t, n, e, r) {
if (!(t instanceof n) || void 0 !== r && r in t) throw TypeError(e + ": incorrect invocation!");return t;
};
}, function (t, n, e) {
var r = e(22),
i = e(168),
o = e(117),
u = e(1),
a = e(9),
c = e(119),
s = {},
f = {},
n = t.exports = function (t, n, e, l, h) {
var p,
v,
d,
y,
g = h ? function () {
return t;
} : c(t),
m = r(e, l, n ? 2 : 1),
_ = 0;if ("function" != typeof g) throw TypeError(t + " is not iterable!");if (o(g)) {
for (p = a(t.length); p > _; _++) {
if ((y = n ? m(u(v = t[_])[0], v[1]) : m(t[_])) === s || y === f) return y;
}
} else for (d = g.call(t); !(v = d.next()).done;) {
if ((y = i(d, m, v.value, n)) === s || y === f) return y;
}
};n.BREAK = s, n.RETURN = f;
}, function (t, n, e) {
var r = e(17);t.exports = function (t, n, e) {
for (var i in n) {
r(t, i, n[i], e);
}return t;
};
}, function (t, n) {
t.exports = function (t) {
try {
return !!t();
} catch (t) {
return !0;
}
};
}, function (t, n) {
var e = {}.hasOwnProperty;t.exports = function (t, n) {
return e.call(t, n);
};
}, function (t, n, e) {
var r = e(133),
i = e(129);t.exports = function (t) {
return r(i(t));
};
}, function (t, n, e) {
var r = e(8).f,
i = e(15),
o = e(5)("toStringTag");t.exports = function (t, n, e) {
t && !i(t = e ? t : t.prototype, o) && r(t, o, { configurable: !0, value: n });
};
}, function (t, n, e) {
var r = e(0),
i = e(28),
o = e(3),
u = e(107),
a = "[" + u + "]",
c = "​…",
s = RegExp("^" + a + a + "*"),
f = RegExp(a + a + "*$"),
l = function l(t, n, e) {
var i = {},
a = o(function () {
return !!u[t]() || c[t]() != c;
}),
s = i[t] = a ? n(h) : u[t];e && (i[e] = s), r(r.P + r.F * a, "String", i);
},
h = l.trim = function (t, n) {
return t = String(i(t)), 1 & n && (t = t.replace(s, "")), 2 & n && (t = t.replace(f, "")), t;
};t.exports = l;
}, function (t, n) {
t.exports = {};
}, function (t, n, e) {
var r = e(4);t.exports = function (t, n) {
if (!r(t) || t._t !== n) throw TypeError("Incompatible receiver, " + n + " required!");return t;
};
}, function (t, n, e) {
"use strict";
var r = e(415)(!0);e(130)(String, "String", function (t) {
this._t = String(t), this._i = 0;
}, function () {
var t,
n = this._t,
e = this._i;return e >= n.length ? { value: void 0, done: !0 } : (t = r(n, e), this._i += t.length, { value: t, done: !1 });
});
}, function (t, n) {
t.exports = {};
}, function (t, n, e) {
var r = e(129);t.exports = function (t) {
return Object(r(t));
};
}, function (t, n, e) {
function r(t) {
return (r = "function" == typeof u && "symbol" == (typeof o === "undefined" ? "undefined" : (0, _typeof3.default)(o)) ? function (t) {
return typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t);
} : function (t) {
return t && "function" == typeof u && t.constructor === u && t !== u.prototype ? "symbol" : typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t);
})(t);
}function i(n) {
return "function" == typeof u && "symbol" === r(o) ? t.exports = i = function i(t) {
return r(t);
} : t.exports = i = function i(t) {
return t && "function" == typeof u && t.constructor === u && t !== u.prototype ? "symbol" : r(t);
}, i(n);
}var o = e(444),
u = e(446);t.exports = i;
}, function (t, n, e) {
var r = e(23);t.exports = Object("z").propertyIsEnumerable(0) ? Object : function (t) {
return "String" == r(t) ? t.split("") : Object(t);
};
}, function (t, n) {
n.f = {}.propertyIsEnumerable;
}, function (t, n, e) {
var r = e(23),
i = e(5)("toStringTag"),
o = "Arguments" == r(function () {
return arguments;
}()),
u = function u(t, n) {
try {
return t[n];
} catch (t) {}
};t.exports = function (t) {
var n, e, a;return void 0 === t ? "Undefined" : null === t ? "Null" : "string" == typeof (e = u(n = Object(t), i)) ? e : o ? r(n) : "Object" == (a = r(n)) && "function" == typeof n.callee ? "Arguments" : a;
};
}, function (t, n) {
t.exports = function (t) {
if ("function" != typeof t) throw TypeError(t + " is not a function!");return t;
};
}, function (t, n) {
t.exports = function (t, n) {
return { enumerable: !(1 & t), configurable: !(2 & t), writable: !(4 & t), value: n };
};
}, function (t, n, e) {
var r = e(191),
i = e(136);t.exports = Object.keys || function (t) {
return r(t, i);
};
}, function (t, n) {
var e = {}.toString;t.exports = function (t) {
return e.call(t).slice(8, -1);
};
}, function (t, n, e) {
var r = e(25).f,
i = e(53),
o = e(13)("toStringTag");t.exports = function (t, n, e) {
t && !i(t = e ? t : t.prototype, o) && r(t, o, { configurable: !0, value: n });
};
}, function (t, n, e) {
e(424);for (var r = e(14), i = e(40), o = e(60), u = e(13)("toStringTag"), a = "CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","), c = 0; c < a.length; c++) {
var s = a[c],
f = r[s],
l = f && f.prototype;l && !l[u] && i(l, u, s), o[s] = o.Array;
}
}, function (t, n, e) {
var r = e(37),
i = e(194),
o = e(195),
u = e(32),
a = e(92),
c = e(137),
s = {},
f = {},
n = t.exports = function (t, n, e, l, h) {
var p,
v,
d,
y,
g = h ? function () {
return t;
} : c(t),
m = r(e, l, n ? 2 : 1),
_ = 0;if ("function" != typeof g) throw TypeError(t + " is not iterable!");if (o(g)) {
for (p = a(t.length); p > _; _++) {
if ((y = n ? m(u(v = t[_])[0], v[1]) : m(t[_])) === s || y === f) return y;
}
} else for (d = g.call(t); !(v = d.next()).done;) {
if ((y = i(d, m, v.value, n)) === s || y === f) return y;
}
};n.BREAK = s, n.RETURN = f;
}, function (t, n, e) {
t.exports = e(438);
}, function (t, n, e) {
t.exports = e(153);
}, function (t, n, e) {
var r = e(2),
i = "__core-js_shared__",
o = r[i] || (r[i] = {});t.exports = function (t) {
return o[t] || (o[t] = {});
};
}, function (t, n, e) {
var r = e(19),
i = e(9),
o = e(45);t.exports = function (t) {
return function (n, e, u) {
var a,
c = r(n),
s = i(c.length),
f = o(u, s);if (t && e != e) {
for (; s > f;) {
if ((a = c[f++]) != a) return !0;
}
} else for (; s > f; f++) {
if ((t || f in c) && c[f] === e) return t || f || 0;
}return !t && -1;
};
};
}, function (t, n) {
n.f = Object.getOwnPropertySymbols;
}, function (t, n, e) {
var r = e(23);t.exports = Array.isArray || function (t) {
return "Array" == r(t);
};
}, function (t, n, e) {
var r = e(4),
i = e(23),
o = e(5)("match");t.exports = function (t) {
var n;return r(t) && (void 0 !== (n = t[o]) ? !!n : "RegExp" == i(t));
};
}, function (t, n, e) {
var r = e(5)("iterator"),
i = !1;try {
var o = [7][r]();o.return = function () {
i = !0;
}, Array.from(o, function () {
throw 2;
});
} catch (t) {}t.exports = function (t, n) {
if (!n && !i) return !1;var e = !1;try {
var o = [7],
u = o[r]();u.next = function () {
return { done: e = !0 };
}, o[r] = function () {
return u;
}, t(o);
} catch (t) {}return e;
};
}, function (t, n, e) {
"use strict";
var r = e(1);t.exports = function () {
var t = r(this),
n = "";return t.global && (n += "g"), t.ignoreCase && (n += "i"), t.multiline && (n += "m"), t.unicode && (n += "u"), t.sticky && (n += "y"), n;
};
}, function (t, n, e) {
"use strict";
var r = e(16),
i = e(17),
o = e(3),
u = e(28),
a = e(5);t.exports = function (t, n, e) {
var c = a(t),
s = e(u, c, ""[t]),
f = s[0],
l = s[1];o(function () {
var n = {};return n[c] = function () {
return 7;
}, 7 != ""[t](n);
}) && (i(String.prototype, t, f), r(RegExp.prototype, c, 2 == n ? function (t, n) {
return l.call(t, this, n);
} : function (t) {
return l.call(t, this);
}));
};
}, function (t, n, e) {
var r = e(1),
i = e(11),
o = e(5)("species");t.exports = function (t, n) {
var e,
u = r(t).constructor;return void 0 === u || void 0 == (e = r(u)[o]) ? n : i(e);
};
}, function (t, n, e) {
"use strict";
var r = e(2),
i = e(0),
o = e(17),
u = e(51),
a = e(38),
c = e(50),
s = e(49),
f = e(4),
l = e(3),
h = e(80),
p = e(55),
v = e(108);t.exports = function (t, n, e, d, y, g) {
var m = r[t],
_ = m,
w = y ? "set" : "add",
b = _ && _.prototype,
x = {},
S = function S(t) {
var n = b[t];o(b, t, "delete" == t ? function (t) {
return !(g && !f(t)) && n.call(this, 0 === t ? 0 : t);
} : "has" == t ? function (t) {
return !(g && !f(t)) && n.call(this, 0 === t ? 0 : t);
} : "get" == t ? function (t) {
return g && !f(t) ? void 0 : n.call(this, 0 === t ? 0 : t);
} : "add" == t ? function (t) {
return n.call(this, 0 === t ? 0 : t), this;
} : function (t, e) {
return n.call(this, 0 === t ? 0 : t, e), this;
});
};if ("function" == typeof _ && (g || b.forEach && !l(function () {
new _().entries().next();
}))) {
var O = new _(),
P = O[w](g ? {} : -0, 1) != O,
k = l(function () {
O.has(1);
}),
E = h(function (t) {
new _(t);
}),
j = !g && l(function () {
for (var t = new _(), n = 5; n--;) {
t[w](n, n);
}return !t.has(-0);
});E || (_ = n(function (n, e) {
s(n, _, t);var r = v(new m(), n, _);return void 0 != e && c(e, y, r[w], r), r;
}), _.prototype = b, b.constructor = _), (k || j) && (S("delete"), S("has"), y && S("get")), (j || P) && S(w), g && b.clear && delete b.clear;
} else _ = d.getConstructor(n, t, y, w), u(_.prototype, e), a.NEED = !0;return p(_, t), x[t] = _, i(i.G + i.W + i.F * (_ != m), x), g || d.setStrong(_, t, y), _;
};
}, function (t, n, e) {
for (var r, i = e(2), o = e(16), u = e(42), a = u("typed_array"), c = u("view"), s = !(!i.ArrayBuffer || !i.DataView), f = s, l = 0, h = 9, p = "Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(","); l < h;) {
(r = i[p[l++]]) ? (o(r.prototype, a, !0), o(r.prototype, c, !0)) : f = !1;
}t.exports = { ABV: s, CONSTR: f, TYPED: a, VIEW: c };
}, function (t, n, e) {
"use strict";
t.exports = e(43) || !e(3)(function () {
var t = Math.random();__defineSetter__.call(null, t, function () {}), delete e(2)[t];
});
}, function (t, n, e) {
"use strict";
var r = e(0);t.exports = function (t) {
r(r.S, t, { of: function of() {
for (var t = arguments.length, n = new Array(t); t--;) {
n[t] = arguments[t];
}return new this(n);
} });
};
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(11),
o = e(22),
u = e(50);t.exports = function (t) {
r(r.S, t, { from: function from(t) {
var n,
e,
r,
a,
c = arguments[1];return i(this), n = void 0 !== c, n && i(c), void 0 == t ? new this() : (e = [], n ? (r = 0, a = o(c, arguments[2], 2), u(t, !1, function (t) {
e.push(a(t, r++));
})) : u(t, !1, e.push, e), new this(e));
} });
};
}, function (t, n) {
function e() {
this._events = this._events || {}, this._maxListeners = this._maxListeners || void 0;
}function r(t) {
return "function" == typeof t;
}function i(t) {
return "number" == typeof t;
}function o(t) {
return "object" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) && null !== t;
}function u(t) {
return void 0 === t;
}t.exports = e, e.EventEmitter = e, e.prototype._events = void 0, e.prototype._maxListeners = void 0, e.defaultMaxListeners = 10, e.prototype.setMaxListeners = function (t) {
if (!i(t) || t < 0 || isNaN(t)) throw TypeError("n must be a positive number");return this._maxListeners = t, this;
}, e.prototype.emit = function (t) {
var n, e, i, a, c, s;if (this._events || (this._events = {}), "error" === t && (!this._events.error || o(this._events.error) && !this._events.error.length)) {
if ((n = arguments[1]) instanceof Error) throw n;var f = new Error('Uncaught, unspecified "error" event. (' + n + ")");throw f.context = n, f;
}if (e = this._events[t], u(e)) return !1;if (r(e)) switch (arguments.length) {case 1:
e.call(this);break;case 2:
e.call(this, arguments[1]);break;case 3:
e.call(this, arguments[1], arguments[2]);break;default:
a = Array.prototype.slice.call(arguments, 1), e.apply(this, a);} else if (o(e)) for (a = Array.prototype.slice.call(arguments, 1), s = e.slice(), i = s.length, c = 0; c < i; c++) {
s[c].apply(this, a);
}return !0;
}, e.prototype.addListener = function (t, n) {
var i;if (!r(n)) throw TypeError("listener must be a function");return this._events || (this._events = {}), this._events.newListener && this.emit("newListener", t, r(n.listener) ? n.listener : n), this._events[t] ? o(this._events[t]) ? this._events[t].push(n) : this._events[t] = [this._events[t], n] : this._events[t] = n, o(this._events[t]) && !this._events[t].warned && (i = u(this._maxListeners) ? e.defaultMaxListeners : this._maxListeners) && i > 0 && this._events[t].length > i && (this._events[t].warned = !0, console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[t].length), "function" == typeof console.trace && console.trace()), this;
}, e.prototype.on = e.prototype.addListener, e.prototype.once = function (t, n) {
function e() {
this.removeListener(t, e), i || (i = !0, n.apply(this, arguments));
}if (!r(n)) throw TypeError("listener must be a function");var i = !1;return e.listener = n, this.on(t, e), this;
}, e.prototype.removeListener = function (t, n) {
var e, i, u, a;if (!r(n)) throw TypeError("listener must be a function");if (!this._events || !this._events[t]) return this;if (e = this._events[t], u = e.length, i = -1, e === n || r(e.listener) && e.listener === n) delete this._events[t], this._events.removeListener && this.emit("removeListener", t, n);else if (o(e)) {
for (a = u; a-- > 0;) {
if (e[a] === n || e[a].listener && e[a].listener === n) {
i = a;break;
}
}if (i < 0) return this;1 === e.length ? (e.length = 0, delete this._events[t]) : e.splice(i, 1), this._events.removeListener && this.emit("removeListener", t, n);
}return this;
}, e.prototype.removeAllListeners = function (t) {
var n, e;if (!this._events) return this;if (!this._events.removeListener) return 0 === arguments.length ? this._events = {} : this._events[t] && delete this._events[t], this;if (0 === arguments.length) {
for (n in this._events) {
"removeListener" !== n && this.removeAllListeners(n);
}return this.removeAllListeners("removeListener"), this._events = {}, this;
}if (e = this._events[t], r(e)) this.removeListener(t, e);else if (e) for (; e.length;) {
this.removeListener(t, e[e.length - 1]);
}return delete this._events[t], this;
}, e.prototype.listeners = function (t) {
return this._events && this._events[t] ? r(this._events[t]) ? [this._events[t]] : this._events[t].slice() : [];
}, e.prototype.listenerCount = function (t) {
if (this._events) {
var n = this._events[t];if (r(n)) return 1;if (n) return n.length;
}return 0;
}, e.listenerCount = function (t, n) {
return t.listenerCount(n);
};
}, function (t, n) {
t.exports = !0;
}, function (t, n, e) {
var r = e(32),
i = e(417),
o = e(136),
u = e(134)("IE_PROTO"),
a = function a() {},
c = "prototype",
_s2 = function s() {
var t,
n = e(131)("iframe"),
r = o.length,
i = "<",
u = ">";for (n.style.display = "none", e(192).appendChild(n), n.src = "javascript:", t = n.contentWindow.document, t.open(), t.write(i + "script" + u + "document.F=Object" + i + "/script" + u), t.close(), _s2 = t.F; r--;) {
delete _s2[c][o[r]];
}return _s2();
};t.exports = Object.create || function (t, n) {
var e;return null !== t ? (a[c] = r(t), e = new a(), a[c] = null, e[u] = t) : e = _s2(), void 0 === n ? e : i(e, n);
};
}, function (t, n, e) {
var r = e(128),
i = Math.min;t.exports = function (t) {
return t > 0 ? i(r(t), 9007199254740991) : 0;
};
}, function (t, n) {
var e = 0,
r = Math.random();t.exports = function (t) {
return "Symbol(".concat(void 0 === t ? "" : t, ")_", (++e + r).toString(36));
};
}, function (t, n, e) {
var r = e(69),
i = e(13)("toStringTag"),
o = "Arguments" == r(function () {
return arguments;
}()),
u = function u(t, n) {
try {
return t[n];
} catch (t) {}
};t.exports = function (t) {
var n, e, a;return void 0 === t ? "Undefined" : null === t ? "Null" : "string" == typeof (e = u(n = Object(t), i)) ? e : o ? r(n) : "Object" == (a = r(n)) && "function" == typeof n.callee ? "Arguments" : a;
};
}, function (t, n, e) {
t.exports = e(427);
}, function (t, n, e) {
t.exports = e(429);
}, function (t, n) {
n.f = {}.propertyIsEnumerable;
}, function (t, n, e) {
t.exports = e(432);
}, function (t, n, e) {
var r = e(12),
i = e(6),
o = e(52);t.exports = function (t, n) {
var e = (i.Object || {})[t] || Object[t],
u = {};u[t] = n(e), r(r.S + r.F * o(function () {
e(1);
}), "Object", u);
};
}, function (t, n, e) {
t.exports = e(440);
}, function (t, n, e) {
var r = e(4),
i = e(2).document,
o = r(i) && r(i.createElement);t.exports = function (t) {
return o ? i.createElement(t) : {};
};
}, function (t, n, e) {
var r = e(2),
i = e(34),
o = e(43),
u = e(155),
a = e(8).f;t.exports = function (t) {
var n = i.Symbol || (i.Symbol = o ? {} : r.Symbol || {});"_" == t.charAt(0) || t in n || a(n, t, { value: u.f(t) });
};
}, function (t, n, e) {
var r = e(75)("keys"),
i = e(42);t.exports = function (t) {
return r[t] || (r[t] = i(t));
};
}, function (t, n) {
t.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
}, function (t, n, e) {
var r = e(2).document;t.exports = r && r.documentElement;
}, function (t, n, e) {
var r = e(4),
i = e(1),
o = function o(t, n) {
if (i(t), !r(n) && null !== n) throw TypeError(n + ": can't set as prototype!");
};t.exports = { set: Object.setPrototypeOf || ("__proto__" in {} ? function (t, n, r) {
try {
r = e(22)(Function.call, e(20).f(Object.prototype, "__proto__").set, 2), r(t, []), n = !(t instanceof Array);
} catch (t) {
n = !0;
}return function (t, e) {
return o(t, e), n ? t.__proto__ = e : r(t, e), t;
};
}({}, !1) : void 0), check: o };
}, function (t, n) {
t.exports = "\t\n\x0B\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF";
}, function (t, n, e) {
var r = e(4),
i = e(106).set;t.exports = function (t, n, e) {
var o,
u = n.constructor;return u !== e && "function" == typeof u && (o = u.prototype) !== e.prototype && r(o) && i && i(t, o), t;
};
}, function (t, n, e) {
"use strict";
var r = e(29),
i = e(28);t.exports = function (t) {
var n = String(i(this)),
e = "",
o = r(t);if (o < 0 || o == 1 / 0) throw RangeError("Count can't be negative");for (; o > 0; (o >>>= 1) && (n += n)) {
1 & o && (e += n);
}return e;
};
}, function (t, n) {
t.exports = Math.sign || function (t) {
return 0 == (t = +t) || t != t ? t : t < 0 ? -1 : 1;
};
}, function (t, n) {
var e = Math.expm1;t.exports = !e || e(10) > 22025.465794806718 || e(10) < 22025.465794806718 || -2e-17 != e(-2e-17) ? function (t) {
return 0 == (t = +t) ? t : t > -1e-6 && t < 1e-6 ? t + t * t / 2 : Math.exp(t) - 1;
} : e;
}, function (t, n, e) {
var r = e(29),
i = e(28);t.exports = function (t) {
return function (n, e) {
var o,
u,
a = String(i(n)),
c = r(e),
s = a.length;return c < 0 || c >= s ? t ? "" : void 0 : (o = a.charCodeAt(c), o < 55296 || o > 56319 || c + 1 === s || (u = a.charCodeAt(c + 1)) < 56320 || u > 57343 ? t ? a.charAt(c) : o : t ? a.slice(c, c + 2) : u - 56320 + (o - 55296 << 10) + 65536);
};
};
}, function (t, n, e) {
"use strict";
var r = e(43),
i = e(0),
o = e(17),
u = e(16),
a = e(15),
c = e(57),
s = e(114),
f = e(55),
l = e(21),
h = e(5)("iterator"),
p = !([].keys && "next" in [].keys()),
v = "keys",
d = "values",
y = function y() {
return this;
};t.exports = function (t, n, e, g, m, _, w) {
s(e, n, g);var b,
x,
S,
O = function O(t) {
if (!p && t in j) return j[t];switch (t) {case v:case d:
return function () {
return new e(this, t);
};}return function () {
return new e(this, t);
};
},
P = n + " Iterator",
k = m == d,
E = !1,
j = t.prototype,
A = j[h] || j["@@iterator"] || m && j[m],
M = !p && A || O(m),
T = m ? k ? O("entries") : M : void 0,
F = "Array" == n ? j.entries || A : A;if (F && (S = l(F.call(new t()))) !== Object.prototype && S.next && (f(S, P, !0), r || a(S, h) || u(S, h, y)), k && A && A.name !== d && (E = !0, M = function M() {
return A.call(this);
}), r && !w || !p && !E && j[h] || u(j, h, M), c[n] = M, c[P] = y, m) if (b = { values: k ? M : O(d), keys: _ ? M : O(v), entries: T }, w) for (x in b) {
x in j || o(j, x, b[x]);
} else i(i.P + i.F * (p || E), n, b);return b;
};
}, function (t, n, e) {
"use strict";
var r = e(46),
i = e(41),
o = e(55),
u = {};e(16)(u, e(5)("iterator"), function () {
return this;
}), t.exports = function (t, n, e) {
t.prototype = r(u, { next: i(1, e) }), o(t, n + " Iterator");
};
}, function (t, n, e) {
var r = e(79),
i = e(28);t.exports = function (t, n, e) {
if (r(n)) throw TypeError("String#" + e + " doesn't accept regex!");return String(i(t));
};
}, function (t, n, e) {
var r = e(5)("match");t.exports = function (t) {
var n = /./;try {
"/./"[t](n);
} catch (e) {
try {
return n[r] = !1, !"/./"[t](n);
} catch (t) {}
}return !0;
};
}, function (t, n, e) {
var r = e(57),
i = e(5)("iterator"),
o = Array.prototype;t.exports = function (t) {
return void 0 !== t && (r.Array === t || o[i] === t);
};
}, function (t, n, e) {
"use strict";
var r = e(8),
i = e(41);t.exports = function (t, n, e) {
n in t ? r.f(t, n, i(0, e)) : t[n] = e;
};
}, function (t, n, e) {
var r = e(65),
i = e(5)("iterator"),
o = e(57);t.exports = e(34).getIteratorMethod = function (t) {
if (void 0 != t) return t[i] || t["@@iterator"] || o[r(t)];
};
}, function (t, n, e) {
var r = e(307);t.exports = function (t, n) {
return new (r(t))(n);
};
}, function (t, n, e) {
"use strict";
var r = e(10),
i = e(45),
o = e(9);t.exports = function (t) {
for (var n = r(this), e = o(n.length), u = arguments.length, a = i(u > 1 ? arguments[1] : void 0, e), c = u > 2 ? arguments[2] : void 0, s = void 0 === c ? e : i(c, e); s > a;) {
n[a++] = t;
}return n;
};
}, function (t, n, e) {
"use strict";
var r = e(39),
i = e(171),
o = e(57),
u = e(19);t.exports = e(113)(Array, "Array", function (t, n) {
this._t = u(t), this._i = 0, this._k = n;
}, function () {
var t = this._t,
n = this._k,
e = this._i++;return !t || e >= t.length ? (this._t = void 0, i(1)) : "keys" == n ? i(0, e) : "values" == n ? i(0, t[e]) : i(0, [e, t[e]]);
}, "values"), o.Arguments = o.Array, r("keys"), r("values"), r("entries");
}, function (t, n, e) {
var r,
i,
o,
u = e(22),
a = e(161),
c = e(105),
s = e(101),
f = e(2),
l = f.process,
h = f.setImmediate,
p = f.clearImmediate,
v = f.MessageChannel,
d = f.Dispatch,
y = 0,
g = {},
m = "onreadystatechange",
_ = function _() {
var t = +this;if (g.hasOwnProperty(t)) {
var n = g[t];delete g[t], n();
}
},
w = function w(t) {
_.call(t.data);
};h && p || (h = function h(t) {
for (var n = [], e = 1; arguments.length > e;) {
n.push(arguments[e++]);
}return g[++y] = function () {
a("function" == typeof t ? t : Function(t), n);
}, r(y), y;
}, p = function p(t) {
delete g[t];
}, "process" == e(23)(l) ? r = function r(t) {
l.nextTick(u(_, t, 1));
} : d && d.now ? r = function r(t) {
d.now(u(_, t, 1));
} : v ? (i = new v(), o = i.port2, i.port1.onmessage = w, r = u(o.postMessage, o, 1)) : f.addEventListener && "function" == typeof postMessage && !f.importScripts ? (r = function r(t) {
f.postMessage(t + "", "*");
}, f.addEventListener("message", w, !1)) : r = m in s("script") ? function (t) {
c.appendChild(s("script"))[m] = function () {
c.removeChild(this), _.call(t);
};
} : function (t) {
setTimeout(u(_, t, 1), 0);
}), t.exports = { set: h, clear: p };
}, function (t, n, e) {
var r = e(2),
i = e(123).set,
o = r.MutationObserver || r.WebKitMutationObserver,
u = r.process,
a = r.Promise,
c = "process" == e(23)(u);t.exports = function () {
var t,
n,
e,
s = function s() {
var r, i;for (c && (r = u.domain) && r.exit(); t;) {
i = t.fn, t = t.next;try {
i();
} catch (r) {
throw t ? e() : n = void 0, r;
}
}n = void 0, r && r.enter();
};if (c) e = function e() {
u.nextTick(s);
};else if (!o || r.navigator && r.navigator.standalone) {
if (a && a.resolve) {
var f = a.resolve();e = function e() {
f.then(s);
};
} else e = function e() {
i.call(r, s);
};
} else {
var l = !0,
h = document.createTextNode("");new o(s).observe(h, { characterData: !0 }), e = function e() {
h.data = l = !l;
};
}return function (r) {
var i = { fn: r, next: void 0 };n && (n.next = i), t || (t = i, e()), n = i;
};
};
}, function (t, n, e) {
"use strict";
function r(t) {
var n, e;this.promise = new t(function (t, r) {
if (void 0 !== n || void 0 !== e) throw TypeError("Bad Promise constructor");n = t, e = r;
}), this.resolve = i(n), this.reject = i(e);
}var i = e(11);t.exports.f = function (t) {
return new r(t);
};
}, function (t, n, e) {
"use strict";
function r(t, n, e) {
var r,
i,
o,
u = new Array(e),
a = 8 * e - n - 1,
c = (1 << a) - 1,
s = c >> 1,
f = 23 === n ? G(2, -24) - G(2, -77) : 0,
l = 0,
h = t < 0 || 0 === t && 1 / t < 0 ? 1 : 0;for (t = U(t), t != t || t === R ? (i = t != t ? 1 : 0, r = c) : (r = W(V(t) / B), t * (o = G(2, -r)) < 1 && (r--, o *= 2), t += r + s >= 1 ? f / o : f * G(2, 1 - s), t * o >= 2 && (r++, o /= 2), r + s >= c ? (i = 0, r = c) : r + s >= 1 ? (i = (t * o - 1) * G(2, n), r += s) : (i = t * G(2, s - 1) * G(2, n), r = 0)); n >= 8; u[l++] = 255 & i, i /= 256, n -= 8) {}for (r = r << n | i, a += n; a > 0; u[l++] = 255 & r, r /= 256, a -= 8) {}return u[--l] |= 128 * h, u;
}function i(t, n, e) {
var r,
i = 8 * e - n - 1,
o = (1 << i) - 1,
u = o >> 1,
a = i - 7,
c = e - 1,
s = t[c--],
f = 127 & s;for (s >>= 7; a > 0; f = 256 * f + t[c], c--, a -= 8) {}for (r = f & (1 << -a) - 1, f >>= -a, a += n; a > 0; r = 256 * r + t[c], c--, a -= 8) {}if (0 === f) f = 1 - u;else {
if (f === o) return r ? NaN : s ? -R : R;r += G(2, n), f -= u;
}return (s ? -1 : 1) * r * G(2, f - n);
}function o(t) {
return t[3] << 24 | t[2] << 16 | t[1] << 8 | t[0];
}function u(t) {
return [255 & t];
}function a(t) {
return [255 & t, t >> 8 & 255];
}function c(t) {
return [255 & t, t >> 8 & 255, t >> 16 & 255, t >> 24 & 255];
}function s(t) {
return r(t, 52, 8);
}function f(t) {
return r(t, 23, 4);
}function l(t, n, e) {
k(t[T], n, { get: function get() {
return this[e];
} });
}function h(t, n, e, r) {
var i = +e,
o = O(i);if (o + n > t[K]) throw D(F);var u = t[J]._b,
a = o + t[Y],
c = u.slice(a, a + n);return r ? c : c.reverse();
}function p(t, n, e, r, i, o) {
var u = +e,
a = O(u);if (a + n > t[K]) throw D(F);for (var c = t[J]._b, s = a + t[Y], f = r(+i), l = 0; l < n; l++) {
c[s + l] = f[o ? l : n - l - 1];
}
}var v = e(2),
d = e(7),
y = e(43),
g = e(85),
m = e(16),
_ = e(51),
w = e(3),
b = e(49),
x = e(29),
S = e(9),
O = e(180),
P = e(47).f,
k = e(8).f,
E = e(121),
j = e(55),
A = "ArrayBuffer",
M = "DataView",
T = "prototype",
F = "Wrong index!",
_L2 = v[A],
_I = v[M],
N = v.Math,
D = v.RangeError,
R = v.Infinity,
C = _L2,
U = N.abs,
G = N.pow,
W = N.floor,
V = N.log,
B = N.LN2,
q = "buffer",
z = "byteLength",
H = "byteOffset",
J = d ? "_b" : q,
K = d ? "_l" : z,
Y = d ? "_o" : H;if (g.ABV) {
if (!w(function () {
_L2(1);
}) || !w(function () {
new _L2(-1);
}) || w(function () {
return new _L2(), new _L2(1.5), new _L2(NaN), _L2.name != A;
})) {
_L2 = function L(t) {
return b(this, _L2), new C(O(t));
};for (var $, Q = _L2[T] = C[T], X = P(C), Z = 0; X.length > Z;) {
($ = X[Z++]) in _L2 || m(_L2, $, C[$]);
}y || (Q.constructor = _L2);
}var tt = new _I(new _L2(2)),
nt = _I[T].setInt8;tt.setInt8(0, 2147483648), tt.setInt8(1, 2147483649), !tt.getInt8(0) && tt.getInt8(1) || _(_I[T], { setInt8: function setInt8(t, n) {
nt.call(this, t, n << 24 >> 24);
}, setUint8: function setUint8(t, n) {
nt.call(this, t, n << 24 >> 24);
} }, !0);
} else _L2 = function _L(t) {
b(this, _L2, A);var n = O(t);this._b = E.call(new Array(n), 0), this[K] = n;
}, _I = function I(t, n, e) {
b(this, _I, M), b(t, _L2, M);var r = t[K],
i = x(n);if (i < 0 || i > r) throw D("Wrong offset!");if (e = void 0 === e ? r - i : S(e), i + e > r) throw D("Wrong length!");this[J] = t, this[Y] = i, this[K] = e;
}, d && (l(_L2, z, "_l"), l(_I, q, "_b"), l(_I, z, "_l"), l(_I, H, "_o")), _(_I[T], { getInt8: function getInt8(t) {
return h(this, 1, t)[0] << 24 >> 24;
}, getUint8: function getUint8(t) {
return h(this, 1, t)[0];
}, getInt16: function getInt16(t) {
var n = h(this, 2, t, arguments[1]);return (n[1] << 8 | n[0]) << 16 >> 16;
}, getUint16: function getUint16(t) {
var n = h(this, 2, t, arguments[1]);return n[1] << 8 | n[0];
}, getInt32: function getInt32(t) {
return o(h(this, 4, t, arguments[1]));
}, getUint32: function getUint32(t) {
return o(h(this, 4, t, arguments[1])) >>> 0;
}, getFloat32: function getFloat32(t) {
return i(h(this, 4, t, arguments[1]), 23, 4);
}, getFloat64: function getFloat64(t) {
return i(h(this, 8, t, arguments[1]), 52, 8);
}, setInt8: function setInt8(t, n) {
p(this, 1, t, u, n);
}, setUint8: function setUint8(t, n) {
p(this, 1, t, u, n);
}, setInt16: function setInt16(t, n) {
p(this, 2, t, a, n, arguments[2]);
}, setUint16: function setUint16(t, n) {
p(this, 2, t, a, n, arguments[2]);
}, setInt32: function setInt32(t, n) {
p(this, 4, t, c, n, arguments[2]);
}, setUint32: function setUint32(t, n) {
p(this, 4, t, c, n, arguments[2]);
}, setFloat32: function setFloat32(t, n) {
p(this, 4, t, f, n, arguments[2]);
}, setFloat64: function setFloat64(t, n) {
p(this, 8, t, s, n, arguments[2]);
} });j(_L2, A), j(_I, M), m(_I[T], g.VIEW, !0), n[A] = _L2, n[M] = _I;
}, function (t, n, e) {
var r = e(2),
i = r.navigator;t.exports = i && i.userAgent || "";
}, function (t, n) {
var e = Math.ceil,
r = Math.floor;t.exports = function (t) {
return isNaN(t = +t) ? 0 : (t > 0 ? r : e)(t);
};
}, function (t, n) {
t.exports = function (t) {
if (void 0 == t) throw TypeError("Can't call method on " + t);return t;
};
}, function (t, n, e) {
"use strict";
var r = e(90),
i = e(12),
o = e(190),
u = e(40),
a = e(53),
c = e(60),
s = e(416),
f = e(70),
l = e(193),
h = e(13)("iterator"),
p = !([].keys && "next" in [].keys()),
v = "keys",
d = "values",
y = function y() {
return this;
};t.exports = function (t, n, e, g, m, _, w) {
s(e, n, g);var b,
x,
S,
O = function O(t) {
if (!p && t in j) return j[t];switch (t) {case v:case d:
return function () {
return new e(this, t);
};}return function () {
return new e(this, t);
};
},
P = n + " Iterator",
k = m == d,
E = !1,
j = t.prototype,
A = j[h] || j["@@iterator"] || m && j[m],
M = !p && A || O(m),
T = m ? k ? O("entries") : M : void 0,
F = "Array" == n ? j.entries || A : A;if (F && (S = l(F.call(new t()))) !== Object.prototype && S.next && (f(S, P, !0), r || a(S, h) || u(S, h, y)), k && A && A.name !== d && (E = !0, M = function M() {
return A.call(this);
}), r && !w || !p && !E && j[h] || u(j, h, M), c[n] = M, c[P] = y, m) if (b = { values: k ? M : O(d), keys: _ ? M : O(v), entries: T }, w) for (x in b) {
x in j || o(j, x, b[x]);
} else i(i.P + i.F * (p || E), n, b);return b;
};
}, function (t, n, e) {
var r = e(26),
i = e(14).document,
o = r(i) && r(i.createElement);t.exports = function (t) {
return o ? i.createElement(t) : {};
};
}, function (t, n, e) {
var r = e(26);t.exports = function (t, n) {
if (!r(t)) return t;var e, i;if (n && "function" == typeof (e = t.toString) && !r(i = e.call(t))) return i;if ("function" == typeof (e = t.valueOf) && !r(i = e.call(t))) return i;if (!n && "function" == typeof (e = t.toString) && !r(i = e.call(t))) return i;throw TypeError("Can't convert object to primitive value");
};
}, function (t, n, e) {
var r = e(69);t.exports = Object("z").propertyIsEnumerable(0) ? Object : function (t) {
return "String" == r(t) ? t.split("") : Object(t);
};
}, function (t, n, e) {
var r = e(135)("keys"),
i = e(93);t.exports = function (t) {
return r[t] || (r[t] = i(t));
};
}, function (t, n, e) {
var r = e(14),
i = "__core-js_shared__",
o = r[i] || (r[i] = {});t.exports = function (t) {
return o[t] || (o[t] = {});
};
}, function (t, n) {
t.exports = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
}, function (t, n, e) {
var r = e(94),
i = e(13)("iterator"),
o = e(60);t.exports = e(6).getIteratorMethod = function (t) {
if (void 0 != t) return t[i] || t["@@iterator"] || o[r(t)];
};
}, function (t, n, e) {
function r(t, n) {
var e = [],
r = !0,
i = !1,
o = void 0;try {
for (var a, c = u(t); !(r = (a = c.next()).done) && (e.push(a.value), !n || e.length !== n); r = !0) {}
} catch (t) {
i = !0, o = t;
} finally {
try {
r || null == c.return || c.return();
} finally {
if (i) throw o;
}
}return e;
}function i(t, n) {
if (Array.isArray(t)) return t;if (o(Object(t))) return r(t, n);throw new TypeError("Invalid attempt to destructure non-iterable instance");
}var o = e(422),
u = e(95);t.exports = i;
}, function (t, n) {
n.f = Object.getOwnPropertySymbols;
}, function (t, n, e) {
function r(t) {
return function () {
var n = this,
e = arguments;return new i(function (r, o) {
function u(t, n) {
try {
var e = s[t](n),
u = e.value;
} catch (t) {
return void o(t);
}e.done ? r(u) : i.resolve(u).then(a, c);
}function a(t) {
u("next", t);
}function c(t) {
u("throw", t);
}var s = t.apply(n, e);a();
});
};
}var i = e(98);t.exports = r;
}, function (t, n) {}, function (t, n) {
t.exports = function (t, n, e, r) {
if (!(t instanceof n) || void 0 !== r && r in t) throw TypeError(e + ": incorrect invocation!");return t;
};
}, function (t, n, e) {
"use strict";
function r(t) {
var n, e;this.promise = new t(function (t, r) {
if (void 0 !== n || void 0 !== e) throw TypeError("Bad Promise constructor");n = t, e = r;
}), this.resolve = i(n), this.reject = i(e);
}var i = e(66);t.exports.f = function (t) {
return new r(t);
};
}, function (t, n, e) {
var r = e(40);t.exports = function (t, n, e) {
for (var i in n) {
e && t[i] ? t[i] = n[i] : r(t, i, n[i]);
}return t;
};
}, function (t, n, e) {
"use strict";
function r(t) {
return function () {
var n = t.apply(this, arguments);return new o.a(function (t, e) {
function r(i, u) {
try {
var a = n[i](u),
c = a.value;
} catch (t) {
return void e(t);
}if (!a.done) return o.a.resolve(c).then(function (t) {
r("next", t);
}, function (t) {
r("throw", t);
});t(c);
}return r("next");
});
};
}Object.defineProperty(n, "__esModule", { value: !0 }), e.d(n, "throttle", function () {
return c;
}), e.d(n, "getDataByPath", function () {
return s;
}), e.d(n, "mixin", function () {
return f;
}), n._asyncToGenerator = r;var i = e(98),
o = e.n(i),
u = e(96),
a = e.n(u),
c = function c(t, n) {
var e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null,
r = function r() {
for (var r = arguments.length, i = new Array(r), o = 0; o < r; o++) {
i[o] = arguments[o];
}t._timeout && clearTimeout(t._timeout), t._timeout = setTimeout(function () {
return t.apply(e, i);
}, n);
};return r._real = t, r;
},
s = function s(t, n) {
for (var e = n.replace(/(\[|\])/g, ".").replace(/\.+/g, ".").split(".").filter(function (t) {
return !!t;
}), r = e.pop(); e.length;) {
t = t[e.shift()];
}return { lastObj: t, lastKey: r };
},
f = function f() {
for (var t = function t() {}, n = arguments.length, e = new Array(n), r = 0; r < n; r++) {
e[r] = arguments[r];
}return a.a.apply(Object, [t.prototype].concat(e)), t;
};
}, function (t, n) {
function e(t, n) {
if (!(t instanceof n)) throw new TypeError("Cannot call a class as a function");
}t.exports = e;
}, function (t, n, e) {
function r(t, n) {
for (var e = 0; e < n.length; e++) {
var r = n[e];r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), o(t, r.key, r);
}
}function i(t, n, e) {
return n && r(t.prototype, n), e && r(t, e), t;
}var o = e(100);t.exports = i;
}, function (t, n, e) {
n.f = e(13);
}, function (t, n, e) {
var r = e(93)("meta"),
i = e(26),
o = e(53),
u = e(25).f,
a = 0,
c = Object.isExtensible || function () {
return !0;
},
s = !e(52)(function () {
return c(Object.preventExtensions({}));
}),
f = function f(t) {
u(t, r, { value: { i: "O" + ++a, w: {} } });
},
l = function l(t, n) {
if (!i(t)) return "symbol" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)) ? t : ("string" == typeof t ? "S" : "P") + t;if (!o(t, r)) {
if (!c(t)) return "F";if (!n) return "E";f(t);
}return t[r].i;
},
h = function h(t, n) {
if (!o(t, r)) {
if (!c(t)) return !0;if (!n) return !1;f(t);
}return t[r].w;
},
p = function p(t) {
return s && v.NEED && c(t) && !o(t, r) && f(t), t;
},
v = t.exports = { KEY: r, NEED: !1, fastKey: l, getWeak: h, onFreeze: p };
}, function (t, n, e) {
var r = e(14),
i = e(6),
o = e(90),
u = e(148),
a = e(25).f;t.exports = function (t) {
var n = i.Symbol || (i.Symbol = o ? {} : r.Symbol || {});"_" == t.charAt(0) || t in n || a(n, t, { value: u.f(t) });
};
}, function (t, n, e) {
var r = e(97),
i = e(67),
o = e(54),
u = e(132),
a = e(53),
c = e(189),
s = Object.getOwnPropertyDescriptor;n.f = e(33) ? s : function (t, n) {
if (t = o(t), n = u(n, !0), c) try {
return s(t, n);
} catch (t) {}if (a(t, n)) return i(!r.f.call(t, n), t[n]);
};
}, function (t, n, e) {
t.exports = e(463);
}, function (t, n, e) {
var r = function () {
return this;
}() || Function("return this")(),
i = r.regeneratorRuntime && Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime") >= 0,
o = i && r.regeneratorRuntime;if (r.regeneratorRuntime = void 0, t.exports = e(215), i) r.regeneratorRuntime = o;else try {
delete r.regeneratorRuntime;
} catch (t) {
r.regeneratorRuntime = void 0;
}
}, function (t, n, e) {
t.exports = !e(7) && !e(3)(function () {
return 7 != Object.defineProperty(e(101)("div"), "a", { get: function get() {
return 7;
} }).a;
});
}, function (t, n, e) {
n.f = e(5);
}, function (t, n, e) {
var r = e(15),
i = e(19),
o = e(76)(!1),
u = e(103)("IE_PROTO");t.exports = function (t, n) {
var e,
a = i(t),
c = 0,
s = [];for (e in a) {
e != u && r(a, e) && s.push(e);
}for (; n.length > c;) {
r(a, e = n[c++]) && (~o(s, e) || s.push(e));
}return s;
};
}, function (t, n, e) {
var r = e(8),
i = e(1),
o = e(44);t.exports = e(7) ? Object.defineProperties : function (t, n) {
i(t);for (var e, u = o(n), a = u.length, c = 0; a > c;) {
r.f(t, e = u[c++], n[e]);
}return t;
};
}, function (t, n, e) {
var r = e(19),
i = e(47).f,
o = {}.toString,
u = "object" == (typeof window === "undefined" ? "undefined" : (0, _typeof3.default)(window)) && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [],
a = function a(t) {
try {
return i(t);
} catch (t) {
return u.slice();
}
};t.exports.f = function (t) {
return u && "[object Window]" == o.call(t) ? a(t) : i(r(t));
};
}, function (t, n, e) {
"use strict";
var r = e(44),
i = e(77),
o = e(64),
u = e(10),
a = e(63),
c = Object.assign;t.exports = !c || e(3)(function () {
var t = {},
n = {},
e = Symbol(),
r = "abcdefghijklmnopqrst";return t[e] = 7, r.split("").forEach(function (t) {
n[t] = t;
}), 7 != c({}, t)[e] || Object.keys(c({}, n)).join("") != r;
}) ? function (t, n) {
for (var e = u(t), c = arguments.length, s = 1, f = i.f, l = o.f; c > s;) {
for (var h, p = a(arguments[s++]), v = f ? r(p).concat(f(p)) : r(p), d = v.length, y = 0; d > y;) {
l.call(p, h = v[y++]) && (e[h] = p[h]);
}
}return e;
} : c;
}, function (t, n, e) {
"use strict";
var r = e(11),
i = e(4),
o = e(161),
u = [].slice,
a = {},
c = function c(t, n, e) {
if (!(n in a)) {
for (var r = [], i = 0; i < n; i++) {
r[i] = "a[" + i + "]";
}a[n] = Function("F,a", "return new F(" + r.join(",") + ")");
}return a[n](t, e);
};t.exports = Function.bind || function (t) {
var n = r(this),
e = u.call(arguments, 1),
a = function a() {
var r = e.concat(u.call(arguments));return this instanceof a ? c(n, r.length, r) : o(n, r, t);
};return i(n.prototype) && (a.prototype = n.prototype), a;
};
}, function (t, n) {
t.exports = function (t, n, e) {
var r = void 0 === e;switch (n.length) {case 0:
return r ? t() : t.call(e);case 1:
return r ? t(n[0]) : t.call(e, n[0]);case 2:
return r ? t(n[0], n[1]) : t.call(e, n[0], n[1]);case 3:
return r ? t(n[0], n[1], n[2]) : t.call(e, n[0], n[1], n[2]);case 4:
return r ? t(n[0], n[1], n[2], n[3]) : t.call(e, n[0], n[1], n[2], n[3]);}return t.apply(e, n);
};
}, function (t, n, e) {
var r = e(2).parseInt,
i = e(56).trim,
o = e(107),
u = /^[-+]?0[xX]/;t.exports = 8 !== r(o + "08") || 22 !== r(o + "0x16") ? function (t, n) {
var e = i(String(t), 3);return r(e, n >>> 0 || (u.test(e) ? 16 : 10));
} : r;
}, function (t, n, e) {
var r = e(2).parseFloat,
i = e(56).trim;t.exports = 1 / r(e(107) + "-0") != -1 / 0 ? function (t) {
var n = i(String(t), 3),
e = r(n);return 0 === e && "-" == n.charAt(0) ? -0 : e;
} : r;
}, function (t, n, e) {
var r = e(23);t.exports = function (t, n) {
if ("number" != typeof t && "Number" != r(t)) throw TypeError(n);return +t;
};
}, function (t, n, e) {
var r = e(4),
i = Math.floor;t.exports = function (t) {
return !r(t) && isFinite(t) && i(t) === t;
};
}, function (t, n) {
t.exports = Math.log1p || function (t) {
return (t = +t) > -1e-8 && t < 1e-8 ? t - t * t / 2 : Math.log(1 + t);
};
}, function (t, n, e) {
var r = e(110),
i = Math.pow,
o = i(2, -52),
u = i(2, -23),
a = i(2, 127) * (2 - u),
c = i(2, -126),
s = function s(t) {
return t + 1 / o - 1 / o;
};t.exports = Math.fround || function (t) {
var n,
e,
i = Math.abs(t),
f = r(t);return i < c ? f * s(i / c / u) * c * u : (n = (1 + u / o) * i, e = n - (n - i), e > a || e != e ? f * (1 / 0) : f * e);
};
}, function (t, n, e) {
var r = e(1);t.exports = function (t, n, e, i) {
try {
return i ? n(r(e)[0], e[1]) : n(e);
} catch (n) {
var o = t.return;throw void 0 !== o && r(o.call(t)), n;
}
};
}, function (t, n, e) {
var r = e(11),
i = e(10),
o = e(63),
u = e(9);t.exports = function (t, n, e, a, c) {
r(n);var s = i(t),
f = o(s),
l = u(s.length),
h = c ? l - 1 : 0,
p = c ? -1 : 1;if (e < 2) for (;;) {
if (h in f) {
a = f[h], h += p;break;
}if (h += p, c ? h < 0 : l <= h) throw TypeError("Reduce of empty array with no initial value");
}for (; c ? h >= 0 : l > h; h += p) {
h in f && (a = n(a, f[h], h, s));
}return a;
};
}, function (t, n, e) {
"use strict";
var r = e(10),
i = e(45),
o = e(9);t.exports = [].copyWithin || function (t, n) {
var e = r(this),
u = o(e.length),
a = i(t, u),
c = i(n, u),
s = arguments.length > 2 ? arguments[2] : void 0,
f = Math.min((void 0 === s ? u : i(s, u)) - c, u - a),
l = 1;for (c < a && a < c + f && (l = -1, c += f - 1, a += f - 1); f-- > 0;) {
c in e ? e[a] = e[c] : delete e[a], a += l, c += l;
}return e;
};
}, function (t, n) {
t.exports = function (t, n) {
return { value: n, done: !!t };
};
}, function (t, n, e) {
e(7) && "g" != /./g.flags && e(8).f(RegExp.prototype, "flags", { configurable: !0, get: e(81) });
}, function (t, n) {
t.exports = function (t) {
try {
return { e: !1, v: t() };
} catch (t) {
return { e: !0, v: t };
}
};
}, function (t, n, e) {
var r = e(1),
i = e(4),
o = e(125);t.exports = function (t, n) {
if (r(t), i(n) && n.constructor === t) return n;var e = o.f(t);return (0, e.resolve)(n), e.promise;
};
}, function (t, n, e) {
"use strict";
var r = e(176),
i = e(58),
o = "Map";t.exports = e(84)(o, function (t) {
return function () {
return t(this, arguments.length > 0 ? arguments[0] : void 0);
};
}, { get: function get(t) {
var n = r.getEntry(i(this, o), t);return n && n.v;
}, set: function set(t, n) {
return r.def(i(this, o), 0 === t ? 0 : t, n);
} }, r, !0);
}, function (t, n, e) {
"use strict";
var r = e(8).f,
i = e(46),
o = e(51),
u = e(22),
a = e(49),
c = e(50),
s = e(113),
f = e(171),
l = e(48),
h = e(7),
p = e(38).fastKey,
v = e(58),
d = h ? "_s" : "size",
y = function y(t, n) {
var e,
r = p(n);if ("F" !== r) return t._i[r];for (e = t._f; e; e = e.n) {
if (e.k == n) return e;
}
};t.exports = { getConstructor: function getConstructor(t, n, e, s) {
var f = t(function (t, r) {
a(t, f, n, "_i"), t._t = n, t._i = i(null), t._f = void 0, t._l = void 0, t[d] = 0, void 0 != r && c(r, e, t[s], t);
});return o(f.prototype, { clear: function clear() {
for (var t = v(this, n), e = t._i, r = t._f; r; r = r.n) {
r.r = !0, r.p && (r.p = r.p.n = void 0), delete e[r.i];
}t._f = t._l = void 0, t[d] = 0;
}, delete: function _delete(t) {
var e = v(this, n),
r = y(e, t);if (r) {
var i = r.n,
o = r.p;delete e._i[r.i], r.r = !0, o && (o.n = i), i && (i.p = o), e._f == r && (e._f = i), e._l == r && (e._l = o), e[d]--;
}return !!r;
}, forEach: function forEach(t) {
v(this, n);for (var e, r = u(t, arguments.length > 1 ? arguments[1] : void 0, 3); e = e ? e.n : this._f;) {
for (r(e.v, e.k, this); e && e.r;) {
e = e.p;
}
}
}, has: function has(t) {
return !!y(v(this, n), t);
} }), h && r(f.prototype, "size", { get: function get() {
return v(this, n)[d];
} }), f;
}, def: function def(t, n, e) {
var r,
i,
o = y(t, n);return o ? o.v = e : (t._l = o = { i: i = p(n, !0), k: n, v: e, p: r = t._l, n: void 0, r: !1 }, t._f || (t._f = o), r && (r.n = o), t[d]++, "F" !== i && (t._i[i] = o)), t;
}, getEntry: y, setStrong: function setStrong(t, n, e) {
s(t, n, function (t, e) {
this._t = v(t, n), this._k = e, this._l = void 0;
}, function () {
for (var t = this, n = t._k, e = t._l; e && e.r;) {
e = e.p;
}return t._t && (t._l = e = e ? e.n : t._t._f) ? "keys" == n ? f(0, e.k) : "values" == n ? f(0, e.v) : f(0, [e.k, e.v]) : (t._t = void 0, f(1));
}, e ? "entries" : "values", !e, !0), l(n);
} };
}, function (t, n, e) {
"use strict";
var r = e(176),
i = e(58),
o = "Set";t.exports = e(84)(o, function (t) {
return function () {
return t(this, arguments.length > 0 ? arguments[0] : void 0);
};
}, { add: function add(t) {
return r.def(i(this, o), t = 0 === t ? 0 : t, t);
} }, r);
}, function (t, n, e) {
"use strict";
var r,
i = e(31)(0),
o = e(17),
u = e(38),
a = e(159),
c = e(179),
s = e(4),
f = e(3),
l = e(58),
h = "WeakMap",
p = u.getWeak,
v = Object.isExtensible,
d = c.ufstore,
y = {},
g = function g(t) {
return function () {
return t(this, arguments.length > 0 ? arguments[0] : void 0);
};
},
m = { get: function get(t) {
if (s(t)) {
var n = p(t);return !0 === n ? d(l(this, h)).get(t) : n ? n[this._i] : void 0;
}
}, set: function set(t, n) {
return c.def(l(this, h), t, n);
} },
_ = t.exports = e(84)(h, g, m, c, !0, !0);f(function () {
return 7 != new _().set((Object.freeze || Object)(y), 7).get(y);
}) && (r = c.getConstructor(g, h), a(r.prototype, m), u.NEED = !0, i(["delete", "has", "get", "set"], function (t) {
var n = _.prototype,
e = n[t];o(n, t, function (n, i) {
if (s(n) && !v(n)) {
this._f || (this._f = new r());var o = this._f[t](n, i);return "set" == t ? this : o;
}return e.call(this, n, i);
});
}));
}, function (t, n, e) {
"use strict";
var r = e(51),
i = e(38).getWeak,
o = e(1),
u = e(4),
a = e(49),
c = e(50),
s = e(31),
f = e(15),
l = e(58),
h = s(5),
p = s(6),
v = 0,
d = function d(t) {
return t._l || (t._l = new y());
},
y = function y() {
this.a = [];
},
g = function g(t, n) {
return h(t.a, function (t) {
return t[0] === n;
});
};y.prototype = { get: function get(t) {
var n = g(this, t);if (n) return n[1];
}, has: function has(t) {
return !!g(this, t);
}, set: function set(t, n) {
var e = g(this, t);e ? e[1] = n : this.a.push([t, n]);
}, delete: function _delete(t) {
var n = p(this.a, function (n) {
return n[0] === t;
});return ~n && this.a.splice(n, 1), !!~n;
} }, t.exports = { getConstructor: function getConstructor(t, n, e, o) {
var s = t(function (t, r) {
a(t, s, n, "_i"), t._t = n, t._i = v++, t._l = void 0, void 0 != r && c(r, e, t[o], t);
});return r(s.prototype, { delete: function _delete(t) {
if (!u(t)) return !1;var e = i(t);return !0 === e ? d(l(this, n)).delete(t) : e && f(e, this._i) && delete e[this._i];
}, has: function has(t) {
if (!u(t)) return !1;var e = i(t);return !0 === e ? d(l(this, n)).has(t) : e && f(e, this._i);
} }), s;
}, def: function def(t, n, e) {
var r = i(o(n), !0);return !0 === r ? d(t).set(n, e) : r[t._i] = e, t;
}, ufstore: d };
}, function (t, n, e) {
var r = e(29),
i = e(9);t.exports = function (t) {
if (void 0 === t) return 0;var n = r(t),
e = i(n);if (n !== e) throw RangeError("Wrong length!");return e;
};
}, function (t, n, e) {
var r = e(47),
i = e(77),
o = e(1),
u = e(2).Reflect;t.exports = u && u.ownKeys || function (t) {
var n = r.f(o(t)),
e = i.f;return e ? n.concat(e(t)) : n;
};
}, function (t, n, e) {
"use strict";
function r(t, n, e, s, f, l, h, p) {
for (var v, d, y = f, g = 0, m = !!h && a(h, p, 3); g < s;) {
if (g in e) {
if (v = m ? m(e[g], g, n) : e[g], d = !1, o(v) && (d = v[c], d = void 0 !== d ? !!d : i(v)), d && l > 0) y = r(t, n, v, u(v.length), y, l - 1) - 1;else {
if (y >= 9007199254740991) throw TypeError();t[y] = v;
}y++;
}g++;
}return y;
}var i = e(78),
o = e(4),
u = e(9),
a = e(22),
c = e(5)("isConcatSpreadable");t.exports = r;
}, function (t, n, e) {
var r = e(9),
i = e(109),
o = e(28);t.exports = function (t, n, e, u) {
var a = String(o(t)),
c = a.length,
s = void 0 === e ? " " : String(e),
f = r(n);if (f <= c || "" == s) return a;var l = f - c,
h = i.call(s, Math.ceil(l / s.length));return h.length > l && (h = h.slice(0, l)), u ? h + a : a + h;
};
}, function (t, n, e) {
var r = e(44),
i = e(19),
o = e(64).f;t.exports = function (t) {
return function (n) {
for (var e, u = i(n), a = r(u), c = a.length, s = 0, f = []; c > s;) {
o.call(u, e = a[s++]) && f.push(t ? [e, u[e]] : u[e]);
}return f;
};
};
}, function (t, n, e) {
var r = e(65),
i = e(186);t.exports = function (t) {
return function () {
if (r(this) != t) throw TypeError(t + "#toJSON isn't generic");return i(this);
};
};
}, function (t, n, e) {
var r = e(50);t.exports = function (t, n) {
var e = [];return r(t, !1, e.push, e, n), e;
};
}, function (t, n) {
t.exports = Math.scale || function (t, n, e, r, i) {
return 0 === arguments.length || t != t || n != n || e != e || r != r || i != i ? NaN : t === 1 / 0 || t === -1 / 0 ? t : (t - n) * (i - r) / (e - n) + r;
};
}, function (t, n, e) {
"use strict";
var r = e(413),
i = e.n(r),
o = e(138),
u = e.n(o),
a = "https://s2.d2scdn.com/",
c = function c(t) {
return function (n, e) {
var r = "";if (!n) return n;if (/^https?/.test(n)) return n;if (!e) return a + n;var i = e.split(",");if (3 !== i.length) return a + n;if ("wh" === i[0].slice(0, 2)) r = "?imageView2/1/w/".concat(i[1], "/h/").concat(i[2]);else if ("f" === i[0][0]) r = "";else {
if ("c" === i[0][0]) return a + "crop/1/FFFFFF/".concat(i[1], "x").concat(i[2], "/").concat(n);"d" === i[0][0] ? r = "?imageMogr2/auto-orient/thumbnail/".concat(i[1], "x").concat(i[2], "!/interlace/1") : "e" === i[0][0] ? r = "?imageMogr2/auto-orient/thumbnail/!".concat(i[1], "x").concat(i[2], "r|imageView2/1/w/").concat(i[1], "/h/").concat(i[2]) : "g" === i[0][0] ? r = "?imageView2/2/w/".concat(i[1]) : "i" === i[0][0] ? r = "?imageView2/2/h/".concat(i[2]) : "j" === i[0][0] ? r = "?imageView2/2/w/".concat(i[1], "/h/").concat(i[2]) : "v" === i[0][0] ? r = "?vframe/jpg/offset/0/w/".concat(i[1], "/h/").concat(i[2]) : "x" === i[0][0] && (r = "?vframe/jpg/offset/0/w/".concat(i[1]));
}if (t && i[0].length > 1 && "m" === i[0][i[0].length - 1]) {
var o = -1 !== r.indexOf("?") ? "|" : "?";r = "".concat(r).concat(o).concat(t.company.watermark_fop);
}return a + n + r;
};
},
s = { qiniuFactory: c, qiniu: c("undefined" == typeof window ? null : window.D), dateformat: function dateformat(t, n) {
var e, r, o, a, c, s;if (!t) return t;try {
e = new Date(t);
} catch (n) {
return t;
}var f = function f(t) {
return t = t.toString(), 1 === t.length ? "0".concat(t) : t;
},
l = null;if ("string" == typeof t) {
var h = t.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/);if (h) {
var p = i()(h.slice(1, 7)),
v = u()(p, 6);l = v[0], c = v[1], r = v[2], o = v[3], a = v[4], s = v[5];
}
}switch (l || (l = e.getUTCFullYear(), c = f(e.getUTCMonth() + 1), r = f(e.getUTCDate()), o = f(e.getUTCHours()), a = f(e.getUTCMinutes()), s = f(e.getSeconds())), n) {case "list":
return [parseInt(l), parseInt(c), parseInt(r), parseInt(o), parseInt(a), parseInt(s)];case "date":
return "".concat(l, "-").concat(c, "-").concat(r);case "datetime":
return "".concat(l, "-").concat(c, "-").concat(r, " ").concat(o, ":").concat(a);case "datetimeseconds":
return "".concat(l, "-").concat(c, "-").concat(r, " ").concat(o, ":").concat(a, ":").concat(s);case "time":
return "".concat(o, ":").concat(a);case "url":
return "".concat(l, "-").concat(c, "-").concat(r, "-").concat(o, ":").concat(a, ":").concat(s);default:
return t;}
}, findValueIndex: function findValueIndex(t, n, e, r) {
r = void 0 === r ? null : r;for (var i = 0; i < t.length; i++) {
if (t[i][n] === e) return i;
}return r;
}, htmlToText: function htmlToText(t) {
return t = t ? String(t).replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "") : "", t = t ? String(t).replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, "") : "", t = t ? String(t).replace(/<[^>]+>/gm, "") : "", t = t.replace(/&nbsp;/g, "").replace(/&amp;/g, "&");
}, default: function _default(t, n) {
return null == t ? n : t;
}, orderToChinese: function orderToChinese(t) {
return { 0: "零", 1: "一", 2: "二", 3: "三", 4: "四", 5: "五", 6: "六", 7: "七", 8: "八", 9: "九", 10: "十" }[t] || t;
}, truncate: function truncate(t, n) {
return t && t.length > n ? t.slice(0, n) + "..." : t;
}, priceformat: function priceformat(t, n) {
return t = t || 0, n = n || "int", "int" === n ? (Number(t) / 100).toFixed(2) : "cnyint" === n ? "¥ " + (Number(t) / 100).toFixed(2) : "float" === n ? Number(t).toFixed(2) : "cnyfloat" === n ? "¥ " + Number(t).toFixed(2) : void 0;
} };n.a = s;
}, function (t, n, e) {
t.exports = !e(33) && !e(52)(function () {
return 7 != Object.defineProperty(e(131)("div"), "a", { get: function get() {
return 7;
} }).a;
});
}, function (t, n, e) {
t.exports = e(40);
}, function (t, n, e) {
var r = e(53),
i = e(54),
o = e(418)(!1),
u = e(134)("IE_PROTO");t.exports = function (t, n) {
var e,
a = i(t),
c = 0,
s = [];for (e in a) {
e != u && r(a, e) && s.push(e);
}for (; n.length > c;) {
r(a, e = n[c++]) && (~o(s, e) || s.push(e));
}return s;
};
}, function (t, n, e) {
var r = e(14).document;t.exports = r && r.documentElement;
}, function (t, n, e) {
var r = e(53),
i = e(61),
o = e(134)("IE_PROTO"),
u = Object.prototype;t.exports = Object.getPrototypeOf || function (t) {
return t = i(t), r(t, o) ? t[o] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? u : null;
};
}, function (t, n, e) {
var r = e(32);t.exports = function (t, n, e, i) {
try {
return i ? n(r(e)[0], e[1]) : n(e);
} catch (n) {
var o = t.return;throw void 0 !== o && r(o.call(t)), n;
}
};
}, function (t, n, e) {
var r = e(60),
i = e(13)("iterator"),
o = Array.prototype;t.exports = function (t) {
return void 0 !== t && (r.Array === t || o[i] === t);
};
}, function (t, n, e) {
var r = e(13)("iterator"),
i = !1;try {
var o = [7][r]();o.return = function () {
i = !0;
}, Array.from(o, function () {
throw 2;
});
} catch (t) {}t.exports = function (t, n) {
if (!n && !i) return !1;var e = !1;try {
var o = [7],
u = o[r]();u.next = function () {
return { done: e = !0 };
}, o[r] = function () {
return u;
}, t(o);
} catch (t) {}return e;
};
}, function (t, n) {
t.exports = function (t, n) {
return { value: n, done: !!t };
};
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return d;
});var r = e(74),
i = e.n(r),
o = e(96),
u = e.n(o),
a = e(140),
c = e.n(a),
s = e(95),
f = e.n(s),
l = e(145),
h = "placeholder/500x500/DDD/000/暂无图片/",
p = function p(t) {
var n = function n(_n2, e) {
return t[_n2] && t[_n2].support ? t[_n2].value : e;
},
e = n("fop_type", "e");"c" !== e && n("fop_watermark", !1) && (e += "m");var r = n("fop_width", 500),
i = n("fop_height", 500);return "".concat(e, ",").concat(r, ",").concat(i);
},
v = function v(t, n, e) {
var r = t.filters.htmlToText(n.description) || "",
i = r.replace(/[\n \r]/g, "").slice(0, 255),
o = n.image_key || h,
u = n.images ? n.images.map(function (n) {
return n.image = t.filters.qiniu(n.image, p(t.slide.liveconfig)), n;
}) : [];if (n.display = { id: n.id, name: n.name, pub_date: t.filters.dateformat(n.pub_date, "datetime"), image_key: o, image: t.filters.qiniu(o, p(t.slide.liveconfig)), images: u, usercategory_data: n.usercategory_data, attributes: n.attributes, description: n.description || "", description_text: i, price: n.price || null, compare_price: n.compare_price || null, tags: n.tags, brand: n.brand, coupons: n.coupons }, null !== e) {
var a = { id: n.id, display: {} };n.model_name && (a.model_name = n.model_name);var c = !0,
s = !1,
l = void 0;try {
for (var v, d = f()(e); !(c = (v = d.next()).done); c = !0) {
var y = v.value;a.display[y] = n.display[y];
}
} catch (t) {
s = !0, l = t;
} finally {
try {
c || null == d.return || d.return();
} finally {
if (s) throw l;
}
}return a;
}return console.warn("出于性能考虑,调用 loadLiveItems 和 loadDetailItem 必须指定 fields 参数!"), n;
},
d = { throttle: l.throttle, itemHandler: v, loadLiveData: function () {
var t = c()(i.a.mark(function t() {
var n,
e,
r,
o,
a,
c,
s,
f,
l = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return n = l.length > 0 && void 0 !== l[0] ? l[0] : null, e = l.length > 1 && void 0 !== l[1] ? l[1] : {}, r = this, o = r.slide.liveconfig, a = { limit: o.limit.value, order_by: o.order_by.support ? o.order_by.value : "-id", filters: {} }, o.user_category.support && o.user_category.value && (a.filters.cat = o.user_category.value.id), "post" === o.model.value && (a.filters.type = "post"), ["cat", "type", "recommended"].forEach(function (t) {
e[t] && (a.filters[t] = e[t], delete e[t]);
}), u()(a, e), c = o.model.value, "product" === c && (c = "pproduct"), s = "post/".concat(c, "/get_list_by_web"), t.next = 14, r.fetch(s, a);case 14:
return f = t.sent, f.data.objects = f.data.objects.map(function (t) {
return v(r, t, n);
}), t.abrupt("return", f.data);case 17:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}(), loadLiveItems: function () {
var t = c()(i.a.mark(function t() {
var n,
e,
r,
o = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return n = o.length > 0 && void 0 !== o[0] ? o[0] : null, e = o.length > 1 && void 0 !== o[1] ? o[1] : {}, t.next = 4, this.loadLiveData(n, e);case 4:
return r = t.sent, t.abrupt("return", r.objects);case 6:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}(), _loadDetailItem: function () {
var t = c()(i.a.mark(function t(n, e) {
var r,
o,
u,
a,
c,
s,
f,
l = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return r = l.length > 2 && void 0 !== l[2] && l[2], o = this, u = o.slide.liveconfig, a = { id: parseInt(n.id), is_load_cat: r }, c = u.model.value, "product" === c && (c = "pproduct"), s = "post/".concat(c, "/get_detail_by_web"), t.next = 9, o.fetch(s, a);case 9:
return f = t.sent, t.abrupt("return", v(o, f.data.object, e));case 11:case "end":
return t.stop();}
}
}, t, this);
}));return function (n, e) {
return t.apply(this, arguments);
};
}(), loadDetailItem: function () {
var t = c()(i.a.mark(function t() {
var n,
e,
r,
o,
u = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
if (n = u.length > 0 && void 0 !== u[0] ? u[0] : null, e = u.length > 1 && void 0 !== u[1] && u[1], r = this, !r.query.id) {
t.next = 7;break;
}return t.abrupt("return", r._loadDetailItem(r.query, n, e));case 7:
return t.next = 9, r.loadLiveItems(n);case 9:
return o = t.sent, t.abrupt("return", o[0]);case 11:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}(), loadRelatedItems: function () {
var t = c()(i.a.mark(function t(n) {
var e,
r,
o,
a,
c,
s,
f,
l,
h,
p,
d = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return e = d.length > 1 && void 0 !== d[1] ? d[1] : "product", r = d.length > 2 && void 0 !== d[2] ? d[2] : 10, o = d.length > 3 && void 0 !== d[3] ? d[3] : null, a = d.length > 4 && void 0 !== d[4] ? d[4] : {}, c = this, s = c.slide.liveconfig, f = { from_id: n, to_type: e, limit: r }, u()(f, a), l = s.model.value, "product" === l && (l = "pproduct"), h = "post/".concat(l, "/get_related_list"), t.next = 13, c.fetch(h, f);case 13:
return p = t.sent, t.abrupt("return", p.data.objects.map(function (t) {
return v(c, t, o);
}));case 15:case "end":
return t.stop();}
}
}, t, this);
}));return function (n) {
return t.apply(this, arguments);
};
}(), loadQueryData: function () {
var t = c()(i.a.mark(function t() {
var n,
e,
r,
o,
u,
a,
c,
s = arguments;return i.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return n = s.length > 0 && void 0 !== s[0] ? s[0] : null, e = s.length > 1 && void 0 !== s[1] ? s[1] : {}, r = this, o = r.slide.liveconfig, u = e.model_name || o.model.value, "product" === u && (u = "pproduct"), a = "post/".concat(u, "/get_query_list"), t.next = 9, r.fetch(a, e);case 9:
return c = t.sent, c.data.objects = c.data.objects.map(function (t) {
return v(r, t, n);
}), t.abrupt("return", c.data);case 12:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}() };
}, function (t, n, e) {
var r = e(32),
i = e(66),
o = e(13)("species");t.exports = function (t, n) {
var e,
u = r(t).constructor;return void 0 === u || void 0 == (e = r(u)[o]) ? n : i(e);
};
}, function (t, n, e) {
var r,
i,
o,
u = e(37),
a = e(434),
c = e(192),
s = e(131),
f = e(14),
l = f.process,
h = f.setImmediate,
p = f.clearImmediate,
v = f.MessageChannel,
d = f.Dispatch,
y = 0,
g = {},
m = "onreadystatechange",
_ = function _() {
var t = +this;if (g.hasOwnProperty(t)) {
var n = g[t];delete g[t], n();
}
},
w = function w(t) {
_.call(t.data);
};h && p || (h = function h(t) {
for (var n = [], e = 1; arguments.length > e;) {
n.push(arguments[e++]);
}return g[++y] = function () {
a("function" == typeof t ? t : Function(t), n);
}, r(y), y;
}, p = function p(t) {
delete g[t];
}, "process" == e(69)(l) ? r = function r(t) {
l.nextTick(u(_, t, 1));
} : d && d.now ? r = function r(t) {
d.now(u(_, t, 1));
} : v ? (i = new v(), o = i.port2, i.port1.onmessage = w, r = u(o.postMessage, o, 1)) : f.addEventListener && "function" == typeof postMessage && !f.importScripts ? (r = function r(t) {
f.postMessage(t + "", "*");
}, f.addEventListener("message", w, !1)) : r = m in s("script") ? function (t) {
c.appendChild(s("script"))[m] = function () {
c.removeChild(this), _.call(t);
};
} : function (t) {
setTimeout(u(_, t, 1), 0);
}), t.exports = { set: h, clear: p };
}, function (t, n) {
t.exports = function (t) {
try {
return { e: !1, v: t() };
} catch (t) {
return { e: !0, v: t };
}
};
}, function (t, n, e) {
var r = e(32),
i = e(26),
o = e(143);t.exports = function (t, n) {
if (r(t), i(n) && n.constructor === t) return n;var e = o.f(t);return (0, e.resolve)(n), e.promise;
};
}, function (t, n, e) {
"use strict";
var r = e(14),
i = e(6),
o = e(25),
u = e(33),
a = e(13)("species");t.exports = function (t) {
var n = "function" == typeof i[t] ? i[t] : r[t];u && n && !n[a] && o.f(n, a, { configurable: !0, get: function get() {
return this;
} });
};
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return y;
});var r = e(73),
i = e.n(r),
o = e(74),
u = e.n(o),
a = e(98),
c = e.n(a),
s = e(140),
f = e.n(s),
l = e(146),
h = e.n(l),
p = e(147),
v = e.n(p),
d = function () {
function t(n, e) {
h()(this, t), this.dw = n, this.slide = e;
}return v()(t, [{ key: "_check", value: function value() {
if (!this.slide.related_papp_id) throw new Error("请先创建关联应用程序!");
} }, { key: "getPlayId", value: function value() {
return this._check(), this.slide.related_papp_id;
} }, { key: "getPlayData", value: function value() {
return this._check(), this.dw.request("dynamic_get/company_papp/get_papp_data", { id: this.getPlayId() });
} }, { key: "getPlayUser", value: function value() {
return this._check(), this.dw.request("dynamic_get/company_papp/get_siteuser_data", { id: this.getPlayId() });
} }, { key: "dispatchPrize", value: function value() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0;return this._check(), this.dw.request("dynamic_post/company_papp/dispatch_prize", { id: this.getPlayId(), score: t });
} }]), t;
}(),
y = function () {
function t(n, e) {
h()(this, t), Object.defineProperty(this, "platform", { configurable: !0, enumerable: !0, writable: !0, value: "dwapp" }), this.dw = n, this.slide = e, this.play = new d(n, e);
}return v()(t, [{ key: "isUserLogin", value: function () {
var t = f()(u.a.mark(function t() {
var n = this;return u.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return t.abrupt("return", new c.a(function (t, e) {
var r = n.dw.getStorageSync("dwapp:installation") || {};t(Boolean(r.siteuser_token));
}));case 1:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}() }, { key: "wxGotoLogin", value: function value() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = i()(t).map(function (n) {
return n + "=" + t[n];
}).join("&"),
e = n ? "?" + n : "";this.dw.goToHref("account-login" + e);
} }, { key: "wxLogin", value: function value(t) {
return !!(this.dw.getStorageSync("dwapp:installation") || {}).siteuser_token || (this.wxGotoLogin(t), !1);
} }, { key: "isAdminLogin", value: function () {
var t = f()(u.a.mark(function t() {
var n = this;return u.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return t.abrupt("return", new c.a(function (t, e) {
var r = n.dw.getStorageSync("dwapp:installation") || {};t(Boolean(r.user_token));
}));case 1:case "end":
return t.stop();}
}
}, t, this);
}));return function () {
return t.apply(this, arguments);
};
}() }, { key: "wxGotoAdminLogin", value: function value() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = i()(t).map(function (n) {
return n + "=" + t[n];
}).join("&"),
e = n ? "?" + n : "";this.dw.goToHref("plugin-userlogin" + e);
} }, { key: "wxAdminLogin", value: function value(t) {
return !!(this.dw.getStorageSync("dwapp:installation") || {}).user_token || (this.wxGotoAdminLogin(t), !1);
} }, { key: "wxAppLogin", value: function value() {
return !0;
} }, { key: "getPappSlug", value: function value() {
return this.slide.slug || this.slide.meta.papp_slug;
} }, { key: "getPageParams", value: function value() {
return this.dw.query;
} }, { key: "getMasterPagetemplateId", value: function value() {
return this.slide.master_pagetemplate_id || parseInt(this.slide.type);
} }, { key: "buildPappUrl", value: function value(t) {
var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
e = this.getPappSlug(),
r = n ? i()(n).map(function (t) {
return "".concat(t, "=").concat(encodeURIComponent(n[t]));
}).join("&") : "";return "app_".concat(e, "-").concat(t).concat(r ? "?" + r : "");
} }, { key: "is", value: function value(t) {
switch (t) {case "master":
return !!this.slide.slug;case "slave":
return !!this.slide.master_pagetemplate_id;default:
console.warn("AppProxy error: only master/slave is support");}
} }, { key: "getDatasetId", value: function value() {
if (this.slide.master_dataset_id) return this.slide.master_dataset_id;if (!this.slide.dataset_id) throw new Error("AppProxy error: dataset is required.");return this.slide.dataset_id;
} }, { key: "getRows", value: function value(t) {
return t.dataset_id = this.getDatasetId(), this.dw.fetch("post/datasetrow/get_rows", t);
} }, { key: "getQueryRows", value: function value(t) {
return t.dataset_id = this.getDatasetId(), this.dw.fetch("post/datasetquery/get_rows", t);
} }, { key: "query", value: function value(t) {
return this.getRows({ query: t });
} }, { key: "createRow", value: function value(t, n) {
var e = { data: n, is_admin: !1, dataset_id: this.getDatasetId(), datasettable: t };return this.dw.fetch("post/datasetrow/create_row", e);
} }, { key: "updateRow", value: function value(t, n) {
var e = { data: n, is_admin: !1, dataset_id: this.getDatasetId(), datasetrow: t };return this.dw.fetch("post/datasetrow/update_row", e);
} }, { key: "removeRow", value: function value(t) {
var n = { is_admin: !1, dataset_id: this.getDatasetId(), datasetrow: t };return this.dw.fetch("post/datasetrow/remove_row", n);
} }, { key: "run", value: function value(t) {
var n = this,
e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
r = { is_admin: !1, pagetemplate_id: this.slide.master_pagetemplate_id || parseInt(this.slide.type), dataset_id: this.getDatasetId(), action: t, kwargs: e };return new c.a(function (e, i) {
n.dw.fetch("post/ccode/run_ccode", r).then(function (n) {
"success" === n.data.status ? e(n.data.result) : (console.error("Ccode ".concat(t, " error: ").concat(n.data.message)), i(new Error()));
});
});
} }]), t;
}();
}, function (t, n, e) {
t.exports = e(443);
}, function (t, n, e) {
var r = e(69);t.exports = Array.isArray || function (t) {
return "Array" == r(t);
};
}, function (t, n, e) {
var r = e(54),
i = e(208).f,
o = {}.toString,
u = "object" == (typeof window === "undefined" ? "undefined" : (0, _typeof3.default)(window)) && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [],
a = function a(t) {
try {
return i(t);
} catch (t) {
return u.slice();
}
};t.exports.f = function (t) {
return u && "[object Window]" == o.call(t) ? a(t) : i(r(t));
};
}, function (t, n, e) {
var r = e(191),
i = e(136).concat("length", "prototype");n.f = Object.getOwnPropertyNames || function (t) {
return r(t, i);
};
}, function (t, n, e) {
function r() {
return t.exports = r = i || function (t) {
for (var n = 1; n < arguments.length; n++) {
var e = arguments[n];for (var r in e) {
Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r]);
}
}return t;
}, r.apply(this, arguments);
}var i = e(96);t.exports = r;
}, function (t, n, e) {
var r = e(26);t.exports = function (t, n) {
if (!r(t) || t._t !== n) throw TypeError("Incompatible receiver, " + n + " required!");return t;
};
}, function (t, n, e) {
"use strict";
var r = e(212);e.d(n, "a", function () {
return r.a;
}), e.d(n, "b", function () {
return r.b;
}), e.d(n, "c", function () {
return r.c;
}), e.d(n, "d", function () {
return r.e;
}), e.d(n, "e", function () {
return r.f;
}), e.d(n, "f", function () {
return r.i;
}), e.d(n, "g", function () {
return r.j;
}), e.d(n, "h", function () {
return r.k;
});e(490);
}, function (t, n, e) {
"use strict";
function r(t) {
return null !== t && "object" === p()(t);
}function i(t) {
return "[object Object]" === m.call(t);
}function o() {}function u(t) {
if (!_.test(t)) {
var n = t.split(".");return function (t) {
for (var e = 0; e < n.length; e++) {
if (!t) return;t = t[n[e]];
}return t;
};
}
}function a(t, n) {
return w.call(t, n);
}function c(t, n, e, r) {
l()(t, n, { value: e, enumerable: !!r, writable: !0, configurable: !0 });
}function s(t, n) {
if (t.length) {
var e = t.indexOf(n);if (e > -1) return t.splice(e, 1);
}
}e.d(n, "c", function () {
return v;
}), e.d(n, "h", function () {
return d;
}), e.d(n, "e", function () {
return y;
}), e.d(n, "d", function () {
return g;
}), n.f = r, n.g = i, n.i = o, n.j = u, n.b = a, n.a = c, n.k = s;var f = e(100),
l = e.n(f),
h = e(62),
p = e.n(h),
v = "__proto__" in {},
d = function d(t) {
return "string" == typeof t;
},
y = function y(t) {
return "number" == typeof t;
},
g = Array.isArray,
m = Object.prototype.toString,
_ = /[^\w.$]/,
w = Object.prototype.hasOwnProperty;
}, function (t, n, e) {
"use strict";
Object.defineProperty(n, "__esModule", { value: !0 });var r = e(214);n.default = r.a;
}, function (t, n, e) {
"use strict";
var r = e(74),
i = e.n(r),
o = e(216),
u = (e.n(o), e(153)),
a = (e.n(u), e(89)),
c = e.n(a),
s = e(188),
f = e(198),
l = e(204),
h = e(442),
p = e(452),
v = e(145);n.a = { regeneratorRuntime: i.a, events: c.a, utils: v, filters: s.a, DwMixin: f.a, DwAppProxy: l.a, buildPageConfig: h.a, buildDw: p.a };
}, function (t, n) {
!function (n) {
"use strict";
function e(t, n, e, r) {
var o = n && n.prototype instanceof i ? n : i,
u = Object.create(o.prototype),
a = new p(r || []);return u._invoke = s(t, e, a), u;
}function r(t, n, e) {
try {
return { type: "normal", arg: t.call(n, e) };
} catch (t) {
return { type: "throw", arg: t };
}
}function i() {}function o() {}function u() {}function a(t) {
["next", "throw", "return"].forEach(function (n) {
t[n] = function (t) {
return this._invoke(n, t);
};
});
}function c(t) {
function n(e, i, o, u) {
var a = r(t[e], t, i);if ("throw" !== a.type) {
var c = a.arg,
s = c.value;return s && "object" == (typeof s === "undefined" ? "undefined" : (0, _typeof3.default)(s)) && m.call(s, "__await") ? Promise.resolve(s.__await).then(function (t) {
n("next", t, o, u);
}, function (t) {
n("throw", t, o, u);
}) : Promise.resolve(s).then(function (t) {
c.value = t, o(c);
}, u);
}u(a.arg);
}function e(t, e) {
function r() {
return new Promise(function (r, i) {
n(t, e, r, i);
});
}return i = i ? i.then(r, r) : r();
}var i;this._invoke = e;
}function s(t, n, e) {
var i = P;return function (o, u) {
if (i === E) throw new Error("Generator is already running");if (i === j) {
if ("throw" === o) throw u;return d();
}for (e.method = o, e.arg = u;;) {
var a = e.delegate;if (a) {
var c = f(a, e);if (c) {
if (c === A) continue;return c;
}
}if ("next" === e.method) e.sent = e._sent = e.arg;else if ("throw" === e.method) {
if (i === P) throw i = j, e.arg;e.dispatchException(e.arg);
} else "return" === e.method && e.abrupt("return", e.arg);i = E;var s = r(t, n, e);if ("normal" === s.type) {
if (i = e.done ? j : k, s.arg === A) continue;return { value: s.arg, done: e.done };
}"throw" === s.type && (i = j, e.method = "throw", e.arg = s.arg);
}
};
}function f(t, n) {
var e = t.iterator[n.method];if (e === y) {
if (n.delegate = null, "throw" === n.method) {
if (t.iterator.return && (n.method = "return", n.arg = y, f(t, n), "throw" === n.method)) return A;n.method = "throw", n.arg = new TypeError("The iterator does not provide a 'throw' method");
}return A;
}var i = r(e, t.iterator, n.arg);if ("throw" === i.type) return n.method = "throw", n.arg = i.arg, n.delegate = null, A;var o = i.arg;return o ? o.done ? (n[t.resultName] = o.value, n.next = t.nextLoc, "return" !== n.method && (n.method = "next", n.arg = y), n.delegate = null, A) : o : (n.method = "throw", n.arg = new TypeError("iterator result is not an object"), n.delegate = null, A);
}function l(t) {
var n = { tryLoc: t[0] };1 in t && (n.catchLoc = t[1]), 2 in t && (n.finallyLoc = t[2], n.afterLoc = t[3]), this.tryEntries.push(n);
}function h(t) {
var n = t.completion || {};n.type = "normal", delete n.arg, t.completion = n;
}function p(t) {
this.tryEntries = [{ tryLoc: "root" }], t.forEach(l, this), this.reset(!0);
}function v(t) {
if (t) {
var n = t[w];if (n) return n.call(t);if ("function" == typeof t.next) return t;if (!isNaN(t.length)) {
var e = -1,
r = function n() {
for (; ++e < t.length;) {
if (m.call(t, e)) return n.value = t[e], n.done = !1, n;
}return n.value = y, n.done = !0, n;
};return r.next = r;
}
}return { next: d };
}function d() {
return { value: y, done: !0 };
}var y,
g = Object.prototype,
m = g.hasOwnProperty,
_ = "function" == typeof Symbol ? Symbol : {},
w = _.iterator || "@@iterator",
b = _.asyncIterator || "@@asyncIterator",
x = _.toStringTag || "@@toStringTag",
S = "object" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t)),
O = n.regeneratorRuntime;if (O) return void (S && (t.exports = O));O = n.regeneratorRuntime = S ? t.exports : {}, O.wrap = e;var P = "suspendedStart",
k = "suspendedYield",
E = "executing",
j = "completed",
A = {},
M = {};M[w] = function () {
return this;
};var T = Object.getPrototypeOf,
F = T && T(T(v([])));F && F !== g && m.call(F, w) && (M = F);var L = u.prototype = i.prototype = Object.create(M);o.prototype = L.constructor = u, u.constructor = o, u[x] = o.displayName = "GeneratorFunction", O.isGeneratorFunction = function (t) {
var n = "function" == typeof t && t.constructor;return !!n && (n === o || "GeneratorFunction" === (n.displayName || n.name));
}, O.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, u) : (t.__proto__ = u, x in t || (t[x] = "GeneratorFunction")), t.prototype = Object.create(L), t;
}, O.awrap = function (t) {
return { __await: t };
}, a(c.prototype), c.prototype[b] = function () {
return this;
}, O.AsyncIterator = c, O.async = function (t, n, r, i) {
var o = new c(e(t, n, r, i));return O.isGeneratorFunction(n) ? o : o.next().then(function (t) {
return t.done ? t.value : o.next();
});
}, a(L), L[x] = "Generator", L[w] = function () {
return this;
}, L.toString = function () {
return "[object Generator]";
}, O.keys = function (t) {
var n = [];for (var e in t) {
n.push(e);
}return n.reverse(), function e() {
for (; n.length;) {
var r = n.pop();if (r in t) return e.value = r, e.done = !1, e;
}return e.done = !0, e;
};
}, O.values = v, p.prototype = { constructor: p, reset: function reset(t) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = y, this.done = !1, this.delegate = null, this.method = "next", this.arg = y, this.tryEntries.forEach(h), !t) for (var n in this) {
"t" === n.charAt(0) && m.call(this, n) && !isNaN(+n.slice(1)) && (this[n] = y);
}
}, stop: function stop() {
this.done = !0;var t = this.tryEntries[0],
n = t.completion;if ("throw" === n.type) throw n.arg;return this.rval;
}, dispatchException: function dispatchException(t) {
function n(n, r) {
return o.type = "throw", o.arg = t, e.next = n, r && (e.method = "next", e.arg = y), !!r;
}if (this.done) throw t;for (var e = this, r = this.tryEntries.length - 1; r >= 0; --r) {
var i = this.tryEntries[r],
o = i.completion;if ("root" === i.tryLoc) return n("end");if (i.tryLoc <= this.prev) {
var u = m.call(i, "catchLoc"),
a = m.call(i, "finallyLoc");if (u && a) {
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);if (this.prev < i.finallyLoc) return n(i.finallyLoc);
} else if (u) {
if (this.prev < i.catchLoc) return n(i.catchLoc, !0);
} else {
if (!a) throw new Error("try statement without catch or finally");if (this.prev < i.finallyLoc) return n(i.finallyLoc);
}
}
}
}, abrupt: function abrupt(t, n) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];if (r.tryLoc <= this.prev && m.call(r, "finallyLoc") && this.prev < r.finallyLoc) {
var i = r;break;
}
}i && ("break" === t || "continue" === t) && i.tryLoc <= n && n <= i.finallyLoc && (i = null);var o = i ? i.completion : {};return o.type = t, o.arg = n, i ? (this.method = "next", this.next = i.finallyLoc, A) : this.complete(o);
}, complete: function complete(t, n) {
if ("throw" === t.type) throw t.arg;return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && n && (this.next = n), A;
}, finish: function finish(t) {
for (var n = this.tryEntries.length - 1; n >= 0; --n) {
var e = this.tryEntries[n];if (e.finallyLoc === t) return this.complete(e.completion, e.afterLoc), h(e), A;
}
}, catch: function _catch(t) {
for (var n = this.tryEntries.length - 1; n >= 0; --n) {
var e = this.tryEntries[n];if (e.tryLoc === t) {
var r = e.completion;if ("throw" === r.type) {
var i = r.arg;h(e);
}return i;
}
}throw new Error("illegal catch attempt");
}, delegateYield: function delegateYield(t, n, e) {
return this.delegate = { iterator: v(t), resultName: n, nextLoc: e }, "next" === this.method && (this.arg = y), A;
} };
}(function () {
return this;
}() || Function("return this")());
}, function (t, n, e) {
e(217), e(219), e(220), e(221), e(222), e(223), e(224), e(225), e(226), e(227), e(228), e(229), e(230), e(231), e(232), e(233), e(235), e(236), e(237), e(238), e(239), e(240), e(241), e(242), e(243), e(244), e(245), e(246), e(247), e(248), e(249), e(250), e(251), e(252), e(253), e(254), e(255), e(256), e(257), e(258), e(259), e(260), e(261), e(262), e(263), e(264), e(265), e(266), e(267), e(268), e(269), e(270), e(271), e(272), e(273), e(274), e(275), e(276), e(277), e(278), e(279), e(280), e(281), e(282), e(283), e(284), e(285), e(286), e(287), e(288), e(289), e(290), e(291), e(292), e(293), e(294), e(295), e(297), e(298), e(300), e(301), e(302), e(303), e(304), e(305), e(306), e(308), e(309), e(310), e(311), e(312), e(313), e(314), e(315), e(316), e(317), e(318), e(319), e(320), e(122), e(321), e(322), e(172), e(323), e(324), e(325), e(326), e(327), e(175), e(177), e(178), e(328), e(329), e(330), e(331), e(332), e(333), e(334), e(335), e(336), e(337), e(338), e(339), e(340), e(341), e(342), e(343), e(344), e(345), e(346), e(347), e(348), e(349), e(350), e(351), e(352), e(353), e(354), e(355), e(356), e(357), e(358), e(359), e(360), e(361), e(362), e(363), e(364), e(365), e(366), e(367), e(368), e(369), e(370), e(371), e(372), e(373), e(374), e(375), e(376), e(377), e(378), e(379), e(380), e(381), e(382), e(383), e(384), e(385), e(386), e(387), e(388), e(389), e(390), e(391), e(392), e(393), e(394), e(395), e(396), e(397), e(398), e(399), e(400), e(401), e(402), e(403), e(404), e(405), e(406), e(407), e(408), e(409), e(410), e(411), e(412), t.exports = e(34);
}, function (t, n, e) {
"use strict";
var r = e(2),
i = e(15),
o = e(7),
u = e(0),
a = e(17),
c = e(38).KEY,
s = e(3),
f = e(75),
l = e(55),
h = e(42),
p = e(5),
v = e(155),
d = e(102),
y = e(218),
g = e(78),
m = e(1),
_ = e(4),
w = e(19),
b = e(27),
x = e(41),
S = e(46),
O = e(158),
P = e(20),
k = e(8),
E = e(44),
j = P.f,
A = k.f,
M = O.f,
_T = r.Symbol,
F = r.JSON,
L = F && F.stringify,
I = "prototype",
N = p("_hidden"),
D = p("toPrimitive"),
R = {}.propertyIsEnumerable,
C = f("symbol-registry"),
U = f("symbols"),
G = f("op-symbols"),
W = Object[I],
V = "function" == typeof _T,
B = r.QObject,
q = !B || !B[I] || !B[I].findChild,
z = o && s(function () {
return 7 != S(A({}, "a", { get: function get() {
return A(this, "a", { value: 7 }).a;
} })).a;
}) ? function (t, n, e) {
var r = j(W, n);r && delete W[n], A(t, n, e), r && t !== W && A(W, n, r);
} : A,
H = function H(t) {
var n = U[t] = S(_T[I]);return n._k = t, n;
},
J = V && "symbol" == (0, _typeof3.default)(_T.iterator) ? function (t) {
return "symbol" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t));
} : function (t) {
return t instanceof _T;
},
K = function K(t, n, e) {
return t === W && K(G, n, e), m(t), n = b(n, !0), m(e), i(U, n) ? (e.enumerable ? (i(t, N) && t[N][n] && (t[N][n] = !1), e = S(e, { enumerable: x(0, !1) })) : (i(t, N) || A(t, N, x(1, {})), t[N][n] = !0), z(t, n, e)) : A(t, n, e);
},
Y = function Y(t, n) {
m(t);for (var e, r = y(n = w(n)), i = 0, o = r.length; o > i;) {
K(t, e = r[i++], n[e]);
}return t;
},
$ = function $(t, n) {
return void 0 === n ? S(t) : Y(S(t), n);
},
Q = function Q(t) {
var n = R.call(this, t = b(t, !0));return !(this === W && i(U, t) && !i(G, t)) && (!(n || !i(this, t) || !i(U, t) || i(this, N) && this[N][t]) || n);
},
X = function X(t, n) {
if (t = w(t), n = b(n, !0), t !== W || !i(U, n) || i(G, n)) {
var e = j(t, n);return !e || !i(U, n) || i(t, N) && t[N][n] || (e.enumerable = !0), e;
}
},
Z = function Z(t) {
for (var n, e = M(w(t)), r = [], o = 0; e.length > o;) {
i(U, n = e[o++]) || n == N || n == c || r.push(n);
}return r;
},
tt = function tt(t) {
for (var n, e = t === W, r = M(e ? G : w(t)), o = [], u = 0; r.length > u;) {
!i(U, n = r[u++]) || e && !i(W, n) || o.push(U[n]);
}return o;
};V || (_T = function T() {
if (this instanceof _T) throw TypeError("Symbol is not a constructor!");var t = h(arguments.length > 0 ? arguments[0] : void 0),
n = function n(e) {
this === W && n.call(G, e), i(this, N) && i(this[N], t) && (this[N][t] = !1), z(this, t, x(1, e));
};return o && q && z(W, t, { configurable: !0, set: n }), H(t);
}, a(_T[I], "toString", function () {
return this._k;
}), P.f = X, k.f = K, e(47).f = O.f = Z, e(64).f = Q, e(77).f = tt, o && !e(43) && a(W, "propertyIsEnumerable", Q, !0), v.f = function (t) {
return H(p(t));
}), u(u.G + u.W + u.F * !V, { Symbol: _T });for (var nt = "hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","), et = 0; nt.length > et;) {
p(nt[et++]);
}for (var rt = E(p.store), it = 0; rt.length > it;) {
d(rt[it++]);
}u(u.S + u.F * !V, "Symbol", { for: function _for(t) {
return i(C, t += "") ? C[t] : C[t] = _T(t);
}, keyFor: function keyFor(t) {
if (!J(t)) throw TypeError(t + " is not a symbol!");for (var n in C) {
if (C[n] === t) return n;
}
}, useSetter: function useSetter() {
q = !0;
}, useSimple: function useSimple() {
q = !1;
} }), u(u.S + u.F * !V, "Object", { create: $, defineProperty: K, defineProperties: Y, getOwnPropertyDescriptor: X, getOwnPropertyNames: Z, getOwnPropertySymbols: tt }), F && u(u.S + u.F * (!V || s(function () {
var t = _T();return "[null]" != L([t]) || "{}" != L({ a: t }) || "{}" != L(Object(t));
})), "JSON", { stringify: function stringify(t) {
for (var n, e, r = [t], i = 1; arguments.length > i;) {
r.push(arguments[i++]);
}if (e = n = r[1], (_(n) || void 0 !== t) && !J(t)) return g(n) || (n = function n(t, _n3) {
if ("function" == typeof e && (_n3 = e.call(this, t, _n3)), !J(_n3)) return _n3;
}), r[1] = n, L.apply(F, r);
} }), _T[I][D] || e(16)(_T[I], D, _T[I].valueOf), l(_T, "Symbol"), l(Math, "Math", !0), l(r.JSON, "JSON", !0);
}, function (t, n, e) {
var r = e(44),
i = e(77),
o = e(64);t.exports = function (t) {
var n = r(t),
e = i.f;if (e) for (var u, a = e(t), c = o.f, s = 0; a.length > s;) {
c.call(t, u = a[s++]) && n.push(u);
}return n;
};
}, function (t, n, e) {
var r = e(0);r(r.S, "Object", { create: e(46) });
}, function (t, n, e) {
var r = e(0);r(r.S + r.F * !e(7), "Object", { defineProperty: e(8).f });
}, function (t, n, e) {
var r = e(0);r(r.S + r.F * !e(7), "Object", { defineProperties: e(157) });
}, function (t, n, e) {
var r = e(19),
i = e(20).f;e(30)("getOwnPropertyDescriptor", function () {
return function (t, n) {
return i(r(t), n);
};
});
}, function (t, n, e) {
var r = e(10),
i = e(21);e(30)("getPrototypeOf", function () {
return function (t) {
return i(r(t));
};
});
}, function (t, n, e) {
var r = e(10),
i = e(44);e(30)("keys", function () {
return function (t) {
return i(r(t));
};
});
}, function (t, n, e) {
e(30)("getOwnPropertyNames", function () {
return e(158).f;
});
}, function (t, n, e) {
var r = e(4),
i = e(38).onFreeze;e(30)("freeze", function (t) {
return function (n) {
return t && r(n) ? t(i(n)) : n;
};
});
}, function (t, n, e) {
var r = e(4),
i = e(38).onFreeze;e(30)("seal", function (t) {
return function (n) {
return t && r(n) ? t(i(n)) : n;
};
});
}, function (t, n, e) {
var r = e(4),
i = e(38).onFreeze;e(30)("preventExtensions", function (t) {
return function (n) {
return t && r(n) ? t(i(n)) : n;
};
});
}, function (t, n, e) {
var r = e(4);e(30)("isFrozen", function (t) {
return function (n) {
return !r(n) || !!t && t(n);
};
});
}, function (t, n, e) {
var r = e(4);e(30)("isSealed", function (t) {
return function (n) {
return !r(n) || !!t && t(n);
};
});
}, function (t, n, e) {
var r = e(4);e(30)("isExtensible", function (t) {
return function (n) {
return !!r(n) && (!t || t(n));
};
});
}, function (t, n, e) {
var r = e(0);r(r.S + r.F, "Object", { assign: e(159) });
}, function (t, n, e) {
var r = e(0);r(r.S, "Object", { is: e(234) });
}, function (t, n) {
t.exports = Object.is || function (t, n) {
return t === n ? 0 !== t || 1 / t == 1 / n : t != t && n != n;
};
}, function (t, n, e) {
var r = e(0);r(r.S, "Object", { setPrototypeOf: e(106).set });
}, function (t, n, e) {
"use strict";
var r = e(65),
i = {};i[e(5)("toStringTag")] = "z", i + "" != "[object z]" && e(17)(Object.prototype, "toString", function () {
return "[object " + r(this) + "]";
}, !0);
}, function (t, n, e) {
var r = e(0);r(r.P, "Function", { bind: e(160) });
}, function (t, n, e) {
var r = e(8).f,
i = Function.prototype,
o = /^\s*function ([^ (]*)/,
u = "name";u in i || e(7) && r(i, u, { configurable: !0, get: function get() {
try {
return ("" + this).match(o)[1];
} catch (t) {
return "";
}
} });
}, function (t, n, e) {
"use strict";
var r = e(4),
i = e(21),
o = e(5)("hasInstance"),
u = Function.prototype;o in u || e(8).f(u, o, { value: function value(t) {
if ("function" != typeof this || !r(t)) return !1;if (!r(this.prototype)) return t instanceof this;for (; t = i(t);) {
if (this.prototype === t) return !0;
}return !1;
} });
}, function (t, n, e) {
var r = e(0),
i = e(162);r(r.G + r.F * (parseInt != i), { parseInt: i });
}, function (t, n, e) {
var r = e(0),
i = e(163);r(r.G + r.F * (parseFloat != i), { parseFloat: i });
}, function (t, n, e) {
"use strict";
var r = e(2),
i = e(15),
o = e(23),
u = e(108),
a = e(27),
c = e(3),
s = e(47).f,
f = e(20).f,
l = e(8).f,
h = e(56).trim,
p = "Number",
_v = r[p],
d = _v,
y = _v.prototype,
g = o(e(46)(y)) == p,
m = "trim" in String.prototype,
_ = function _(t) {
var n = a(t, !1);if ("string" == typeof n && n.length > 2) {
n = m ? n.trim() : h(n, 3);var e,
r,
i,
o = n.charCodeAt(0);if (43 === o || 45 === o) {
if (88 === (e = n.charCodeAt(2)) || 120 === e) return NaN;
} else if (48 === o) {
switch (n.charCodeAt(1)) {case 66:case 98:
r = 2, i = 49;break;case 79:case 111:
r = 8, i = 55;break;default:
return +n;}for (var u, c = n.slice(2), s = 0, f = c.length; s < f; s++) {
if ((u = c.charCodeAt(s)) < 48 || u > i) return NaN;
}return parseInt(c, r);
}
}return +n;
};if (!_v(" 0o1") || !_v("0b1") || _v("+0x1")) {
_v = function v(t) {
var n = arguments.length < 1 ? 0 : t,
e = this;return e instanceof _v && (g ? c(function () {
y.valueOf.call(e);
}) : o(e) != p) ? u(new d(_(n)), e, _v) : _(n);
};for (var w, b = e(7) ? s(d) : "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","), x = 0; b.length > x; x++) {
i(d, w = b[x]) && !i(_v, w) && l(_v, w, f(d, w));
}_v.prototype = y, y.constructor = _v, e(17)(r, p, _v);
}
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(29),
o = e(164),
u = e(109),
a = 1..toFixed,
c = Math.floor,
s = [0, 0, 0, 0, 0, 0],
f = "Number.toFixed: incorrect invocation!",
l = "0",
h = function h(t, n) {
for (var e = -1, r = n; ++e < 6;) {
r += t * s[e], s[e] = r % 1e7, r = c(r / 1e7);
}
},
p = function p(t) {
for (var n = 6, e = 0; --n >= 0;) {
e += s[n], s[n] = c(e / t), e = e % t * 1e7;
}
},
v = function v() {
for (var t = 6, n = ""; --t >= 0;) {
if ("" !== n || 0 === t || 0 !== s[t]) {
var e = String(s[t]);n = "" === n ? e : n + u.call(l, 7 - e.length) + e;
}
}return n;
},
d = function d(t, n, e) {
return 0 === n ? e : n % 2 == 1 ? d(t, n - 1, e * t) : d(t * t, n / 2, e);
},
y = function y(t) {
for (var n = 0, e = t; e >= 4096;) {
n += 12, e /= 4096;
}for (; e >= 2;) {
n += 1, e /= 2;
}return n;
};r(r.P + r.F * (!!a && ("0.000" !== 8e-5.toFixed(3) || "1" !== .9.toFixed(0) || "1.25" !== 1.255.toFixed(2) || "1000000000000000128" !== 0xde0b6b3a7640080.toFixed(0)) || !e(3)(function () {
a.call({});
})), "Number", { toFixed: function toFixed(t) {
var n,
e,
r,
a,
c = o(this, f),
s = i(t),
g = "",
m = l;if (s < 0 || s > 20) throw RangeError(f);if (c != c) return "NaN";if (c <= -1e21 || c >= 1e21) return String(c);if (c < 0 && (g = "-", c = -c), c > 1e-21) if (n = y(c * d(2, 69, 1)) - 69, e = n < 0 ? c * d(2, -n, 1) : c / d(2, n, 1), e *= 4503599627370496, (n = 52 - n) > 0) {
for (h(0, e), r = s; r >= 7;) {
h(1e7, 0), r -= 7;
}for (h(d(10, r, 1), 0), r = n - 1; r >= 23;) {
p(1 << 23), r -= 23;
}p(1 << r), h(1, 1), p(2), m = v();
} else h(0, e), h(1 << -n, 0), m = v() + u.call(l, s);return s > 0 ? (a = m.length, m = g + (a <= s ? "0." + u.call(l, s - a) + m : m.slice(0, a - s) + "." + m.slice(a - s))) : m = g + m, m;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(3),
o = e(164),
u = 1..toPrecision;r(r.P + r.F * (i(function () {
return "1" !== u.call(1, void 0);
}) || !i(function () {
u.call({});
})), "Number", { toPrecision: function toPrecision(t) {
var n = o(this, "Number#toPrecision: incorrect invocation!");return void 0 === t ? u.call(n) : u.call(n, t);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Number", { EPSILON: Math.pow(2, -52) });
}, function (t, n, e) {
var r = e(0),
i = e(2).isFinite;r(r.S, "Number", { isFinite: function isFinite(t) {
return "number" == typeof t && i(t);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Number", { isInteger: e(165) });
}, function (t, n, e) {
var r = e(0);r(r.S, "Number", { isNaN: function isNaN(t) {
return t != t;
} });
}, function (t, n, e) {
var r = e(0),
i = e(165),
o = Math.abs;r(r.S, "Number", { isSafeInteger: function isSafeInteger(t) {
return i(t) && o(t) <= 9007199254740991;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Number", { MAX_SAFE_INTEGER: 9007199254740991 });
}, function (t, n, e) {
var r = e(0);r(r.S, "Number", { MIN_SAFE_INTEGER: -9007199254740991 });
}, function (t, n, e) {
var r = e(0),
i = e(163);r(r.S + r.F * (Number.parseFloat != i), "Number", { parseFloat: i });
}, function (t, n, e) {
var r = e(0),
i = e(162);r(r.S + r.F * (Number.parseInt != i), "Number", { parseInt: i });
}, function (t, n, e) {
var r = e(0),
i = e(166),
o = Math.sqrt,
u = Math.acosh;r(r.S + r.F * !(u && 710 == Math.floor(u(Number.MAX_VALUE)) && u(1 / 0) == 1 / 0), "Math", { acosh: function acosh(t) {
return (t = +t) < 1 ? NaN : t > 94906265.62425156 ? Math.log(t) + Math.LN2 : i(t - 1 + o(t - 1) * o(t + 1));
} });
}, function (t, n, e) {
function r(t) {
return isFinite(t = +t) && 0 != t ? t < 0 ? -r(-t) : Math.log(t + Math.sqrt(t * t + 1)) : t;
}var i = e(0),
o = Math.asinh;i(i.S + i.F * !(o && 1 / o(0) > 0), "Math", { asinh: r });
}, function (t, n, e) {
var r = e(0),
i = Math.atanh;r(r.S + r.F * !(i && 1 / i(-0) < 0), "Math", { atanh: function atanh(t) {
return 0 == (t = +t) ? t : Math.log((1 + t) / (1 - t)) / 2;
} });
}, function (t, n, e) {
var r = e(0),
i = e(110);r(r.S, "Math", { cbrt: function cbrt(t) {
return i(t = +t) * Math.pow(Math.abs(t), 1 / 3);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { clz32: function clz32(t) {
return (t >>>= 0) ? 31 - Math.floor(Math.log(t + .5) * Math.LOG2E) : 32;
} });
}, function (t, n, e) {
var r = e(0),
i = Math.exp;r(r.S, "Math", { cosh: function cosh(t) {
return (i(t = +t) + i(-t)) / 2;
} });
}, function (t, n, e) {
var r = e(0),
i = e(111);r(r.S + r.F * (i != Math.expm1), "Math", { expm1: i });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { fround: e(167) });
}, function (t, n, e) {
var r = e(0),
i = Math.abs;r(r.S, "Math", { hypot: function hypot(t, n) {
for (var e, r, o = 0, u = 0, a = arguments.length, c = 0; u < a;) {
e = i(arguments[u++]), c < e ? (r = c / e, o = o * r * r + 1, c = e) : e > 0 ? (r = e / c, o += r * r) : o += e;
}return c === 1 / 0 ? 1 / 0 : c * Math.sqrt(o);
} });
}, function (t, n, e) {
var r = e(0),
i = Math.imul;r(r.S + r.F * e(3)(function () {
return -5 != i(4294967295, 5) || 2 != i.length;
}), "Math", { imul: function imul(t, n) {
var e = 65535,
r = +t,
i = +n,
o = e & r,
u = e & i;return 0 | o * u + ((e & r >>> 16) * u + o * (e & i >>> 16) << 16 >>> 0);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { log10: function log10(t) {
return Math.log(t) * Math.LOG10E;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { log1p: e(166) });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { log2: function log2(t) {
return Math.log(t) / Math.LN2;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { sign: e(110) });
}, function (t, n, e) {
var r = e(0),
i = e(111),
o = Math.exp;r(r.S + r.F * e(3)(function () {
return -2e-17 != !Math.sinh(-2e-17);
}), "Math", { sinh: function sinh(t) {
return Math.abs(t = +t) < 1 ? (i(t) - i(-t)) / 2 : (o(t - 1) - o(-t - 1)) * (Math.E / 2);
} });
}, function (t, n, e) {
var r = e(0),
i = e(111),
o = Math.exp;r(r.S, "Math", { tanh: function tanh(t) {
var n = i(t = +t),
e = i(-t);return n == 1 / 0 ? 1 : e == 1 / 0 ? -1 : (n - e) / (o(t) + o(-t));
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { trunc: function trunc(t) {
return (t > 0 ? Math.floor : Math.ceil)(t);
} });
}, function (t, n, e) {
var r = e(0),
i = e(45),
o = String.fromCharCode,
u = String.fromCodePoint;r(r.S + r.F * (!!u && 1 != u.length), "String", { fromCodePoint: function fromCodePoint(t) {
for (var n, e = [], r = arguments.length, u = 0; r > u;) {
if (n = +arguments[u++], i(n, 1114111) !== n) throw RangeError(n + " is not a valid code point");e.push(n < 65536 ? o(n) : o(55296 + ((n -= 65536) >> 10), n % 1024 + 56320));
}return e.join("");
} });
}, function (t, n, e) {
var r = e(0),
i = e(19),
o = e(9);r(r.S, "String", { raw: function raw(t) {
for (var n = i(t.raw), e = o(n.length), r = arguments.length, u = [], a = 0; e > a;) {
u.push(String(n[a++])), a < r && u.push(String(arguments[a]));
}return u.join("");
} });
}, function (t, n, e) {
"use strict";
e(56)("trim", function (t) {
return function () {
return t(this, 3);
};
});
}, function (t, n, e) {
"use strict";
var r = e(112)(!0);e(113)(String, "String", function (t) {
this._t = String(t), this._i = 0;
}, function () {
var t,
n = this._t,
e = this._i;return e >= n.length ? { value: void 0, done: !0 } : (t = r(n, e), this._i += t.length, { value: t, done: !1 });
});
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(112)(!1);r(r.P, "String", { codePointAt: function codePointAt(t) {
return i(this, t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(9),
o = e(115),
u = "endsWith",
a = ""[u];r(r.P + r.F * e(116)(u), "String", { endsWith: function endsWith(t) {
var n = o(this, t, u),
e = arguments.length > 1 ? arguments[1] : void 0,
r = i(n.length),
c = void 0 === e ? r : Math.min(i(e), r),
s = String(t);return a ? a.call(n, s, c) : n.slice(c - s.length, c) === s;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(115),
o = "includes";r(r.P + r.F * e(116)(o), "String", { includes: function includes(t) {
return !!~i(this, t, o).indexOf(t, arguments.length > 1 ? arguments[1] : void 0);
} });
}, function (t, n, e) {
var r = e(0);r(r.P, "String", { repeat: e(109) });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(9),
o = e(115),
u = "startsWith",
a = ""[u];r(r.P + r.F * e(116)(u), "String", { startsWith: function startsWith(t) {
var n = o(this, t, u),
e = i(Math.min(arguments.length > 1 ? arguments[1] : void 0, n.length)),
r = String(t);return a ? a.call(n, r, e) : n.slice(e, e + r.length) === r;
} });
}, function (t, n, e) {
"use strict";
e(18)("anchor", function (t) {
return function (n) {
return t(this, "a", "name", n);
};
});
}, function (t, n, e) {
"use strict";
e(18)("big", function (t) {
return function () {
return t(this, "big", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("blink", function (t) {
return function () {
return t(this, "blink", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("bold", function (t) {
return function () {
return t(this, "b", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("fixed", function (t) {
return function () {
return t(this, "tt", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("fontcolor", function (t) {
return function (n) {
return t(this, "font", "color", n);
};
});
}, function (t, n, e) {
"use strict";
e(18)("fontsize", function (t) {
return function (n) {
return t(this, "font", "size", n);
};
});
}, function (t, n, e) {
"use strict";
e(18)("italics", function (t) {
return function () {
return t(this, "i", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("link", function (t) {
return function (n) {
return t(this, "a", "href", n);
};
});
}, function (t, n, e) {
"use strict";
e(18)("small", function (t) {
return function () {
return t(this, "small", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("strike", function (t) {
return function () {
return t(this, "strike", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("sub", function (t) {
return function () {
return t(this, "sub", "", "");
};
});
}, function (t, n, e) {
"use strict";
e(18)("sup", function (t) {
return function () {
return t(this, "sup", "", "");
};
});
}, function (t, n, e) {
var r = e(0);r(r.S, "Date", { now: function now() {
return new Date().getTime();
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(10),
o = e(27);r(r.P + r.F * e(3)(function () {
return null !== new Date(NaN).toJSON() || 1 !== Date.prototype.toJSON.call({ toISOString: function toISOString() {
return 1;
} });
}), "Date", { toJSON: function toJSON(t) {
var n = i(this),
e = o(n);return "number" != typeof e || isFinite(e) ? n.toISOString() : null;
} });
}, function (t, n, e) {
var r = e(0),
i = e(296);r(r.P + r.F * (Date.prototype.toISOString !== i), "Date", { toISOString: i });
}, function (t, n, e) {
"use strict";
var r = e(3),
i = Date.prototype.getTime,
o = Date.prototype.toISOString,
u = function u(t) {
return t > 9 ? t : "0" + t;
};t.exports = r(function () {
return "0385-07-25T07:06:39.999Z" != o.call(new Date(-5e13 - 1));
}) || !r(function () {
o.call(new Date(NaN));
}) ? function () {
if (!isFinite(i.call(this))) throw RangeError("Invalid time value");var t = this,
n = t.getUTCFullYear(),
e = t.getUTCMilliseconds(),
r = n < 0 ? "-" : n > 9999 ? "+" : "";return r + ("00000" + Math.abs(n)).slice(r ? -6 : -4) + "-" + u(t.getUTCMonth() + 1) + "-" + u(t.getUTCDate()) + "T" + u(t.getUTCHours()) + ":" + u(t.getUTCMinutes()) + ":" + u(t.getUTCSeconds()) + "." + (e > 99 ? e : "0" + u(e)) + "Z";
} : o;
}, function (t, n, e) {
var r = Date.prototype,
i = "Invalid Date",
o = "toString",
u = r[o],
a = r.getTime;new Date(NaN) + "" != i && e(17)(r, o, function () {
var t = a.call(this);return t === t ? u.call(this) : i;
});
}, function (t, n, e) {
var r = e(5)("toPrimitive"),
i = Date.prototype;r in i || e(16)(i, r, e(299));
}, function (t, n, e) {
"use strict";
var r = e(1),
i = e(27),
o = "number";t.exports = function (t) {
if ("string" !== t && t !== o && "default" !== t) throw TypeError("Incorrect hint");return i(r(this), t != o);
};
}, function (t, n, e) {
var r = e(0);r(r.S, "Array", { isArray: e(78) });
}, function (t, n, e) {
"use strict";
var r = e(22),
i = e(0),
o = e(10),
u = e(168),
a = e(117),
c = e(9),
s = e(118),
f = e(119);i(i.S + i.F * !e(80)(function (t) {
Array.from(t);
}), "Array", { from: function from(t) {
var n,
e,
i,
l,
h = o(t),
p = "function" == typeof this ? this : Array,
v = arguments.length,
d = v > 1 ? arguments[1] : void 0,
y = void 0 !== d,
g = 0,
m = f(h);if (y && (d = r(d, v > 2 ? arguments[2] : void 0, 2)), void 0 == m || p == Array && a(m)) for (n = c(h.length), e = new p(n); n > g; g++) {
s(e, g, y ? d(h[g], g) : h[g]);
} else for (l = m.call(h), e = new p(); !(i = l.next()).done; g++) {
s(e, g, y ? u(l, d, [i.value, g], !0) : i.value);
}return e.length = g, e;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(118);r(r.S + r.F * e(3)(function () {
function t() {}return !(Array.of.call(t) instanceof t);
}), "Array", { of: function of() {
for (var t = 0, n = arguments.length, e = new ("function" == typeof this ? this : Array)(n); n > t;) {
i(e, t, arguments[t++]);
}return e.length = n, e;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(19),
o = [].join;r(r.P + r.F * (e(63) != Object || !e(24)(o)), "Array", { join: function join(t) {
return o.call(i(this), void 0 === t ? "," : t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(105),
o = e(23),
u = e(45),
a = e(9),
c = [].slice;r(r.P + r.F * e(3)(function () {
i && c.call(i);
}), "Array", { slice: function slice(t, n) {
var e = a(this.length),
r = o(this);if (n = void 0 === n ? e : n, "Array" == r) return c.call(this, t, n);for (var i = u(t, e), s = u(n, e), f = a(s - i), l = new Array(f), h = 0; h < f; h++) {
l[h] = "String" == r ? this.charAt(i + h) : this[i + h];
}return l;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(11),
o = e(10),
u = e(3),
a = [].sort,
c = [1, 2, 3];r(r.P + r.F * (u(function () {
c.sort(void 0);
}) || !u(function () {
c.sort(null);
}) || !e(24)(a)), "Array", { sort: function sort(t) {
return void 0 === t ? a.call(o(this)) : a.call(o(this), i(t));
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(0),
o = e(24)([].forEach, !0);r(r.P + r.F * !o, "Array", { forEach: function forEach(t) {
return i(this, t, arguments[1]);
} });
}, function (t, n, e) {
var r = e(4),
i = e(78),
o = e(5)("species");t.exports = function (t) {
var n;return i(t) && (n = t.constructor, "function" != typeof n || n !== Array && !i(n.prototype) || (n = void 0), r(n) && null === (n = n[o]) && (n = void 0)), void 0 === n ? Array : n;
};
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(1);r(r.P + r.F * !e(24)([].map, !0), "Array", { map: function map(t) {
return i(this, t, arguments[1]);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(2);r(r.P + r.F * !e(24)([].filter, !0), "Array", { filter: function filter(t) {
return i(this, t, arguments[1]);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(3);r(r.P + r.F * !e(24)([].some, !0), "Array", { some: function some(t) {
return i(this, t, arguments[1]);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(4);r(r.P + r.F * !e(24)([].every, !0), "Array", { every: function every(t) {
return i(this, t, arguments[1]);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(169);r(r.P + r.F * !e(24)([].reduce, !0), "Array", { reduce: function reduce(t) {
return i(this, t, arguments.length, arguments[1], !1);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(169);r(r.P + r.F * !e(24)([].reduceRight, !0), "Array", { reduceRight: function reduceRight(t) {
return i(this, t, arguments.length, arguments[1], !0);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(76)(!1),
o = [].indexOf,
u = !!o && 1 / [1].indexOf(1, -0) < 0;r(r.P + r.F * (u || !e(24)(o)), "Array", { indexOf: function indexOf(t) {
return u ? o.apply(this, arguments) || 0 : i(this, t, arguments[1]);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(19),
o = e(29),
u = e(9),
a = [].lastIndexOf,
c = !!a && 1 / [1].lastIndexOf(1, -0) < 0;r(r.P + r.F * (c || !e(24)(a)), "Array", { lastIndexOf: function lastIndexOf(t) {
if (c) return a.apply(this, arguments) || 0;var n = i(this),
e = u(n.length),
r = e - 1;for (arguments.length > 1 && (r = Math.min(r, o(arguments[1]))), r < 0 && (r = e + r); r >= 0; r--) {
if (r in n && n[r] === t) return r || 0;
}return -1;
} });
}, function (t, n, e) {
var r = e(0);r(r.P, "Array", { copyWithin: e(170) }), e(39)("copyWithin");
}, function (t, n, e) {
var r = e(0);r(r.P, "Array", { fill: e(121) }), e(39)("fill");
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(5),
o = "find",
u = !0;o in [] && Array(1)[o](function () {
u = !1;
}), r(r.P + r.F * u, "Array", { find: function find(t) {
return i(this, t, arguments.length > 1 ? arguments[1] : void 0);
} }), e(39)(o);
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(31)(6),
o = "findIndex",
u = !0;o in [] && Array(1)[o](function () {
u = !1;
}), r(r.P + r.F * u, "Array", { findIndex: function findIndex(t) {
return i(this, t, arguments.length > 1 ? arguments[1] : void 0);
} }), e(39)(o);
}, function (t, n, e) {
e(48)("Array");
}, function (t, n, e) {
var r = e(2),
i = e(108),
o = e(8).f,
u = e(47).f,
a = e(79),
c = e(81),
_s3 = r.RegExp,
f = _s3,
l = _s3.prototype,
h = /a/g,
p = /a/g,
v = new _s3(h) !== h;if (e(7) && (!v || e(3)(function () {
return p[e(5)("match")] = !1, _s3(h) != h || _s3(p) == p || "/a/i" != _s3(h, "i");
}))) {
_s3 = function s(t, n) {
var e = this instanceof _s3,
r = a(t),
o = void 0 === n;return !e && r && t.constructor === _s3 && o ? t : i(v ? new f(r && !o ? t.source : t, n) : f((r = t instanceof _s3) ? t.source : t, r && o ? c.call(t) : n), e ? this : l, _s3);
};for (var d = function d(t) {
(t in _s3) || o(_s3, t, { configurable: !0, get: function get() {
return f[t];
}, set: function set(n) {
f[t] = n;
} });
}, y = u(f), g = 0; y.length > g;) {
d(y[g++]);
}l.constructor = _s3, _s3.prototype = l, e(17)(r, "RegExp", _s3);
}e(48)("RegExp");
}, function (t, n, e) {
"use strict";
e(172);var r = e(1),
i = e(81),
o = e(7),
u = "toString",
a = /./[u],
c = function c(t) {
e(17)(RegExp.prototype, u, t, !0);
};e(3)(function () {
return "/a/b" != a.call({ source: "a", flags: "b" });
}) ? c(function () {
var t = r(this);return "/".concat(t.source, "/", "flags" in t ? t.flags : !o && t instanceof RegExp ? i.call(t) : void 0);
}) : a.name != u && c(function () {
return a.call(this);
});
}, function (t, n, e) {
e(82)("match", 1, function (t, n, e) {
return [function (e) {
"use strict";
var r = t(this),
i = void 0 == e ? void 0 : e[n];return void 0 !== i ? i.call(e, r) : new RegExp(e)[n](String(r));
}, e];
});
}, function (t, n, e) {
e(82)("replace", 2, function (t, n, e) {
return [function (r, i) {
"use strict";
var o = t(this),
u = void 0 == r ? void 0 : r[n];return void 0 !== u ? u.call(r, o, i) : e.call(String(o), r, i);
}, e];
});
}, function (t, n, e) {
e(82)("search", 1, function (t, n, e) {
return [function (e) {
"use strict";
var r = t(this),
i = void 0 == e ? void 0 : e[n];return void 0 !== i ? i.call(e, r) : new RegExp(e)[n](String(r));
}, e];
});
}, function (t, n, e) {
e(82)("split", 2, function (t, n, r) {
"use strict";
var i = e(79),
o = r,
u = [].push,
a = "split",
c = "length",
s = "lastIndex";if ("c" == "abbc"[a](/(b)*/)[1] || 4 != "test"[a](/(?:)/, -1)[c] || 2 != "ab"[a](/(?:ab)*/)[c] || 4 != "."[a](/(.?)(.?)/)[c] || "."[a](/()()/)[c] > 1 || ""[a](/.?/)[c]) {
var f = void 0 === /()??/.exec("")[1];r = function r(t, n) {
var e = String(this);if (void 0 === t && 0 === n) return [];if (!i(t)) return o.call(e, t, n);var r,
a,
l,
h,
p,
v = [],
d = (t.ignoreCase ? "i" : "") + (t.multiline ? "m" : "") + (t.unicode ? "u" : "") + (t.sticky ? "y" : ""),
y = 0,
g = void 0 === n ? 4294967295 : n >>> 0,
m = new RegExp(t.source, d + "g");for (f || (r = new RegExp("^" + m.source + "$(?!\\s)", d)); (a = m.exec(e)) && !((l = a.index + a[0][c]) > y && (v.push(e.slice(y, a.index)), !f && a[c] > 1 && a[0].replace(r, function () {
for (p = 1; p < arguments[c] - 2; p++) {
void 0 === arguments[p] && (a[p] = void 0);
}
}), a[c] > 1 && a.index < e[c] && u.apply(v, a.slice(1)), h = a[0][c], y = l, v[c] >= g));) {
m[s] === a.index && m[s]++;
}return y === e[c] ? !h && m.test("") || v.push("") : v.push(e.slice(y)), v[c] > g ? v.slice(0, g) : v;
};
} else "0"[a](void 0, 0)[c] && (r = function r(t, n) {
return void 0 === t && 0 === n ? [] : o.call(this, t, n);
});return [function (e, i) {
var o = t(this),
u = void 0 == e ? void 0 : e[n];return void 0 !== u ? u.call(e, o, i) : r.call(String(o), e, i);
}, r];
});
}, function (t, n, e) {
"use strict";
var r,
i,
o,
u,
a = e(43),
c = e(2),
s = e(22),
f = e(65),
l = e(0),
h = e(4),
p = e(11),
v = e(49),
d = e(50),
y = e(83),
g = e(123).set,
m = e(124)(),
_ = e(125),
w = e(173),
b = e(174),
x = "Promise",
S = c.TypeError,
O = c.process,
_P = c[x],
k = "process" == f(O),
E = function E() {},
j = i = _.f,
A = !!function () {
try {
var t = _P.resolve(1),
n = (t.constructor = {})[e(5)("species")] = function (t) {
t(E, E);
};return (k || "function" == typeof PromiseRejectionEvent) && t.then(E) instanceof n;
} catch (t) {}
}(),
M = function M(t) {
var n;return !(!h(t) || "function" != typeof (n = t.then)) && n;
},
T = function T(t, n) {
if (!t._n) {
t._n = !0;var e = t._c;m(function () {
for (var r = t._v, i = 1 == t._s, o = 0, u = function u(n) {
var e,
o,
u = i ? n.ok : n.fail,
a = n.resolve,
c = n.reject,
s = n.domain;try {
u ? (i || (2 == t._h && I(t), t._h = 1), !0 === u ? e = r : (s && s.enter(), e = u(r), s && s.exit()), e === n.promise ? c(S("Promise-chain cycle")) : (o = M(e)) ? o.call(e, a, c) : a(e)) : c(r);
} catch (t) {
c(t);
}
}; e.length > o;) {
u(e[o++]);
}t._c = [], t._n = !1, n && !t._h && F(t);
});
}
},
F = function F(t) {
g.call(c, function () {
var n,
e,
r,
i = t._v,
o = L(t);if (o && (n = w(function () {
k ? O.emit("unhandledRejection", i, t) : (e = c.onunhandledrejection) ? e({ promise: t, reason: i }) : (r = c.console) && r.error && r.error("Unhandled promise rejection", i);
}), t._h = k || L(t) ? 2 : 1), t._a = void 0, o && n.e) throw n.v;
});
},
L = function L(t) {
return 1 !== t._h && 0 === (t._a || t._c).length;
},
I = function I(t) {
g.call(c, function () {
var n;k ? O.emit("rejectionHandled", t) : (n = c.onrejectionhandled) && n({ promise: t, reason: t._v });
});
},
N = function N(t) {
var n = this;n._d || (n._d = !0, n = n._w || n, n._v = t, n._s = 2, n._a || (n._a = n._c.slice()), T(n, !0));
},
D = function D(t) {
var n,
e = this;if (!e._d) {
e._d = !0, e = e._w || e;try {
if (e === t) throw S("Promise can't be resolved itself");(n = M(t)) ? m(function () {
var r = { _w: e, _d: !1 };try {
n.call(t, s(D, r, 1), s(N, r, 1));
} catch (t) {
N.call(r, t);
}
}) : (e._v = t, e._s = 1, T(e, !1));
} catch (t) {
N.call({ _w: e, _d: !1 }, t);
}
}
};A || (_P = function P(t) {
v(this, _P, x, "_h"), p(t), r.call(this);try {
t(s(D, this, 1), s(N, this, 1));
} catch (t) {
N.call(this, t);
}
}, r = function r(t) {
this._c = [], this._a = void 0, this._s = 0, this._d = !1, this._v = void 0, this._h = 0, this._n = !1;
}, r.prototype = e(51)(_P.prototype, { then: function then(t, n) {
var e = j(y(this, _P));return e.ok = "function" != typeof t || t, e.fail = "function" == typeof n && n, e.domain = k ? O.domain : void 0, this._c.push(e), this._a && this._a.push(e), this._s && T(this, !1), e.promise;
}, catch: function _catch(t) {
return this.then(void 0, t);
} }), o = function o() {
var t = new r();this.promise = t, this.resolve = s(D, t, 1), this.reject = s(N, t, 1);
}, _.f = j = function j(t) {
return t === _P || t === u ? new o(t) : i(t);
}), l(l.G + l.W + l.F * !A, { Promise: _P }), e(55)(_P, x), e(48)(x), u = e(34)[x], l(l.S + l.F * !A, x, { reject: function reject(t) {
var n = j(this);return (0, n.reject)(t), n.promise;
} }), l(l.S + l.F * (a || !A), x, { resolve: function resolve(t) {
return b(a && this === u ? _P : this, t);
} }), l(l.S + l.F * !(A && e(80)(function (t) {
_P.all(t).catch(E);
})), x, { all: function all(t) {
var n = this,
e = j(n),
r = e.resolve,
i = e.reject,
o = w(function () {
var e = [],
o = 0,
u = 1;d(t, !1, function (t) {
var a = o++,
c = !1;e.push(void 0), u++, n.resolve(t).then(function (t) {
c || (c = !0, e[a] = t, --u || r(e));
}, i);
}), --u || r(e);
});return o.e && i(o.v), e.promise;
}, race: function race(t) {
var n = this,
e = j(n),
r = e.reject,
i = w(function () {
d(t, !1, function (t) {
n.resolve(t).then(e.resolve, r);
});
});return i.e && r(i.v), e.promise;
} });
}, function (t, n, e) {
"use strict";
var r = e(179),
i = e(58),
o = "WeakSet";e(84)(o, function (t) {
return function () {
return t(this, arguments.length > 0 ? arguments[0] : void 0);
};
}, { add: function add(t) {
return r.def(i(this, o), t, !0);
} }, r, !1, !0);
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(85),
o = e(126),
u = e(1),
a = e(45),
c = e(9),
s = e(4),
f = e(2).ArrayBuffer,
l = e(83),
h = o.ArrayBuffer,
p = o.DataView,
v = i.ABV && f.isView,
d = h.prototype.slice,
y = i.VIEW,
g = "ArrayBuffer";r(r.G + r.W + r.F * (f !== h), { ArrayBuffer: h }), r(r.S + r.F * !i.CONSTR, g, { isView: function isView(t) {
return v && v(t) || s(t) && y in t;
} }), r(r.P + r.U + r.F * e(3)(function () {
return !new h(2).slice(1, void 0).byteLength;
}), g, { slice: function slice(t, n) {
if (void 0 !== d && void 0 === n) return d.call(u(this), t);for (var e = u(this).byteLength, r = a(t, e), i = a(void 0 === n ? e : n, e), o = new (l(this, h))(c(i - r)), s = new p(this), f = new p(o), v = 0; r < i;) {
f.setUint8(v++, s.getUint8(r++));
}return o;
} }), e(48)(g);
}, function (t, n, e) {
var r = e(0);r(r.G + r.W + r.F * !e(85).ABV, { DataView: e(126).DataView });
}, function (t, n, e) {
e(35)("Int8", 1, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Uint8", 1, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Uint8", 1, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
}, !0);
}, function (t, n, e) {
e(35)("Int16", 2, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Uint16", 2, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Int32", 4, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Uint32", 4, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Float32", 4, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
e(35)("Float64", 8, function (t) {
return function (n, e, r) {
return t(this, n, e, r);
};
});
}, function (t, n, e) {
var r = e(0),
i = e(11),
o = e(1),
u = (e(2).Reflect || {}).apply,
a = Function.apply;r(r.S + r.F * !e(3)(function () {
u(function () {});
}), "Reflect", { apply: function apply(t, n, e) {
var r = i(t),
c = o(e);return u ? u(r, n, c) : a.call(r, n, c);
} });
}, function (t, n, e) {
var r = e(0),
i = e(46),
o = e(11),
u = e(1),
a = e(4),
c = e(3),
s = e(160),
f = (e(2).Reflect || {}).construct,
l = c(function () {
function t() {}return !(f(function () {}, [], t) instanceof t);
}),
h = !c(function () {
f(function () {});
});r(r.S + r.F * (l || h), "Reflect", { construct: function construct(t, n) {
o(t), u(n);var e = arguments.length < 3 ? t : o(arguments[2]);if (h && !l) return f(t, n, e);if (t == e) {
switch (n.length) {case 0:
return new t();case 1:
return new t(n[0]);case 2:
return new t(n[0], n[1]);case 3:
return new t(n[0], n[1], n[2]);case 4:
return new t(n[0], n[1], n[2], n[3]);}var r = [null];return r.push.apply(r, n), new (s.apply(t, r))();
}var c = e.prototype,
p = i(a(c) ? c : Object.prototype),
v = Function.apply.call(t, p, n);return a(v) ? v : p;
} });
}, function (t, n, e) {
var r = e(8),
i = e(0),
o = e(1),
u = e(27);i(i.S + i.F * e(3)(function () {
Reflect.defineProperty(r.f({}, 1, { value: 1 }), 1, { value: 2 });
}), "Reflect", { defineProperty: function defineProperty(t, n, e) {
o(t), n = u(n, !0), o(e);try {
return r.f(t, n, e), !0;
} catch (t) {
return !1;
}
} });
}, function (t, n, e) {
var r = e(0),
i = e(20).f,
o = e(1);r(r.S, "Reflect", { deleteProperty: function deleteProperty(t, n) {
var e = i(o(t), n);return !(e && !e.configurable) && delete t[n];
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(1),
o = function o(t) {
this._t = i(t), this._i = 0;var n,
e = this._k = [];for (n in t) {
e.push(n);
}
};e(114)(o, "Object", function () {
var t,
n = this,
e = n._k;do {
if (n._i >= e.length) return { value: void 0, done: !0 };
} while (!((t = e[n._i++]) in n._t));return { value: t, done: !1 };
}), r(r.S, "Reflect", { enumerate: function enumerate(t) {
return new o(t);
} });
}, function (t, n, e) {
function r(t, n) {
var e,
a,
f = arguments.length < 3 ? t : arguments[2];return s(t) === f ? t[n] : (e = i.f(t, n)) ? u(e, "value") ? e.value : void 0 !== e.get ? e.get.call(f) : void 0 : c(a = o(t)) ? r(a, n, f) : void 0;
}var i = e(20),
o = e(21),
u = e(15),
a = e(0),
c = e(4),
s = e(1);a(a.S, "Reflect", { get: r });
}, function (t, n, e) {
var r = e(20),
i = e(0),
o = e(1);i(i.S, "Reflect", { getOwnPropertyDescriptor: function getOwnPropertyDescriptor(t, n) {
return r.f(o(t), n);
} });
}, function (t, n, e) {
var r = e(0),
i = e(21),
o = e(1);r(r.S, "Reflect", { getPrototypeOf: function getPrototypeOf(t) {
return i(o(t));
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Reflect", { has: function has(t, n) {
return n in t;
} });
}, function (t, n, e) {
var r = e(0),
i = e(1),
o = Object.isExtensible;r(r.S, "Reflect", { isExtensible: function isExtensible(t) {
return i(t), !o || o(t);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Reflect", { ownKeys: e(181) });
}, function (t, n, e) {
var r = e(0),
i = e(1),
o = Object.preventExtensions;r(r.S, "Reflect", { preventExtensions: function preventExtensions(t) {
i(t);try {
return o && o(t), !0;
} catch (t) {
return !1;
}
} });
}, function (t, n, e) {
function r(t, n, e) {
var c,
h,
p = arguments.length < 4 ? t : arguments[3],
v = o.f(f(t), n);if (!v) {
if (l(h = u(t))) return r(h, n, e, p);v = s(0);
}return a(v, "value") ? !(!1 === v.writable || !l(p)) && (c = o.f(p, n) || s(0), c.value = e, i.f(p, n, c), !0) : void 0 !== v.set && (v.set.call(p, e), !0);
}var i = e(8),
o = e(20),
u = e(21),
a = e(15),
c = e(0),
s = e(41),
f = e(1),
l = e(4);c(c.S, "Reflect", { set: r });
}, function (t, n, e) {
var r = e(0),
i = e(106);i && r(r.S, "Reflect", { setPrototypeOf: function setPrototypeOf(t, n) {
i.check(t, n);try {
return i.set(t, n), !0;
} catch (t) {
return !1;
}
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(76)(!0);r(r.P, "Array", { includes: function includes(t) {
return i(this, t, arguments.length > 1 ? arguments[1] : void 0);
} }), e(39)("includes");
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(182),
o = e(10),
u = e(9),
a = e(11),
c = e(120);r(r.P, "Array", { flatMap: function flatMap(t) {
var n,
e,
r = o(this);return a(t), n = u(r.length), e = c(r, 0), i(e, r, r, n, 0, 1, t, arguments[1]), e;
} }), e(39)("flatMap");
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(182),
o = e(10),
u = e(9),
a = e(29),
c = e(120);r(r.P, "Array", { flatten: function flatten() {
var t = arguments[0],
n = o(this),
e = u(n.length),
r = c(n, 0);return i(r, n, n, e, 0, void 0 === t ? 1 : a(t)), r;
} }), e(39)("flatten");
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(112)(!0);r(r.P, "String", { at: function at(t) {
return i(this, t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(183),
o = e(127);r(r.P + r.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(o), "String", { padStart: function padStart(t) {
return i(this, t, arguments.length > 1 ? arguments[1] : void 0, !0);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(183),
o = e(127);r(r.P + r.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(o), "String", { padEnd: function padEnd(t) {
return i(this, t, arguments.length > 1 ? arguments[1] : void 0, !1);
} });
}, function (t, n, e) {
"use strict";
e(56)("trimLeft", function (t) {
return function () {
return t(this, 1);
};
}, "trimStart");
}, function (t, n, e) {
"use strict";
e(56)("trimRight", function (t) {
return function () {
return t(this, 2);
};
}, "trimEnd");
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(28),
o = e(9),
u = e(79),
a = e(81),
c = RegExp.prototype,
s = function s(t, n) {
this._r = t, this._s = n;
};e(114)(s, "RegExp String", function () {
var t = this._r.exec(this._s);return { value: t, done: null === t };
}), r(r.P, "String", { matchAll: function matchAll(t) {
if (i(this), !u(t)) throw TypeError(t + " is not a regexp!");var n = String(this),
e = "flags" in c ? String(t.flags) : a.call(t),
r = new RegExp(t.source, ~e.indexOf("g") ? e : "g" + e);return r.lastIndex = o(t.lastIndex), new s(r, n);
} });
}, function (t, n, e) {
e(102)("asyncIterator");
}, function (t, n, e) {
e(102)("observable");
}, function (t, n, e) {
var r = e(0),
i = e(181),
o = e(19),
u = e(20),
a = e(118);r(r.S, "Object", { getOwnPropertyDescriptors: function getOwnPropertyDescriptors(t) {
for (var n, e, r = o(t), c = u.f, s = i(r), f = {}, l = 0; s.length > l;) {
void 0 !== (e = c(r, n = s[l++])) && a(f, n, e);
}return f;
} });
}, function (t, n, e) {
var r = e(0),
i = e(184)(!1);r(r.S, "Object", { values: function values(t) {
return i(t);
} });
}, function (t, n, e) {
var r = e(0),
i = e(184)(!0);r(r.S, "Object", { entries: function entries(t) {
return i(t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(10),
o = e(11),
u = e(8);e(7) && r(r.P + e(86), "Object", { __defineGetter__: function __defineGetter__(t, n) {
u.f(i(this), t, { get: o(n), enumerable: !0, configurable: !0 });
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(10),
o = e(11),
u = e(8);e(7) && r(r.P + e(86), "Object", { __defineSetter__: function __defineSetter__(t, n) {
u.f(i(this), t, { set: o(n), enumerable: !0, configurable: !0 });
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(10),
o = e(27),
u = e(21),
a = e(20).f;e(7) && r(r.P + e(86), "Object", { __lookupGetter__: function __lookupGetter__(t) {
var n,
e = i(this),
r = o(t, !0);do {
if (n = a(e, r)) return n.get;
} while (e = u(e));
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(10),
o = e(27),
u = e(21),
a = e(20).f;e(7) && r(r.P + e(86), "Object", { __lookupSetter__: function __lookupSetter__(t) {
var n,
e = i(this),
r = o(t, !0);do {
if (n = a(e, r)) return n.set;
} while (e = u(e));
} });
}, function (t, n, e) {
var r = e(0);r(r.P + r.R, "Map", { toJSON: e(185)("Map") });
}, function (t, n, e) {
var r = e(0);r(r.P + r.R, "Set", { toJSON: e(185)("Set") });
}, function (t, n, e) {
e(87)("Map");
}, function (t, n, e) {
e(87)("Set");
}, function (t, n, e) {
e(87)("WeakMap");
}, function (t, n, e) {
e(87)("WeakSet");
}, function (t, n, e) {
e(88)("Map");
}, function (t, n, e) {
e(88)("Set");
}, function (t, n, e) {
e(88)("WeakMap");
}, function (t, n, e) {
e(88)("WeakSet");
}, function (t, n, e) {
var r = e(0);r(r.G, { global: e(2) });
}, function (t, n, e) {
var r = e(0);r(r.S, "System", { global: e(2) });
}, function (t, n, e) {
var r = e(0),
i = e(23);r(r.S, "Error", { isError: function isError(t) {
return "Error" === i(t);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { clamp: function clamp(t, n, e) {
return Math.min(e, Math.max(n, t));
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { DEG_PER_RAD: Math.PI / 180 });
}, function (t, n, e) {
var r = e(0),
i = 180 / Math.PI;r(r.S, "Math", { degrees: function degrees(t) {
return t * i;
} });
}, function (t, n, e) {
var r = e(0),
i = e(187),
o = e(167);r(r.S, "Math", { fscale: function fscale(t, n, e, r, u) {
return o(i(t, n, e, r, u));
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { iaddh: function iaddh(t, n, e, r) {
var i = t >>> 0,
o = n >>> 0,
u = e >>> 0;return o + (r >>> 0) + ((i & u | (i | u) & ~(i + u >>> 0)) >>> 31) | 0;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { isubh: function isubh(t, n, e, r) {
var i = t >>> 0,
o = n >>> 0,
u = e >>> 0;return o - (r >>> 0) - ((~i & u | ~(i ^ u) & i - u >>> 0) >>> 31) | 0;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { imulh: function imulh(t, n) {
var e = 65535,
r = +t,
i = +n,
o = r & e,
u = i & e,
a = r >> 16,
c = i >> 16,
s = (a * u >>> 0) + (o * u >>> 16);return a * c + (s >> 16) + ((o * c >>> 0) + (s & e) >> 16);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { RAD_PER_DEG: 180 / Math.PI });
}, function (t, n, e) {
var r = e(0),
i = Math.PI / 180;r(r.S, "Math", { radians: function radians(t) {
return t * i;
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { scale: e(187) });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { umulh: function umulh(t, n) {
var e = 65535,
r = +t,
i = +n,
o = r & e,
u = i & e,
a = r >>> 16,
c = i >>> 16,
s = (a * u >>> 0) + (o * u >>> 16);return a * c + (s >>> 16) + ((o * c >>> 0) + (s & e) >>> 16);
} });
}, function (t, n, e) {
var r = e(0);r(r.S, "Math", { signbit: function signbit(t) {
return (t = +t) != t ? t : 0 == t ? 1 / t == 1 / 0 : t > 0;
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(34),
o = e(2),
u = e(83),
a = e(174);r(r.P + r.R, "Promise", { finally: function _finally(t) {
var n = u(this, i.Promise || o.Promise),
e = "function" == typeof t;return this.then(e ? function (e) {
return a(n, t()).then(function () {
return e;
});
} : t, e ? function (e) {
return a(n, t()).then(function () {
throw e;
});
} : t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(125),
o = e(173);r(r.S, "Promise", { try: function _try(t) {
var n = i.f(this),
e = o(t);return (e.e ? n.reject : n.resolve)(e.v), n.promise;
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = r.key,
u = r.set;r.exp({ defineMetadata: function defineMetadata(t, n, e, r) {
u(t, n, i(e), o(r));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = r.key,
u = r.map,
a = r.store;r.exp({ deleteMetadata: function deleteMetadata(t, n) {
var e = arguments.length < 3 ? void 0 : o(arguments[2]),
r = u(i(n), e, !1);if (void 0 === r || !r.delete(t)) return !1;if (r.size) return !0;var c = a.get(n);return c.delete(e), !!c.size || a.delete(n);
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = e(21),
u = r.has,
a = r.get,
c = r.key,
s = function s(t, n, e) {
if (u(t, n, e)) return a(t, n, e);var r = o(n);return null !== r ? s(t, r, e) : void 0;
};r.exp({ getMetadata: function getMetadata(t, n) {
return s(t, i(n), arguments.length < 3 ? void 0 : c(arguments[2]));
} });
}, function (t, n, e) {
var r = e(177),
i = e(186),
o = e(36),
u = e(1),
a = e(21),
c = o.keys,
s = o.key,
f = function f(t, n) {
var e = c(t, n),
o = a(t);if (null === o) return e;var u = f(o, n);return u.length ? e.length ? i(new r(e.concat(u))) : u : e;
};o.exp({ getMetadataKeys: function getMetadataKeys(t) {
return f(u(t), arguments.length < 2 ? void 0 : s(arguments[1]));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = r.get,
u = r.key;r.exp({ getOwnMetadata: function getOwnMetadata(t, n) {
return o(t, i(n), arguments.length < 3 ? void 0 : u(arguments[2]));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = r.keys,
u = r.key;r.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(t) {
return o(i(t), arguments.length < 2 ? void 0 : u(arguments[1]));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = e(21),
u = r.has,
a = r.key,
c = function c(t, n, e) {
if (u(t, n, e)) return !0;var r = o(n);return null !== r && c(t, r, e);
};r.exp({ hasMetadata: function hasMetadata(t, n) {
return c(t, i(n), arguments.length < 3 ? void 0 : a(arguments[2]));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = r.has,
u = r.key;r.exp({ hasOwnMetadata: function hasOwnMetadata(t, n) {
return o(t, i(n), arguments.length < 3 ? void 0 : u(arguments[2]));
} });
}, function (t, n, e) {
var r = e(36),
i = e(1),
o = e(11),
u = r.key,
a = r.set;r.exp({ metadata: function metadata(t, n) {
return function (e, r) {
a(t, n, (void 0 !== r ? i : o)(e), u(r));
};
} });
}, function (t, n, e) {
var r = e(0),
i = e(124)(),
o = e(2).process,
u = "process" == e(23)(o);r(r.G, { asap: function asap(t) {
var n = u && o.domain;i(n ? n.bind(t) : t);
} });
}, function (t, n, e) {
"use strict";
var r = e(0),
i = e(2),
o = e(34),
u = e(124)(),
a = e(5)("observable"),
c = e(11),
s = e(1),
f = e(49),
l = e(51),
h = e(16),
p = e(50),
v = p.RETURN,
d = function d(t) {
return null == t ? void 0 : c(t);
},
y = function y(t) {
var n = t._c;n && (t._c = void 0, n());
},
g = function g(t) {
return void 0 === t._o;
},
m = function m(t) {
g(t) || (t._o = void 0, y(t));
},
_ = function _(t, n) {
s(t), this._c = void 0, this._o = t, t = new w(this);try {
var e = n(t),
r = e;null != e && ("function" == typeof e.unsubscribe ? e = function e() {
r.unsubscribe();
} : c(e), this._c = e);
} catch (n) {
return void t.error(n);
}g(this) && y(this);
};_.prototype = l({}, { unsubscribe: function unsubscribe() {
m(this);
} });var w = function w(t) {
this._s = t;
};w.prototype = l({}, { next: function next(t) {
var n = this._s;if (!g(n)) {
var e = n._o;try {
var r = d(e.next);if (r) return r.call(e, t);
} catch (t) {
try {
m(n);
} finally {
throw t;
}
}
}
}, error: function error(t) {
var n = this._s;if (g(n)) throw t;var e = n._o;n._o = void 0;try {
var r = d(e.error);if (!r) throw t;t = r.call(e, t);
} catch (t) {
try {
y(n);
} finally {
throw t;
}
}return y(n), t;
}, complete: function complete(t) {
var n = this._s;if (!g(n)) {
var e = n._o;n._o = void 0;try {
var r = d(e.complete);t = r ? r.call(e, t) : void 0;
} catch (t) {
try {
y(n);
} finally {
throw t;
}
}return y(n), t;
}
} });var b = function b(t) {
f(this, b, "Observable", "_f")._f = c(t);
};l(b.prototype, { subscribe: function subscribe(t) {
return new _(t, this._f);
}, forEach: function forEach(t) {
var n = this;return new (o.Promise || i.Promise)(function (e, r) {
c(t);var i = n.subscribe({ next: function next(n) {
try {
return t(n);
} catch (t) {
r(t), i.unsubscribe();
}
}, error: r, complete: e });
});
} }), l(b, { from: function from(t) {
var n = "function" == typeof this ? this : b,
e = d(s(t)[a]);if (e) {
var r = s(e.call(t));return r.constructor === n ? r : new n(function (t) {
return r.subscribe(t);
});
}return new n(function (n) {
var e = !1;return u(function () {
if (!e) {
try {
if (p(t, !1, function (t) {
if (n.next(t), e) return v;
}) === v) return;
} catch (t) {
if (e) throw t;return void n.error(t);
}n.complete();
}
}), function () {
e = !0;
};
});
}, of: function of() {
for (var t = 0, n = arguments.length, e = new Array(n); t < n;) {
e[t] = arguments[t++];
}return new ("function" == typeof this ? this : b)(function (t) {
var n = !1;return u(function () {
if (!n) {
for (var r = 0; r < e.length; ++r) {
if (t.next(e[r]), n) return;
}t.complete();
}
}), function () {
n = !0;
};
});
} }), h(b.prototype, a, function () {
return this;
}), r(r.G, { Observable: b }), e(48)("Observable");
}, function (t, n, e) {
var r = e(2),
i = e(0),
o = e(127),
u = [].slice,
a = /MSIE .\./.test(o),
c = function c(t) {
return function (n, e) {
var r = arguments.length > 2,
i = !!r && u.call(arguments, 2);return t(r ? function () {
("function" == typeof n ? n : Function(n)).apply(this, i);
} : n, e);
};
};i(i.G + i.B + i.F * a, { setTimeout: c(r.setTimeout), setInterval: c(r.setInterval) });
}, function (t, n, e) {
var r = e(0),
i = e(123);r(r.G + r.B, { setImmediate: i.set, clearImmediate: i.clear });
}, function (t, n, e) {
for (var r = e(122), i = e(44), o = e(17), u = e(2), a = e(16), c = e(57), s = e(5), f = s("iterator"), l = s("toStringTag"), h = c.Array, p = { CSSRuleList: !0, CSSStyleDeclaration: !1, CSSValueList: !1, ClientRectList: !1, DOMRectList: !1, DOMStringList: !1, DOMTokenList: !0, DataTransferItemList: !1, FileList: !1, HTMLAllCollection: !1, HTMLCollection: !1, HTMLFormElement: !1, HTMLSelectElement: !1, MediaList: !0, MimeTypeArray: !1, NamedNodeMap: !1, NodeList: !0, PaintRequestList: !1, Plugin: !1, PluginArray: !1, SVGLengthList: !1, SVGNumberList: !1, SVGPathSegList: !1, SVGPointList: !1, SVGStringList: !1, SVGTransformList: !1, SourceBufferList: !1, StyleSheetList: !0, TextTrackCueList: !1, TextTrackList: !1, TouchList: !1 }, v = i(p), d = 0; d < v.length; d++) {
var y,
g = v[d],
m = p[g],
_ = u[g],
w = _ && _.prototype;if (w && (w[f] || a(w, f, h), w[l] || a(w, l, g), c[g] = h, m)) for (y in r) {
w[y] || o(w, y, r[y], !0);
}
}
}, function (t, n, e) {
t.exports = e(414);
}, function (t, n, e) {
e(59), e(420), t.exports = e(6).Array.from;
}, function (t, n, e) {
var r = e(128),
i = e(129);t.exports = function (t) {
return function (n, e) {
var o,
u,
a = String(i(n)),
c = r(e),
s = a.length;return c < 0 || c >= s ? t ? "" : void 0 : (o = a.charCodeAt(c), o < 55296 || o > 56319 || c + 1 === s || (u = a.charCodeAt(c + 1)) < 56320 || u > 57343 ? t ? a.charAt(c) : o : t ? a.slice(c, c + 2) : u - 56320 + (o - 55296 << 10) + 65536);
};
};
}, function (t, n, e) {
"use strict";
var r = e(91),
i = e(67),
o = e(70),
u = {};e(40)(u, e(13)("iterator"), function () {
return this;
}), t.exports = function (t, n, e) {
t.prototype = r(u, { next: i(1, e) }), o(t, n + " Iterator");
};
}, function (t, n, e) {
var r = e(25),
i = e(32),
o = e(68);t.exports = e(33) ? Object.defineProperties : function (t, n) {
i(t);for (var e, u = o(n), a = u.length, c = 0; a > c;) {
r.f(t, e = u[c++], n[e]);
}return t;
};
}, function (t, n, e) {
var r = e(54),
i = e(92),
o = e(419);t.exports = function (t) {
return function (n, e, u) {
var a,
c = r(n),
s = i(c.length),
f = o(u, s);if (t && e != e) {
for (; s > f;) {
if ((a = c[f++]) != a) return !0;
}
} else for (; s > f; f++) {
if ((t || f in c) && c[f] === e) return t || f || 0;
}return !t && -1;
};
};
}, function (t, n, e) {
var r = e(128),
i = Math.max,
o = Math.min;t.exports = function (t, n) {
return t = r(t), t < 0 ? i(t + n, 0) : o(t, n);
};
}, function (t, n, e) {
"use strict";
var r = e(37),
i = e(12),
o = e(61),
u = e(194),
a = e(195),
c = e(92),
s = e(421),
f = e(137);i(i.S + i.F * !e(196)(function (t) {
Array.from(t);
}), "Array", { from: function from(t) {
var n,
e,
i,
l,
h = o(t),
p = "function" == typeof this ? this : Array,
v = arguments.length,
d = v > 1 ? arguments[1] : void 0,
y = void 0 !== d,
g = 0,
m = f(h);if (y && (d = r(d, v > 2 ? arguments[2] : void 0, 2)), void 0 == m || p == Array && a(m)) for (n = c(h.length), e = new p(n); n > g; g++) {
s(e, g, y ? d(h[g], g) : h[g]);
} else for (l = m.call(h), e = new p(); !(i = l.next()).done; g++) {
s(e, g, y ? u(l, d, [i.value, g], !0) : i.value);
}return e.length = g, e;
} });
}, function (t, n, e) {
"use strict";
var r = e(25),
i = e(67);t.exports = function (t, n, e) {
n in t ? r.f(t, n, i(0, e)) : t[n] = e;
};
}, function (t, n, e) {
t.exports = e(423);
}, function (t, n, e) {
e(71), e(59), t.exports = e(426);
}, function (t, n, e) {
"use strict";
var r = e(425),
i = e(197),
o = e(60),
u = e(54);t.exports = e(130)(Array, "Array", function (t, n) {
this._t = u(t), this._i = 0, this._k = n;
}, function () {
var t = this._t,
n = this._k,
e = this._i++;return !t || e >= t.length ? (this._t = void 0, i(1)) : "keys" == n ? i(0, e) : "values" == n ? i(0, t[e]) : i(0, [e, t[e]]);
}, "values"), o.Arguments = o.Array, r("keys"), r("values"), r("entries");
}, function (t, n) {
t.exports = function () {};
}, function (t, n, e) {
var r = e(94),
i = e(13)("iterator"),
o = e(60);t.exports = e(6).isIterable = function (t) {
var n = Object(t);return void 0 !== n[i] || "@@iterator" in n || o.hasOwnProperty(r(n));
};
}, function (t, n, e) {
e(71), e(59), t.exports = e(428);
}, function (t, n, e) {
var r = e(32),
i = e(137);t.exports = e(6).getIterator = function (t) {
var n = i(t);if ("function" != typeof n) throw TypeError(t + " is not iterable!");return r(n.call(t));
};
}, function (t, n, e) {
e(430), t.exports = e(6).Object.assign;
}, function (t, n, e) {
var r = e(12);r(r.S + r.F, "Object", { assign: e(431) });
}, function (t, n, e) {
"use strict";
var r = e(68),
i = e(139),
o = e(97),
u = e(61),
a = e(133),
c = Object.assign;t.exports = !c || e(52)(function () {
var t = {},
n = {},
e = Symbol(),
r = "abcdefghijklmnopqrst";return t[e] = 7, r.split("").forEach(function (t) {
n[t] = t;
}), 7 != c({}, t)[e] || Object.keys(c({}, n)).join("") != r;
}) ? function (t, n) {
for (var e = u(t), c = arguments.length, s = 1, f = i.f, l = o.f; c > s;) {
for (var h, p = a(arguments[s++]), v = f ? r(p).concat(f(p)) : r(p), d = v.length, y = 0; d > y;) {
l.call(p, h = v[y++]) && (e[h] = p[h]);
}
}return e;
} : c;
}, function (t, n, e) {
e(141), e(59), e(71), e(433), e(436), e(437), t.exports = e(6).Promise;
}, function (t, n, e) {
"use strict";
var r,
i,
o,
u,
a = e(90),
c = e(14),
s = e(37),
f = e(94),
l = e(12),
h = e(26),
p = e(66),
v = e(142),
d = e(72),
y = e(199),
g = e(200).set,
m = e(435)(),
_ = e(143),
w = e(201),
b = e(202),
x = "Promise",
S = c.TypeError,
O = c.process,
_P2 = c[x],
k = "process" == f(O),
E = function E() {},
j = i = _.f,
A = !!function () {
try {
var t = _P2.resolve(1),
n = (t.constructor = {})[e(13)("species")] = function (t) {
t(E, E);
};return (k || "function" == typeof PromiseRejectionEvent) && t.then(E) instanceof n;
} catch (t) {}
}(),
M = function M(t) {
var n;return !(!h(t) || "function" != typeof (n = t.then)) && n;
},
T = function T(t, n) {
if (!t._n) {
t._n = !0;var e = t._c;m(function () {
for (var r = t._v, i = 1 == t._s, o = 0, u = function u(n) {
var e,
o,
u = i ? n.ok : n.fail,
a = n.resolve,
c = n.reject,
s = n.domain;try {
u ? (i || (2 == t._h && I(t), t._h = 1), !0 === u ? e = r : (s && s.enter(), e = u(r), s && s.exit()), e === n.promise ? c(S("Promise-chain cycle")) : (o = M(e)) ? o.call(e, a, c) : a(e)) : c(r);
} catch (t) {
c(t);
}
}; e.length > o;) {
u(e[o++]);
}t._c = [], t._n = !1, n && !t._h && F(t);
});
}
},
F = function F(t) {
g.call(c, function () {
var n,
e,
r,
i = t._v,
o = L(t);if (o && (n = w(function () {
k ? O.emit("unhandledRejection", i, t) : (e = c.onunhandledrejection) ? e({ promise: t, reason: i }) : (r = c.console) && r.error && r.error("Unhandled promise rejection", i);
}), t._h = k || L(t) ? 2 : 1), t._a = void 0, o && n.e) throw n.v;
});
},
L = function L(t) {
return 1 !== t._h && 0 === (t._a || t._c).length;
},
I = function I(t) {
g.call(c, function () {
var n;k ? O.emit("rejectionHandled", t) : (n = c.onrejectionhandled) && n({ promise: t, reason: t._v });
});
},
N = function N(t) {
var n = this;n._d || (n._d = !0, n = n._w || n, n._v = t, n._s = 2, n._a || (n._a = n._c.slice()), T(n, !0));
},
D = function D(t) {
var n,
e = this;if (!e._d) {
e._d = !0, e = e._w || e;try {
if (e === t) throw S("Promise can't be resolved itself");(n = M(t)) ? m(function () {
var r = { _w: e, _d: !1 };try {
n.call(t, s(D, r, 1), s(N, r, 1));
} catch (t) {
N.call(r, t);
}
}) : (e._v = t, e._s = 1, T(e, !1));
} catch (t) {
N.call({ _w: e, _d: !1 }, t);
}
}
};A || (_P2 = function P(t) {
v(this, _P2, x, "_h"), p(t), r.call(this);try {
t(s(D, this, 1), s(N, this, 1));
} catch (t) {
N.call(this, t);
}
}, r = function r(t) {
this._c = [], this._a = void 0, this._s = 0, this._d = !1, this._v = void 0, this._h = 0, this._n = !1;
}, r.prototype = e(144)(_P2.prototype, { then: function then(t, n) {
var e = j(y(this, _P2));return e.ok = "function" != typeof t || t, e.fail = "function" == typeof n && n, e.domain = k ? O.domain : void 0, this._c.push(e), this._a && this._a.push(e), this._s && T(this, !1), e.promise;
}, catch: function _catch(t) {
return this.then(void 0, t);
} }), o = function o() {
var t = new r();this.promise = t, this.resolve = s(D, t, 1), this.reject = s(N, t, 1);
}, _.f = j = function j(t) {
return t === _P2 || t === u ? new o(t) : i(t);
}), l(l.G + l.W + l.F * !A, { Promise: _P2 }), e(70)(_P2, x), e(203)(x), u = e(6)[x], l(l.S + l.F * !A, x, { reject: function reject(t) {
var n = j(this);return (0, n.reject)(t), n.promise;
} }), l(l.S + l.F * (a || !A), x, { resolve: function resolve(t) {
return b(a && this === u ? _P2 : this, t);
} }), l(l.S + l.F * !(A && e(196)(function (t) {
_P2.all(t).catch(E);
})), x, { all: function all(t) {
var n = this,
e = j(n),
r = e.resolve,
i = e.reject,
o = w(function () {
var e = [],
o = 0,
u = 1;d(t, !1, function (t) {
var a = o++,
c = !1;e.push(void 0), u++, n.resolve(t).then(function (t) {
c || (c = !0, e[a] = t, --u || r(e));
}, i);
}), --u || r(e);
});return o.e && i(o.v), e.promise;
}, race: function race(t) {
var n = this,
e = j(n),
r = e.reject,
i = w(function () {
d(t, !1, function (t) {
n.resolve(t).then(e.resolve, r);
});
});return i.e && r(i.v), e.promise;
} });
}, function (t, n) {
t.exports = function (t, n, e) {
var r = void 0 === e;switch (n.length) {case 0:
return r ? t() : t.call(e);case 1:
return r ? t(n[0]) : t.call(e, n[0]);case 2:
return r ? t(n[0], n[1]) : t.call(e, n[0], n[1]);case 3:
return r ? t(n[0], n[1], n[2]) : t.call(e, n[0], n[1], n[2]);case 4:
return r ? t(n[0], n[1], n[2], n[3]) : t.call(e, n[0], n[1], n[2], n[3]);}return t.apply(e, n);
};
}, function (t, n, e) {
var r = e(14),
i = e(200).set,
o = r.MutationObserver || r.WebKitMutationObserver,
u = r.process,
a = r.Promise,
c = "process" == e(69)(u);t.exports = function () {
var t,
n,
e,
s = function s() {
var r, i;for (c && (r = u.domain) && r.exit(); t;) {
i = t.fn, t = t.next;try {
i();
} catch (r) {
throw t ? e() : n = void 0, r;
}
}n = void 0, r && r.enter();
};if (c) e = function e() {
u.nextTick(s);
};else if (!o || r.navigator && r.navigator.standalone) {
if (a && a.resolve) {
var f = a.resolve();e = function e() {
f.then(s);
};
} else e = function e() {
i.call(r, s);
};
} else {
var l = !0,
h = document.createTextNode("");new o(s).observe(h, { characterData: !0 }), e = function e() {
h.data = l = !l;
};
}return function (r) {
var i = { fn: r, next: void 0 };n && (n.next = i), t || (t = i, e()), n = i;
};
};
}, function (t, n, e) {
"use strict";
var r = e(12),
i = e(6),
o = e(14),
u = e(199),
a = e(202);r(r.P + r.R, "Promise", { finally: function _finally(t) {
var n = u(this, i.Promise || o.Promise),
e = "function" == typeof t;return this.then(e ? function (e) {
return a(n, t()).then(function () {
return e;
});
} : t, e ? function (e) {
return a(n, t()).then(function () {
throw e;
});
} : t);
} });
}, function (t, n, e) {
"use strict";
var r = e(12),
i = e(143),
o = e(201);r(r.S, "Promise", { try: function _try(t) {
var n = i.f(this),
e = o(t);return (e.e ? n.reject : n.resolve)(e.v), n.promise;
} });
}, function (t, n, e) {
e(439), t.exports = e(6).Object.keys;
}, function (t, n, e) {
var r = e(61),
i = e(68);e(99)("keys", function () {
return function (t) {
return i(r(t));
};
});
}, function (t, n, e) {
e(441);var r = e(6).Object;t.exports = function (t, n, e) {
return r.defineProperty(t, n, e);
};
}, function (t, n, e) {
var r = e(12);r(r.S + r.F * !e(33), "Object", { defineProperty: e(25).f });
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return l;
});var r = e(205),
i = e.n(r),
o = e(62),
u = e.n(o),
a = e(73),
c = e.n(a),
s = e(89),
f = e.n(s),
l = function l(t) {
var n = t.DwFactory,
e = t.DwProxy,
r = t.appConfig,
o = t.slide,
a = t.actors,
s = t.wx,
l = (t.isSwan, t.isMy, t.app),
h = t.getCurrentPages,
p = t.componentsPackages,
v = 0,
d = r.app.tabBar && r.app.tabBar && r.app.tabBar.list ? r.app.tabBar.list.map(function (t) {
return t.pagePath;
}) : [],
y = r.app.subPackages || [],
g = {},
m = new f.a.EventEmitter();m.setMaxListeners(100);var _ = function _(t) {
var n = c()(t).sort().map(function (n) {
return n + "=" + t[n];
}).join("&");return n ? "?" + n : "";
};a.map(function (t) {
t.component = o.components[t.key], t.dw = new e(t.component, t, l, { componentsPackages: p }), t.actor = t.func(t.dw);var n = { data: t.actor.data, computed: t.actor.computed, watch: t.actor.watch, rootSlide: o, actors: a, pageLocals: g, pageEvent: m };if (t.dw._updateActorData(n), t.dw._setExtraData({ benchSlide: o }), "object" === u()(t.actor.methods)) for (var r in t.actor.methods) {
t.dw.methods[r] = t.actor.methods[r];
}t.component.dwdata = t.actor.data;
});var w = function w(t) {
for (var n = arguments.length, e = new Array(n > 1 ? n - 1 : 0), r = 1; r < n; r++) {
e[r - 1] = arguments[r];
}a.map(function (n) {
if (t in n.actor) if (["onLoad", "onShow"].includes(t)) n.dw.decorateMethod(n.actor[t]).apply(void 0, e);else {
var r;(r = n.actor[t]).call.apply(r, [n.dw].concat(e));
}
});
},
b = { data: { slide: o, company: r.company, query: {}, extraQuery: {}, share: { title: null, imageUrl: null, success: [], fail: [], complete: [] }, overides: { onShareAppMessage: null } }, getPageLocals: function getPageLocals(t) {
return g[t];
}, setPageLocals: function setPageLocals(t, n) {
g[t] = n;
}, getCurrentPages: function getCurrentPages() {
return h();
}, onLoad: function onLoad(t) {
if (console.log("PageFactory.onload kwargs:", t), t.pshop_id && /^\d+$/.test(t.pshop_id)) {
var e = parseInt(t.pshop_id);s.setStorageSync("pshop_id", e), n.DwUtils.request("post/company_account/after_dwapp_login_with_pshop_id", { pshop_id: e }).then(function (t) {
console.log("post/company_account/after_dwapp_login_with_pshop_id", e, t);
});
}var r = this;this.setData({ query: t }), a.map(function (n) {
n.dw._afterOnLoad(r, t, { app: l, tabBarPaths: d });
}), w("onLoad", t);
}, onReady: function onReady() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onReady"].concat(n));
}, onShow: function onShow() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onShow"].concat(n));
}, onHide: function onHide() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onHide"].concat(n));
}, onUnload: function onUnload() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onUnload"].concat(n));
}, onPullDownRefresh: function onPullDownRefresh() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onPullDownRefresh"].concat(n));
}, onReachBottom: function onReachBottom() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onReachBottom"].concat(n));
}, onPageScroll: function onPageScroll() {
for (var t = arguments.length, n = new Array(t), e = 0; e < t; e++) {
n[e] = arguments[e];
}w.apply(void 0, ["onPageScroll"].concat(n));
}, onError: function onError(t) {
n.DwUtils.fetch("post/dwapp/capture_error", { error: t });
}, onShareAppMessage: function onShareAppMessage(t) {
if (this.data.overides.onShareAppMessage) return this.data.overides.onShareAppMessage(t);var n = this,
e = h(),
r = e[e.length - 1],
u = r.route,
a = JSON.parse(i()(this.data.query));for (var f in this.data.extraQuery) {
a[f] = this.data.extraQuery[f];
}var l;try {
l = s.getStorageSync("siteuser_id");
} catch (t) {
l = null;
}l && (a.pshop_id = l);var p = c()(a).map(function (t) {
return t + "=" + a[t];
}).join("&");p = p ? "?" + p : "", console.log("PageFactory:onShareAppMessage: title=".concat(o.alias, " path=").concat(u + p));var v = { title: o.alias, path: u + p, success: function success() {
for (var t = arguments.length, e = new Array(t), r = 0; r < t; r++) {
e[r] = arguments[r];
}n.data.share.success.forEach(function (t) {
return t.apply(void 0, e);
});
}, fail: function fail() {
for (var t = arguments.length, e = new Array(t), r = 0; r < t; r++) {
e[r] = arguments[r];
}n.data.share.fail.forEach(function (t) {
return t.apply(void 0, e);
});
}, complete: function complete() {
for (var t = arguments.length, e = new Array(t), r = 0; r < t; r++) {
e[r] = arguments[r];
}n.data.share.complete.forEach(function (t) {
return t.apply(void 0, e);
});
} };return this.data.share.title && (v.title = this.data.share.title), this.data.share.imageUrl && (v.imageUrl = this.data.share.imageUrl), v;
}, goToHref: function goToHref(t) {
var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
e = n.redirectTo,
r = void 0 !== e && e,
i = t.split("?"),
o = i[0],
u = o.split("-");if ("tel" === u[0] && u[1]) return s.makePhoneCall({ phoneNumber: u[1] });if ("wxapp" === u[0] && u[1]) return s.navigateToMiniProgram({ appId: u[1] });if (i[1]) {
var a = i[1].split("="),
c = a[0],
f = a[1];"cat_id" === c && s.setStorageSync(c, f);
}var l = i[1] ? "?" + i[1] : "";this.goToLocation(o, l, { redirectTo: r });
}, goToPage: function goToPage(t, n) {
var e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
i = r.redirectTo,
o = void 0 !== i && i,
u = _(e),
a = "papp_" + t + "-" + n;this.goToLocation(a, u, { redirectTo: o });
}, goToPappPage: function goToPappPage() {
return this.goToPage.apply(this, arguments);
}, getCurrentPath: function getCurrentPath() {
var t = h();if (t.length) {
return t[t.length - 1].route;
}
}, isTabbar: function isTabbar() {
return d.indexOf(this.getCurrentPath()) > -1;
}, goToLocation: function goToLocation(t, n) {
var e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
r = e.redirectTo,
i = void 0 !== r && r,
o = h(),
u = "pages/" + t + "/index",
a = d.indexOf(u) > -1,
c = y.find(function (t) {
return t.pages.indexOf(u) > -1;
}),
f = c ? c.root : null,
l = f ? "/" + f + "/pages/" + t + "/index" + n : "/pages/" + t + "/index" + n;if (a) s.switchTab({ url: l });else if (i || o.length > 8) s.redirectTo({ url: l });else {
var p = o.find(function (t) {
return t.route === u;
});if (p) {
var v = p.route + _(p.data.query || {});if (console.log("url, oldPageUrl", l, v), l === "/" + v) {
var g = o.findIndex(function (t) {
return t.route === u;
}),
m = o.length - g - 1;return void (m > 0 && s.navigateBack({ delta: m }));
}
}s.navigateTo({ url: l });
}
}, getAbsoluteUrl: function getAbsoluteUrl(t) {
var n = t.split("?"),
e = n[0],
r = n[1] ? "?" + n[1] : "",
i = "pages/" + e + "/index",
o = y.find(function (t) {
return t.pages.indexOf(i) > -1;
}),
u = o ? o.root : null;return u ? "/" + u + "/pages/" + e + "/index" + r : "/pages/" + e + "/index" + r;
}, pageGoto: function pageGoto(t) {
var n = t.currentTarget.dataset.dwHref;n && this.goToHref(n);
}, setEnableDebug: function setEnableDebug() {
v++ > 8 && this.goToHref("plugin-debug");
} };return a.map(function (t) {
if (t.actor.methods) for (var n in t.actor.methods) {
var e = [t.pathSlug, n].join("__");b[e] = t.dw.decorateMethod(t.actor.methods[n]);
}
}), b;
};
}, function (t, n, e) {
var r = e(6),
i = r.JSON || (r.JSON = { stringify: JSON.stringify });t.exports = function (t) {
return i.stringify.apply(i, arguments);
};
}, function (t, n, e) {
t.exports = e(445);
}, function (t, n, e) {
e(59), e(71), t.exports = e(148).f("iterator");
}, function (t, n, e) {
t.exports = e(447);
}, function (t, n, e) {
e(448), e(141), e(450), e(451), t.exports = e(6).Symbol;
}, function (t, n, e) {
"use strict";
var r = e(14),
i = e(53),
o = e(33),
u = e(12),
a = e(190),
c = e(149).KEY,
s = e(52),
f = e(135),
l = e(70),
h = e(93),
p = e(13),
v = e(148),
d = e(150),
y = e(449),
g = e(206),
m = e(32),
_ = e(26),
w = e(54),
b = e(132),
x = e(67),
S = e(91),
O = e(207),
P = e(151),
k = e(25),
E = e(68),
j = P.f,
A = k.f,
M = O.f,
_T2 = r.Symbol,
F = r.JSON,
L = F && F.stringify,
I = "prototype",
N = p("_hidden"),
D = p("toPrimitive"),
R = {}.propertyIsEnumerable,
C = f("symbol-registry"),
U = f("symbols"),
G = f("op-symbols"),
W = Object[I],
V = "function" == typeof _T2,
B = r.QObject,
q = !B || !B[I] || !B[I].findChild,
z = o && s(function () {
return 7 != S(A({}, "a", { get: function get() {
return A(this, "a", { value: 7 }).a;
} })).a;
}) ? function (t, n, e) {
var r = j(W, n);r && delete W[n], A(t, n, e), r && t !== W && A(W, n, r);
} : A,
H = function H(t) {
var n = U[t] = S(_T2[I]);return n._k = t, n;
},
J = V && "symbol" == (0, _typeof3.default)(_T2.iterator) ? function (t) {
return "symbol" == (typeof t === "undefined" ? "undefined" : (0, _typeof3.default)(t));
} : function (t) {
return t instanceof _T2;
},
K = function K(t, n, e) {
return t === W && K(G, n, e), m(t), n = b(n, !0), m(e), i(U, n) ? (e.enumerable ? (i(t, N) && t[N][n] && (t[N][n] = !1), e = S(e, { enumerable: x(0, !1) })) : (i(t, N) || A(t, N, x(1, {})), t[N][n] = !0), z(t, n, e)) : A(t, n, e);
},
Y = function Y(t, n) {
m(t);for (var e, r = y(n = w(n)), i = 0, o = r.length; o > i;) {
K(t, e = r[i++], n[e]);
}return t;
},
$ = function $(t, n) {
return void 0 === n ? S(t) : Y(S(t), n);
},
Q = function Q(t) {
var n = R.call(this, t = b(t, !0));return !(this === W && i(U, t) && !i(G, t)) && (!(n || !i(this, t) || !i(U, t) || i(this, N) && this[N][t]) || n);
},
X = function X(t, n) {
if (t = w(t), n = b(n, !0), t !== W || !i(U, n) || i(G, n)) {
var e = j(t, n);return !e || !i(U, n) || i(t, N) && t[N][n] || (e.enumerable = !0), e;
}
},
Z = function Z(t) {
for (var n, e = M(w(t)), r = [], o = 0; e.length > o;) {
i(U, n = e[o++]) || n == N || n == c || r.push(n);
}return r;
},
tt = function tt(t) {
for (var n, e = t === W, r = M(e ? G : w(t)), o = [], u = 0; r.length > u;) {
!i(U, n = r[u++]) || e && !i(W, n) || o.push(U[n]);
}return o;
};V || (_T2 = function T() {
if (this instanceof _T2) throw TypeError("Symbol is not a constructor!");var t = h(arguments.length > 0 ? arguments[0] : void 0),
n = function n(e) {
this === W && n.call(G, e), i(this, N) && i(this[N], t) && (this[N][t] = !1), z(this, t, x(1, e));
};return o && q && z(W, t, { configurable: !0, set: n }), H(t);
}, a(_T2[I], "toString", function () {
return this._k;
}), P.f = X, k.f = K, e(208).f = O.f = Z, e(97).f = Q, e(139).f = tt, o && !e(90) && a(W, "propertyIsEnumerable", Q, !0), v.f = function (t) {
return H(p(t));
}), u(u.G + u.W + u.F * !V, { Symbol: _T2 });for (var nt = "hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","), et = 0; nt.length > et;) {
p(nt[et++]);
}for (var rt = E(p.store), it = 0; rt.length > it;) {
d(rt[it++]);
}u(u.S + u.F * !V, "Symbol", { for: function _for(t) {
return i(C, t += "") ? C[t] : C[t] = _T2(t);
}, keyFor: function keyFor(t) {
if (!J(t)) throw TypeError(t + " is not a symbol!");for (var n in C) {
if (C[n] === t) return n;
}
}, useSetter: function useSetter() {
q = !0;
}, useSimple: function useSimple() {
q = !1;
} }), u(u.S + u.F * !V, "Object", { create: $, defineProperty: K, defineProperties: Y, getOwnPropertyDescriptor: X, getOwnPropertyNames: Z, getOwnPropertySymbols: tt }), F && u(u.S + u.F * (!V || s(function () {
var t = _T2();return "[null]" != L([t]) || "{}" != L({ a: t }) || "{}" != L(Object(t));
})), "JSON", { stringify: function stringify(t) {
for (var n, e, r = [t], i = 1; arguments.length > i;) {
r.push(arguments[i++]);
}if (e = n = r[1], (_(n) || void 0 !== t) && !J(t)) return g(n) || (n = function n(t, _n4) {
if ("function" == typeof e && (_n4 = e.call(this, t, _n4)), !J(_n4)) return _n4;
}), r[1] = n, L.apply(F, r);
} }), _T2[I][D] || e(40)(_T2[I], D, _T2[I].valueOf), l(_T2, "Symbol"), l(Math, "Math", !0), l(r.JSON, "JSON", !0);
}, function (t, n, e) {
var r = e(68),
i = e(139),
o = e(97);t.exports = function (t) {
var n = r(t),
e = i.f;if (e) for (var u, a = e(t), c = o.f, s = 0; a.length > s;) {
c.call(t, u = a[s++]) && n.push(u);
}return n;
};
}, function (t, n, e) {
e(150)("asyncIterator");
}, function (t, n, e) {
e(150)("observable");
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return q;
});var r = e(209),
i = e.n(r),
o = e(138),
u = e.n(o),
a = e(453),
c = e.n(a),
s = e(95),
f = e.n(s),
l = e(74),
h = e.n(l),
p = e(140),
v = e.n(p),
d = e(454),
y = e.n(d),
g = e(146),
m = e.n(g),
_ = e(147),
w = e.n(_),
b = e(457),
x = e.n(b),
S = e(458),
O = e.n(S),
P = e(465),
k = e.n(P),
E = e(73),
j = e.n(E),
A = e(62),
M = e.n(A),
T = e(98),
F = e.n(T),
L = e(89),
I = e.n(L),
N = e(188),
D = e(466),
R = e(198),
C = e(145),
U = e(467),
G = e(468),
W = e(204),
V = e(492),
B = {},
q = function q(t) {
var n = t.config,
e = t.WxParse,
r = t.wx,
o = t.isSwan,
a = t.isMy,
s = t.getCurrentPages,
l = Object(V.a)({ wx: r, isSwan: o, isMy: a }),
p = n.app.subPackages || [],
d = r.getSystemInfoSync(),
g = function g(t) {
return n.apiUrl + "/u/" + n.company.nickname + "/capi/v1/" + t;
},
_ = function _(t) {
return n.apiUrl + "/dapi/u/" + n.company.nickname + "/" + t;
},
b = function t(e, i, o, u) {
var a;try {
a = l.getStorageSync("dwapp:installation") || {};
} catch (t) {
console.log(t), a = {};
}if (!(a.installation_id && a.company_id === n.company.id || u)) return new F.a(function (r, u) {
B.registerPromise = B.registerPromise || new F.a(function (e, r) {
t("post", g("dwapp/register"), { company: n.company, system_info: d }, !0).then(e).catch(r);
}), B.registerPromise.then(function (n) {
return l.setStorageSync("dwapp:installation", n.data.installation), t(e, i, o).then(r).catch(u), n;
});
});var c = { "content-type": "application/json" };return a.installation_id && (c["X-App-Install-Id"] = a.installation_id), a.siteuser_token && (c["X-App-Token"] = a.siteuser_token), a.user_token && (c["X-App-User-Token"] = a.user_token), new F.a(function (t, n) {
r.request({ method: e, url: i, data: o, header: c, success: function success(n) {
n.dwStatus = n.statusCode, n.dwHeaders = n.header, t(n);
}, fail: function fail() {
for (var t = arguments.length, r = new Array(t), u = 0; u < t; u++) {
r[u] = arguments[u];
}console.log("wx.request error, method=".concat(e, ", url=").concat(i, ", data, args"), o, r), n.apply(void 0, r);
} });
});
},
S = function S(t, n) {
n = n || {};var e,
r = t.split("/"),
i = r[0].toUpperCase(),
o = r[1],
u = r[2];return ["DYNAMIC_GET", "DYNAMIC_POST", "DYNAMIC_PUT", "DYNAMIC_DELETE"].indexOf(i) > -1 ? (e = g(o + "/" + n.id + "/" + u), i = i.split("_")[1]) : e = g(["query", "post", "save"].indexOf(u) > -1 ? o : ["get", "put", "delete", "update"].indexOf(u) > -1 ? o + "/" + n.id : o + "/" + u), b(i, e, n);
},
P = function P(t, n) {
n = n || {};var e = t.split("/"),
r = e[0].toUpperCase(),
i = e[1],
o = e[2],
u = _(i + "/" + o);return b(r, u, n);
},
E = function E(t) {
var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "",
e = "object" === M()(n) ? j()(n).map(function (t) {
return t + "=" + n[t];
}).join("&") : n,
r = e ? "?" + e : "",
i = "pages/" + t + "/index",
o = p.find(function (t) {
return t.pages.indexOf(i) > -1;
}),
u = o ? o.root : null;return u ? "/" + u + "/pages/" + t + "/index" + r : "/pages/" + t + "/index" + r;
},
A = { setExtraQuery: function setExtraQuery(t) {
for (var n in t) {
this.page.data.extraQuery[n] = t[n];
}
}, setShareTitle: function setShareTitle(t) {
this.page.data.share.title = t;
}, setShareImageUrl: function setShareImageUrl(t) {
this.page.data.share.imageUrl = t;
}, addShareCallback: function addShareCallback(t, n) {
this.page.data.share[t].push(n);
}, setOveride: function setOveride(t, n) {
this.page.data.overides[t] = n;
} };return { DwProxy: function (t) {
function i(t, e, u, c) {
var f,
l = c.componentsPackages;return m()(this, i), f = x()(this, (i.__proto__ || y()(i)).call(this)), Object.defineProperty(k()(f), "filters", { configurable: !0, enumerable: !0, writable: !0, value: N.a }), f.platform = "dwapp", f.slide = t, f.data = null, f.actor = e, f.page = null, f.query = {}, f.methods = {}, f.config = n, f.event = null, f.isSwan = o, f.isMy = a, f.actors = null, f.rootSlide = null, f.wx = r, f.wxapp = u, f.getCurrentPages = s, f.app = new W.a(k()(f), f.slide), f.pageLocals = null, f.event = new I.a.EventEmitter(), f.pageEvent = null, f.globalEvent = U.a, f.extra = {}, f.componentsPackages = l, f.$dirty = new G.a(), f;
}return O()(i, t), w()(i, [{ key: "on", value: function value(t, n) {
this.event.on(t, n);
} }, { key: "emit", value: function value(t, n) {
this.event.emit(t, n);
} }, { key: "destroy", value: function value() {
this.event.removeAllListeners();
} }, { key: "_afterOnLoad", value: function value(t, n, e) {
this.page = t, this.query = n, this.env = e, this.slide.dwapp.new_version && Object(G.b)(this);
} }, { key: "_updateActorData", value: function value(t) {
var n = t.data,
e = t.computed,
r = t.watch,
i = t.actors,
o = t.rootSlide,
u = t.pageLocals,
a = t.pageEvent;this.data = n, this.computed = e, this.watch = r, this.actors = i, this.rootSlide = o, this.pageLocals = u, this.pageEvent = a;
} }, { key: "_setExtraData", value: function value(t) {
this.extra = t;
} }, { key: "selectComponent", value: function value(t) {
return this.page.selectComponent(".".concat(t));
} }, { key: "getComponentPackage", value: function () {
var t = v()(h.a.mark(function t(n) {
return h.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return t.abrupt("return", this.componentsPackages[n].default);case 1:case "end":
return t.stop();}
}
}, t, this);
}));return function (n) {
return t.apply(this, arguments);
};
}() }, { key: "getPageLocals", value: function value(t) {
return this.pageLocals[t];
} }, { key: "setPageLocals", value: function value(t, n) {
this.pageLocals[t] = n;
} }, { key: "getGlobalLocals", value: function value(t) {
return this.wxapp.getGlobalData(t);
} }, { key: "setGlobalLocals", value: function value(t, n) {
this.wxapp.setGlobalData(t, n);
} }, { key: "submitForm", value: function value() {
var t = this;if (!this.rootSlide.id) return this.showModal({ title: "表单提交错误", content: "请先保存小程序再生成小程序!", showCancel: !1 });var n = this.actors.filter(function (t) {
return t.dw.slide.form_field && "_submit" !== t.dw.slide.form_field.type_widget;
}).map(function (t) {
return t.dw;
}),
e = !0,
r = !1,
i = void 0;try {
for (var o, u = f()(n); !(e = (o = u.next()).done); e = !0) {
var a = o.value;if (a.slide.form_field.required && (null == a.data.value || "" === a.data.value)) return this.showModal({ title: "请填写完整!", content: a.slide.form_field.label + "是必填字段!", showCancel: !1 });
}
} catch (t) {
r = !0, i = t;
} finally {
try {
e || null == u.return || u.return();
} finally {
if (r) throw i;
}
}var c = n.map(function (t) {
return { name: t.slide.randomid, value: t.data.value };
});if (!c.length) return this.showModal({ title: "表单提交错误", content: "请先添加表单组件!", showCancel: !1 });var s = { file_data: {}, fields: c, slide_id: this.rootSlide.id };this.showLoading({ title: "提交中..." }), this.request("post/company_form/submit_pageslide_form", s).then(function (n) {
if ("error" === n.data.status) return t.hideLoading(), t.showModal({ title: "表单提交错误", content: n.data.message, showCancel: !1 });if (n.data.order_response) {
var e = n.data.order_response.redirect_data.charge_id;return t.goToHref("charge?id=".concat(e), { redirectTo: !0 });
}var r = [];for (var i in n.data.data) {
r.push(i + ": " + n.data.data[i]);
}t.hideLoading(), t.showModal({ title: "表单提交成功!", content: r.slice(0, 5).join("\n"), showCancel: !1 });
});
} }, { key: "getAbsolutePath", value: function value(t) {
return this.actor.path + ".dwdata." + t;
} }, { key: "buildDapiResourceUrl", value: function value() {
return _.apply(void 0, arguments);
} }, { key: "setWxParse", value: function value(t, n) {
var r = this.getAbsolutePath(t);e.wxParse(r, "html", n || "", this.page, 5);
} }, { key: "_resolveDatas", value: function value(t) {
var n = this,
e = this.page.data.slide.components[this.actor.key].dwdata,
r = {},
i = function i(t, e) {
var i = n.getAbsolutePath(t);r[i] = void 0 !== e ? e : null;
};for (var o in t) {
var u = t[o];if (o.endsWith("__concat")) !function () {
var t = o.slice(0, -"__concat".length),
n = Object(C.getDataByPath)(e, t),
r = n.lastObj,
a = n.lastKey,
c = r[a];u.forEach(function (n, e) {
var r = "".concat(t, "[").concat(c.length + e, "]");i(r, n);
});
}();else if (o.endsWith("__uconcat")) !function () {
var t = o.slice(0, -"__uconcat".length),
n = Object(C.getDataByPath)(e, t),
r = n.lastObj,
a = n.lastKey,
c = r[a],
s = u.field,
f = u.list,
l = r[a].map(function (t) {
return t[s];
});f.filter(function (t) {
return !l.includes(t[s]);
}).forEach(function (n, e) {
var r = "".concat(t, "[").concat(c.length + e, "]");i(r, n);
});
}();else if (o.endsWith("__push")) {
var a = o.slice(0, -"__push".length),
c = Object(C.getDataByPath)(this.data, a),
s = c.lastObj,
f = c.lastKey,
l = s[f],
h = "".concat(a, "[").concat(l.length, "]");i(h, u);
} else if (o.endsWith("__update")) {
var p = o.slice(0, -"__update".length);for (var v in u) {
i("".concat(p, ".").concat(v), u[v]);
}
} else i(o, u);
}return r;
} }, { key: "setData", value: function value(t, n, e) {
return this.setDatas(c()({}, t, n), e);
} }, { key: "setDatas", value: function value(t, n) {
var e = this._resolveDatas(t);this.page.setData(e, n), this.data = this.page.data.slide.components[this.actor.key].dwdata;
} }, { key: "getDwtools", value: function value() {
return this.filters;
} }, { key: "request", value: function value(t, n) {
try {
return S(t, n);
} catch (e) {
throw console.log("dw.request error: path, data, e", t, n, e), e;
}
} }, { key: "fetch", value: function value(t, n) {
try {
return P(t, n);
} catch (e) {
throw console.log("dw.fetch error: path, data, e", t, n, e), e;
}
} }, { key: "fetchPappApi", value: function value(t) {
var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
e = t.split("/"),
r = u()(e, 2),
i = r[0],
o = r[1];return P("post/ccode/run_api", { papp_slug: i, api_name: o, event_data: n });
} }, { key: "alert", value: function value(t, n, e) {
e = e || function () {}, this.showModal({ title: t, content: n, showCancel: !1, success: function success() {
e();
} });
} }, { key: "isTabbar", value: function value() {
return this.page.isTabbar();
} }, { key: "goToHref", value: function value() {
var t;return (t = this.page).goToHref.apply(t, arguments);
} }, { key: "getAbsoluteUrl", value: function value() {
var t;return (t = this.page).getAbsoluteUrl.apply(t, arguments);
} }, { key: "goToPage", value: function value() {
for (var t, n = arguments.length, e = new Array(n), r = 0; r < n; r++) {
e[r] = arguments[r];
}return (t = this.page).goToPage.apply(t, [this.slide.type].concat(e));
} }, { key: "goToPappPage", value: function value() {
for (var t, n = arguments.length, e = new Array(n), r = 0; r < n; r++) {
e[r] = arguments[r];
}return (t = this.page).goToPappPage.apply(t, [this.slide.type].concat(e));
} }, { key: "goToPappHome", value: function value() {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
e = n.redirectTo,
r = void 0 !== e && e;if (this.slide.dwapp_home && this.slide.dwapp_home.group && this.slide.dwapp_home.slug) {
var i = this.slide.dwapp_home,
o = i.group,
u = i.slug,
a = "".concat(o, "-").concat(u),
c = j()(t).map(function (n) {
return n + "=" + t[n];
}).join("&"),
s = c ? "?" + c : "";return this.page.goToLocation(a, s, { redirectTo: r });
}throw Error("dw.goToPappHome Error: 只能在通用组件子页面内调用此方法");
} }, { key: "reportFormId", value: function () {
var t = v()(h.a.mark(function t(n) {
var e,
r = arguments;return h.a.wrap(function (t) {
for (;;) {
switch (t.prev = t.next) {case 0:
return e = r.length > 1 && void 0 !== r[1] ? r[1] : "default", t.abrupt("return", this.fetch("post/appusertemplatemessage/create_appusertemplatemessage_record", { formid: n.detail.formId, source: e }));case 2:case "end":
return t.stop();}
}
}, t, this);
}));return function (n) {
return t.apply(this, arguments);
};
}() }, { key: "$clear", value: function value() {
this.$dirty.length() && this.setDatas(this.$dirty.pop());
} }, { key: "$throttleClear", value: function value() {
return Object(D.a)(this.$clear.bind(this), 50, this)();
} }, { key: "decorateMethod", value: function value(t) {
var n = this;return this.slide.dwapp.new_version ? "AsyncFunction" === t.constructor.name ? v()(h.a.mark(function e() {
var r,
i,
o,
u,
a = arguments;return h.a.wrap(function (e) {
for (;;) {
switch (e.prev = e.next) {case 0:
for (r = a.length, i = new Array(r), o = 0; o < r; o++) {
i[o] = a[o];
}return e.next = 3, t.call.apply(t, [n].concat(i));case 3:
return u = e.sent, n.$throttleClear(), e.abrupt("return", u);case 6:case "end":
return e.stop();}
}
}, e, this);
})) : function () {
for (var e = arguments.length, r = new Array(e), i = 0; i < e; i++) {
r[i] = arguments[i];
}var o = t.call.apply(t, [n].concat(r));return n.$throttleClear(), o;
} : t;
} }]), i;
}(Object(C.mixin)(R.a, A, l)), DwUtils: i()({ request: S, fetch: P, buildRequest: b, buildAbsoluteUrl: E, filters: N.a }, l) };
};
}, function (t, n, e) {
function r(t, n, e) {
return n in t ? i(t, n, { value: e, enumerable: !0, configurable: !0, writable: !0 }) : t[n] = e, t;
}var i = e(100);t.exports = r;
}, function (t, n, e) {
t.exports = e(455);
}, function (t, n, e) {
e(456), t.exports = e(6).Object.getPrototypeOf;
}, function (t, n, e) {
var r = e(61),
i = e(193);e(99)("getPrototypeOf", function () {
return function (t) {
return i(r(t));
};
});
}, function (t, n, e) {
function r(t, n) {
if (n && ("object" === i(n) || "function" == typeof n)) return n;if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t;
}var i = e(62);t.exports = r;
}, function (t, n, e) {
function r(t, n) {
if ("function" != typeof n && null !== n) throw new TypeError("Super expression must either be null or a function");t.prototype = o(n && n.prototype, { constructor: { value: t, enumerable: !1, writable: !0, configurable: !0 } }), n && (i ? i(t, n) : t.__proto__ = n);
}var i = e(459),
o = e(152);t.exports = r;
}, function (t, n, e) {
t.exports = e(460);
}, function (t, n, e) {
e(461), t.exports = e(6).Object.setPrototypeOf;
}, function (t, n, e) {
var r = e(12);r(r.S, "Object", { setPrototypeOf: e(462).set });
}, function (t, n, e) {
var r = e(26),
i = e(32),
o = function o(t, n) {
if (i(t), !r(n) && null !== n) throw TypeError(n + ": can't set as prototype!");
};t.exports = { set: Object.setPrototypeOf || ("__proto__" in {} ? function (t, n, r) {
try {
r = e(37)(Function.call, e(151).f(Object.prototype, "__proto__").set, 2), r(t, []), n = !(t instanceof Array);
} catch (t) {
n = !0;
}return function (t, e) {
return o(t, e), n ? t.__proto__ = e : r(t, e), t;
};
}({}, !1) : void 0), check: o };
}, function (t, n, e) {
e(464);var r = e(6).Object;t.exports = function (t, n) {
return r.create(t, n);
};
}, function (t, n, e) {
var r = e(12);r(r.S, "Object", { create: e(91) });
}, function (t, n) {
function e(t) {
if (void 0 === t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t;
}t.exports = e;
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return s;
});var r = e(96),
i = (e.n(r), e(138)),
o = (e.n(i), e(73)),
u = (e.n(o), e(95)),
a = (e.n(u), e(205)),
c = (e.n(a), e(62)),
s = (e.n(c), Array.isArray, function (t, n) {
var e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null,
r = function r() {
t._timeout && clearTimeout(t._timeout);var r = Array.prototype.slice.call(arguments);t._timeout = setTimeout(function () {
return t.apply(e, r);
}, n);
};return r._real = t, r;
});
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return o;
});var r = e(89),
i = e.n(r),
o = new i.a.EventEmitter();o.setMaxListeners(100);
}, function (t, n, e) {
"use strict";
function r(t, n, e) {
t.__proto__ = n;
}function i(t, n, e) {
for (var r = 0, i = e.length; r < i; r++) {
var o = e[r];Object(N.a)(t, o, n[o]);
}
}function o(t) {
G.target && W.push(G.target), G.target = t;
}function u() {
G.target = W.pop();
}function a(t) {
var n = t.vm,
e = t.obj,
r = t.key,
i = t.value,
o = t.parent,
u = new G(),
a = O()(e, r);if (!a || !1 !== a.configurable) {
var f = a && a.get,
l = a && a.set,
h = s({ vm: n, key: r, value: i, parent: o });x()(e, r, { enumerable: !0, configurable: !0, get: function get() {
var t = f ? f.call(e) : i;return G.target && (u.depend(), h && h.dep.depend(), Array.isArray(t) && c(t)), t;
}, set: function set(t) {
var a = f ? f.call(e) : i;if (t !== a && (t === t || a === a)) {
o = o || r;var c = V(r, e),
p = c.root,
v = c.path;n.$dirty.push(p, v, t), l ? l.call(e, t) : i = t, h = s({ vm: n, key: r, value: i, parent: o }), u.notify();
}
} });
}
}function c(t) {
for (var n, e = 0, r = t.length; e < r; e++) {
n = t[e], n && n.__ob__ && n.__ob__.dep.depend(), Array.isArray(n) && c(n);
}
}function s(t) {
var n = t.vm,
e = t.key,
r = t.value,
i = t.parent;if (Object(N.e)(r)) {
return Object(N.b)(r, "__ob__") && r.__ob__ instanceof B ? r.__ob__ : new B({ vm: n, key: e, value: r, parent: i });
}
}function f(t, n, e) {
var r = new q({ vm: t, expOrFn: n, cb: e });return function () {
r.teardown();
};
}function l(t, n, e) {
"function" == typeof e ? (C.get = h(t, n), C.set = N.f) : (C.get = e.get ? !1 !== e.cache ? h(t, n) : e.get : N.f, C.set = e.set ? e.set : N.f), x()(t, n, C);
}function h(t, n) {
return function () {
var e = t._computedWatchers && t._computedWatchers[n];if (e) return e.dirty && e.evaluate(), G.target && e.depend(), e.value;
};
}function p(t, n) {
for (var e in n) {
var r = n[e];if (Array.isArray(r)) for (var i = 0; i < r.length; i++) {
f(t, e, r[i]);
} else f(t, e, r);
}
}function v(t, n) {
var e = t._computedWatchers = w()(null);for (var r in n) {
var i = n[r],
o = "function" == typeof i ? i : i.get;e[r] = new q({ vm: t, key: r, expOrFn: o, options: H }), r in t.data || l(t, r, i);
}
}function d(t, n) {
j()(n).forEach(function (e) {
t[e] = n[e];
});
}function y(t, n, e) {
C.get = function () {
return this[n][e];
}, C.set = function (t) {
this[n][e] = t;
}, x()(t, e, C);
}function g(t) {
var n,
e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};n = "function" == typeof e ? e.call(t) : e, t._data = n, j()(n).forEach(function (n) {
y(t, "_data", n);
}), s({ vm: t, key: "", value: n, parent: "" });
}function m(t) {
t.methods && d(t, t.methods), g(t, t.data), t.computed && v(t, t.computed), t.watch && p(t, t.watch), t.$throttleClear();
}e.d(n, "a", function () {
return z;
}), n.b = m;var _ = e(152),
w = e.n(_),
b = e(100),
x = e.n(b),
S = e(469),
O = e.n(S),
P = e(472),
k = e.n(P),
E = e(73),
j = e.n(E),
A = e(146),
M = e.n(A),
T = e(147),
F = e.n(T),
L = e(487),
I = e.n(L),
N = e(211),
D = e(491),
R = I()(D.a),
C = { enumerable: !0, configurable: !0, get: N.f, set: N.f },
U = 0,
G = function () {
function t() {
M()(this, t), this.id = U++, this.subs = [];
}return F()(t, [{ key: "addSub", value: function value(t) {
this.subs.push(t);
} }, { key: "removeSub", value: function value(t) {
Object(N.h)(this.subs, t);
} }, { key: "depend", value: function value() {
t.target && t.target.addDep(this);
} }, { key: "notify", value: function value() {
for (var t = this.subs.slice(), n = 0, e = t.length; n < e; n++) {
t[n].update();
}
} }]), t;
}();G.target = null;var W = [],
V = function V(t, n) {
var e = "";if (n && (e = n.__ob__.path)) {
e = Object(N.d)(t) ? "".concat(e, "[").concat(t, "]") : "".concat(e, ".").concat(t);for (var r = "", i = 0; i < e.length && "." !== e[i] && "[" !== e[i];) {
r += e[i++];
}return { path: e, root: r };
}return { root: t, path: t };
},
B = function () {
function t(n) {
var e = n.vm,
o = n.key,
u = n.value,
a = n.parent;M()(this, t), this.value = u, this.vm = e, this.key = o;var c = V(o, a);if (this.root = c.root, this.path = c.path, this.dep = new G(), Object(N.a)(u, "__ob__", this), Array.isArray(u)) {
(N.c ? r : i)(u, D.a, R), this.observeArray(u);
} else this.walk(u);
}return F()(t, [{ key: "walk", value: function value(t) {
for (var n = j()(t), e = 0; e < n.length; e++) {
a({ vm: this.vm, obj: t, key: n[e], value: t[n[e]], parent: t });
}
} }, { key: "observeArray", value: function value(t) {
for (var n = 0, e = t.length; n < e; n++) {
s({ vm: this.vm, key: n, value: t[n], parent: t });
}
} }]), t;
}(),
q = function () {
function t(n) {
var e = n.vm,
r = n.key,
i = n.expOrFn,
o = n.cb,
u = n.options;M()(this, t), this.vm = e, this.key = r, e._watchers = e._watchers || [], e._watchers.push(this), this.lazy = !!u && !!u.lazy, this.id = ++U, this.cb = o || N.f, this.active = !0, this.dirty = this.lazy, this.deps = [], this.newDeps = [], this.depIds = new k.a(), this.newDepIds = new k.a(), "function" == typeof i ? this.getter = i : (this.getter = Object(N.g)(i), this.getter || (this.getter = N.f)), this.value = this.get(), this.dirty && this.vm.$dirty.push(this.key, this.key, this.value);
}return F()(t, [{ key: "get", value: function value() {
o(this);var t = this.getter.call(this.vm, this.vm);return u(), this.cleanupDeps(), t;
} }, { key: "evaluate", value: function value() {
this.value = this.get(), this.dirty = !1;
} }, { key: "depend", value: function value() {
for (var t = this.deps.length; t--;) {
this.deps[t].depend();
}
} }, { key: "addDep", value: function value(t) {
var n = t.id;this.newDepIds.has(n) || (this.newDepIds.add(n), this.newDeps.push(t), this.depIds.has(n) || t.addSub(this));
} }, { key: "cleanupDeps", value: function value() {
for (var t = this.deps.length; t--;) {
var n = this.deps[t];this.newDepIds.has(n.id) || n.removeSub(this);
}var e = this.depIds;this.depIds = this.newDepIds, this.newDepIds = e, this.newDepIds.clear(), e = this.deps, this.deps = this.newDeps, this.newDeps = e, this.newDeps.length = 0;
} }, { key: "update", value: function value() {
if (this.lazy) {
this.dirty = !0;var t = this.get();this.value !== t && (this.value = t, this.vm.$dirty.push(this.key, this.key, t));
} else this.run();
} }, { key: "run", value: function value() {
if (this.active) {
var t = this.get(),
n = this.value;this.value = t, this.cb.call(this.vm, t, n);
}
} }, { key: "teardown", value: function value() {
if (this.active) {
Object(N.h)(this.vm._watchers, this);for (var t = this.deps.length; t--;) {
this.deps[t].removeSub(this);
}this.active = !1;
}
} }]), t;
}(),
z = function () {
function t(n) {
M()(this, t), this.reset(), this.type = n || "path", this.active = !0;
}return F()(t, [{ key: "push", value: function value(t, n, e) {
this.active && (this._path[n] = e, this._length++);
} }, { key: "pop", value: function value() {
var t = w()(null);return "path" === this.type ? t = this._path : this.type, this.reset(), t;
} }, { key: "reset", value: function value() {
this._path = {}, this._length = 0;
} }, { key: "length", value: function value() {
return this._length;
} }, { key: "vacuo", value: function value(t) {
this.active = !1, "function" == typeof t && t(), this.active = !0;
} }]), t;
}(),
H = { lazy: !0 };
}, function (t, n, e) {
t.exports = e(470);
}, function (t, n, e) {
e(471);var r = e(6).Object;t.exports = function (t, n) {
return r.getOwnPropertyDescriptor(t, n);
};
}, function (t, n, e) {
var r = e(54),
i = e(151).f;e(99)("getOwnPropertyDescriptor", function () {
return function (t, n) {
return i(r(t), n);
};
});
}, function (t, n, e) {
t.exports = e(473);
}, function (t, n, e) {
e(141), e(59), e(71), e(474), e(480), e(483), e(485), t.exports = e(6).Set;
}, function (t, n, e) {
"use strict";
var r = e(475),
i = e(210),
o = "Set";t.exports = e(476)(o, function (t) {
return function () {
return t(this, arguments.length > 0 ? arguments[0] : void 0);
};
}, { add: function add(t) {
return r.def(i(this, o), t = 0 === t ? 0 : t, t);
} }, r);
}, function (t, n, e) {
"use strict";
var r = e(25).f,
i = e(91),
o = e(144),
u = e(37),
a = e(142),
c = e(72),
s = e(130),
f = e(197),
l = e(203),
h = e(33),
p = e(149).fastKey,
v = e(210),
d = h ? "_s" : "size",
y = function y(t, n) {
var e,
r = p(n);if ("F" !== r) return t._i[r];for (e = t._f; e; e = e.n) {
if (e.k == n) return e;
}
};t.exports = { getConstructor: function getConstructor(t, n, e, s) {
var f = t(function (t, r) {
a(t, f, n, "_i"), t._t = n, t._i = i(null), t._f = void 0, t._l = void 0, t[d] = 0, void 0 != r && c(r, e, t[s], t);
});return o(f.prototype, { clear: function clear() {
for (var t = v(this, n), e = t._i, r = t._f; r; r = r.n) {
r.r = !0, r.p && (r.p = r.p.n = void 0), delete e[r.i];
}t._f = t._l = void 0, t[d] = 0;
}, delete: function _delete(t) {
var e = v(this, n),
r = y(e, t);if (r) {
var i = r.n,
o = r.p;delete e._i[r.i], r.r = !0, o && (o.n = i), i && (i.p = o), e._f == r && (e._f = i), e._l == r && (e._l = o), e[d]--;
}return !!r;
}, forEach: function forEach(t) {
v(this, n);for (var e, r = u(t, arguments.length > 1 ? arguments[1] : void 0, 3); e = e ? e.n : this._f;) {
for (r(e.v, e.k, this); e && e.r;) {
e = e.p;
}
}
}, has: function has(t) {
return !!y(v(this, n), t);
} }), h && r(f.prototype, "size", { get: function get() {
return v(this, n)[d];
} }), f;
}, def: function def(t, n, e) {
var r,
i,
o = y(t, n);return o ? o.v = e : (t._l = o = { i: i = p(n, !0), k: n, v: e, p: r = t._l, n: void 0, r: !1 }, t._f || (t._f = o), r && (r.n = o), t[d]++, "F" !== i && (t._i[i] = o)), t;
}, getEntry: y, setStrong: function setStrong(t, n, e) {
s(t, n, function (t, e) {
this._t = v(t, n), this._k = e, this._l = void 0;
}, function () {
for (var t = this, n = t._k, e = t._l; e && e.r;) {
e = e.p;
}return t._t && (t._l = e = e ? e.n : t._t._f) ? "keys" == n ? f(0, e.k) : "values" == n ? f(0, e.v) : f(0, [e.k, e.v]) : (t._t = void 0, f(1));
}, e ? "entries" : "values", !e, !0), l(n);
} };
}, function (t, n, e) {
"use strict";
var r = e(14),
i = e(12),
o = e(149),
u = e(52),
a = e(40),
c = e(144),
s = e(72),
f = e(142),
l = e(26),
h = e(70),
p = e(25).f,
v = e(477)(0),
d = e(33);t.exports = function (t, n, e, y, g, m) {
var _ = r[t],
w = _,
b = g ? "set" : "add",
x = w && w.prototype,
S = {};return d && "function" == typeof w && (m || x.forEach && !u(function () {
new w().entries().next();
})) ? (w = n(function (n, e) {
f(n, w, t, "_c"), n._c = new _(), void 0 != e && s(e, g, n[b], n);
}), v("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","), function (t) {
var n = "add" == t || "set" == t;t in x && (!m || "clear" != t) && a(w.prototype, t, function (e, r) {
if (f(this, w, t), !n && m && !l(e)) return "get" == t && void 0;var i = this._c[t](0 === e ? 0 : e, r);return n ? this : i;
});
}), m || p(w.prototype, "size", { get: function get() {
return this._c.size;
} })) : (w = y.getConstructor(n, t, g, b), c(w.prototype, e), o.NEED = !0), h(w, t), S[t] = w, i(i.G + i.W + i.F, S), m || y.setStrong(w, t, g), w;
};
}, function (t, n, e) {
var r = e(37),
i = e(133),
o = e(61),
u = e(92),
a = e(478);t.exports = function (t, n) {
var e = 1 == t,
c = 2 == t,
s = 3 == t,
f = 4 == t,
l = 6 == t,
h = 5 == t || l,
p = n || a;return function (n, a, v) {
for (var d, y, g = o(n), m = i(g), _ = r(a, v, 3), w = u(m.length), b = 0, x = e ? p(n, w) : c ? p(n, 0) : void 0; w > b; b++) {
if ((h || b in m) && (d = m[b], y = _(d, b, g), t)) if (e) x[b] = y;else if (y) switch (t) {case 3:
return !0;case 5:
return d;case 6:
return b;case 2:
x.push(d);} else if (f) return !1;
}return l ? -1 : s || f ? f : x;
};
};
}, function (t, n, e) {
var r = e(479);t.exports = function (t, n) {
return new (r(t))(n);
};
}, function (t, n, e) {
var r = e(26),
i = e(206),
o = e(13)("species");t.exports = function (t) {
var n;return i(t) && (n = t.constructor, "function" != typeof n || n !== Array && !i(n.prototype) || (n = void 0), r(n) && null === (n = n[o]) && (n = void 0)), void 0 === n ? Array : n;
};
}, function (t, n, e) {
var r = e(12);r(r.P + r.R, "Set", { toJSON: e(481)("Set") });
}, function (t, n, e) {
var r = e(94),
i = e(482);t.exports = function (t) {
return function () {
if (r(this) != t) throw TypeError(t + "#toJSON isn't generic");return i(this);
};
};
}, function (t, n, e) {
var r = e(72);t.exports = function (t, n) {
var e = [];return r(t, !1, e.push, e, n), e;
};
}, function (t, n, e) {
e(484)("Set");
}, function (t, n, e) {
"use strict";
var r = e(12);t.exports = function (t) {
r(r.S, t, { of: function of() {
for (var t = arguments.length, n = new Array(t); t--;) {
n[t] = arguments[t];
}return new this(n);
} });
};
}, function (t, n, e) {
e(486)("Set");
}, function (t, n, e) {
"use strict";
var r = e(12),
i = e(66),
o = e(37),
u = e(72);t.exports = function (t) {
r(r.S, t, { from: function from(t) {
var n,
e,
r,
a,
c = arguments[1];return i(this), n = void 0 !== c, n && i(c), void 0 == t ? new this() : (e = [], n ? (r = 0, a = o(c, arguments[2], 2), u(t, !1, function (t) {
e.push(a(t, r++));
})) : u(t, !1, e.push, e), new this(e));
} });
};
}, function (t, n, e) {
t.exports = e(488);
}, function (t, n, e) {
e(489);var r = e(6).Object;t.exports = function (t) {
return r.getOwnPropertyNames(t);
};
}, function (t, n, e) {
e(99)("getOwnPropertyNames", function () {
return e(207).f;
});
}, function (t, n, e) {
"use strict";
var r = e(62);e.n(r), e(212);
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return a;
});var r = e(152),
i = e.n(r),
o = e(211),
u = Array.prototype,
a = i()(u);["push", "pop", "shift", "unshift", "splice", "sort", "reverse"].forEach(function (t) {
var n = u[t];Object(o.a)(a, t, function () {
for (var e = arguments.length, r = new Array(e), i = 0; i < e; i++) {
r[i] = arguments[i];
}var o,
u = n.apply(this, r),
a = this.__ob__,
c = a.vm;switch ("push" !== t && c.$dirty.push(a.key, a.path, a.value), t) {case "push":
c.$dirty.push(a.key, "".concat(a.path, "[").concat(u - 1, "]"), r[0]);break;case "unshift":
o = a.value;break;case "splice":
o = r.slice(2);}return o && a.observeArray(a.key, o), a.dep.notify(), u;
});
});
}, function (t, n, e) {
"use strict";
e.d(n, "a", function () {
return o;
});var r = e(209),
i = e.n(r),
o = function o(t) {
var n = t.wx,
e = (t.isSwan, t.isMy);return { getStorageSync: function getStorageSync(t) {
if (e) return n.getStorageSync({ key: t }).data;try {
return n.getStorageSync(t);
} catch (t) {
return null;
}
}, setStorageSync: function setStorageSync(t, r) {
return e ? n.setStorageSync({ key: t, data: r }) : n.setStorageSync(t, r);
}, showModal: function showModal(t) {
e ? n.alert(i()({}, t, { title: t.title, content: t.content })) : n.showModal(i()({}, t));
}, showLoading: function showLoading(t) {
e ? n.showLoading(i()({}, t, { content: t.title })) : n.showLoading(i()({}, t));
}, hideLoading: function hideLoading() {
return n.hideLoading.apply(n, arguments);
} };
};
}]);
/***/ }),
/***/ 0:
/*!************************************************************!*\
!*** multi ./.tea/entryFiles-development/index$.worker.js ***!
\************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(/*! C:\Users\somarl\dev\defaultaliapp2\.tea\entryFiles-development\index$.worker.js */"./.tea/entryFiles-development/index$.worker.js");
/***/ }),
/***/ "@alipay/af-appx":
/*!******************************!*\
!*** external "self.AFAppX" ***!
\******************************/
/*! no static exports found */
/***/ (function(module, exports) {
module.exports = self.AFAppX;
/***/ })
/******/ });
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImludGVybmFsOi8vL3dlYnBhY2svYm9vdHN0cmFwIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9hc3NpZ24uanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9iYWJlbC1ydW50aW1lL2NvcmUtanMvc3ltYm9sLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL3N5bWJvbC9pdGVyYXRvci5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvYXNzaWduLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL3N5bWJvbC9pbmRleC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9mbi9zeW1ib2wvaXRlcmF0b3IuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmEtZnVuY3Rpb24uanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmFkZC10by11bnNjb3BhYmxlcy5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuYW4tb2JqZWN0LmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5jb2YuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmNvcmUuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmN0eC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZGVmaW5lZC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZGVzY3JpcHRvcnMuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmVudW0ta2V5cy5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZXhwb3J0LmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5mYWlscy5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuZ2V0LW5hbWVzLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5nbG9iYWwuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmhhcy5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaGlkZS5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaW9iamVjdC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXMtYXJyYXkuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmlzLW9iamVjdC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuaXRlci1jcmVhdGUuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLml0ZXItZGVmaW5lLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5pdGVyLXN0ZXAuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLml0ZXJhdG9ycy5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLmtleW9mLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5saWJyYXJ5LmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5vYmplY3QtYXNzaWduLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5wcm9wZXJ0eS1kZXNjLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC5yZWRlZmluZS5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc2V0LXRvLXN0cmluZy10YWcuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnNoYXJlZC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQuc3RyaW5nLWF0LmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1pbnRlZ2VyLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1pb2JqZWN0LmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvJC50by1vYmplY3QuanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy8kLnVpZC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzLyQud2tzLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24uanMiLCJpbnRlcm5hbDovLy9jOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yLmpzIiwiaW50ZXJuYWw6Ly8vYzovUHJvZ3JhbSBGaWxlcy9hbGkvbWluaS9yZXNvdXJjZXMvYXBwL2V4dGVuc2lvbnMvdm9sYW5zLWlkZS10aW55LXByb2plY3QuYXNhci9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsImludGVybmFsOi8vL2M6L1Byb2dyYW0gRmlsZXMvYWxpL21pbmkvcmVzb3VyY2VzL2FwcC9leHRlbnNpb25zL3ZvbGFucy1pZGUtdGlueS1wcm9qZWN0LmFzYXIvbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUuanMiLCJpbnRlcm5hbDovLy9DOi9Qcm9ncmFtIEZpbGVzL2FsaS9taW5pL3Jlc291cmNlcy9hcHAvZXh0ZW5zaW9ucy92b2xhbnMtaWRlLXRpbnktcHJvamVjdC5hc2FyL25vZGVfbW9kdWxlcy93ZWJwYWNrL2J1aWxkaW4vZ2xvYmFsLmpzIiwiaW50ZXJuYWw6Ly8vLi8udGVhL2VudHJ5RmlsZXMtZGV2ZWxvcG1lbnQvY29uZmlnJC5qcyIsImludGVybmFsOi8vLy4vLnRlYS9lbnRyeUZpbGVzLWRldmVsb3BtZW50L2luZGV4JC53b3JrZXIuanMiLCJhcHA6Ly8vYXBwLmpzIiwiYXBwOi8vL2NvbXBvbmVudHMvYWRkLWJ1dHRvbi9hZGQtYnV0dG9uLmpzIiwiYXBwOi8vL2NvbXBvbmVudHMvc2hhcmVkL3dhY29tcG9uZW50LmpzIiwiYXBwOi8vL3BhZ2VzL2FjY291bnQtbG9naW4vaW5kZXguanMiLCJhcHA6Ly8vcGFnZXMvYWRkLXRvZG8vYWRkLXRvZG8uanMiLCJhcHA6Ly8vcGFnZXMvcGx1Z2luLWNvbXpiYWRnZS9pbmRleC5qcyIsImFwcDovLy9wYWdlcy9wbHVnaW4tY29temxvYWRpbmcvaW5kZXguanMiLCJhcHA6Ly8vcGFnZXMvcGx1Z2luLWRlYnVnL2luZGV4LmpzIiwiYXBwOi8vL3BhZ2VzL3RvZG9zL3RvZG9zLmpzIiwiYXBwOi8vL3V0aWxzL2NvbmZpZy5qcyIsImFwcDovLy91dGlscy9kdy5qcyIsImFwcDovLy91dGlscy9kd19zaGFyZWQuanMiLCJpbnRlcm5hbDovLy9leHRlcm5hbCBcInNlbGYuQUZBcHBYXCIiXSwibmFtZXMiOlsiZyIsImdsb2JhbCIsInNlbGYiLCJhcHBYUnVudGltZUNvbmZpZyIsImFwcFhBcHBKc29uIiwiSURFX0hBQ0tfQ09ERSIsIlgiLCJJREVfSEFDS19DT0RFX0JBQ0siLCJyZXF1aXJlIiwic3VjY2VzcyIsImJvb3RzdHJhcEFwcCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbEZBLGtCQUFrQixZQUFZLG1CQUFPLENBQUMsbUxBQWtDLHNCOzs7Ozs7Ozs7OztBQ0F4RSxrQkFBa0IsWUFBWSxtQkFBTyxDQUFDLDJLQUEyQixzQjs7Ozs7Ozs7Ozs7QUNBakUsa0JBQWtCLFlBQVksbUJBQU8sQ0FBQyx1TEFBb0Msc0I7Ozs7Ozs7Ozs7OztBQ0E3RDs7QUFFYjs7QUFFQSxjQUFjLG1CQUFPLENBQUMsOEtBQTBCOztBQUVoRDs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEU7Ozs7Ozs7Ozs7OztBQ3RCYTs7QUFFYjs7QUFFQSxnQkFBZ0IsbUJBQU8sQ0FBQyxrTEFBNEI7O0FBRXBEOztBQUVBLGNBQWMsbUJBQU8sQ0FBQyxnS0FBbUI7O0FBRXpDOztBQUVBLGlIQUFpSCxtQkFBbUIsRUFBRSxtQkFBbUIsNEpBQTRKOztBQUVyVCxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLEU7Ozs7Ozs7Ozs7O0FDcEJBLG1CQUFPLENBQUMsMkxBQWlDO0FBQ3pDLGlCQUFpQixtQkFBTyxDQUFDLHFLQUFzQixnQjs7Ozs7Ozs7Ozs7QUNEL0MsbUJBQU8sQ0FBQyw2S0FBMEI7QUFDbEMsbUJBQU8sQ0FBQyxpTUFBb0M7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMscUtBQXNCLFM7Ozs7Ozs7Ozs7O0FDRi9DLG1CQUFPLENBQUMsK0xBQW1DO0FBQzNDLG1CQUFPLENBQUMseUxBQWdDO0FBQ3hDLGlCQUFpQixtQkFBTyxDQUFDLG1LQUFxQixjOzs7Ozs7Ozs7OztBQ0Y5QztBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ0hBLDRCQUE0QixlOzs7Ozs7Ozs7OztBQ0E1QixlQUFlLG1CQUFPLENBQUMsbUtBQWU7QUFDdEM7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNKQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ0pBLDZCQUE2QjtBQUM3QixxQ0FBcUMsZ0M7Ozs7Ozs7Ozs7O0FDRHJDO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMscUtBQWdCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7O0FDSkE7QUFDQSxrQkFBa0IsbUJBQU8sQ0FBQywySkFBVztBQUNyQyxpQ0FBaUMsUUFBUSxnQkFBZ0IsVUFBVSxHQUFHO0FBQ3RFLENBQUMsRTs7Ozs7Ozs7Ozs7QUNIRDtBQUNBLFFBQVEsbUJBQU8sQ0FBQywrSUFBSztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNiQSxnQkFBZ0IsbUJBQU8sQ0FBQyw2SkFBWTtBQUNwQyxnQkFBZ0IsbUJBQU8sQ0FBQyx5SkFBVTtBQUNsQyxnQkFBZ0IsbUJBQU8sQ0FBQyx1SkFBUztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUNuRSxxRkFBcUY7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCwrREFBK0Q7QUFDL0Q7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGVBQWU7QUFDZixlQUFlO0FBQ2YseUI7Ozs7Ozs7Ozs7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNOQTtBQUNBLGdCQUFnQixtQkFBTyxDQUFDLHFLQUFnQjtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQywrSUFBSztBQUM3QixrQkFBa0I7O0FBRWxCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ25CQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0M7Ozs7Ozs7Ozs7O0FDSHZDLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNIQSxpQkFBaUIsbUJBQU8sQ0FBQywrSUFBSztBQUM5QixpQkFBaUIsbUJBQU8sQ0FBQywyS0FBbUI7QUFDNUMsaUJBQWlCLG1CQUFPLENBQUMsdUtBQWlCO0FBQzFDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ1BBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHVKQUFTO0FBQzNCO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ0pBO0FBQ0EsVUFBVSxtQkFBTyxDQUFDLHVKQUFTO0FBQzNCO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ0pBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7Ozs7QUNGYTtBQUNiLHFCQUFxQixtQkFBTyxDQUFDLCtJQUFLO0FBQ2xDLHFCQUFxQixtQkFBTyxDQUFDLDJLQUFtQjtBQUNoRCxxQkFBcUIsbUJBQU8sQ0FBQyxtTEFBdUI7QUFDcEQ7O0FBRUE7QUFDQSxtQkFBTyxDQUFDLHlKQUFVLHFCQUFxQixtQkFBTyxDQUFDLHVKQUFTLDBCQUEwQixhQUFhLEVBQUU7O0FBRWpHO0FBQ0EsdURBQXVELDBCQUEwQjtBQUNqRjtBQUNBLEU7Ozs7Ozs7Ozs7OztBQ1phO0FBQ2IscUJBQXFCLG1CQUFPLENBQUMsK0pBQWE7QUFDMUMscUJBQXFCLG1CQUFPLENBQUMsNkpBQVk7QUFDekMscUJBQXFCLG1CQUFPLENBQUMsaUtBQWM7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMseUpBQVU7QUFDdkMscUJBQXFCLG1CQUFPLENBQUMsdUpBQVM7QUFDdEMscUJBQXFCLG1CQUFPLENBQUMsbUtBQWU7QUFDNUMscUJBQXFCLG1CQUFPLENBQUMsdUtBQWlCO0FBQzlDLHFCQUFxQixtQkFBTyxDQUFDLG1MQUF1QjtBQUNwRCxxQkFBcUIsbUJBQU8sQ0FBQywrSUFBSztBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyx1SkFBUztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEIsYUFBYTs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxvQ0FBb0M7QUFDNUUsNENBQTRDLG9DQUFvQztBQUNoRixLQUFLLDJCQUEyQixvQ0FBb0M7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0EsbUNBQW1DLDJCQUEyQjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ2pFQTtBQUNBLFVBQVU7QUFDVixFOzs7Ozs7Ozs7OztBQ0ZBLG9COzs7Ozs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNaQSxnQkFBZ0IsbUJBQU8sQ0FBQywrSUFBSztBQUM3QixnQkFBZ0IsbUJBQU8sQ0FBQyxxS0FBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ1RBLHNCOzs7Ozs7Ozs7OztBQ0FBO0FBQ0EsZUFBZSxtQkFBTyxDQUFDLCtJQUFLO0FBQzVCLGVBQWUsbUJBQU8sQ0FBQyxtS0FBZTtBQUN0QyxlQUFlLG1CQUFPLENBQUMsK0pBQWE7O0FBRXBDO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsMkpBQVc7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLFVBQVUsRUFBRTtBQUM5QyxhQUFhLGdDQUFnQztBQUM3QyxDQUFDLG9DQUFvQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsaUI7Ozs7Ozs7Ozs7O0FDaENEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNQQSxpQkFBaUIsbUJBQU8sQ0FBQyx5SkFBVSxFOzs7Ozs7Ozs7OztBQ0FuQyxVQUFVLG1CQUFPLENBQUMsK0lBQUs7QUFDdkIsVUFBVSxtQkFBTyxDQUFDLHVKQUFTO0FBQzNCLFVBQVUsbUJBQU8sQ0FBQyx1SkFBUzs7QUFFM0I7QUFDQSxrRUFBa0UsK0JBQStCO0FBQ2pHLEU7Ozs7Ozs7Ozs7O0FDTkEsYUFBYSxtQkFBTyxDQUFDLDZKQUFZO0FBQ2pDO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0EsdUNBQXVDO0FBQ3ZDLEU7Ozs7Ozs7Ozs7O0FDTEEsZ0JBQWdCLG1CQUFPLENBQUMscUtBQWdCO0FBQ3hDLGdCQUFnQixtQkFBTyxDQUFDLCtKQUFhO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7Ozs7Ozs7QUNMQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQywrSkFBYTtBQUNuQyxjQUFjLG1CQUFPLENBQUMsK0pBQWE7QUFDbkM7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7O0FDTEE7QUFDQSxjQUFjLG1CQUFPLENBQUMsK0pBQWE7QUFDbkM7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7Ozs7OztBQ0pBLGFBQWEsbUJBQU8sQ0FBQyw2SkFBWTtBQUNqQyxhQUFhLG1CQUFPLENBQUMsdUpBQVM7QUFDOUIsYUFBYSxtQkFBTyxDQUFDLDZKQUFZO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7Ozs7Ozs7OztBQ05hO0FBQ2IsdUJBQXVCLG1CQUFPLENBQUMscUxBQXdCO0FBQ3ZELHVCQUF1QixtQkFBTyxDQUFDLG1LQUFlO0FBQzlDLHVCQUF1QixtQkFBTyxDQUFDLG1LQUFlO0FBQzlDLHVCQUF1QixtQkFBTyxDQUFDLHFLQUFnQjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyx1S0FBaUI7QUFDMUMsZ0NBQWdDO0FBQ2hDLGNBQWM7QUFDZCxpQkFBaUI7QUFDakI7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCOzs7Ozs7Ozs7OztBQ2pDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyw2SkFBWTs7QUFFbEMsMENBQTBDLFFBQVEsbUJBQU8sQ0FBQywyS0FBbUIsRUFBRSxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hsRTtBQUNiLFdBQVcsbUJBQU8sQ0FBQyxtS0FBZTs7QUFFbEM7QUFDQSxtQkFBTyxDQUFDLHVLQUFpQjtBQUN6Qiw2QkFBNkI7QUFDN0IsY0FBYztBQUNkO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0EsVUFBVTtBQUNWLENBQUMsRTs7Ozs7Ozs7Ozs7O0FDaEJZO0FBQ2I7QUFDQSxxQkFBcUIsbUJBQU8sQ0FBQywrSUFBSztBQUNsQyxxQkFBcUIsbUJBQU8sQ0FBQyw2SkFBWTtBQUN6QyxxQkFBcUIsbUJBQU8sQ0FBQyx1SkFBUztBQUN0QyxxQkFBcUIsbUJBQU8sQ0FBQyx1S0FBaUI7QUFDOUMscUJBQXFCLG1CQUFPLENBQUMsNkpBQVk7QUFDekMscUJBQXFCLG1CQUFPLENBQUMsaUtBQWM7QUFDM0MscUJBQXFCLG1CQUFPLENBQUMsMkpBQVc7QUFDeEMscUJBQXFCLG1CQUFPLENBQUMsNkpBQVk7QUFDekMscUJBQXFCLG1CQUFPLENBQUMsbUxBQXVCO0FBQ3BELHFCQUFxQixtQkFBTyxDQUFDLHVKQUFTO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLHVKQUFTO0FBQ3RDLHFCQUFxQixtQkFBTyxDQUFDLDJKQUFXO0FBQ3hDLHFCQUFxQixtQkFBTyxDQUFDLG1LQUFlO0FBQzVDLHFCQUFxQixtQkFBTyxDQUFDLG1LQUFlO0FBQzVDLHFCQUFxQixtQkFBTyxDQUFDLGlLQUFjO0FBQzNDLHFCQUFxQixtQkFBTyxDQUFDLG1LQUFlO0FBQzVDLHFCQUFxQixtQkFBTyxDQUFDLHFLQUFnQjtBQUM3QyxxQkFBcUIsbUJBQU8sQ0FBQywyS0FBbUI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLG9CQUFvQiw0QkFBNEIsU0FBUyxJQUFJO0FBQzdELEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQkFBc0IsaUNBQWlDO0FBQ3ZELEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsS0FBSyxRQUFRLGlDQUFpQztBQUNsRyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsbUJBQU8sQ0FBQywrSkFBYTtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCx3QkFBd0IsZUFBZSxFQUFFO0FBQ3pDLHdCQUF3QixnQkFBZ0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQSxnQ0FBZ0MsZ0JBQWdCOztBQUVoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQSw2RUFBNkUsc0JBQXNCOztBQUVuRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEM7Ozs7Ozs7Ozs7O0FDbE9BLG1CQUFPLENBQUMsaUxBQXNCO0FBQzlCLGdCQUFnQixtQkFBTyxDQUFDLG1LQUFlO0FBQ3ZDLGdFOzs7Ozs7Ozs7OztBQ0ZBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7O0FDbEJBLElBQU1BLElBQUksT0FBT0MsTUFBUCxLQUFrQixXQUFsQixHQUFnQ0EsTUFBaEMsR0FBeUNDLElBQW5EO0FBQ0FGLEVBQUVHLGlCQUFGLEdBQXNCLEVBQXRCO0FBQ0FILEVBQUVJLFdBQUYsR0FBZ0I7QUFDZCxTQUFPO0FBQ0wsaUJBQWE7QUFEUjtBQURPLENBQWhCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hBLElBQU1DLGdCQUFnQixFQUFDQyxHQUFFLENBQUgsRUFBdEIsQ0FBNEIsSUFBTUMsZ0RBQXlCRixhQUF6QixDQUFOOztBQUU1QkcsbUJBQU9BLENBQUMsMkRBQVI7O0FBRUEsU0FBU0MsT0FBVCxHQUFtQjtBQUNuQkQscUJBQU9BLENBQUMsNEJBQVI7QUFDQUEscUJBQU9BLENBQUMscUZBQVI7QUFDQUEscUJBQU9BLENBQUMsNkVBQVI7QUFDQUEscUJBQU9BLENBQUMsaUZBQVI7QUFDQUEscUJBQU9BLENBQUMsdURBQVI7QUFDQUEscUJBQU9BLENBQUMsbUVBQVI7QUFDQUEscUJBQU9BLENBQUMsdUVBQVI7QUFDQUEscUJBQU9BLENBQUMscUVBQVI7QUFDQztBQUNETixLQUFLUSxZQUFMLEdBQW9CUixLQUFLUSxZQUFMLENBQWtCLEVBQUVELGdCQUFGLEVBQWxCLENBQXBCLEdBQXFEQSxTQUFyRCxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RDO0FBQ0UsWUFDSSxrREFDQSw4Q0FDQSxvQ0FFTjs7QUFDRSxZQUNGOztBQUNFOzs7QUFDRTtBQUNFLHdDQUNOOztBQUNNO0FBQ0U7QUFDQTtBQUNFLHVCQUNWOztBQUNVO0FBQ0U7QUFDRTtBQUNBLDRCQUNkOztBQUNZO0FBQ0UscUJBQ2Q7QUFFQTs7O0FBQ1E7QUFDRSxpQkFDVjtBQUVBOztBQUNBO0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkNBO0FBQ0U7QUFDRTtBQUNBLHFDQUVKOzs7QUFDRTtBQUNFO0FBQ0UsaUJBQ047QUFHQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWEE7O0FBQ0E7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNNO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVQOztBQUNFO0FBQ0U7QUFDQTtBQUNBOztBQUVKOzs7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0EscUJBQ1I7QUFDQTtBQUNBOztBQUNJLFdBQ0o7QUFDQTs7QUFDRTtBQUVGOztBQUNPO0FBQ1U7QUFFakI7QUFDQTs7QUFDRTtBQUNFO0FBQ0EscUNBQ0o7O0FBQ0k7QUFDRTtBQUNBO0FBQ0EsMkNBQ047QUFDQTs7QUFDSSwyQkFDSjs7QUFDSSxXQUNKO0FBQ0E7O0FBQ0U7QUFDRTtBQUNBO0FBQ0EsV0FDSjs7QUFFQSxFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tHQ3ZFQTs7QUFDRztBQUVIOztBQU1BOzs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDRztBQUNILFVBQ0E7O0FBQ0E7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFDSjs7QUFDSTtBQUNPO01BQ0gsMERBQ0EsNkJBQ1I7QUFDSTtBQUNBO0FBQ0EsZ0JBQ0o7O0FBQ0k7QUFDQTtBQUNBO0FBQ0EsZ0JBQ0o7O0FBQ0k7QUFDQSxxQkFFSjs7O0FBQ0U7QUFDRTtBQUNBO0FBQ0U7QUFDRSxpQ0FFUjs7O0FBQ0ksU0FDSjtBQUNBOztBQUNFO0FBQ0U7QUFDQTtBQUNFO0FBQ0U7QUFDQTtBQUNFO0FBQ0EsMkZBRVY7O0FBRUE7O0FBQ0E7O0FBQ0UsOENBQ0Y7QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDQTtBQUNBO0FBQ0U7QUFDRTtBQUNBLDRCQUNSOztBQUNNO0FBQ0U7QUFDRSxvQkFFVjs7O0FBQ007QUFDQTtBQUNFLDRCQUVSOzs7QUFDTTtBQUNLO0FBRVg7O0FBQ007QUFDRTtBQUNBLGNBQ1I7O0FBQ00sc0JBQ0U7QUFDRTtBQUNFO0FBQ0Esb0JBQ1o7O0FBQ1U7QUFDRTtBQUNBO0FBQ0EsZUFDWjtBQUNBO1NBQ1E7QUFDRTtBQUNBO0FBQ0U7QUFDQTtBQUNFO0FBQ0Esd0NBQ2Q7QUFFQTs7QUFFQTtBQUNBOztBQUNJO0FBQ0U7QUFDQSw4QkFDTjs7QUFDSTtBQUNFO0FBQ0E7QUFDRSw4QkFDUjs7QUFDTSxzREFDTjs7QUFDTTtBQUNFO0FBQ0E7QUFDQTtBQUNHO0FBQ0g7QUFDQTtBQUNBLDhFQUNSOztBQUNTO0FBQ0gsU0FDTjtBQUNBO0FBQ0E7O0FBQ0U7QUFDRTtBQUNFO0FBQ0EseUNBQ047QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDQSxpSEFDRTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0U7QUFDQTtBQUNBLG9CQUVaOztBQUNBO0FBRUE7QUFDQTs7QUFDRTtBQUNFLGFBQ0o7O0FBQ0k7QUFDRTtBQUNBLFlBRU47OztBQUNJO0FBQ0U7QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0Esb0JBQ1Y7O0FBQ1EsYUFDUjtBQUNBO0FBQ0E7O0FBQ0k7QUFDRTtBQUNBO0FBQ0U7QUFDQTtBQUNBLG9CQUVSOztBQUNBOztBQUNJO0FBQ0Usc0JBQ0U7QUFDRTtBQUNBO0FBQ0UsdUJBQ1o7QUFDQTtTQUNRO0FBRVI7QUFDQTtBQUNNO0FBQ0E7QUFDRTtBQUNBLHdCQUNFO0FBQ0U7QUFDQTtBQUNFLHlCQUNkO0FBQ0E7V0FDVTtBQUVWO0FBQ0E7QUFDUTtBQUVSO0FBQ0E7QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDRTtBQUNFO0FBQ0EsbUNBQ1I7O0FBQ00saUZBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0Esd0NBQ047T0FDQTtBQUNBOztBQUNFO0FBQ0U7QUFDRTtBQUNBLGtCQUVOOztBQUNBOztBQUNFO0FBQ0U7QUFDRTtBQUNBLGtCQUNOOztBQUNJLFNBQ0o7QUFDQTs7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFDTjtBQUNBOztBQUNJO0FBQ0E7QUFDRSxnQ0FDTjtBQUNBOztBQUNJO0FBQ0E7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNBLHlDQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUNFO0FBQ0Usd0NBQ0o7QUFDQTs7QUFDRTtBQUNFLHdDQUNKO0FBQ0E7O0FBQ0U7QUFDRTtBQUNFO0FBQ0UscUJBQ1I7O0FBQ007QUFDQTtBQUNFLHFCQUVSOzs7QUFDSTtBQUNFO0FBQ0EsbUNBRU47O0FBQ0E7O0FBQ0U7QUFDRSx3REFDSjtBQUNBOztBQUNFO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDRSxlQUNOOztBQUNJLFNBQ0o7QUFDQTs7QUFDRTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNFO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFLHFCQUVaOztBQUNBO0FBRUE7O0FBQ0E7O0FBQ0U7QUFDRSxpRUFDSjtBQUNBOztBQUNFO0FBQ0UsK0NBQ0o7O0FBQ0k7QUFDQTtBQUNBO0FBQ0UsZ0ZBQ047QUFDQTs7QUFDSTtBQUNBO0FBQ0U7QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0Esb0JBQ1Y7O0FBQ1E7QUFDQTtBQUNBLDJGQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDQTtBQUNBO0FBQ0UsZ0NBQ047QUFDQTs7QUFDSTtBQUNBO0FBQ0U7QUFDQTtBQUNFO0FBQ0E7QUFDQSx5Q0FDUjtBQUNBO0FBQ0E7QUFDQTs7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0UsZ0NBQ047O0FBQ0k7QUFDRSxnQ0FDTjs7QUFDSTtBQUNFLGdDQUNOOztBQUNJO0FBQ0UsZ0NBQ047O0FBQ0k7QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0U7QUFDQTtBQUNBLG9CQUNWOztBQUNRO0FBQ0E7QUFDQSx5Q0FDUjtBQUNBO0FBQ0E7QUFDQTs7QUFDRTtBQUNFO0FBQ0E7QUFDQTtBQUNFLGdDQUNOO0FBQ0E7O0FBQ0k7QUFDQTtBQUNFO0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDQTtBQUNBO0FBQ0E7QUFDRSxnQ0FDTjs7QUFDSTtBQUNFLGdDQUNOOztBQUNJO0FBQ0UsZ0NBQ047QUFDQTs7QUFDSTtBQUNBO0FBQ0U7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBQ0U7QUFDRTtBQUNBO0FBQ0E7QUFDRSxnQ0FDTjs7QUFDSTtBQUNFLGdDQUNOOztBQUNJO0FBQ0UsZ0NBQ047QUFDQTs7QUFDSTtBQUNBO0FBQ0U7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBQ0U7QUFDRTtBQUNFLDJDQUVOOztBQUNBOztBQUNFO0FBQ0UsU0FDSjtBQUNBOztBQUNFO0FBQ0UsMEJBQ0o7QUFDQTs7QUFDRTtBQUNFLGFBRUo7OztBQUNJO0FBQ0U7QUFDQTtBQUNFO0FBQ0UsMEVBRVY7O0FBQ0E7QUFDQTs7QUFDSTtBQUNBLG1IQUVKO0FBQ007QUFDQTtBQUNFLGtFQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUNFO0FBQ0U7QUFDRSxnQkFFTjs7QUFDQTs7QUFDRTtBQUNFO0FBQ0UsZ0JBRU47O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwakJBLFVBQ0E7O0FBQ0E7QUFDRTtBQUNFLGdCQUVKOzs7QUFDRTtBQUNFO0FBQ0UsMkJBRU47O0FBQ0E7QUFDRTtBQUNFO0FBRUk7QUFDQSxrQkFHUjtLQUxBOztBQU1JLE9BQ0o7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QkM7QUFDRDtBQUNBLHdCQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUNBOztBQUNBO0FBQ0U7QUFDRTtBQUNFO0FBQ0Esc0JBQ047QUFDQTs7QUFDRTtBQUNFO0FBQ0EsOEJBQ0o7OztBQUNFO0FBQ0U7QUFDRTtBQUNBLGFBQ047O0FBQ0k7QUFDRTtBQUNBLGFBQ047O0FBQ0k7QUFDRTtBQUNBLGFBQ047O0FBQ0k7QUFDRTtBQUNBLGFBQ047O0FBQ0k7QUFDRSxnQ0FDTjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxQ0M7QUFDRDtBQUNBLHdCQUVBOztBQUNBO0FBQ0U7QUFDRTtBQUNFO0FBQ0EsYUFDTjs7QUFDSTtBQUNFLFlBQ047O0FBQ0s7QUFDQywrQkFFTjs7O0FBQ0U7QUFDRztBQUNDLGtCQUNOO0FBQ0E7O0FBQ0U7QUFDRSxpQ0FDSjtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpR0MxQkE7O0FBQ0c7QUFFSDs7QUFDQTtBQUNBO0FBQ0c7QUFDSCxtQkFDQTs7QUFDQTtBQUNFO0FBQ0U7QUFDQTtBQUNBLG9CQUVKOzs7QUFDRSxtQ0FDRjtBQUNBO0FBQ0E7QUFDRTtBQUNFLFNBQ0o7QUFDQTtBQUNFOzs7QUFDRTtBQUNBO0FBQ0U7QUFDQTtBQUNBLHNDQUNOOztBQUNNO0FBQ0E7OztBQUNBO0FBQ0EsZ0NBQ047O0FBQ007QUFDRSx3QkFDUjs7QUFDTTtBQUNFLGdDQUNBOzs7OztBQUNBO0FBQ0U7O0FBQ0E7QUFDRSxrREFFWjs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNFO0FBQ0U7QUFDRTtBQUNBLHVCQUVOOztBQUNBO0FBQ0U7QUFDRTtBQUNFLDRDQUVOOztBQUNBO0FBQ0U7QUFDRSxPQUNKO0FBQ0E7QUFDRTtBQUNFLHdCQUNKO0FBR0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxRUEsVUFDQTs7QUFDQTtBQUNFLFFBQ0Y7O0FBQ0U7OztBQUNFLDJCQUNFO0FBQ0U7QUFHUjs7QUFDQSxtQkFDQTtBQUNBO0FBRUE7QUFDQTtBQUNFO0FBQ0UsOEJBQ0o7QUFDQTtBQUNFO0FBQ0U7QUFDQTt3Q0FDSztBQUNILHNEQUNOOzs7QUFDSSw4QkFDSjtBQUNBO0FBQ0U7QUFDRSxtQkFDSjtBQUNBO0FBQ0U7QUFDRSx5QkFDSjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZDQTtBQUNHO0FBQ0E7QUFDRSxjQUNFLGdDQUNBLDRCQUNBLDZCQUNBLHNCQUNBLDZCQUNBLCtCQUNBLG1EQUNBLDZCQUNBLCtCQUNBLDhCQUNBLDRCQUNBLDhCQUNBLHlCQUNBLDZCQUNBLHlCQUNBLDJCQUNBLDRCQUNBLDhCQUNBLDZCQUNBLCtCQUNBLDBCQUNBLDRCQUNBLHlCQUNBLDJCQUNBLDZCQUNBLCtCQUNBLDJCQUNBLDBCQUNBLDRCQUNBLDBCQUNBLDZCQUNBLDRCQUNBLCtCQUNBLDhCQUNBLGtDQUNBLDhCQUNBLCtCQUNBLDRCQUNBLDRCQUNBLGtDQUNBLDhCQUNBLGdDQUNBLDZCQUNBLGlDQUNBLDhCQUNBLG1DQUNBLDZCQUNBLG9DQUNBLHlDQUNBLHFDQUNBLG1DQUNBLGtDQUNBLHVDQUNBLHFDQUNBLGlDQUNBLG9DQUVQO0FBQ0s7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUVJO0FBQ0E7QUFDQTtBQUNBLGdCQUVYO09BTkE7QUFPVztBQUNBO0FBQ0E7QUFDQSxnQkFFWDs7QUFDVztBQUNBO0FBQ0E7QUFDQSxnQkFFWDs7QUFDVztBQUNBO0FBQ0E7QUFDQSxnQkFFWDs7QUFDTztBQUNBLHVCQUNQOztBQUNLO0FBQ0U7QUFDQTtBQUNBO0FBQ0EsZ0NBRVA7OztBQUNHO0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUNMOztBQUNHO0FBQ0E7QUFDRTtBQUNBLFlBRUw7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0NuSEE7O0FBQ0c7QUFDSDtBQUNBLGNBQ0E7O0FBQ0E7QUFDQTtBQUNHO0FBQ0g7QUFDQSxxRkFDQTs7QUFDQTtBQUNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQkE7O0FBQ0E7QUFDRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFDRjs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEJELDZCIiwiZmlsZSI6ImluZGV4Lndvcmtlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL1wiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2Fzc2lnblwiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIm1vZHVsZS5leHBvcnRzID0geyBcImRlZmF1bHRcIjogcmVxdWlyZShcImNvcmUtanMvbGlicmFyeS9mbi9zeW1ib2xcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vc3ltYm9sL2l0ZXJhdG9yXCIpLCBfX2VzTW9kdWxlOiB0cnVlIH07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZShcIi4uL2NvcmUtanMvb2JqZWN0L2Fzc2lnblwiKTtcblxudmFyIF9hc3NpZ24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXNzaWduKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gX2Fzc2lnbjIuZGVmYXVsdCB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfaXRlcmF0b3IgPSByZXF1aXJlKFwiLi4vY29yZS1qcy9zeW1ib2wvaXRlcmF0b3JcIik7XG5cbnZhciBfaXRlcmF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlcmF0b3IpO1xuXG52YXIgX3N5bWJvbCA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL3N5bWJvbFwiKTtcblxudmFyIF9zeW1ib2wyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3ltYm9sKTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgX3N5bWJvbDIuZGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBfaXRlcmF0b3IyLmRlZmF1bHQgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBfc3ltYm9sMi5kZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBfc3ltYm9sMi5kZWZhdWx0ICYmIG9iaiAhPT0gX3N5bWJvbDIuZGVmYXVsdC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZXhwb3J0cy5kZWZhdWx0ID0gdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mKF9pdGVyYXRvcjIuZGVmYXVsdCkgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn0gOiBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIF9zeW1ib2wyLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IF9zeW1ib2wyLmRlZmF1bHQgJiYgb2JqICE9PSBfc3ltYm9sMi5kZWZhdWx0LnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKTtcbn07IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzLyQuY29yZScpLk9iamVjdC5hc3NpZ247IiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC5jb3JlJykuU3ltYm9sOyIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvJC53a3MnKSgnaXRlcmF0b3InKTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7IC8qIGVtcHR5ICovIH07IiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIGlmKCFpc09iamVjdChpdCkpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59OyIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07IiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMS4yLjYnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vJC5hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGZuLCB0aGF0LCBsZW5ndGgpe1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZih0aGF0ID09PSB1bmRlZmluZWQpcmV0dXJuIGZuO1xuICBzd2l0Y2gobGVuZ3RoKXtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24oYSwgYil7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24oLyogLi4uYXJncyAqLyl7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59OyIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTsiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuLyQuZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7IiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciAkID0gcmVxdWlyZSgnLi8kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgdmFyIGtleXMgICAgICAgPSAkLmdldEtleXMoaXQpXG4gICAgLCBnZXRTeW1ib2xzID0gJC5nZXRTeW1ib2xzO1xuICBpZihnZXRTeW1ib2xzKXtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpXG4gICAgICAsIGlzRW51bSAgPSAkLmlzRW51bVxuICAgICAgLCBpICAgICAgID0gMFxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUoc3ltYm9scy5sZW5ndGggPiBpKWlmKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKWtleXMucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiBrZXlzO1xufTsiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi8kLmNvcmUnKVxuICAsIGN0eCAgICAgICA9IHJlcXVpcmUoJy4vJC5jdHgnKVxuICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GXG4gICAgLCBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HXG4gICAgLCBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TXG4gICAgLCBJU19QUk9UTyAgPSB0eXBlICYgJGV4cG9ydC5QXG4gICAgLCBJU19CSU5EICAgPSB0eXBlICYgJGV4cG9ydC5CXG4gICAgLCBJU19XUkFQICAgPSB0eXBlICYgJGV4cG9ydC5XXG4gICAgLCBleHBvcnRzICAgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiBrZXkgaW4gdGFyZ2V0O1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgQyA/IG5ldyBDKHBhcmFtKSA6IEMocGFyYW0pO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICBpZihJU19QUk9UTykoZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSkpW2tleV0gPSBvdXQ7XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7IC8vIHdyYXBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDsiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTsiLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKVxuICAsIGdldE5hbWVzICA9IHJlcXVpcmUoJy4vJCcpLmdldE5hbWVzXG4gICwgdG9TdHJpbmcgID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uKGl0KXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ2V0TmFtZXMoaXQpO1xuICB9IGNhdGNoKGUpe1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5nZXQgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KXtcbiAgaWYod2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScpcmV0dXJuIGdldFdpbmRvd05hbWVzKGl0KTtcbiAgcmV0dXJuIGdldE5hbWVzKHRvSU9iamVjdChpdCkpO1xufTsiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07IiwidmFyICQgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuLyQucHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uKG9iamVjdCwga2V5LCB2YWx1ZSl7XG4gIHJldHVybiAkLnNldERlc2Mob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTsiLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vJC5jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07IiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuLyQuY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oYXJnKXtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59OyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTsiLCIndXNlIHN0cmljdCc7XG52YXIgJCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGRlc2NyaXB0b3IgICAgID0gcmVxdWlyZSgnLi8kLnByb3BlcnR5LWRlc2MnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJylcbiAgLCBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi8kLmhpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi8kLndrcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbigpeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpe1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge25leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCl9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZICAgICAgICA9IHJlcXVpcmUoJy4vJC5saWJyYXJ5JylcbiAgLCAkZXhwb3J0ICAgICAgICA9IHJlcXVpcmUoJy4vJC5leHBvcnQnKVxuICAsIHJlZGVmaW5lICAgICAgID0gcmVxdWlyZSgnLi8kLnJlZGVmaW5lJylcbiAgLCBoaWRlICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oaWRlJylcbiAgLCBoYXMgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIEl0ZXJhdG9ycyAgICAgID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpXG4gICwgJGl0ZXJDcmVhdGUgICAgPSByZXF1aXJlKCcuLyQuaXRlci1jcmVhdGUnKVxuICAsIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi8kLnNldC10by1zdHJpbmctdGFnJylcbiAgLCBnZXRQcm90byAgICAgICA9IHJlcXVpcmUoJy4vJCcpLmdldFByb3RvXG4gICwgSVRFUkFUT1IgICAgICAgPSByZXF1aXJlKCcuLyQud2tzJykoJ2l0ZXJhdG9yJylcbiAgLCBCVUdHWSAgICAgICAgICA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKSAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gICwgRkZfSVRFUkFUT1IgICAgPSAnQEBpdGVyYXRvcidcbiAgLCBLRVlTICAgICAgICAgICA9ICdrZXlzJ1xuICAsIFZBTFVFUyAgICAgICAgID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKXtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24oa2luZCl7XG4gICAgaWYoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKXsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCl7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHICAgICAgICA9IE5BTUUgKyAnIEl0ZXJhdG9yJ1xuICAgICwgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTXG4gICAgLCBWQUxVRVNfQlVHID0gZmFsc2VcbiAgICAsIHByb3RvICAgICAgPSBCYXNlLnByb3RvdHlwZVxuICAgICwgJG5hdGl2ZSAgICA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXVxuICAgICwgJGRlZmF1bHQgICA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpXG4gICAgLCBtZXRob2RzLCBrZXk7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYoJG5hdGl2ZSl7XG4gICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8oJGRlZmF1bHQuY2FsbChuZXcgQmFzZSkpO1xuICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAvLyBGRiBmaXhcbiAgICBpZighTElCUkFSWSAmJiBoYXMocHJvdG8sIEZGX0lURVJBVE9SKSloaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICAgIGlmKERFRl9WQUxVRVMgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpe1xuICAgICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICAgIH1cbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpe1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gID0gcmV0dXJuVGhpcztcbiAgaWYoREVGQVVMVCl7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogIERFRl9WQUxVRVMgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6ICAgIElTX1NFVCAgICAgID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJylcbiAgICB9O1xuICAgIGlmKEZPUkNFRClmb3Ioa2V5IGluIG1ldGhvZHMpe1xuICAgICAgaWYoIShrZXkgaW4gcHJvdG8pKXJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkb25lLCB2YWx1ZSl7XG4gIHJldHVybiB7dmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmV9O1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9IHt9OyIsInZhciAkT2JqZWN0ID0gT2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGNyZWF0ZTogICAgICRPYmplY3QuY3JlYXRlLFxuICBnZXRQcm90bzogICAkT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICBpc0VudW06ICAgICB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxcbiAgZ2V0RGVzYzogICAgJE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIHNldERlc2M6ICAgICRPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gIHNldERlc2NzOiAgICRPYmplY3QuZGVmaW5lUHJvcGVydGllcyxcbiAgZ2V0S2V5czogICAgJE9iamVjdC5rZXlzLFxuICBnZXROYW1lczogICAkT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG4gIGdldFN5bWJvbHM6ICRPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLFxuICBlYWNoOiAgICAgICBbXS5mb3JFYWNoXG59OyIsInZhciAkICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vJC50by1pb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG9iamVjdCwgZWwpe1xuICB2YXIgTyAgICAgID0gdG9JT2JqZWN0KG9iamVjdClcbiAgICAsIGtleXMgICA9ICQuZ2V0S2V5cyhPKVxuICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAsIGluZGV4ICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobGVuZ3RoID4gaW5kZXgpaWYoT1trZXkgPSBrZXlzW2luZGV4KytdXSA9PT0gZWwpcmV0dXJuIGtleTtcbn07IiwibW9kdWxlLmV4cG9ydHMgPSB0cnVlOyIsIi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciAkICAgICAgICA9IHJlcXVpcmUoJy4vJCcpXG4gICwgdG9PYmplY3QgPSByZXF1aXJlKCcuLyQudG8tb2JqZWN0JylcbiAgLCBJT2JqZWN0ICA9IHJlcXVpcmUoJy4vJC5pb2JqZWN0Jyk7XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuZmFpbHMnKShmdW5jdGlvbigpe1xuICB2YXIgYSA9IE9iamVjdC5hc3NpZ25cbiAgICAsIEEgPSB7fVxuICAgICwgQiA9IHt9XG4gICAgLCBTID0gU3ltYm9sKClcbiAgICAsIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbihrKXsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gYSh7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cyhhKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKXsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCAgICAgPSB0b09iamVjdCh0YXJnZXQpXG4gICAgLCAkJCAgICA9IGFyZ3VtZW50c1xuICAgICwgJCRsZW4gPSAkJC5sZW5ndGhcbiAgICAsIGluZGV4ID0gMVxuICAgICwgZ2V0S2V5cyAgICA9ICQuZ2V0S2V5c1xuICAgICwgZ2V0U3ltYm9scyA9ICQuZ2V0U3ltYm9sc1xuICAgICwgaXNFbnVtICAgICA9ICQuaXNFbnVtO1xuICB3aGlsZSgkJGxlbiA+IGluZGV4KXtcbiAgICB2YXIgUyAgICAgID0gSU9iamVjdCgkJFtpbmRleCsrXSlcbiAgICAgICwga2V5cyAgID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKVxuICAgICAgLCBsZW5ndGggPSBrZXlzLmxlbmd0aFxuICAgICAgLCBqICAgICAgPSAwXG4gICAgICAsIGtleTtcbiAgICB3aGlsZShsZW5ndGggPiBqKWlmKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpVFtrZXldID0gU1trZXldO1xuICB9XG4gIHJldHVybiBUO1xufSA6IE9iamVjdC5hc3NpZ247IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihiaXRtYXAsIHZhbHVlKXtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlICA6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlICAgIDogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZSAgICAgICA6IHZhbHVlXG4gIH07XG59OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi8kLmhpZGUnKTsiLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi8kJykuc2V0RGVzY1xuICAsIGhhcyA9IHJlcXVpcmUoJy4vJC5oYXMnKVxuICAsIFRBRyA9IHJlcXVpcmUoJy4vJC53a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgdGFnLCBzdGF0KXtcbiAgaWYoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSlkZWYoaXQsIFRBRywge2NvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZ30pO1xufTsiLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTsiLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi8kLnRvLWludGVnZXInKVxuICAsIGRlZmluZWQgICA9IHJlcXVpcmUoJy4vJC5kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihUT19TVFJJTkcpe1xuICByZXR1cm4gZnVuY3Rpb24odGhhdCwgcG9zKXtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKVxuICAgICAgLCBpID0gdG9JbnRlZ2VyKHBvcylcbiAgICAgICwgbCA9IHMubGVuZ3RoXG4gICAgICAsIGEsIGI7XG4gICAgaWYoaSA8IDAgfHwgaSA+PSBsKXJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59OyIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgID0gTWF0aC5jZWlsXG4gICwgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTsiLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi8kLmlvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuLyQuZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07IiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuLyQuZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTsiLCJ2YXIgaWQgPSAwXG4gICwgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihrZXkpe1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTsiLCJ2YXIgc3RvcmUgID0gcmVxdWlyZSgnLi8kLnNoYXJlZCcpKCd3a3MnKVxuICAsIHVpZCAgICA9IHJlcXVpcmUoJy4vJC51aWQnKVxuICAsIFN5bWJvbCA9IHJlcXVpcmUoJy4vJC5nbG9iYWwnKS5TeW1ib2w7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBTeW1ib2wgJiYgU3ltYm9sW25hbWVdIHx8IChTeW1ib2wgfHwgdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59OyIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi8kLmFkZC10by11bnNjb3BhYmxlcycpXG4gICwgc3RlcCAgICAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5pdGVyLXN0ZXAnKVxuICAsIEl0ZXJhdG9ycyAgICAgICAgPSByZXF1aXJlKCcuLyQuaXRlcmF0b3JzJylcbiAgLCB0b0lPYmplY3QgICAgICAgID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLyQuaXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24oaXRlcmF0ZWQsIGtpbmQpe1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGtpbmQgID0gdGhpcy5fa1xuICAgICwgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKXtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmKGtpbmQgPT0gJ2tleXMnICApcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZihraW5kID09ICd2YWx1ZXMnKXJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTsiLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuLyQuZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge2Fzc2lnbjogcmVxdWlyZSgnLi8kLm9iamVjdC1hc3NpZ24nKX0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgID0gcmVxdWlyZSgnLi8kLnN0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuLyQuaXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbihpdGVyYXRlZCl7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uKCl7XG4gIHZhciBPICAgICA9IHRoaXMuX3RcbiAgICAsIGluZGV4ID0gdGhpcy5faVxuICAgICwgcG9pbnQ7XG4gIGlmKGluZGV4ID49IE8ubGVuZ3RoKXJldHVybiB7dmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZX07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7dmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZX07XG59KTsiLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgJCAgICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQnKVxuICAsIGdsb2JhbCAgICAgICAgID0gcmVxdWlyZSgnLi8kLmdsb2JhbCcpXG4gICwgaGFzICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQuaGFzJylcbiAgLCBERVNDUklQVE9SUyAgICA9IHJlcXVpcmUoJy4vJC5kZXNjcmlwdG9ycycpXG4gICwgJGV4cG9ydCAgICAgICAgPSByZXF1aXJlKCcuLyQuZXhwb3J0JylcbiAgLCByZWRlZmluZSAgICAgICA9IHJlcXVpcmUoJy4vJC5yZWRlZmluZScpXG4gICwgJGZhaWxzICAgICAgICAgPSByZXF1aXJlKCcuLyQuZmFpbHMnKVxuICAsIHNoYXJlZCAgICAgICAgID0gcmVxdWlyZSgnLi8kLnNoYXJlZCcpXG4gICwgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLyQuc2V0LXRvLXN0cmluZy10YWcnKVxuICAsIHVpZCAgICAgICAgICAgID0gcmVxdWlyZSgnLi8kLnVpZCcpXG4gICwgd2tzICAgICAgICAgICAgPSByZXF1aXJlKCcuLyQud2tzJylcbiAgLCBrZXlPZiAgICAgICAgICA9IHJlcXVpcmUoJy4vJC5rZXlvZicpXG4gICwgJG5hbWVzICAgICAgICAgPSByZXF1aXJlKCcuLyQuZ2V0LW5hbWVzJylcbiAgLCBlbnVtS2V5cyAgICAgICA9IHJlcXVpcmUoJy4vJC5lbnVtLWtleXMnKVxuICAsIGlzQXJyYXkgICAgICAgID0gcmVxdWlyZSgnLi8kLmlzLWFycmF5JylcbiAgLCBhbk9iamVjdCAgICAgICA9IHJlcXVpcmUoJy4vJC5hbi1vYmplY3QnKVxuICAsIHRvSU9iamVjdCAgICAgID0gcmVxdWlyZSgnLi8kLnRvLWlvYmplY3QnKVxuICAsIGNyZWF0ZURlc2MgICAgID0gcmVxdWlyZSgnLi8kLnByb3BlcnR5LWRlc2MnKVxuICAsIGdldERlc2MgICAgICAgID0gJC5nZXREZXNjXG4gICwgc2V0RGVzYyAgICAgICAgPSAkLnNldERlc2NcbiAgLCBfY3JlYXRlICAgICAgICA9ICQuY3JlYXRlXG4gICwgZ2V0TmFtZXMgICAgICAgPSAkbmFtZXMuZ2V0XG4gICwgJFN5bWJvbCAgICAgICAgPSBnbG9iYWwuU3ltYm9sXG4gICwgJEpTT04gICAgICAgICAgPSBnbG9iYWwuSlNPTlxuICAsIF9zdHJpbmdpZnkgICAgID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5XG4gICwgc2V0dGVyICAgICAgICAgPSBmYWxzZVxuICAsIEhJRERFTiAgICAgICAgID0gd2tzKCdfaGlkZGVuJylcbiAgLCBpc0VudW0gICAgICAgICA9ICQuaXNFbnVtXG4gICwgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpXG4gICwgQWxsU3ltYm9scyAgICAgPSBzaGFyZWQoJ3N5bWJvbHMnKVxuICAsIHVzZU5hdGl2ZSAgICAgID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJ1xuICAsIE9iamVjdFByb3RvICAgID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbigpe1xuICByZXR1cm4gX2NyZWF0ZShzZXREZXNjKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiBzZXREZXNjKHRoaXMsICdhJywge3ZhbHVlOiA3fSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbihpdCwga2V5LCBEKXtcbiAgdmFyIHByb3RvRGVzYyA9IGdldERlc2MoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmKHByb3RvRGVzYylkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgc2V0RGVzYyhpdCwga2V5LCBEKTtcbiAgaWYocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bylzZXREZXNjKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogc2V0RGVzYztcblxudmFyIHdyYXAgPSBmdW5jdGlvbih0YWcpe1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sLnByb3RvdHlwZSk7XG4gIHN5bS5fayA9IHRhZztcbiAgREVTQ1JJUFRPUlMgJiYgc2V0dGVyICYmIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKXtcbiAgICAgIGlmKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKXtcbiAgaWYoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSl7XG4gICAgaWYoIUQuZW51bWVyYWJsZSl7XG4gICAgICBpZighaGFzKGl0LCBISURERU4pKXNldERlc2MoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSlpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHtlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKX0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIHNldERlc2MoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCl7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKVxuICAgICwgaSAgICA9IDBcbiAgICAsIGwgPSBrZXlzLmxlbmd0aFxuICAgICwga2V5O1xuICB3aGlsZShsID4gaSkkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKXtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpe1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSk7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV1cbiAgICA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpe1xuICB2YXIgRCA9IGdldERlc2MoaXQgPSB0b0lPYmplY3QoaXQpLCBrZXkpO1xuICBpZihEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZighaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4pcmVzdWx0LnB1c2goa2V5KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCl7XG4gIHZhciBuYW1lcyAgPSBnZXROYW1lcyh0b0lPYmplY3QoaXQpKVxuICAgICwgcmVzdWx0ID0gW11cbiAgICAsIGkgICAgICA9IDBcbiAgICAsIGtleTtcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkpcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCl7XG4gIGlmKGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKXJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICB2YXIgYXJncyA9IFtpdF1cbiAgICAsIGkgICAgPSAxXG4gICAgLCAkJCAgID0gYXJndW1lbnRzXG4gICAgLCByZXBsYWNlciwgJHJlcGxhY2VyO1xuICB3aGlsZSgkJC5sZW5ndGggPiBpKWFyZ3MucHVzaCgkJFtpKytdKTtcbiAgcmVwbGFjZXIgPSBhcmdzWzFdO1xuICBpZih0eXBlb2YgcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgaWYoJHJlcGxhY2VyIHx8ICFpc0FycmF5KHJlcGxhY2VyKSlyZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpe1xuICAgIGlmKCRyZXBsYWNlcil2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgIGlmKCFpc1N5bWJvbCh2YWx1ZSkpcmV0dXJuIHZhbHVlO1xuICB9O1xuICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbn07XG52YXIgYnVnZ3lKU09OID0gJGZhaWxzKGZ1bmN0aW9uKCl7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHthOiBTfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pO1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmKCF1c2VOYXRpdmUpe1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCl7XG4gICAgaWYoaXNTeW1ib2wodGhpcykpdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICByZXR1cm4gd3JhcCh1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCl7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gIGlzU3ltYm9sID0gZnVuY3Rpb24oaXQpe1xuICAgIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG4gIH07XG5cbiAgJC5jcmVhdGUgICAgID0gJGNyZWF0ZTtcbiAgJC5pc0VudW0gICAgID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkLmdldERlc2MgICAgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkLnNldERlc2MgICAgPSAkZGVmaW5lUHJvcGVydHk7XG4gICQuc2V0RGVzY3MgICA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICAkLmdldE5hbWVzICAgPSAkbmFtZXMuZ2V0ID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gICQuZ2V0U3ltYm9scyA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vJC5saWJyYXJ5Jykpe1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG59XG5cbnZhciBzeW1ib2xTdGF0aWNzID0ge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uKGtleSl7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihrZXkpe1xuICAgIHJldHVybiBrZXlPZihTeW1ib2xSZWdpc3RyeSwga2V5KTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbigpeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uKCl7IHNldHRlciA9IGZhbHNlOyB9XG59O1xuLy8gMTkuNC4yLjIgU3ltYm9sLmhhc0luc3RhbmNlXG4vLyAxOS40LjIuMyBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlXG4vLyAxOS40LjIuNCBTeW1ib2wuaXRlcmF0b3Jcbi8vIDE5LjQuMi42IFN5bWJvbC5tYXRjaFxuLy8gMTkuNC4yLjggU3ltYm9sLnJlcGxhY2Vcbi8vIDE5LjQuMi45IFN5bWJvbC5zZWFyY2hcbi8vIDE5LjQuMi4xMCBTeW1ib2wuc3BlY2llc1xuLy8gMTkuNC4yLjExIFN5bWJvbC5zcGxpdFxuLy8gMTkuNC4yLjEyIFN5bWJvbC50b1ByaW1pdGl2ZVxuLy8gMTkuNC4yLjEzIFN5bWJvbC50b1N0cmluZ1RhZ1xuLy8gMTkuNC4yLjE0IFN5bWJvbC51bnNjb3BhYmxlc1xuJC5lYWNoLmNhbGwoKFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLCcgK1xuICAnc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgZnVuY3Rpb24oaXQpe1xuICB2YXIgc3ltID0gd2tzKGl0KTtcbiAgc3ltYm9sU3RhdGljc1tpdF0gPSB1c2VOYXRpdmUgPyBzeW0gOiB3cmFwKHN5bSk7XG59KTtcblxuc2V0dGVyID0gdHJ1ZTtcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcsIHtTeW1ib2w6ICRTeW1ib2x9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeW1ib2wnLCBzeW1ib2xTdGF0aWNzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhdXNlTmF0aXZlLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghdXNlTmF0aXZlIHx8IGJ1Z2d5SlNPTiksICdKU09OJywge3N0cmluZ2lmeTogJHN0cmluZ2lmeX0pO1xuXG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpOyIsInJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi8kLml0ZXJhdG9ycycpO1xuSXRlcmF0b3JzLk5vZGVMaXN0ID0gSXRlcmF0b3JzLkhUTUxDb2xsZWN0aW9uID0gSXRlcmF0b3JzLkFycmF5OyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsIlxuY29uc3QgZyA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogc2VsZjtcbmcuYXBwWFJ1bnRpbWVDb25maWcgPSB7fTtcbmcuYXBwWEFwcEpzb24gPSB7XG4gIFwiYXBwXCI6IHtcbiAgICBcIiRob21lcGFnZVwiOiBcInBhZ2VzL3RvZG9zL3RvZG9zXCJcbiAgfVxufTtcbiIsImNvbnN0IElERV9IQUNLX0NPREUgPSB7WDoxfTtjb25zdCBJREVfSEFDS19DT0RFX0JBQ0sgPSB7Li4uSURFX0hBQ0tfQ09ERX07XG5cbnJlcXVpcmUoJy4vY29uZmlnJCcpO1xuXG5mdW5jdGlvbiBzdWNjZXNzKCkge1xucmVxdWlyZSgnLi4vLi4vL2FwcCcpO1xucmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cy9hZGQtYnV0dG9uL2FkZC1idXR0b24nKTtcbnJlcXVpcmUoJy4uLy4uL3BhZ2VzL3BsdWdpbi1jb216YmFkZ2UvaW5kZXgnKTtcbnJlcXVpcmUoJy4uLy4uL3BhZ2VzL3BsdWdpbi1jb216bG9hZGluZy9pbmRleCcpO1xucmVxdWlyZSgnLi4vLi4vcGFnZXMvdG9kb3MvdG9kb3MnKTtcbnJlcXVpcmUoJy4uLy4uL3BhZ2VzL2FkZC10b2RvL2FkZC10b2RvJyk7XG5yZXF1aXJlKCcuLi8uLi9wYWdlcy9hY2NvdW50LWxvZ2luL2luZGV4Jyk7XG5yZXF1aXJlKCcuLi8uLi9wYWdlcy9wbHVnaW4tZGVidWcvaW5kZXgnKTtcbn1cbnNlbGYuYm9vdHN0cmFwQXBwID8gc2VsZi5ib290c3RyYXBBcHAoeyBzdWNjZXNzIH0pIDogc3VjY2VzcygpO1xuIiwiQXBwKHtcbiAgdG9kb3M6IFtcbiAgICB7IHRleHQ6ICdMZWFybmluZyBKYXZhc2NyaXB0JywgY29tcGxldGVkOiB0cnVlIH0sXG4gICAgeyB0ZXh0OiAnTGVhcm5pbmcgRVMyMDE2JywgY29tcGxldGVkOiB0cnVlIH0sXG4gICAgeyB0ZXh0OiAnTGVhcm5pbmcg5pSv5LuY5a6d5bCP56iL5bqPJywgY29tcGxldGVkOiBmYWxzZSB9LFxuICBdLFxuXG4gIHVzZXJJbmZvOiBudWxsLFxuXG4gIGdldFVzZXJJbmZvKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy51c2VySW5mbykgcmVzb2x2ZSh0aGlzLnVzZXJJbmZvKTtcblxuICAgICAgbXkuZ2V0QXV0aENvZGUoe1xuICAgICAgICBzY29wZXM6IFsnYXV0aF91c2VyJ10sXG4gICAgICAgIHN1Y2Nlc3M6IGF1dGhjb2RlID0+IHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYXV0aGNvZGUpO1xuXG4gICAgICAgICAgbXkuZ2V0QXV0aFVzZXJJbmZvKHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHJlcyA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXNlckluZm8gPSByZXM7XG4gICAgICAgICAgICAgIHJlc29sdmUodGhpcy51c2VySW5mbyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmFpbDogKCkgPT4ge1xuICAgICAgICAgICAgICByZWplY3Qoe30pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKCkgPT4ge1xuICAgICAgICAgIHJlamVjdCh7fSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbn0pO1xuIiwiQ29tcG9uZW50KHtcbiAgcHJvcHM6IHtcbiAgICB0ZXh0OiAnQnV0dG9uJyxcbiAgICBvbkNsaWNrTWU6ICgpID0+IHt9LFxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrTWUoKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xpY2tNZSgpO1xuICAgIH0sXG4gIH0sXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBXQUNvbXBvbmVudCAoZmFjdG9yeSkge1xuICB2YXIgb3B0aW9uTWFwID0ge1xuICAgIGhlaGF2aW9yczogJ21peGlucycsXG4gICAgZGF0YTogJ2RhdGEnLFxuICAgIHByb3BlcnRpZXM6ICdwcm9wcycsXG4gICAgbWV0aG9kczogJ21ldGhvZHMnLFxuICAgIGF0dGFjaGVkOiAnZGlkTW91bnQnLFxuICAgIG1vdmVkOiAnZGlkVXBkYXRlJyxcbiAgICBkZXRhY2hlZDogJ2RpZFVubW91bnQnLFxuICAgIHJlbGF0aW9uczogJ3JlbGF0aW9ucycsIC8vICrov5nkuKropoHnibnmrorlpITnkIZcbiAgICBleHRlcm5hbENsYXNzZXM6IGZhbHNlIC8vIOi/meS4quaUr+aMgeS4jeS6hiBhbGlhcHDnlKjkuI3kuobliqjmgIEgY2xhc3NcbiAgICAvLyDov5nkupsgdmFudCDmsqHmnInnlKjliLBcbiAgICAvLyBvYnNlcnZlcnNcbiAgICAvLyBjcmVhdGVkXG4gICAgLy8gcmVhZHlcbiAgICAvLyBsaWZldGltZXNcbiAgICAvLyBwYWdlTGlmZXRpbWVzXG4gICAgLy8gZGVmaW5pdGlvbkZpbHRlclxuICB9O1xuICB2YXIgdHJhbnNmb3JtZXJNYXAgPSB7XG4gICAgcHJvcGVydGllczogdHJhbnNmb3JtUHJvcHMsXG4gICAgcmVsYXRpb25zOiB0cmFuc2Zvcm1SZWxhdGlvbnMsXG4gICAgZmFsbGJhY2s6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IH0sXG4gIH07XG5cbiAgZnVuY3Rpb24gdHJhbnNmb3JtUHJvcHMgKHByb3BlcnRpZXMpIHtcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICB2YXIgY2FuZGlkYXRlID0gdW5kZWZpbmVkO1xuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gaXRvciAoa2V5KSB7XG4gICAgICBjYW5kaWRhdGUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcHJvcHNba2V5XSA9IGNhbmRpZGF0ZS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzW2tleV0gPSBjYW5kaWRhdGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2Zvcm1SZWxhdGlvbnMgKCkge1xuICAgIC8vIFRPRE86IEBzeVxuICAgIC8vIOWfuuacrOS4iuaJgOaciee7hOS7tumDveeUqOWIsOS6hu+8jOingVxuICAgIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3NvbWFybHlvbmtzLzk0Yjc2OTY2MDRhNTI1NTNjZjE5NzZmNGFkMTVhYzQ1XG4gICAgLy8g5omA5Lul5pyA5aW96L+Y5piv6IO95a6e546wIHJlbGF0aW9uc1xuICAgIC8vIGdldFJlbGF0aW9uTm9kZXMgVE9ETzogQHN5IOazqOWGjCBjaGlsZCDlkoxkYXRhXG4gIH1cblxuICBmdW5jdGlvbiBtYXBPcHRpb25zIChvcHRpb25zLCBfbWFwKSB7XG4gICAgdmFyIHJldCA9IHt9O1xuICAgIHZhciB0cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyTWFwLmZhbGxiYWNrO1xuXG4gICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiBpdG9yIChrZXkpIHtcbiAgICAgIHZhciB0YXJnZXRLZXkgPSBfbWFwW2tleV0gfHwga2V5XG4gICAgICB2YXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lck1hcFtrZXldIHx8IHRyYW5zZm9ybWVyTWFwLmZhbGxiYWNrXG4gICAgICByZXRbdGFyZ2V0S2V5XSA9IHRyYW5zZm9ybWVyKG9wdGlvbnNba2V5XSlcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coJ29wdGlvbnMnLCByZXQpXG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBvbmVudCAob3B0aW9ucykge1xuICAgIHZhciBjb21wb25lbnQgPSBmYWN0b3J5KG1hcE9wdGlvbnMob3B0aW9ucywgb3B0aW9uTWFwKSk7XG4gICAgY29uc29sZS5sb2coJ2ZhY3RvcnknLCBmYWN0b3J5KTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG59XG4iLCJcbi8qIGdsb2JhbCBnZXRBcHAsUGFnZSxteSAqL1xuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbi8qXG4gIOazqOaEj1xuICAgIC0g6L+Z5Liq5o+S5Lu25piv5LuO5b6u5L+h5bCP56iL5bqP6YeN5p6E5Yiw55m+5bqm5bCP56iL5bqP5YaN6YeN5p6E5Yiw5pSv5LuY5a6d5bCP56iL5bqPXG4gICAgLSDnm67liY3ku6Ugc3dhbiDkvZzkuLrlrr/kuLvlr7nosaFcbiAqL1xuXG52YXIgc3dhbiA9IG15XG52YXIgRHdVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2R3JykuRHdVdGlsc1xudmFyIGFwcENvbmZpZyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NvbmZpZycpXG4vLyB2YXIgV3hQYXJzZSA9IHJlcXVpcmUoJy4uLy4uL3d4UGFyc2Uvd3hQYXJzZS5qcycpO1xudmFyIGFwcCA9IGdldEFwcCgpXG5cblBhZ2Uoe1xuICBkYXRhOiB7XG4gICAgdXNlckluZm86IHt9LFxuICAgIGludml0YXRpb25Vc2VySW5mbzoge30sXG4gICAgaXNMb2dpbjogZmFsc2UsXG4gICAgdXNlcm5hbWVQbGFjZWhvbGRlcjogJ+eUqOaIt+WQjS/pgq7nrrEv5omL5py65Y+3JyxcbiAgICBzaXRldXNlckRhdGE6IG51bGwsXG4gICAgdGVybToge30sXG4gICAgc2hvd1Rlcm06IGZhbHNlLFxuICAgIGdldFVzZXJJbmZvU3VjY2VzczogZmFsc2UsXG4gICAgbG9naW5SZXNwb25zZToge30sXG5cbiAgICB0YWJzOiBbXG4gICAgICAvLyB7IGluZGV4OiAwLCBuYW1lOiAn5o6I5p2D55m75b2VJywga2V5OiAnYWxsb3dfYXV0aF9kd2FwcCcgfSxcbiAgICAgIHsgaW5kZXg6IDEsIG5hbWU6ICfnlKjmiLflkI3nmbvlvZUnLCBrZXk6ICdhbGxvd191c2VybmFtZV9kd2FwcCcgfSxcbiAgICAgIHsgaW5kZXg6IDIsIG5hbWU6ICfmiYvmnLrnmbvlvZUnLCBrZXk6ICdhbGxvd19tb2JpbGVfZHdhcHAnIH1cbiAgICBdLFxuICAgIGFjdGl2ZUluZGV4OiAxLFxuICAgIHNsaWRlck9mZnNldDogMCxcbiAgICBzbGlkZXJMZWZ0OiAwLFxuXG4gICAgbW9iaWxlOiAnJyxcbiAgICBsb2NrOiBmYWxzZSxcbiAgICB0aW1lcjogNjAsXG4gICAgdGltZXJTdGFydDogZmFsc2UsXG5cbiAgICBjdXJyZW50VmlldzogJ3VzZXJuYW1lTG9naW4nLFxuICAgIGludml0YXRpb25fY29kZTogJydcbiAgfSxcblxuICBvbkxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgaWYgKG9wdGlvbnMuaW52aXRhdGlvbl9jb2RlKSB7XG4gICAgICB0aGF0LnNldERhdGEoe1xuICAgICAgICBpbnZpdGF0aW9uX2NvZGU6IG9wdGlvbnMuaW52aXRhdGlvbl9jb2RlXG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLnJlc2V0U2xpZGVyKClcbiAgfSxcblxuICByZXNldFNsaWRlcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHN3YW4uZ2V0U3lzdGVtSW5mbyh7XG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHZhciBzbGlkZXJXaWR0aCA9IHRoYXQuZGF0YS50YWJzLmxlbmd0aCA9PT0gMyA/IDExMiA6IDEwMFxuICAgICAgICB0aGF0LnNldERhdGEoe1xuICAgICAgICAgIHNsaWRlckxlZnQ6IChyZXMud2luZG93V2lkdGggLyB0aGF0LmRhdGEudGFicy5sZW5ndGggLSBzbGlkZXJXaWR0aCkgLyAyLFxuICAgICAgICAgIHNsaWRlck9mZnNldDogKHJlcy53aW5kb3dXaWR0aCAvIHRoYXQuZGF0YS50YWJzLmxlbmd0aCkgKiAodGhhdC5kYXRhLmFjdGl2ZUluZGV4IC0gMSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGxvZ2luV2l0aE9wZW5pZDogZnVuY3Rpb24gKCkge1xuICAgIC8vXG4gIH0sXG5cbiAgb25TaG93OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuICAgIHZhciBpbnN0YWxsYXRpb24gPSBzd2FuLmdldFN0b3JhZ2VTeW5jKCdkd2FwcDppbnN0YWxsYXRpb24nKSB8fCB7fVxuICAgIGlmIChpbnN0YWxsYXRpb24uc2l0ZXVzZXJfdG9rZW4pIHtcbiAgICAgIHZtLnNldERhdGEoe1xuICAgICAgICBpc0xvZ2luOiB0cnVlLFxuICAgICAgICBnZXRVc2VySW5mb1N1Y2Nlc3M6IHRydWVcbiAgICAgIH0pXG4gICAgICBhcHAuZ2V0Q2FjaGVkVXNlckluZm8oZnVuY3Rpb24gKHVzZXJJbmZvKSB7XG4gICAgICAgIHZtLnNldERhdGEoe1xuICAgICAgICAgIHVzZXJJbmZvOiB1c2VySW5mb1xuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uc2V0RGF0YSh7XG4gICAgICAgIGdldFVzZXJJbmZvU3VjY2VzczogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgaWYgKG15KSB7XG4gICAgICAgIC8vIFRPRE9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzd2FuLnNob3dMb2FkaW5nKHtcbiAgICAgICAgdGl0bGU6ICfnmbvlvZXkuK0uLi4nLFxuICAgICAgICBtYXNrOiB0cnVlXG4gICAgICB9KVxuICAgICAgYXBwLmdldFVzZXJJbmZvKFxuICAgICAgICBmdW5jdGlvbiAodXNlckluZm8sIGxvZ2luX2RhdGEsIHVzZXJfZGF0YSkge1xuICAgICAgICAgIHZtLnNldERhdGEoe1xuICAgICAgICAgICAgZ2V0VXNlckluZm9TdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgdXNlckluZm86IHVzZXJJbmZvXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWluc3RhbGxhdGlvbi5zaXRldXNlcl90b2tlbikge1xuICAgICAgICAgICAgdm0uYWZ0ZXJMb2dpbkFuZEdldFVzZXJJbmZvKGxvZ2luX2RhdGEsIHVzZXJfZGF0YSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2FwcC5nZXRVc2VySW5mbyBmYWlsJylcbiAgICAgICAgICBzd2FuLmxvZ2luKHtcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgIHN1Y2Nlc3MgKGxvZ2luUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICAgICAgICAgIHZtLnNldERhdGEoeyBsb2dpblJlc3BvbnNlOiBsb2dpblJlc3BvbnNlIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgaW52aXRhdGlvbl9jb2RlOiB2bS5kYXRhLmludml0YXRpb25fY29kZSxcbiAgICAgIHBhZ2VfaWQ6IGFwcENvbmZpZy5wYWdlLmlkXG4gICAgfVxuICAgIER3VXRpbHMucmVxdWVzdCgnZ2V0L2NvbXBhbnlfYWNjb3VudC9nZXRfZHdhcHBfbG9naW5fZGF0YScsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICB2YXIgZHNoYXJlY29uZmlnID0gcmVzcG9uc2UuZGF0YS5kc2hhcmVjb25maWdcbiAgICAgIHZhciB0YWJzID0gdm0uZGF0YS50YWJzLmZpbHRlcihmdW5jdGlvbiAoaSkge1xuICAgICAgICByZXR1cm4gZHNoYXJlY29uZmlnW2kua2V5XVxuICAgICAgfSlcbiAgICAgIHZhciBhY3RpdmVJbmRleCA9IHRhYnMubGVuZ3RoID8gdGFic1swXS5pbmRleCA6IDBcblxuICAgICAgdm0uc2V0RGF0YSh7XG4gICAgICAgIHRlcm06IHJlc3BvbnNlLmRhdGEudGVybSxcbiAgICAgICAgaW52aXRhdGlvblVzZXJJbmZvOiByZXNwb25zZS5kYXRhLmludml0YXRpb25fdXNlcixcbiAgICAgICAgc2l0ZXVzZXJEYXRhOiByZXNwb25zZS5kYXRhLnByb2ZpbGUuaWQgPyByZXNwb25zZS5kYXRhLnByb2ZpbGUgOiBudWxsLFxuICAgICAgICAvLyB0YWJzOiB0YWJzLFxuICAgICAgICBhY3RpdmVJbmRleDogdGFicy5sZW5ndGggPyB0YWJzWzBdLmluZGV4IDogMCxcbiAgICAgICAgY3VycmVudFZpZXc6IGFjdGl2ZUluZGV4ID09PSAxID8gJ3VzZXJuYW1lTG9naW4nIDogJ21vYmlsZUxvZ2luJyxcbiAgICAgICAgdXNlcm5hbWVQbGFjZWhvbGRlcjogZHNoYXJlY29uZmlnLmFsbG93X21vYmlsZV9kd2FwcCA/ICfnlKjmiLflkI0v6YKu566xL+aJi+acuuWPtycgOiAn55So5oi35ZCNL+mCrueusSdcbiAgICAgIH0pXG4gICAgICAvLyBXeFBhcnNlLnd4UGFyc2UoJ3Rlcm0uZGVzY3JpcHRpb24nLCAnaHRtbCcsIHJlc3BvbnNlLmRhdGEudGVybS5kZXNjcmlwdGlvbiwgdm0sIDUpO1xuICAgICAgdm0ucmVzZXRTbGlkZXIoKVxuICAgIH0pXG4gIH0sXG5cbiAgY2xpY2tHZXRVc2VySW5mbzogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmRldGFpbC5lcnJNc2cgPT09ICdnZXRVc2VySW5mbzpvaycpIHtcbiAgICAgIHRoaXMuYWZ0ZXJMb2dpbkFuZEdldFVzZXJJbmZvKHRoaXMuZGF0YS5sb2dpblJlc3BvbnNlLCBldmVudC5kZXRhaWwpXG4gICAgICB0aGlzLnNldERhdGEoeyBnZXRVc2VySW5mb1N1Y2Nlc3M6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgYWZ0ZXJMb2dpbkFuZEdldFVzZXJJbmZvOiBmdW5jdGlvbiAobG9naW5SZXNwb25zZSwgdXNlckluZm8pIHtcbiAgICB2YXIgdm0gPSB0aGlzXG4gICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9kd2FwcF9sb2dpbicsIHsgbG9naW5fZGF0YTogbG9naW5SZXNwb25zZSwgdXNlcl9kYXRhOiB1c2VySW5mbyB9KS50aGVuKFxuICAgICAgZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHN3YW4uaGlkZUxvYWRpbmcoKVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zaXRldXNlcl90b2tlbikge1xuICAgICAgICAgIHZtLnNldFNpdGV1c2VyVG9rZW4ocmVzcG9uc2UuZGF0YS5zaXRldXNlcl90b2tlbilcbiAgICAgICAgICBzd2FuLnNob3dUb2FzdCh7XG4gICAgICAgICAgICB0aXRsZTogJ+aOiOadg+eZu+W9leaIkOWKn++8gScsXG4gICAgICAgICAgICBpY29uOiAnc3VjY2VzcycsXG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0UGhvbmVOdW1iZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuXG4gICAgc3dhbi5zaG93TG9hZGluZyh7XG4gICAgICB0aXRsZTogJ+eZu+W9leS4rS4uLicsXG4gICAgICBtYXNrOiB0cnVlXG4gICAgfSlcblxuICAgIHZhciBhZnRlclJlc29sdmUgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHN3YW4uaGlkZUxvYWRpbmcoKVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc2l0ZXVzZXJfdG9rZW4pIHtcbiAgICAgICAgdm0uc2V0U2l0ZXVzZXJUb2tlbihyZXNwb25zZS5kYXRhLnNpdGV1c2VyX3Rva2VuKVxuICAgICAgICBzd2FuLnNob3dUb2FzdCh7XG4gICAgICAgICAgdGl0bGU6ICfnmbvlvZXmiJDlip/vvIEnLFxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICB9KVxuICAgICAgICBzd2FuLm5hdmlnYXRlQmFjaygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFmdGVyUmVqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICBzd2FuLnNob3dNb2RhbCh7XG4gICAgICAgIHRpdGxlOiAn5o+Q56S6JyxcbiAgICAgICAgY29udGVudDogJ+iOt+WPluaJi+acuuWPt+Wksei0pe+8geivt+mAieaLqeS9v+eUqOeUqOaIt+WQjeaIluiAheaJi+acuuWPt+iHquWKqOeZu+W9lScsXG4gICAgICAgIHNob3dDYW5jZWw6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChhcHBDb25maWcuZGVidWcpIHtcbiAgICAgIGFwcC5nZXRVc2VySW5mbyhcbiAgICAgICAgZnVuY3Rpb24gKHVzZXJJbmZvLCBsb2dpbl9kYXRhLCB1c2VyX2RhdGEpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHsgbG9naW5fZGF0YTogbG9naW5fZGF0YSwgdXNlcl9kYXRhOiB1c2VyX2RhdGEsIHBob25lX2RhdGE6IHt9IH1cbiAgICAgICAgICBEd1V0aWxzLnJlcXVlc3QoJ3Bvc3QvY29tcGFueV9hY2NvdW50L2R3YXBwX2xvZ2luX3dpdGhfbW9iaWxlJywgZGF0YSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGFmdGVyUmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYWZ0ZXJSZWplY3QoKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlLmRldGFpbC5lbmNyeXB0ZWREYXRhKSB7XG4gICAgICAgIHZhciBwaG9uZV9kYXRhID0gZS5kZXRhaWxcbiAgICAgICAgYXBwLmdldFVzZXJJbmZvKFxuICAgICAgICAgIGZ1bmN0aW9uICh1c2VySW5mbywgbG9naW5fZGF0YSwgdXNlcl9kYXRhKSB7XG4gICAgICAgICAgICB2YXIgZGF0YSA9IHsgbG9naW5fZGF0YTogbG9naW5fZGF0YSwgdXNlcl9kYXRhOiB1c2VyX2RhdGEsIHBob25lX2RhdGE6IHBob25lX2RhdGEgfVxuICAgICAgICAgICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9kd2FwcF9sb2dpbl93aXRoX21vYmlsZScsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIGFmdGVyUmVzb2x2ZShyZXNwb25zZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhZnRlclJlamVjdCgpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZnRlclJlamVjdCgpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHNldFVzZXJpbmZvOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS51c2VySW5mbyAmJiB0aGlzLmRhdGEudXNlckluZm8ubmlja05hbWUgJiYgdGhpcy5kYXRhLnVzZXJJbmZvLmF2YXRhclVybCkge1xuICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIG5pY2tuYW1lOiB0aGlzLmRhdGEudXNlckluZm8ubmlja05hbWUsXG4gICAgICAgIGF2YXRhcjogdGhpcy5kYXRhLnVzZXJJbmZvLmF2YXRhclVybFxuICAgICAgfVxuICAgICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2RtaG9tZS9zZXRfdXNlcmluZm8nLCBkYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAvL1xuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlVGltZXI6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzXG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGltZXIgPSB2bS5kYXRhLnRpbWVyIC0gMVxuICAgICAgdm0uc2V0RGF0YSh7IHRpbWVyOiB0aW1lciB9KVxuICAgICAgdGltZXIgPiAxID8gdm0udXBkYXRlVGltZXIoKSA6IHZtLnN0b3BUaW1lcigpXG4gICAgfSwgMTAwMClcbiAgfSxcblxuICBzdG9wVGltZXI6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNldERhdGEoe1xuICAgICAgdGltZXI6IDYwLFxuICAgICAgdGltZXJTdGFydDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHN0YXJ0VGltZXI6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNldERhdGEoe1xuICAgICAgdGltZXI6IDYwLFxuICAgICAgdGltZXJTdGFydDogdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy51cGRhdGVUaW1lcigpXG4gIH0sXG5cbiAgc2VuZFRva2VuOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzXG4gICAgdmFyIHRva2VuVHlwZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC50b2tlblR5cGVcbiAgICB2YXIgcmVxdWVzdFVybFxuICAgIGlmICh0b2tlblR5cGUgPT09ICdsb2dpbicpIHtcbiAgICAgIHJlcXVlc3RVcmwgPSAncG9zdC9jb21wYW55X2FjY291bnQvc2VuZF9zaXRldXNlcl9sb2dpbl90b2tlbidcbiAgICB9IGVsc2UgaWYgKHRva2VuVHlwZSA9PT0gJ3NpZ251cCcpIHtcbiAgICAgIHJlcXVlc3RVcmwgPSAncG9zdC9jb21wYW55X2FjY291bnQvc2VuZF9zaXRldXNlcl9zaWdudXBfdG9rZW4nXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RVcmwgPSAncG9zdC9jb21wYW55X2FjY291bnQvc2VuZF9zaXRldXNlcl9yZXNldF90b2tlbidcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLnRpbWVyU3RhcnQgfHwgdGhpcy5kYXRhLmxvY2spIHJldHVyblxuICAgIGlmICghdGhpcy52YWxpZGF0ZU1vYmlsZSh0aGlzLmRhdGEubW9iaWxlKSkge1xuICAgICAgcmV0dXJuIHZtLnNob3dNb2RhbCgn6ZSZ6K+vJywgJ+ivt+Whq+WGmeato+ehrueahOaJi+acuuWPtycpXG4gICAgfVxuXG4gICAgdGhpcy5zZXREYXRhKHsgbG9jazogdHJ1ZSB9KVxuICAgIHN3YW4uc2hvd0xvYWRpbmcoeyB0aXRsZTogJ+WPkemAgeS4rS4uLicgfSlcbiAgICBEd1V0aWxzLnJlcXVlc3QocmVxdWVzdFVybCwgeyBtb2JpbGU6IHRoaXMuZGF0YS5tb2JpbGUgfSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHZtLnNldERhdGEoeyBsb2NrOiBmYWxzZSB9KVxuICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB2bS5zaG93TW9kYWwoJ+aIkOWKnycsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSlcbiAgICAgICAgdm0uc3RhcnRUaW1lcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS5zaG93TW9kYWwoJ+mUmeivrycsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGhhbmRsZU1vYmlsZUlucHV0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB0aGlzLnNldERhdGEoeyBtb2JpbGU6IGV2ZW50LmRldGFpbC52YWx1ZSB9KVxuICB9LFxuXG4gIHZhbGlkYXRlTW9iaWxlOiBmdW5jdGlvbiAobW9iaWxlKSB7XG4gICAgcmV0dXJuIG1vYmlsZSAmJiAvXjFbXFxkXXsxMH0kLy50ZXN0KG1vYmlsZSlcbiAgfSxcblxuICB0YWJDbGljazogZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAocGFyc2VJbnQoZS5jdXJyZW50VGFyZ2V0LmlkKSA9PT0gMSkge1xuICAgICAgdGhpcy5zZXREYXRhKHtcbiAgICAgICAgY3VycmVudFZpZXc6ICd1c2VybmFtZUxvZ2luJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGUuY3VycmVudFRhcmdldC5pZCkgPT09IDIpIHtcbiAgICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICAgIGN1cnJlbnRWaWV3OiAnbW9iaWxlTG9naW4nXG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLnNldERhdGEoe1xuICAgICAgc2xpZGVyT2Zmc2V0OiBlLmN1cnJlbnRUYXJnZXQub2Zmc2V0TGVmdCxcbiAgICAgIGFjdGl2ZUluZGV4OiBlLmN1cnJlbnRUYXJnZXQuaWRcbiAgICB9KVxuICB9LFxuXG4gIGdldEluc3RhbGxhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzd2FuLmdldFN0b3JhZ2VTeW5jKCdkd2FwcDppbnN0YWxsYXRpb24nKSB8fCB7fVxuICB9LFxuXG4gIHNldFNpdGV1c2VyVG9rZW46IGZ1bmN0aW9uIChzaXRldXNlcl90b2tlbikge1xuICAgIHZhciBpbnN0YWxsYXRpb24gPSBzd2FuLmdldFN0b3JhZ2VTeW5jKCdkd2FwcDppbnN0YWxsYXRpb24nKSB8fCB7fVxuICAgIGluc3RhbGxhdGlvbi5zaXRldXNlcl90b2tlbiA9IHNpdGV1c2VyX3Rva2VuXG4gICAgc3dhbi5zZXRTdG9yYWdlU3luYygnZHdhcHA6aW5zdGFsbGF0aW9uJywgaW5zdGFsbGF0aW9uKVxuICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICBpc0xvZ2luOiB0cnVlXG4gICAgfSlcbiAgICB0aGlzLmFmdGVyTG9naW4oKVxuICB9LFxuXG4gIGhhbmRsZUxvZ291dDogZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXNcbiAgICBzd2FuLnNob3dNb2RhbCh7XG4gICAgICB0aXRsZTogJ+aPkOekuicsXG4gICAgICBjb250ZW50OiAn5L2g56Gu5a6a6YCA5Ye65biQ5Y+377yfJyxcbiAgICAgIGNvbmZpcm1UZXh0OiAn56Gu6K6k6YCA5Ye6JyxcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICBpZiAocmVzcG9uc2UuY29uZmlybSkge1xuICAgICAgICAgIHZhciBpbnN0YWxsYXRpb24gPSBzd2FuLmdldFN0b3JhZ2VTeW5jKCdkd2FwcDppbnN0YWxsYXRpb24nKSB8fCB7fVxuICAgICAgICAgIGRlbGV0ZSBpbnN0YWxsYXRpb24uc2l0ZXVzZXJfdG9rZW5cbiAgICAgICAgICBzd2FuLnNldFN0b3JhZ2VTeW5jKCdkd2FwcDppbnN0YWxsYXRpb24nLCBpbnN0YWxsYXRpb24pXG4gICAgICAgICAgc3dhbi5yZW1vdmVTdG9yYWdlU3luYygnc2l0ZXVzZXJfaWQnKVxuICAgICAgICAgIHZtLnNldERhdGEoe1xuICAgICAgICAgICAgaXNMb2dpbjogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBzaG93TW9kYWw6IGZ1bmN0aW9uICh0aXRsZSwgY29udGVudCkge1xuICAgIHN3YW4uc2hvd01vZGFsKHsgdGl0bGU6IHRpdGxlLCBjb250ZW50OiBjb250ZW50LCBzaG93Q2FuY2VsOiBmYWxzZSB9KVxuICB9LFxuXG4gIHVzZXJuYW1lTG9naW5TdWJtaXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgaWYgKHRoaXMuZ2V0SW5zdGFsbGF0aW9uKCkuc2l0ZXVzZXJfdG9rZW4pIHJldHVyblxuXG4gICAgdmFyIHZtID0gdGhpc1xuICAgIHZhciBmb3JtRGF0YSA9IGRhdGEuZGV0YWlsLnZhbHVlXG4gICAgaWYgKCFmb3JtRGF0YS51c2VybmFtZSB8fCAhZm9ybURhdGEucGFzc3dvcmQpIHtcbiAgICAgIHJldHVybiBzd2FuLnNob3dNb2RhbCh7IHRpdGxlOiAn55m75b2V6ZSZ6K+vJywgY29udGVudDogJ+ivt+Whq+WGmeWujOaVtOi0puWPt+WSjOWvhueggScsIHNob3dDYW5jZWw6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgc3dhbi5zaG93TG9hZGluZyh7IHRpdGxlOiAn55m75b2V5LitLi4uJyB9KVxuICAgIER3VXRpbHMucmVxdWVzdCgncG9zdC9jb21wYW55X2FjY291bnQvbG9naW4nLCBmb3JtRGF0YSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHN3YW4uaGlkZUxvYWRpbmcoKVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgdm0uc2V0U2l0ZXVzZXJUb2tlbihyZXNwb25zZS5kYXRhLnNpdGV1c2VyX3Rva2VuKVxuICAgICAgICBzd2FuLnNob3dUb2FzdCh7XG4gICAgICAgICAgdGl0bGU6ICfnmbvlvZXmiJDlip/vvIEnLFxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICB9KVxuICAgICAgICBzd2FuLm5hdmlnYXRlQmFjaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3dhbi5zaG93TW9kYWwoeyB0aXRsZTogJ+eZu+W9lemUmeivrycsIGNvbnRlbnQ6IHJlc3BvbnNlLmRhdGEubWVzc2FnZSwgc2hvd0NhbmNlbDogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHVzZXJuYW1lUmVzZXRTdWJtaXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuICAgIHZhciBmb3JtRGF0YSA9IGRhdGEuZGV0YWlsLnZhbHVlXG4gICAgaWYgKCFmb3JtRGF0YS5lbWFpbCB8fCAhL0AvLnRlc3QoZm9ybURhdGEuZW1haWwpKSB7XG4gICAgICByZXR1cm4gdm0uc2hvd01vZGFsKCfplJnor68nLCAn6K+35aGr5YaZ5q2j56Gu55qE6YKu566xJylcbiAgICB9XG5cbiAgICBzd2FuLnNob3dMb2FkaW5nKHsgdGl0bGU6ICflj5HpgIHkuK0uLi4nIH0pXG4gICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2RtaG9tZS9wYXNzd29yZF9yZXNldF9lbWFpbCcsIGZvcm1EYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB2bS5zaG93TW9kYWwoJ+aIkOWKnycsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLnNob3dNb2RhbCgn6ZSZ6K+vJywgcmVzcG9uc2UuZGF0YS5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgdXNlcm5hbWVTaWdudXBTdWJtaXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuICAgIHZhciBmb3JtRGF0YSA9IGRhdGEuZGV0YWlsLnZhbHVlXG4gICAgZm9ybURhdGEuaW52aXRhdGlvbl9jb2RlID0gdm0uZGF0YS5pbnZpdGF0aW9uX2NvZGVcbiAgICBpZiAoIWZvcm1EYXRhLmVtYWlsIHx8ICEvQC8udGVzdChmb3JtRGF0YS5lbWFpbCkpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfor7floavlhpnmraPnoa7nmoTpgq7nrrEnKVxuICAgIH1cbiAgICBpZiAoIWZvcm1EYXRhLnVzZXJuYW1lIHx8ICFmb3JtRGF0YS5wYXNzd29yZDEpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfor7floavlhpnmraPnoa7nmoTnlKjmiLflkI3lkozlr4bnoIEnKVxuICAgIH1cbiAgICBpZiAoIS9eW2Etel1bYS16MC05Xy1dezMsfS8udGVzdChmb3JtRGF0YS51c2VybmFtZSkpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfnlKjmiLflkI3kuLrlpKfkuo7lm5vkvY3nmoTlrZfmr43lkozmlbDlrZfvvIzlv4Xpobvku6XlrZfmr43lvIDlpLQnKVxuICAgIH1cbiAgICBpZiAoZm9ybURhdGEucGFzc3dvcmQxICE9PSBmb3JtRGF0YS5wYXNzd29yZDIpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfkuKTmrKHovpPlhaXnmoTlr4bnoIHkuI3kuIDoh7QnKVxuICAgIH1cbiAgICBzd2FuLnNob3dMb2FkaW5nKHsgdGl0bGU6ICflj5HpgIHkuK0uLi4nIH0pXG4gICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9zaWdudXAnLCBmb3JtRGF0YSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHN3YW4uaGlkZUxvYWRpbmcoKVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgdm0uc2V0U2l0ZXVzZXJUb2tlbihyZXNwb25zZS5kYXRhLnNpdGV1c2VyX3Rva2VuKVxuICAgICAgICBzd2FuLnNob3dUb2FzdCh7XG4gICAgICAgICAgdGl0bGU6ICfms6jlhozmiJDlip/vvIEnLFxuICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgICAgICBkdXJhdGlvbjogMzAwMFxuICAgICAgICB9KVxuICAgICAgICB2bS5nb0JhY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uc2hvd01vZGFsKCfplJnor68nLCByZXNwb25zZS5kYXRhLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtb2JpbGVMb2dpblN1Ym1pdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdm0gPSB0aGlzXG4gICAgdmFyIGZvcm1EYXRhID0gZGF0YS5kZXRhaWwudmFsdWVcbiAgICBpZiAoIXZtLnZhbGlkYXRlTW9iaWxlKGZvcm1EYXRhLm1vYmlsZSkgfHwgIWZvcm1EYXRhLmNvZGUpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfor7floavlhpnmraPnoa7nmoTmiYvmnLrlj7flkozpqozor4HnoIEnKVxuICAgIH1cblxuICAgIHN3YW4uc2hvd0xvYWRpbmcoeyB0aXRsZTogJ+eZu+W9leS4rS4uLicgfSlcbiAgICBEd1V0aWxzLnJlcXVlc3QoJ3Bvc3QvY29tcGFueV9hY2NvdW50L2xvZ2luX3dpdGhfbW9iaWxlJywgZm9ybURhdGEpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBzd2FuLmhpZGVMb2FkaW5nKClcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHZtLnNldFNpdGV1c2VyVG9rZW4ocmVzcG9uc2UuZGF0YS5zaXRldXNlcl90b2tlbilcbiAgICAgICAgdm0uc2hvd01vZGFsKCfmiJDlip8nLCByZXNwb25zZS5kYXRhLm1lc3NhZ2UpXG4gICAgICAgIHZtLmdvQmFjaygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bS5zaG93TW9kYWwoJ+mUmeivrycsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1vYmlsZVNpZ251cFN1Ym1pdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICB2YXIgdm0gPSB0aGlzXG4gICAgdmFyIGZvcm1EYXRhID0gZGF0YS5kZXRhaWwudmFsdWVcbiAgICBmb3JtRGF0YS5pbnZpdGF0aW9uX2NvZGUgPSB2bS5kYXRhLmludml0YXRpb25fY29kZVxuICAgIGlmICghdm0udmFsaWRhdGVNb2JpbGUoZm9ybURhdGEubW9iaWxlKSB8fCAhZm9ybURhdGEuY29kZSkge1xuICAgICAgcmV0dXJuIHZtLnNob3dNb2RhbCgn6ZSZ6K+vJywgJ+ivt+Whq+WGmeato+ehrueahOaJi+acuuWPt+WSjOmqjOivgeeggScpXG4gICAgfVxuICAgIGlmICghZm9ybURhdGEucGFzc3dvcmQxKSB7XG4gICAgICByZXR1cm4gdm0uc2hvd01vZGFsKCfplJnor68nLCAn6K+35aGr5YaZ5a+G56CBJylcbiAgICB9XG4gICAgaWYgKGZvcm1EYXRhLnBhc3N3b3JkMSAhPT0gZm9ybURhdGEucGFzc3dvcmQyKSB7XG4gICAgICByZXR1cm4gdm0uc2hvd01vZGFsKCfplJnor68nLCAn5Lik5qyh6L6T5YWl55qE5a+G56CB5LiN5LiA6Ie0JylcbiAgICB9XG5cbiAgICBzd2FuLnNob3dMb2FkaW5nKHsgdGl0bGU6ICfms6jlhozkuK0uLi4nIH0pXG4gICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9zaWdudXBfd2l0aF9tb2JpbGUnLCBmb3JtRGF0YSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIHN3YW4uaGlkZUxvYWRpbmcoKVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgdm0uc2V0U2l0ZXVzZXJUb2tlbihyZXNwb25zZS5kYXRhLnNpdGV1c2VyX3Rva2VuKVxuICAgICAgICB2bS5zaG93TW9kYWwoJ+aIkOWKnycsIHJlc3BvbnNlLmRhdGEubWVzc2FnZSlcbiAgICAgICAgdm0uZ29CYWNrKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLnNob3dNb2RhbCgn6ZSZ6K+vJywgcmVzcG9uc2UuZGF0YS5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbW9iaWxlUmVzZXRTdWJtaXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuICAgIHZhciBmb3JtRGF0YSA9IGRhdGEuZGV0YWlsLnZhbHVlXG4gICAgaWYgKCF2bS52YWxpZGF0ZU1vYmlsZShmb3JtRGF0YS5tb2JpbGUpIHx8ICFmb3JtRGF0YS5jb2RlKSB7XG4gICAgICByZXR1cm4gdm0uc2hvd01vZGFsKCfplJnor68nLCAn6K+35aGr5YaZ5q2j56Gu55qE5omL5py65Y+35ZKM6aqM6K+B56CBJylcbiAgICB9XG4gICAgaWYgKCFmb3JtRGF0YS5wYXNzd29yZDEpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfor7floavlhpnlr4bnoIEnKVxuICAgIH1cbiAgICBpZiAoZm9ybURhdGEucGFzc3dvcmQxICE9PSBmb3JtRGF0YS5wYXNzd29yZDIpIHtcbiAgICAgIHJldHVybiB2bS5zaG93TW9kYWwoJ+mUmeivrycsICfkuKTmrKHovpPlhaXnmoTlr4bnoIHkuI3kuIDoh7QnKVxuICAgIH1cblxuICAgIHN3YW4uc2hvd0xvYWRpbmcoeyB0aXRsZTogJ+WvhueggemHjee9ruS4rS4uLicgfSlcbiAgICBEd1V0aWxzLnJlcXVlc3QoJ3Bvc3QvY29tcGFueV9hY2NvdW50L3Jlc2V0X3Bhc3N3b3JkX2J5X21vYmlsZScsIGZvcm1EYXRhKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgc3dhbi5oaWRlTG9hZGluZygpXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB2bS5zZXRTaXRldXNlclRva2VuKHJlc3BvbnNlLmRhdGEuc2l0ZXVzZXJfdG9rZW4pXG4gICAgICAgIHZtLnNob3dNb2RhbCgn5oiQ5YqfJywgcmVzcG9uc2UuZGF0YS5tZXNzYWdlKVxuICAgICAgICB2bS5nb0JhY2soKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm0uc2hvd01vZGFsKCfplJnor68nLCByZXNwb25zZS5kYXRhLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBoYW5kbGVVcGRhdGVWaWV3OiBmdW5jdGlvbiAoZSkge1xuICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICBjdXJyZW50VmlldzogZS5jdXJyZW50VGFyZ2V0LmRhdGFzZXQudmlld1xuICAgIH0pXG4gIH0sXG5cbiAgZ29CYWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgc3dhbi5uYXZpZ2F0ZUJhY2soKVxuICB9LFxuXG4gIGdvQmFja0hvbWU6IGZ1bmN0aW9uICgpIHtcbiAgICBzd2FuLnN3aXRjaFRhYih7IHVybDogJy4uL2RlZmF1bHQtaG9tZS9pbmRleCcgfSlcbiAgfSxcblxuICBhZnRlckxvZ2luOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZtID0gdGhpc1xuXG4gICAgLy8g5omA5pyJ55m75b2V5LmL5ZCO6KaB5YGa55qE5LqL57uf5LiA5pS+5Yiw5LiA5Liq6K+35rGC5aSE55CGXG4gICAgYXBwLmdldFVzZXJJbmZvKGZ1bmN0aW9uICh1c2VySW5mbywgbG9naW5fZGF0YSwgdXNlcl9kYXRhKSB7XG4gICAgICB2YXIgZGF0YSA9IHsgbG9naW5fZGF0YTogbG9naW5fZGF0YSwgdXNlcl9kYXRhOiB1c2VyX2RhdGEgfVxuICAgICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9hZnRlcl9kd2FwcF9sb2dpbicsIGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIHZtLnNldERhdGEoe1xuICAgICAgICAgIHNpdGV1c2VyRGF0YTogcmVzcG9uc2UuZGF0YS5zaXRldXNlciA/IHJlc3BvbnNlLmRhdGEuc2l0ZXVzZXIgOiBudWxsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB2YXIgcHNob3BfaWQgPSBzd2FuLmdldFN0b3JhZ2VTeW5jKCdwc2hvcF9pZCcpXG4gICAgRHdVdGlscy5yZXF1ZXN0KCdwb3N0L2NvbXBhbnlfYWNjb3VudC9hZnRlcl9kd2FwcF9sb2dpbl93aXRoX3BzaG9wX2lkJywgeyBwc2hvcF9pZDogcHNob3BfaWQgfSkudGhlbihmdW5jdGlvbiAoXG4gICAgICByZXNwb25zZVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ3Bvc3QvY29tcGFueV9hY2NvdW50L2FmdGVyX2R3YXBwX2xvZ2luX3dpdGhfcHNob3BfaWQnLCBwc2hvcF9pZCwgcmVzcG9uc2UpXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zaXRldXNlcikge1xuICAgICAgICBzd2FuLnNldFN0b3JhZ2VTeW5jKCdzaXRldXNlcl9pZCcsIHJlc3BvbnNlLmRhdGEuc2l0ZXVzZXIuaWQpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBvcGVuVGVybTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICBzaG93VGVybTogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY2xvc2VUZXJtOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zZXREYXRhKHtcbiAgICAgIHNob3dUZXJtOiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG4iLCJjb25zdCBhcHAgPSBnZXRBcHAoKTtcblxuUGFnZSh7XG4gIGRhdGE6IHtcbiAgICBpbnB1dFZhbHVlOiAnJyxcbiAgfSxcblxuICBvbkJsdXIoZSkge1xuICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICBpbnB1dFZhbHVlOiBlLmRldGFpbC52YWx1ZSxcbiAgICB9KTtcbiAgfSxcblxuICBhZGQoKSB7XG4gICAgYXBwLnRvZG9zID0gYXBwLnRvZG9zLmNvbmNhdChbXG4gICAgICB7XG4gICAgICAgIHRleHQ6IHRoaXMuZGF0YS5pbnB1dFZhbHVlLFxuICAgICAgICBjb21wZWxldGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBteS5uYXZpZ2F0ZUJhY2soKTtcbiAgfSxcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFdBQ29tcG9uZW50ID0gcmVxdWlyZSgnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvd2Fjb21wb25lbnQuanMnKTtcbkNvbXBvbmVudCA9IFdBQ29tcG9uZW50KENvbXBvbmVudCk7XG5cblxudmFyIERFRkFVTFRfQ09MT1IgPSAnI2ZmZic7XG52YXIgREVGQVVMVF9CQUNLR1JPVU5EX0NPTE9SID0gJyNmNDQnO1xudmFyIERFRkFVTFRfRk9OVF9TSVpFID0gMTA7XG52YXIgREVGQVVMVF9CT1hfU0hBRE9XID0gJzAgMCAwIDJweCAjZmZmJztcblxuQ29tcG9uZW50KHtcbiAgbWV0aG9kczoge1xuICAgIHROIChlKSB7XG4gICAgICBjb25zb2xlLmxvZygnMTIzJyk7XG4gICAgICB0aGlzLnByb3BzLm9uVE4oJzQ1NicpXG4gICAgfSxcbiAgfSxcbiAgYXR0YWNoZWQgKCkge1xuICAgIG15LiR3YSA9IDFcbiAgICBjb25zb2xlLmxvZygneHh4eHh4eHh4eCcsIHRoaXMpXG4gIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsdWU6IERFRkFVTFRfQ09MT1JcbiAgICB9LFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsdWU6IERFRkFVTFRfQkFDS0dST1VORF9DT0xPUlxuICAgIH0sXG4gICAgZm9udFNpemU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHZhbHVlOiBERUZBVUxUX0ZPTlRfU0laRVxuICAgIH0sXG4gICAgYm94U2hhZG93OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWx1ZTogREVGQVVMVF9CT1hfU0hBRE9XXG4gICAgfSxcbiAgICBvblROICh4KSB7XG4gICAgICBjb25zb2xlLmxvZyh4LCB0aGlzLCB0aGlzLnRyaWdnZXJFdmVudClcbiAgICB9XG4gIH1cbn0pOyIsIid1c2Ugc3RyaWN0JztcbnZhciBXQUNvbXBvbmVudCA9IHJlcXVpcmUoJy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3dhY29tcG9uZW50LmpzJyk7XG5Db21wb25lbnQgPSBXQUNvbXBvbmVudChDb21wb25lbnQpO1xuXG5cbkNvbXBvbmVudCh7XG4gIHByb3BlcnRpZXM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWx1ZTogJ2NpcmNsZSdcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgICR3YUNoaWxkRGlkTW91bmQ6IHtcbiAgICAgIHZhbHVlOiAoKSA9PiB7fSxcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBfZGlkTW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnNvbGUubG9nKDIpXG4gICAgfSxcbiAgfSxcbiAgYXR0YWNoZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zb2xlLmxvZygneHh4eCcsIHRoaXMsIG15LiR3YSlcbiAgfVxufSk7IiwiXG4vKiBnbG9iYWwgZ2V0Q3VycmVudFBhZ2VzLFBhZ2UsbXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG52YXIgd3ggPSBteVxuY29uc3QgRHdVdGlscyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2R3JykuRHdVdGlsc1xuLy8gdmFyIGFwcENvbmZpZyA9IHJlcXVpcmUoJy4uLy4uL3V0aWxzL2NvbmZpZycpXG5sZXQgZGVidWdDb3VudGVyID0gMFxuXG5QYWdlKHtcbiAgZGF0YToge1xuICAgIGlzTG9naW46IGZhbHNlLFxuICAgIHByZXZpb3VzRHdIcmVmOiBudWxsLFxuICAgIHByZXZpb3VzUXJjb2RlOiBudWxsXG4gIH0sXG5cbiAgb25Mb2FkIChvcHRpb25zKSB7XG4gICAgLy9cbiAgfSxcblxuICBvblNob3cgKCkge1xuICAgIHRoaXMuZ2V0UHJldmlvdXNRcmNvZGUoKVxuICB9LFxuXG4gIGdldFByZXZpb3VzUXJjb2RlICgpIHtcbiAgICBjb25zdCBwYWdlcyA9IGdldEN1cnJlbnRQYWdlcygpXG4gICAgaWYgKHBhZ2VzLmxlbmd0aCA+PSAyKSB7XG4gICAgICBjb25zdCBwYWdlID0gcGFnZXMuc2xpY2UoLTIsIC0xKVswXVxuICAgICAgY29uc3QgcGF0aCA9IHBhZ2Uucm91dGVcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHBhZ2UuZGF0YS5xdWVyeSB8fCB7fVxuXG4gICAgICBjb25zdCBkd2hyZWZQYXRoID0gcGF0aC5zcGxpdCgnLycpLnNsaWNlKC0yLCAtMSlbMF1cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoaSA9PiBpICsgJz0nICsgcGFyYW1zW2ldKS5qb2luKCcmJylcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHF1ZXJ5ID8gKCc/JyArIHF1ZXJ5KSA6ICcnXG4gICAgICBjb25zdCBkd2hyZWYgPSBkd2hyZWZQYXRoICsgc2VhcmNoXG5cbiAgICAgIHRoaXMuc2V0RGF0YSh7XG4gICAgICAgIHByZXZpb3VzRHdIcmVmOiBkd2hyZWZcbiAgICAgIH0pXG4gICAgICBEd1V0aWxzLmZldGNoKCdnZXQvZHdhcHAvY3JlYXRlX2R3YXBwX3FyY29kZScsIHsgZHdocmVmIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVzcG9uc2UnLCByZXNwb25zZSlcbiAgICAgICAgY29uc3QgeyBkYXRhOiB7IHN0YXR1cywgb2JqZWN0IH0gfSA9IHJlc3BvbnNlXG4gICAgICAgIGlmIChzdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgIGNvbnN0IHsgcXJjb2RlIH0gPSBvYmplY3RcbiAgICAgICAgICB0aGlzLnNldERhdGEoe1xuICAgICAgICAgICAgcHJldmlvdXNRcmNvZGU6IER3VXRpbHMuZmlsdGVycy5xaW5pdShxcmNvZGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgcHJldmlld1FyY29kZSAoKSB7XG4gICAgd3gucHJldmlld0ltYWdlKHtcbiAgICAgIGN1cnJlbnQ6IHRoaXMuZGF0YS5wcmV2aW91c1FyY29kZSxcbiAgICAgIHVybHM6IFt0aGlzLmRhdGEucHJldmlvdXNRcmNvZGVdXG4gICAgfSlcbiAgfSxcblxuICBzZXRFbmFibGVEZWJ1ZyAoKSB7XG4gICAgd3guc2V0RW5hYmxlRGVidWcoe1xuICAgICAgZW5hYmxlRGVidWc6IEJvb2xlYW4oKytkZWJ1Z0NvdW50ZXIgJSAyKVxuICAgIH0pXG4gIH0sXG5cbiAgZ29CYWNrICgpIHtcbiAgICB3eC5uYXZpZ2F0ZUJhY2soKVxuICB9LFxuXG4gIGdvQmFja0hvbWUgKCkge1xuICAgIHd4LnN3aXRjaFRhYih7dXJsOiAnLi4vZGVmYXVsdC1ob21lL2luZGV4J30pXG4gIH1cblxufSlcbiIsImNvbnN0IGFwcCA9IGdldEFwcCgpO1xuXG5QYWdlKHtcbiAgZGF0YToge30sXG5cbiAgb25Mb2FkKCkge1xuICAgIGFwcC5nZXRVc2VySW5mbygpLnRoZW4oXG4gICAgICB1c2VyID0+IHtcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcbiAgICAgICAgICB1c2VyLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIOiOt+WPlueUqOaIt+S/oeaBr+Wksei0pVxuICAgICAgfVxuICAgICk7XG4gIH0sXG5cbiAgb25TaG93KCkge1xuICAgIHRoaXMuc2V0RGF0YSh7IHRvZG9zOiBhcHAudG9kb3MgfSk7XG4gIH0sXG5cbiAgb25Ub2RvQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgY2hlY2tlZFRvZG9zID0gZS5kZXRhaWwudmFsdWU7XG4gICAgYXBwLnRvZG9zID0gYXBwLnRvZG9zLm1hcCh0b2RvID0+ICh7XG4gICAgICAuLi50b2RvLFxuICAgICAgY29tcGxldGVkOiBjaGVja2VkVG9kb3MuaW5kZXhPZih0b2RvLnRleHQpID4gLTEsXG4gICAgfSkpO1xuICAgIHRoaXMuc2V0RGF0YSh7IHRvZG9zOiBhcHAudG9kb3MgfSk7XG4gIH0sXG5cbiAgb25UTiAoeCkge1xuICAgIGNvbnNvbGUubG9nKHgsIHgpXG4gIH0sXG5cbiAgYWRkVG9kbygpIHtcbiAgICBteS5uYXZpZ2F0ZVRvKHsgdXJsOiAnLi4vYWRkLXRvZG8vYWRkLXRvZG8nIH0pO1xuICB9LFxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJhcGlVcmxcIjogXCJodHRwOi8vdGVzdGFwaS5kZW1sdXRpb24uY29tXCIsXG4gIFwiYXBwXCI6IHtcbiAgICBcInBhZ2VzXCI6IFtcbiAgICAgIFwicGFnZXMvYXBwX2R3c3RvcmUtY2FyZC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9kZWZhdWx0LWhvbWUvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvYWNjb3VudC1sb2dpbi9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9jaGFyZ2UvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvcGx1Z2luLWZ4Zm9udC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9wbHVnaW4tcmVkaXJlY3QvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZGVmYXVsdC1pZF81OWZmMDlmMmU0OWQ0MGI0ZDBmYWFjY2EvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1hYm91dC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWNvbnRhY3QvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1zZWFyY2gvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvbGlzdC1wcm9kdWN0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2RldGFpbC1wcm9kdWN0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL21hbGwtY2FydC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9tYWxsLWNoZWNrb3V0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2xpc3QtbmV3cy9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9kZXRhaWwtbmV3cy9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9saXN0LXNlcnZpY2UvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZGV0YWlsLXNlcnZpY2UvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvbGlzdC1hY3Rpdml0eS9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9kZXRhaWwtYWN0aXZpdHkvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvbGlzdC1ldmVudC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9kZXRhaWwtZXZlbnQvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvbGlzdC1wb3N0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2RldGFpbC1wb3N0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2xpc3QtaW1hZ2VzZXQvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZGV0YWlsLWltYWdlc2V0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZvcnVtLWluZGV4L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZvcnVtLWxpc3QvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZm9ydW0tZGV0YWlsL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZvcnVtLWZvcm0vaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZm9ydW0tcHJvZmlsZS9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWhvbWUvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1hY2NvdW50L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtbm90aWNlL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtaW52aXRhdGlvbi9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLW1lbWJlci9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWNyZWRpdHMvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1naWZ0L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtZm9ybS9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWNvdXBvbmNhcmQvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1jb3Vwb24vaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1nYW1laW5mby9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLW9yZGVyL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtZmF2b3JpdGVzL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtcmV2aWV3L2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtYWRkcmVzc2Jvb2svaW5kZXhcIixcbiAgICAgIFwicGFnZXMvZmVhdHVyZS1wc2hvcC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLXNlY3Rpb25fcG9zdC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLXNlY3Rpb25fZmF2b3JpdGVzL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtc2VjdGlvbl9yZXBseS9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWZvcnVtX3RvcGljL2luZGV4XCIsXG4gICAgICBcInBhZ2VzL2ZlYXR1cmUtZm9ydW1fcG9zdC9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWZvcnVtX2Zhdm9yaXRlcy9pbmRleFwiLFxuICAgICAgXCJwYWdlcy9mZWF0dXJlLWZvcnVtX2NyZWRpdHMvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvYXBwX2R3c3RvcmUtZ3JvdXAvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvYXBwX2R3c3RvcmUtcGlwZWxpbmUvaW5kZXhcIixcbiAgICAgIFwicGFnZXMvYXBwX2R3c3RvcmUtbXkvaW5kZXhcIlxuICAgIF0sXG4gICAgXCJ0YWJCYXJcIjoge1xuICAgICAgXCJiYWNrZ3JvdW5kQ29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcImJvcmRlclN0eWxlXCI6IFwiYmxhY2tcIixcbiAgICAgIFwiY29sb3JcIjogXCIjNjE2MTYxXCIsXG4gICAgICBcImxpc3RcIjogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJpY29uUGF0aFwiOiBcImltYWdlcy9pY29uLTAucG5nXCIsXG4gICAgICAgICAgXCJwYWdlUGF0aFwiOiBcInBhZ2VzL2FwcF9kd3N0b3JlLWNhcmQvaW5kZXhcIixcbiAgICAgICAgICBcInNlbGVjdGVkSWNvblBhdGhcIjogXCJpbWFnZXMvaWNvbi1zZWxlY3RlZC0wLnBuZ1wiLFxuICAgICAgICAgIFwidGV4dFwiOiBcIuWQjeeJh1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImljb25QYXRoXCI6IFwiaW1hZ2VzL2ljb24tMS5wbmdcIixcbiAgICAgICAgICBcInBhZ2VQYXRoXCI6IFwicGFnZXMvYXBwX2R3c3RvcmUtZ3JvdXAvaW5kZXhcIixcbiAgICAgICAgICBcInNlbGVjdGVkSWNvblBhdGhcIjogXCJpbWFnZXMvaWNvbi1zZWxlY3RlZC0xLnBuZ1wiLFxuICAgICAgICAgIFwidGV4dFwiOiBcIue+pOaOqOW5v1wiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImljb25QYXRoXCI6IFwiaW1hZ2VzL2ljb24tMi5wbmdcIixcbiAgICAgICAgICBcInBhZ2VQYXRoXCI6IFwicGFnZXMvYXBwX2R3c3RvcmUtcGlwZWxpbmUvaW5kZXhcIixcbiAgICAgICAgICBcInNlbGVjdGVkSWNvblBhdGhcIjogXCJpbWFnZXMvaWNvbi1zZWxlY3RlZC0yLnBuZ1wiLFxuICAgICAgICAgIFwidGV4dFwiOiBcIuS6uuiEiVwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImljb25QYXRoXCI6IFwiaW1hZ2VzL2ljb24tMy5wbmdcIixcbiAgICAgICAgICBcInBhZ2VQYXRoXCI6IFwicGFnZXMvYXBwX2R3c3RvcmUtbXkvaW5kZXhcIixcbiAgICAgICAgICBcInNlbGVjdGVkSWNvblBhdGhcIjogXCJpbWFnZXMvaWNvbi1zZWxlY3RlZC0zLnBuZ1wiLFxuICAgICAgICAgIFwidGV4dFwiOiBcIuaIkVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcInBvc2l0aW9uXCI6IFwiYm90dG9tXCIsXG4gICAgICBcInNlbGVjdGVkQ29sb3JcIjogXCIjMmIyYjJiXCJcbiAgICB9LFxuICAgIFwid2luZG93XCI6IHtcbiAgICAgIFwiYmFja2dyb3VuZFRleHRTdHlsZVwiOiBcImxpZ2h0XCIsXG4gICAgICBcIm5hdmlnYXRpb25CYXJCYWNrZ3JvdW5kQ29sb3JcIjogXCIjZmZmXCIsXG4gICAgICBcIm5hdmlnYXRpb25CYXJUZXh0U3R5bGVcIjogXCJibGFja1wiLFxuICAgICAgXCJuYXZpZ2F0aW9uQmFyVGl0bGVUZXh0XCI6IFwiV2VDaGF0XCJcbiAgICB9XG4gIH0sXG4gIFwiYnVpbGREYXRlXCI6IG51bGwsXG4gIFwiY29tcGFueVwiOiB7XG4gICAgXCJhZ2VudF9uYW1lXCI6IFwi5LiK5rW35LiA5b2T572R57uc56eR5oqA5pyJ6ZmQ5YWs5Y+4XCIsXG4gICAgXCJhcHBfdmVyc2lvblwiOiBcIjIwMTgtMDctMTAgMTM6MTlcIixcbiAgICBcImlkXCI6IDUwMCxcbiAgICBcIm5hbWVcIjogXCLkuIrmtbfmsYLnnJ/kuJPkv67lrabmoKFcIixcbiAgICBcIm5pY2tuYW1lXCI6IFwicWl1emhlblwiXG4gIH0sXG4gIFwiZGVidWdcIjogdHJ1ZSxcbiAgXCJwYWdlXCI6IHtcbiAgICBcImlkXCI6IDI2NzgsXG4gICAgXCJuYW1lXCI6IFwiZHdzdG9yZVwiXG4gIH1cbn0iLCJcbi8qIGdsb2JhbCBteSxnZXRDdXJyZW50UGFnZXMsc3dhbiAqL1xudmFyIHd4ID0gbXlcbnZhciBXeFBhcnNlID0ge31cblxudmFyIGNvbmZpZyA9IHJlcXVpcmUoJy4vY29uZmlnJylcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL2R3X3NoYXJlZCcpXG4vLyB2YXIgV3hQYXJzZSA9IHJlcXVpcmUoJy4uL3d4UGFyc2Uvd3hQYXJzZS5qcycpXG52YXIgaXNTd2FuID0gdHlwZW9mIHN3YW4gPT09ICdvYmplY3QnXG52YXIgaXNNeSA9IHR5cGVvZiBteSA9PT0gJ29iamVjdCdcblxubW9kdWxlLmV4cG9ydHMgPSBzaGFyZWQuZGVmYXVsdC5idWlsZER3KHtcbiAgY29uZmlnOiBjb25maWcsXG4gIFd4UGFyc2U6IFd4UGFyc2UsXG4gIHd4OiBpc1N3YW4gPyBzd2FuIDogd3gsXG4gIGlzU3dhbixcbiAgaXNNeSxcbiAgZ2V0Q3VycmVudFBhZ2VzOiBnZXRDdXJyZW50UGFnZXNcbn0pXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG52YXIgd2luZG93ID0ge1xuICBBcnJheTogQXJyYXksXG4gIFNldDogU2V0LFxuICBQcm9taXNlOiBQcm9taXNlLFxuICBEYXRlOiBEYXRlLFxuICBFcnJvcjogRXJyb3IsXG4gIEZ1bmN0aW9uOiBGdW5jdGlvbixcbiAgTWF0aDogTWF0aCxcbiAgT2JqZWN0OiBPYmplY3QsXG4gIFJlZ0V4cDogUmVnRXhwLFxuICBTdHJpbmc6IFN0cmluZyxcbiAgVHlwZUVycm9yOiBUeXBlRXJyb3IsXG4gIHNldFRpbWVvdXQ6IHNldFRpbWVvdXQsXG4gIGNsZWFyVGltZW91dDogY2xlYXJUaW1lb3V0LFxuICBzZXRJbnRlcnZhbDogc2V0SW50ZXJ2YWwsXG4gIGNsZWFySW50ZXJ2YWw6IGNsZWFySW50ZXJ2YWwsXG4gIHBhcnNlSW50OiBwYXJzZUludCxcbiAgcGFyc2VGbG9hdDogcGFyc2VGbG9hdCxcbiAgTnVtYmVyOiBOdW1iZXJcbn07XG5tb2R1bGUuZXhwb3J0cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBuKHIpe2lmKGVbcl0pcmV0dXJuIGVbcl0uZXhwb3J0czt2YXIgaT1lW3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gdFtyXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxuKSxpLmw9ITAsaS5leHBvcnRzfXZhciBlPXt9O3JldHVybiBuLm09dCxuLmM9ZSxuLmQ9ZnVuY3Rpb24odCxlLHIpe24ubyh0LGUpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxuLm49ZnVuY3Rpb24odCl7dmFyIGU9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIG4uZChlLFwiYVwiLGUpLGV9LG4ubz1mdW5jdGlvbih0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKX0sbi5wPVwiL1VzZXJzL3Jpc2VudC9Qcm9qZWN0L2JhemFhcjQvZHN0b3JlL2Rpc3RcIixuKG4ucz0yMTMpfShbZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksaT1lKDM0KSxvPWUoMTYpLHU9ZSgxNyksYT1lKDIyKSxjPVwicHJvdG90eXBlXCIscz1mdW5jdGlvbih0LG4sZSl7dmFyIGYsbCxoLHAsdj10JnMuRixkPXQmcy5HLHk9dCZzLlMsZz10JnMuUCxtPXQmcy5CLF89ZD9yOnk/cltuXXx8KHJbbl09e30pOihyW25dfHx7fSlbY10sdz1kP2k6aVtuXXx8KGlbbl09e30pLGI9d1tjXXx8KHdbY109e30pO2QmJihlPW4pO2ZvcihmIGluIGUpbD0hdiYmXyYmdm9pZCAwIT09X1tmXSxoPShsP186ZSlbZl0scD1tJiZsP2EoaCxyKTpnJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBoP2EoRnVuY3Rpb24uY2FsbCxoKTpoLF8mJnUoXyxmLGgsdCZzLlUpLHdbZl0hPWgmJm8odyxmLHApLGcmJmJbZl0hPWgmJihiW2ZdPWgpfTtyLmNvcmU9aSxzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHMuVT02NCxzLlI9MTI4LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXIodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPWUpfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDc1KShcIndrc1wiKSxpPWUoNDIpLG89ZSgyKS5TeW1ib2wsdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBvOyh0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHJbdF18fChyW3RdPXUmJm9bdF18fCh1P286aSkoXCJTeW1ib2wuXCIrdCkpfSkuc3RvcmU9cn0sZnVuY3Rpb24odCxuKXt2YXIgZT10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjUuM1wifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPWUpfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPSFlKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxKSxpPWUoMTU0KSxvPWUoMjcpLHU9T2JqZWN0LmRlZmluZVByb3BlcnR5O24uZj1lKDcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4sZSl7aWYocih0KSxuPW8obiwhMCkscihlKSxpKXRyeXtyZXR1cm4gdSh0LG4sZSl9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiBlfHxcInNldFwiaW4gZSl0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gZSYmKHRbbl09ZS52YWx1ZSksdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxpPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD4wP2kocih0KSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0KHIodCkpfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNCksaT1lKDYpLG89ZSgzNyksdT1lKDQwKSxhPVwicHJvdG90eXBlXCIsYz1mdW5jdGlvbih0LG4sZSl7dmFyIHMsZixsLGg9dCZjLkYscD10JmMuRyx2PXQmYy5TLGQ9dCZjLlAseT10JmMuQixnPXQmYy5XLG09cD9pOmlbbl18fChpW25dPXt9KSxfPW1bYV0sdz1wP3I6dj9yW25dOihyW25dfHx7fSlbYV07cCYmKGU9bik7Zm9yKHMgaW4gZSkoZj0haCYmdyYmdm9pZCAwIT09d1tzXSkmJnMgaW4gbXx8KGw9Zj93W3NdOmVbc10sbVtzXT1wJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB3W3NdP2Vbc106eSYmZj9vKGwscik6ZyYmd1tzXT09bD9mdW5jdGlvbih0KXt2YXIgbj1mdW5jdGlvbihuLGUscil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLGUpfXJldHVybiBuZXcgdChuLGUscil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gblthXT10W2FdLG59KGwpOmQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGw/byhGdW5jdGlvbi5jYWxsLGwpOmwsZCYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVtzXT1sLHQmYy5SJiZfJiYhX1tzXSYmdShfLHMsbCkpKX07Yy5GPTEsYy5HPTIsYy5TPTQsYy5QPTgsYy5CPTE2LGMuVz0zMixjLlU9NjQsYy5SPTEyOCx0LmV4cG9ydHM9Y30sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTM1KShcIndrc1wiKSxpPWUoOTMpLG89ZSgxNCkuU3ltYm9sLHU9XCJmdW5jdGlvblwiPT10eXBlb2YgbzsodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHwoclt0XT11JiZvW3RdfHwodT9vOmkpKFwiU3ltYm9sLlwiK3QpKX0pLnN0b3JlPXJ9LGZ1bmN0aW9uKHQsbil7dmFyIGU9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9ZSl9LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOCksaT1lKDQxKTt0LmV4cG9ydHM9ZSg3KT9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZih0LG4saSgxLGUpKX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0W25dPWUsdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLGk9ZSgxNiksbz1lKDE1KSx1PWUoNDIpKFwic3JjXCIpLGE9XCJ0b1N0cmluZ1wiLGM9RnVuY3Rpb25bYV0scz0oXCJcIitjKS5zcGxpdChhKTtlKDM0KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsYSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgZTtjJiYobyhlLFwibmFtZVwiKXx8aShlLFwibmFtZVwiLG4pKSx0W25dIT09ZSYmKGMmJihvKGUsdSl8fGkoZSx1LHRbbl0/XCJcIit0W25dOnMuam9pbihTdHJpbmcobikpKSksdD09PXI/dFtuXT1lOmE/dFtuXT90W25dPWU6aSh0LG4sZSk6KGRlbGV0ZSB0W25dLGkodCxuLGUpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsYSxmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbdV18fGMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMyksbz1lKDI4KSx1PS9cIi9nLGE9ZnVuY3Rpb24odCxuLGUscil7dmFyIGk9U3RyaW5nKG8odCkpLGE9XCI8XCIrbjtyZXR1cm5cIlwiIT09ZSYmKGErPVwiIFwiK2UrJz1cIicrU3RyaW5nKHIpLnJlcGxhY2UodSxcIiZxdW90O1wiKSsnXCInKSxhK1wiPlwiK2krXCI8L1wiK24rXCI+XCJ9O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlPXt9O2VbdF09bihhKSxyKHIuUCtyLkYqaShmdW5jdGlvbigpe3ZhciBuPVwiXCJbdF0oJ1wiJyk7cmV0dXJuIG4hPT1uLnRvTG93ZXJDYXNlKCl8fG4uc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSxcIlN0cmluZ1wiLGUpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjMpLGk9ZSgyOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByKGkodCkpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjQpLGk9ZSg0MSksbz1lKDE5KSx1PWUoMjcpLGE9ZSgxNSksYz1lKDE1NCkscz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO24uZj1lKDcpP3M6ZnVuY3Rpb24odCxuKXtpZih0PW8odCksbj11KG4sITApLGMpdHJ5e3JldHVybiBzKHQsbil9Y2F0Y2godCl7fWlmKGEodCxuKSlyZXR1cm4gaSghci5mLmNhbGwodCxuKSx0W25dKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE1KSxpPWUoMTApLG89ZSgxMDMpKFwiSUVfUFJPVE9cIiksdT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PWkodCkscih0LG8pP3Rbb106XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD91Om51bGx9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXtpZihyKHQpLHZvaWQgMD09PW4pcmV0dXJuIHQ7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbChuLGUpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIHQuY2FsbChuLGUscil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxyLGkpe3JldHVybiB0LmNhbGwobixlLHIsaSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KG4sYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LG4pe3ZhciBlPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHQpLnNsaWNlKDgsLTEpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuISF0JiZyKGZ1bmN0aW9uKCl7bj90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMiksaT1lKDE4OSksbz1lKDEzMiksdT1PYmplY3QuZGVmaW5lUHJvcGVydHk7bi5mPWUoMzMpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4sZSl7aWYocih0KSxuPW8obiwhMCkscihlKSxpKXRyeXtyZXR1cm4gdSh0LG4sZSl9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiBlfHxcInNldFwiaW4gZSl0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gZSYmKHRbbl09ZS52YWx1ZSksdH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KSlyZXR1cm4gdDt2YXIgZSxpO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKGk9ZS5jYWxsKHQpKSlyZXR1cm4gaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudmFsdWVPZikmJiFyKGk9ZS5jYWxsKHQpKSlyZXR1cm4gaTtpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnRvU3RyaW5nKSYmIXIoaT1lLmNhbGwodCkpKXJldHVybiBpO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/cjplKSh0KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgzNCksbz1lKDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlPShpLk9iamVjdHx8e30pW3RdfHxPYmplY3RbdF0sdT17fTt1W3RdPW4oZSkscihyLlMrci5GKm8oZnVuY3Rpb24oKXtlKDEpfSksXCJPYmplY3RcIix1KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIyKSxpPWUoNjMpLG89ZSgxMCksdT1lKDkpLGE9ZSgxMjApO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlPTE9PXQsYz0yPT10LHM9Mz09dCxmPTQ9PXQsbD02PT10LGg9NT09dHx8bCxwPW58fGE7cmV0dXJuIGZ1bmN0aW9uKG4sYSx2KXtmb3IodmFyIGQseSxnPW8obiksbT1pKGcpLF89cihhLHYsMyksdz11KG0ubGVuZ3RoKSxiPTAseD1lP3Aobix3KTpjP3AobiwwKTp2b2lkIDA7dz5iO2IrKylpZigoaHx8YiBpbiBtKSYmKGQ9bVtiXSx5PV8oZCxiLGcpLHQpKWlmKGUpeFtiXT15O2Vsc2UgaWYoeSlzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZDtjYXNlIDY6cmV0dXJuIGI7Y2FzZSAyOngucHVzaChkKX1lbHNlIGlmKGYpcmV0dXJuITE7cmV0dXJuIGw/LTE6c3x8Zj9mOnh9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighcih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoNTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LG4pe3ZhciBlPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNS4zXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9ZSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtpZihlKDcpKXt2YXIgcj1lKDQzKSxpPWUoMiksbz1lKDMpLHU9ZSgwKSxhPWUoODUpLGM9ZSgxMjYpLHM9ZSgyMiksZj1lKDQ5KSxsPWUoNDEpLGg9ZSgxNikscD1lKDUxKSx2PWUoMjkpLGQ9ZSg5KSx5PWUoMTgwKSxnPWUoNDUpLG09ZSgyNyksXz1lKDE1KSx3PWUoNjUpLGI9ZSg0KSx4PWUoMTApLFM9ZSgxMTcpLE89ZSg0NiksUD1lKDIxKSxrPWUoNDcpLmYsRT1lKDExOSksaj1lKDQyKSxBPWUoNSksTT1lKDMxKSxUPWUoNzYpLEY9ZSg4MyksTD1lKDEyMiksST1lKDU3KSxOPWUoODApLEQ9ZSg0OCksUj1lKDEyMSksQz1lKDE3MCksVT1lKDgpLEc9ZSgyMCksVz1VLmYsVj1HLmYsQj1pLlJhbmdlRXJyb3IscT1pLlR5cGVFcnJvcix6PWkuVWludDhBcnJheSxIPVwiQXJyYXlCdWZmZXJcIixKPVwiU2hhcmVkXCIrSCxLPVwiQllURVNfUEVSX0VMRU1FTlRcIixZPVwicHJvdG90eXBlXCIsJD1BcnJheVtZXSxRPWMuQXJyYXlCdWZmZXIsWD1jLkRhdGFWaWV3LFo9TSgwKSx0dD1NKDIpLG50PU0oMyksZXQ9TSg0KSxydD1NKDUpLGl0PU0oNiksb3Q9VCghMCksdXQ9VCghMSksYXQ9TC52YWx1ZXMsY3Q9TC5rZXlzLHN0PUwuZW50cmllcyxmdD0kLmxhc3RJbmRleE9mLGx0PSQucmVkdWNlLGh0PSQucmVkdWNlUmlnaHQscHQ9JC5qb2luLHZ0PSQuc29ydCxkdD0kLnNsaWNlLHl0PSQudG9TdHJpbmcsZ3Q9JC50b0xvY2FsZVN0cmluZyxtdD1BKFwiaXRlcmF0b3JcIiksX3Q9QShcInRvU3RyaW5nVGFnXCIpLHd0PWooXCJ0eXBlZF9jb25zdHJ1Y3RvclwiKSxidD1qKFwiZGVmX2NvbnN0cnVjdG9yXCIpLHh0PWEuQ09OU1RSLFN0PWEuVFlQRUQsT3Q9YS5WSUVXLFB0PVwiV3JvbmcgbGVuZ3RoIVwiLGt0PU0oMSxmdW5jdGlvbih0LG4pe3JldHVybiBUdChGKHQsdFtidF0pLG4pfSksRXQ9byhmdW5jdGlvbigpe3JldHVybiAxPT09bmV3IHoobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXX0pLGp0PSEheiYmISF6W1ldLnNldCYmbyhmdW5jdGlvbigpe25ldyB6KDEpLnNldCh7fSl9KSxBdD1mdW5jdGlvbih0LG4pe3ZhciBlPXYodCk7aWYoZTwwfHxlJW4pdGhyb3cgQihcIldyb25nIG9mZnNldCFcIik7cmV0dXJuIGV9LE10PWZ1bmN0aW9uKHQpe2lmKGIodCkmJlN0IGluIHQpcmV0dXJuIHQ7dGhyb3cgcSh0K1wiIGlzIG5vdCBhIHR5cGVkIGFycmF5IVwiKX0sVHQ9ZnVuY3Rpb24odCxuKXtpZighKGIodCkmJnd0IGluIHQpKXRocm93IHEoXCJJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciFcIik7cmV0dXJuIG5ldyB0KG4pfSxGdD1mdW5jdGlvbih0LG4pe3JldHVybiBMdChGKHQsdFtidF0pLG4pfSxMdD1mdW5jdGlvbih0LG4pe2Zvcih2YXIgZT0wLHI9bi5sZW5ndGgsaT1UdCh0LHIpO3I+ZTspaVtlXT1uW2UrK107cmV0dXJuIGl9LEl0PWZ1bmN0aW9uKHQsbixlKXtXKHQsbix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RbZV19fSl9LE50PWZ1bmN0aW9uKHQpe3ZhciBuLGUscixpLG8sdSxhPXgodCksYz1hcmd1bWVudHMubGVuZ3RoLGY9Yz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbD12b2lkIDAhPT1mLGg9RShhKTtpZih2b2lkIDAhPWgmJiFTKGgpKXtmb3IodT1oLmNhbGwoYSkscj1bXSxuPTA7IShvPXUubmV4dCgpKS5kb25lO24rKylyLnB1c2goby52YWx1ZSk7YT1yfWZvcihsJiZjPjImJihmPXMoZixhcmd1bWVudHNbMl0sMikpLG49MCxlPWQoYS5sZW5ndGgpLGk9VHQodGhpcyxlKTtlPm47bisrKWlbbl09bD9mKGFbbl0sbik6YVtuXTtyZXR1cm4gaX0sRHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGgsZT1UdCh0aGlzLG4pO24+dDspZVt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gZX0sUnQ9ISF6JiZvKGZ1bmN0aW9uKCl7Z3QuY2FsbChuZXcgeigxKSl9KSxDdD1mdW5jdGlvbigpe3JldHVybiBndC5hcHBseShSdD9kdC5jYWxsKE10KHRoaXMpKTpNdCh0aGlzKSxhcmd1bWVudHMpfSxVdD17Y29weVdpdGhpbjpmdW5jdGlvbih0LG4pe3JldHVybiBDLmNhbGwoTXQodGhpcyksdCxuLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIGV0KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaWxsOmZ1bmN0aW9uKHQpe3JldHVybiBSLmFwcGx5KE10KHRoaXMpLGFyZ3VtZW50cyl9LGZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gRnQodGhpcyx0dChNdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHJ0KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGl0KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe1ooTXQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIHV0KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gb3QoTXQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGpvaW46ZnVuY3Rpb24odCl7cmV0dXJuIHB0LmFwcGx5KE10KHRoaXMpLGFyZ3VtZW50cyl9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBmdC5hcHBseShNdCh0aGlzKSxhcmd1bWVudHMpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGt0KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIGx0LmFwcGx5KE10KHRoaXMpLGFyZ3VtZW50cyl9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBodC5hcHBseShNdCh0aGlzKSxhcmd1bWVudHMpfSxyZXZlcnNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LG49dGhpcyxlPU10KG4pLmxlbmd0aCxyPU1hdGguZmxvb3IoZS8yKSxpPTA7aTxyOyl0PW5baV0sbltpKytdPW5bLS1lXSxuW2VdPXQ7cmV0dXJuIG59LHNvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIG50KE10KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2dC5jYWxsKE10KHRoaXMpLHQpfSxzdWJhcnJheTpmdW5jdGlvbih0LG4pe3ZhciBlPU10KHRoaXMpLHI9ZS5sZW5ndGgsaT1nKHQscik7cmV0dXJuIG5ldyhGKGUsZVtidF0pKShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQraSplLkJZVEVTX1BFUl9FTEVNRU5ULGQoKHZvaWQgMD09PW4/cjpnKG4scikpLWkpKX19LEd0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIEZ0KHRoaXMsZHQuY2FsbChNdCh0aGlzKSx0LG4pKX0sV3Q9ZnVuY3Rpb24odCl7TXQodGhpcyk7dmFyIG49QXQoYXJndW1lbnRzWzFdLDEpLGU9dGhpcy5sZW5ndGgscj14KHQpLGk9ZChyLmxlbmd0aCksbz0wO2lmKGkrbj5lKXRocm93IEIoUHQpO2Zvcig7bzxpOyl0aGlzW24rb109cltvKytdfSxWdD17ZW50cmllczpmdW5jdGlvbigpe3JldHVybiBzdC5jYWxsKE10KHRoaXMpKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBjdC5jYWxsKE10KHRoaXMpKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIGF0LmNhbGwoTXQodGhpcykpfX0sQnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gYih0KSYmdFtTdF0mJlwic3ltYm9sXCIhPXR5cGVvZiBuJiZuIGluIHQmJlN0cmluZygrbik9PVN0cmluZyhuKX0scXQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gQnQodCxuPW0obiwhMCkpP2woMix0W25dKTpWKHQsbil9LHp0PWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4hKEJ0KHQsbj1tKG4sITApKSYmYihlKSYmXyhlLFwidmFsdWVcIikpfHxfKGUsXCJnZXRcIil8fF8oZSxcInNldFwiKXx8ZS5jb25maWd1cmFibGV8fF8oZSxcIndyaXRhYmxlXCIpJiYhZS53cml0YWJsZXx8XyhlLFwiZW51bWVyYWJsZVwiKSYmIWUuZW51bWVyYWJsZT9XKHQsbixlKToodFtuXT1lLnZhbHVlLHQpfTt4dHx8KEcuZj1xdCxVLmY9enQpLHUodS5TK3UuRioheHQsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOnF0LGRlZmluZVByb3BlcnR5Onp0fSksbyhmdW5jdGlvbigpe3l0LmNhbGwoe30pfSkmJih5dD1ndD1mdW5jdGlvbigpe3JldHVybiBwdC5jYWxsKHRoaXMpfSk7dmFyIEh0PXAoe30sVXQpO3AoSHQsVnQpLGgoSHQsbXQsVnQudmFsdWVzKSxwKEh0LHtzbGljZTpHdCxzZXQ6V3QsY29uc3RydWN0b3I6ZnVuY3Rpb24oKXt9LHRvU3RyaW5nOnl0LHRvTG9jYWxlU3RyaW5nOkN0fSksSXQoSHQsXCJidWZmZXJcIixcImJcIiksSXQoSHQsXCJieXRlT2Zmc2V0XCIsXCJvXCIpLEl0KEh0LFwiYnl0ZUxlbmd0aFwiLFwibFwiKSxJdChIdCxcImxlbmd0aFwiLFwiZVwiKSxXKEh0LF90LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tTdF19fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGMpe2M9ISFjO3ZhciBzPXQrKGM/XCJDbGFtcGVkXCI6XCJcIikrXCJBcnJheVwiLGw9XCJnZXRcIit0LHA9XCJzZXRcIit0LHY9aVtzXSxnPXZ8fHt9LG09diYmUCh2KSxfPSF2fHwhYS5BQlYseD17fSxTPXYmJnZbWV0sRT1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Q7cmV0dXJuIHIudltsXShlKm4rci5vLEV0KX0saj1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5fZDtjJiYocj0ocj1NYXRoLnJvdW5kKHIpKTwwPzA6cj4yNTU/MjU1OjI1NSZyKSxpLnZbcF0oZSpuK2kubyxyLEV0KX0sQT1mdW5jdGlvbih0LG4pe1codCxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLG4pfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGoodGhpcyxuLHQpfSxlbnVtZXJhYmxlOiEwfSl9O18/KHY9ZShmdW5jdGlvbih0LGUscixpKXtmKHQsdixzLFwiX2RcIik7dmFyIG8sdSxhLGMsbD0wLHA9MDtpZihiKGUpKXtpZighKGUgaW5zdGFuY2VvZiBRfHwoYz13KGUpKT09SHx8Yz09SikpcmV0dXJuIFN0IGluIGU/THQodixlKTpOdC5jYWxsKHYsZSk7bz1lLHA9QXQocixuKTt2YXIgZz1lLmJ5dGVMZW5ndGg7aWYodm9pZCAwPT09aSl7aWYoZyVuKXRocm93IEIoUHQpO2lmKCh1PWctcCk8MCl0aHJvdyBCKFB0KX1lbHNlIGlmKCh1PWQoaSkqbikrcD5nKXRocm93IEIoUHQpO2E9dS9ufWVsc2UgYT15KGUpLHU9YSpuLG89bmV3IFEodSk7Zm9yKGgodCxcIl9kXCIse2I6byxvOnAsbDp1LGU6YSx2Om5ldyBYKG8pfSk7bDxhOylBKHQsbCsrKX0pLFM9dltZXT1PKEh0KSxoKFMsXCJjb25zdHJ1Y3RvclwiLHYpKTpvKGZ1bmN0aW9uKCl7digxKX0pJiZvKGZ1bmN0aW9uKCl7bmV3IHYoLTEpfSkmJk4oZnVuY3Rpb24odCl7bmV3IHYsbmV3IHYobnVsbCksbmV3IHYoMS41KSxuZXcgdih0KX0sITApfHwodj1lKGZ1bmN0aW9uKHQsZSxyLGkpe2YodCx2LHMpO3ZhciBvO3JldHVybiBiKGUpP2UgaW5zdGFuY2VvZiBRfHwobz13KGUpKT09SHx8bz09Sj92b2lkIDAhPT1pP25ldyBnKGUsQXQocixuKSxpKTp2b2lkIDAhPT1yP25ldyBnKGUsQXQocixuKSk6bmV3IGcoZSk6U3QgaW4gZT9MdCh2LGUpOk50LmNhbGwodixlKTpuZXcgZyh5KGUpKX0pLFoobSE9PUZ1bmN0aW9uLnByb3RvdHlwZT9rKGcpLmNvbmNhdChrKG0pKTprKGcpLGZ1bmN0aW9uKHQpe3QgaW4gdnx8aCh2LHQsZ1t0XSl9KSx2W1ldPVMscnx8KFMuY29uc3RydWN0b3I9dikpO3ZhciBNPVNbbXRdLFQ9ISFNJiYoXCJ2YWx1ZXNcIj09TS5uYW1lfHx2b2lkIDA9PU0ubmFtZSksRj1WdC52YWx1ZXM7aCh2LHd0LCEwKSxoKFMsU3QscyksaChTLE90LCEwKSxoKFMsYnQsdiksKGM/bmV3IHYoMSlbX3RdPT1zOl90IGluIFMpfHxXKFMsX3Qse2dldDpmdW5jdGlvbigpe3JldHVybiBzfX0pLHhbc109dix1KHUuRyt1LlcrdS5GKih2IT1nKSx4KSx1KHUuUyxzLHtCWVRFU19QRVJfRUxFTUVOVDpufSksdSh1LlMrdS5GKm8oZnVuY3Rpb24oKXtnLm9mLmNhbGwodiwxKX0pLHMse2Zyb206TnQsb2Y6RHR9KSxLIGluIFN8fGgoUyxLLG4pLHUodS5QLHMsVXQpLEQocyksdSh1LlArdS5GKmp0LHMse3NldDpXdH0pLHUodS5QK3UuRiohVCxzLFZ0KSxyfHxTLnRvU3RyaW5nPT15dHx8KFMudG9TdHJpbmc9eXQpLHUodS5QK3UuRipvKGZ1bmN0aW9uKCl7bmV3IHYoMSkuc2xpY2UoKX0pLHMse3NsaWNlOkd0fSksdSh1LlArdS5GKihvKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IHYoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KXx8IW8oZnVuY3Rpb24oKXtTLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpLHMse3RvTG9jYWxlU3RyaW5nOkN0fSksSVtzXT1UP006RixyfHxUfHxoKFMsbXQsRil9fWVsc2UgdC5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTc1KSxpPWUoMCksbz1lKDc1KShcIm1ldGFkYXRhXCIpLHU9by5zdG9yZXx8KG8uc3RvcmU9bmV3KGUoMTc4KSkpLGE9ZnVuY3Rpb24odCxuLGUpe3ZhciBpPXUuZ2V0KHQpO2lmKCFpKXtpZighZSlyZXR1cm47dS5zZXQodCxpPW5ldyByKX12YXIgbz1pLmdldChuKTtpZighbyl7aWYoIWUpcmV0dXJuO2kuc2V0KG4sbz1uZXcgcil9cmV0dXJuIG99LGM9ZnVuY3Rpb24odCxuLGUpe3ZhciByPWEobixlLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXModCl9LHM9ZnVuY3Rpb24odCxuLGUpe3ZhciByPWEobixlLCExKTtyZXR1cm4gdm9pZCAwPT09cj92b2lkIDA6ci5nZXQodCl9LGY9ZnVuY3Rpb24odCxuLGUscil7YShlLHIsITApLnNldCh0LG4pfSxsPWZ1bmN0aW9uKHQsbil7dmFyIGU9YSh0LG4sITEpLHI9W107cmV0dXJuIGUmJmUuZm9yRWFjaChmdW5jdGlvbih0LG4pe3IucHVzaChuKX0pLHJ9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fFwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSxwPWZ1bmN0aW9uKHQpe2koaS5TLFwiUmVmbGVjdFwiLHQpfTt0LmV4cG9ydHM9e3N0b3JlOnUsbWFwOmEsaGFzOmMsZ2V0OnMsc2V0OmYsa2V5czpsLGtleTpoLGV4cDpwfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7aWYocih0KSx2b2lkIDA9PT1uKXJldHVybiB0O3N3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwobixlKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwobixlLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUscixpKXtyZXR1cm4gdC5jYWxsKG4sZSxyLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShuLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNDIpKFwibWV0YVwiKSxpPWUoNCksbz1lKDE1KSx1PWUoOCkuZixhPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFlKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIGMoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSl9KSxmPWZ1bmN0aW9uKHQpe3UodCxyLHt2YWx1ZTp7aTpcIk9cIisgKythLHc6e319fSl9LGw9ZnVuY3Rpb24odCxuKXtpZighaSh0KSlyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OihcInN0cmluZ1wiPT10eXBlb2YgdD9cIlNcIjpcIlBcIikrdDtpZighbyh0LHIpKXtpZighYyh0KSlyZXR1cm5cIkZcIjtpZighbilyZXR1cm5cIkVcIjtmKHQpfXJldHVybiB0W3JdLml9LGg9ZnVuY3Rpb24odCxuKXtpZighbyh0LHIpKXtpZighYyh0KSlyZXR1cm4hMDtpZighbilyZXR1cm4hMTtmKHQpfXJldHVybiB0W3JdLnd9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIHMmJnYuTkVFRCYmYyh0KSYmIW8odCxyKSYmZih0KSx0fSx2PXQuZXhwb3J0cz17S0VZOnIsTkVFRDohMSxmYXN0S2V5OmwsZ2V0V2VhazpoLG9uRnJlZXplOnB9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1KShcInVuc2NvcGFibGVzXCIpLGk9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09aVtyXSYmZSgxNikoaSxyLHt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aVtyXVt0XT0hMH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI1KSxpPWUoNjcpO3QuZXhwb3J0cz1lKDMzKT9mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZih0LG4saSgxLGUpKX06ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0W25dPWUsdH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOm59fX0sZnVuY3Rpb24odCxuKXt2YXIgZT0wLHI9TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytlK3IpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz0hMX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTU2KSxpPWUoMTA0KTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiByKHQsaSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyOSksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiB0PXIodCksdDwwP2kodCtuLDApOm8odCxuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpLGk9ZSgxNTcpLG89ZSgxMDQpLHU9ZSgxMDMpKFwiSUVfUFJPVE9cIiksYT1mdW5jdGlvbigpe30sYz1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24oKXt2YXIgdCxuPWUoMTAxKShcImlmcmFtZVwiKSxyPW8ubGVuZ3RoLGk9XCI8XCIsdT1cIj5cIjtmb3Iobi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGUoMTA1KS5hcHBlbmRDaGlsZChuKSxuLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1uLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShpK1wic2NyaXB0XCIrdStcImRvY3VtZW50LkY9T2JqZWN0XCIraStcIi9zY3JpcHRcIit1KSx0LmNsb3NlKCkscz10LkY7ci0tOylkZWxldGUgc1tjXVtvW3JdXTtyZXR1cm4gcygpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxuKXt2YXIgZTtyZXR1cm4gbnVsbCE9PXQ/KGFbY109cih0KSxlPW5ldyBhLGFbY109bnVsbCxlW3VdPXQpOmU9cygpLHZvaWQgMD09PW4/ZTppKGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNTYpLGk9ZSgxMDQpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO24uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDIpLGk9ZSg4KSxvPWUoNyksdT1lKDUpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49clt0XTtvJiZuJiYhblt1XSYmaS5mKG4sdSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUscil7aWYoISh0IGluc3RhbmNlb2Ygbil8fHZvaWQgMCE9PXImJnIgaW4gdCl0aHJvdyBUeXBlRXJyb3IoZStcIjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjIpLGk9ZSgxNjgpLG89ZSgxMTcpLHU9ZSgxKSxhPWUoOSksYz1lKDExOSkscz17fSxmPXt9LG49dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGwsaCl7dmFyIHAsdixkLHksZz1oP2Z1bmN0aW9uKCl7cmV0dXJuIHR9OmModCksbT1yKGUsbCxuPzI6MSksXz0wO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGcpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGl0ZXJhYmxlIVwiKTtpZihvKGcpKXtmb3IocD1hKHQubGVuZ3RoKTtwPl87XysrKWlmKCh5PW4/bSh1KHY9dFtfXSlbMF0sdlsxXSk6bSh0W19dKSk9PT1zfHx5PT09ZilyZXR1cm4geX1lbHNlIGZvcihkPWcuY2FsbCh0KTshKHY9ZC5uZXh0KCkpLmRvbmU7KWlmKCh5PWkoZCxtLHYudmFsdWUsbikpPT09c3x8eT09PWYpcmV0dXJuIHl9O24uQlJFQUs9cyxuLlJFVFVSTj1mfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXtmb3IodmFyIGkgaW4gbilyKHQsaSxuW2ldLGUpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTMzKSxpPWUoMTI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIoaSh0KSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg4KS5mLGk9ZSgxNSksbz1lKDUpKFwidG9TdHJpbmdUYWdcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXt0JiYhaSh0PWU/dDp0LnByb3RvdHlwZSxvKSYmcih0LG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTpufSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMjgpLG89ZSgzKSx1PWUoMTA3KSxhPVwiW1wiK3UrXCJdXCIsYz1cIuKAi8KFXCIscz1SZWdFeHAoXCJeXCIrYSthK1wiKlwiKSxmPVJlZ0V4cChhK2ErXCIqJFwiKSxsPWZ1bmN0aW9uKHQsbixlKXt2YXIgaT17fSxhPW8oZnVuY3Rpb24oKXtyZXR1cm4hIXVbdF0oKXx8Y1t0XSgpIT1jfSkscz1pW3RdPWE/bihoKTp1W3RdO2UmJihpW2VdPXMpLHIoci5QK3IuRiphLFwiU3RyaW5nXCIsaSl9LGg9bC50cmltPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHQ9U3RyaW5nKGkodCkpLDEmbiYmKHQ9dC5yZXBsYWNlKHMsXCJcIikpLDImbiYmKHQ9dC5yZXBsYWNlKGYsXCJcIikpLHR9O3QuZXhwb3J0cz1sfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIXIodCl8fHQuX3QhPT1uKXRocm93IFR5cGVFcnJvcihcIkluY29tcGF0aWJsZSByZWNlaXZlciwgXCIrbitcIiByZXF1aXJlZCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg0MTUpKCEwKTtlKDEzMCkoU3RyaW5nLFwiU3RyaW5nXCIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5fdCxlPXRoaXMuX2k7cmV0dXJuIGU+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9cihuLGUpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz17fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTI5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChyKHQpKX19LGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKHQpe3JldHVybihyPVwiZnVuY3Rpb25cIj09dHlwZW9mIHUmJlwic3ltYm9sXCI9PXR5cGVvZiBvP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHUmJnQuY29uc3RydWN0b3I9PT11JiZ0IT09dS5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgdH0pKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdSYmXCJzeW1ib2xcIj09PXIobyk/dC5leHBvcnRzPWk9ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl9OnQuZXhwb3J0cz1pPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB1JiZ0LmNvbnN0cnVjdG9yPT09dSYmdCE9PXUucHJvdG90eXBlP1wic3ltYm9sXCI6cih0KX0saShuKX12YXIgbz1lKDQ0NCksdT1lKDQ0Nik7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIzKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbil7bi5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMyksaT1lKDUpKFwidG9TdHJpbmdUYWdcIiksbz1cIkFyZ3VtZW50c1wiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksdT1mdW5jdGlvbih0LG4pe3RyeXtyZXR1cm4gdFtuXX1jYXRjaCh0KXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG4sZSxhO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKGU9dShuPU9iamVjdCh0KSxpKSk/ZTpvP3Iobik6XCJPYmplY3RcIj09KGE9cihuKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY2FsbGVlP1wiQXJndW1lbnRzXCI6YX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6bn19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxOTEpLGk9ZSgxMzYpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxpKX19LGZ1bmN0aW9uKHQsbil7dmFyIGU9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyNSkuZixpPWUoNTMpLG89ZSgxMykoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QmJiFpKHQ9ZT90OnQucHJvdG90eXBlLG8pJiZyKHQsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOm59KX19LGZ1bmN0aW9uKHQsbixlKXtlKDQyNCk7Zm9yKHZhciByPWUoMTQpLGk9ZSg0MCksbz1lKDYwKSx1PWUoMTMpKFwidG9TdHJpbmdUYWdcIiksYT1cIkNTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsRE9NVG9rZW5MaXN0LERhdGFUcmFuc2Zlckl0ZW1MaXN0LEZpbGVMaXN0LEhUTUxBbGxDb2xsZWN0aW9uLEhUTUxDb2xsZWN0aW9uLEhUTUxGb3JtRWxlbWVudCxIVE1MU2VsZWN0RWxlbWVudCxNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LFNWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LFRleHRUcmFja0xpc3QsVG91Y2hMaXN0XCIuc3BsaXQoXCIsXCIpLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIHM9YVtjXSxmPXJbc10sbD1mJiZmLnByb3RvdHlwZTtsJiYhbFt1XSYmaShsLHUscyksb1tzXT1vLkFycmF5fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzcpLGk9ZSgxOTQpLG89ZSgxOTUpLHU9ZSgzMiksYT1lKDkyKSxjPWUoMTM3KSxzPXt9LGY9e30sbj10LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsbCxoKXt2YXIgcCx2LGQseSxnPWg/ZnVuY3Rpb24oKXtyZXR1cm4gdH06Yyh0KSxtPXIoZSxsLG4/MjoxKSxfPTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZyl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKG8oZykpe2ZvcihwPWEodC5sZW5ndGgpO3A+XztfKyspaWYoKHk9bj9tKHUodj10W19dKVswXSx2WzFdKTptKHRbX10pKT09PXN8fHk9PT1mKXJldHVybiB5fWVsc2UgZm9yKGQ9Zy5jYWxsKHQpOyEodj1kLm5leHQoKSkuZG9uZTspaWYoKHk9aShkLG0sdi52YWx1ZSxuKSk9PT1zfHx5PT09ZilyZXR1cm4geX07bi5CUkVBSz1zLG4uUkVUVVJOPWZ9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0MzgpfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoMTUzKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksaT1cIl9fY29yZS1qc19zaGFyZWRfX1wiLG89cltpXXx8KHJbaV09e30pO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gb1t0XXx8KG9bdF09e30pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTkpLGk9ZSg5KSxvPWUoNDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHUpe3ZhciBhLGM9cihuKSxzPWkoYy5sZW5ndGgpLGY9byh1LHMpO2lmKHQmJmUhPWUpe2Zvcig7cz5mOylpZigoYT1jW2YrK10pIT1hKXJldHVybiEwfWVsc2UgZm9yKDtzPmY7ZisrKWlmKCh0fHxmIGluIGMpJiZjW2ZdPT09ZSlyZXR1cm4gdHx8Znx8MDtyZXR1cm4hdCYmLTF9fX0sZnVuY3Rpb24odCxuKXtuLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjMpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KSxpPWUoMjMpLG89ZSg1KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbjtyZXR1cm4gcih0KSYmKHZvaWQgMCE9PShuPXRbb10pPyEhbjpcIlJlZ0V4cFwiPT1pKHQpKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpKFwiaXRlcmF0b3JcIiksaT0hMTt0cnl7dmFyIG89WzddW3JdKCk7by5yZXR1cm49ZnVuY3Rpb24oKXtpPSEwfSxBcnJheS5mcm9tKG8sZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2godCl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKCFuJiYhaSlyZXR1cm4hMTt2YXIgZT0hMTt0cnl7dmFyIG89WzddLHU9b1tyXSgpO3UubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOmU9ITB9fSxvW3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHQobyl9Y2F0Y2godCl7fXJldHVybiBlfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9cih0aGlzKSxuPVwiXCI7cmV0dXJuIHQuZ2xvYmFsJiYobis9XCJnXCIpLHQuaWdub3JlQ2FzZSYmKG4rPVwiaVwiKSx0Lm11bHRpbGluZSYmKG4rPVwibVwiKSx0LnVuaWNvZGUmJihuKz1cInVcIiksdC5zdGlja3kmJihuKz1cInlcIiksbn19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE2KSxpPWUoMTcpLG89ZSgzKSx1PWUoMjgpLGE9ZSg1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3ZhciBjPWEodCkscz1lKHUsYyxcIlwiW3RdKSxmPXNbMF0sbD1zWzFdO28oZnVuY3Rpb24oKXt2YXIgbj17fTtyZXR1cm4gbltjXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW3RdKG4pfSkmJihpKFN0cmluZy5wcm90b3R5cGUsdCxmKSxyKFJlZ0V4cC5wcm90b3R5cGUsYywyPT1uP2Z1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbCh0LHRoaXMsbil9OmZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCx0aGlzKX0pKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpLGk9ZSgxMSksbz1lKDUpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZSx1PXIodCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PXV8fHZvaWQgMD09KGU9cih1KVtvXSk/bjppKGUpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMiksaT1lKDApLG89ZSgxNyksdT1lKDUxKSxhPWUoMzgpLGM9ZSg1MCkscz1lKDQ5KSxmPWUoNCksbD1lKDMpLGg9ZSg4MCkscD1lKDU1KSx2PWUoMTA4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsZCx5LGcpe3ZhciBtPXJbdF0sXz1tLHc9eT9cInNldFwiOlwiYWRkXCIsYj1fJiZfLnByb3RvdHlwZSx4PXt9LFM9ZnVuY3Rpb24odCl7dmFyIG49Ylt0XTtvKGIsdCxcImRlbGV0ZVwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWYodCkpJiZuLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImhhc1wiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoZyYmIWYodCkpJiZuLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImdldFwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBnJiYhZih0KT92b2lkIDA6bi5jYWxsKHRoaXMsMD09PXQ/MDp0KX06XCJhZGRcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gbi5jYWxsKHRoaXMsMD09PXQ/MDp0KSx0aGlzfTpmdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGwodGhpcywwPT09dD8wOnQsZSksdGhpc30pfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBfJiYoZ3x8Yi5mb3JFYWNoJiYhbChmdW5jdGlvbigpeyhuZXcgXykuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIE89bmV3IF8sUD1PW3ddKGc/e306LTAsMSkhPU8saz1sKGZ1bmN0aW9uKCl7Ty5oYXMoMSl9KSxFPWgoZnVuY3Rpb24odCl7bmV3IF8odCl9KSxqPSFnJiZsKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBfLG49NTtuLS07KXRbd10obixuKTtyZXR1cm4hdC5oYXMoLTApfSk7RXx8KF89bihmdW5jdGlvbihuLGUpe3MobixfLHQpO3ZhciByPXYobmV3IG0sbixfKTtyZXR1cm4gdm9pZCAwIT1lJiZjKGUseSxyW3ddLHIpLHJ9KSxfLnByb3RvdHlwZT1iLGIuY29uc3RydWN0b3I9XyksKGt8fGopJiYoUyhcImRlbGV0ZVwiKSxTKFwiaGFzXCIpLHkmJlMoXCJnZXRcIikpLChqfHxQKSYmUyh3KSxnJiZiLmNsZWFyJiZkZWxldGUgYi5jbGVhcn1lbHNlIF89ZC5nZXRDb25zdHJ1Y3RvcihuLHQseSx3KSx1KF8ucHJvdG90eXBlLGUpLGEuTkVFRD0hMDtyZXR1cm4gcChfLHQpLHhbdF09XyxpKGkuRytpLlcraS5GKihfIT1tKSx4KSxnfHxkLnNldFN0cm9uZyhfLHQseSksX319LGZ1bmN0aW9uKHQsbixlKXtmb3IodmFyIHIsaT1lKDIpLG89ZSgxNiksdT1lKDQyKSxhPXUoXCJ0eXBlZF9hcnJheVwiKSxjPXUoXCJ2aWV3XCIpLHM9ISghaS5BcnJheUJ1ZmZlcnx8IWkuRGF0YVZpZXcpLGY9cyxsPTAsaD05LHA9XCJJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheVwiLnNwbGl0KFwiLFwiKTtsPGg7KShyPWlbcFtsKytdXSk/KG8oci5wcm90b3R5cGUsYSwhMCksbyhyLnByb3RvdHlwZSxjLCEwKSk6Zj0hMTt0LmV4cG9ydHM9e0FCVjpzLENPTlNUUjpmLFRZUEVEOmEsVklFVzpjfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lKDQzKXx8IWUoMykoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsZnVuY3Rpb24oKXt9KSxkZWxldGUgZSgyKVt0XX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cihyLlMsdCx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KTt0LS07KW5bdF09YXJndW1lbnRzW3RdO3JldHVybiBuZXcgdGhpcyhuKX19KX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgxMSksbz1lKDIyKSx1PWUoNTApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyKHIuUyx0LHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBuLGUscixhLGM9YXJndW1lbnRzWzFdO3JldHVybiBpKHRoaXMpLG49dm9pZCAwIT09YyxuJiZpKGMpLHZvaWQgMD09dD9uZXcgdGhpczooZT1bXSxuPyhyPTAsYT1vKGMsYXJndW1lbnRzWzJdLDIpLHUodCwhMSxmdW5jdGlvbih0KXtlLnB1c2goYSh0LHIrKykpfSkpOnUodCwhMSxlLnB1c2gsZSksbmV3IHRoaXMoZSkpfX0pfX0sZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKCl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e30sdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWZ1bmN0aW9uIHIodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiBpKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIG8odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXR9dC5leHBvcnRzPWUsZS5FdmVudEVtaXR0ZXI9ZSxlLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxlLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMCxlLmRlZmF1bHRNYXhMaXN0ZW5lcnM9MTAsZS5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCFpKHQpfHx0PDB8fGlzTmFOKHQpKXRocm93IFR5cGVFcnJvcihcIm4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgbixlLGksYSxjLHM7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSxcImVycm9yXCI9PT10JiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8byh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKChuPWFyZ3VtZW50c1sxXSlpbnN0YW5jZW9mIEVycm9yKXRocm93IG47dmFyIGY9bmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJytuK1wiKVwiKTt0aHJvdyBmLmNvbnRleHQ9bixmfWlmKGU9dGhpcy5fZXZlbnRzW3RdLHUoZSkpcmV0dXJuITE7aWYocihlKSlzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOmUuY2FsbCh0aGlzKTticmVhaztjYXNlIDI6ZS5jYWxsKHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6ZS5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDphPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxlLmFwcGx5KHRoaXMsYSl9ZWxzZSBpZihvKGUpKWZvcihhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxzPWUuc2xpY2UoKSxpPXMubGVuZ3RoLGM9MDtjPGk7YysrKXNbY10uYXBwbHkodGhpcyxhKTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxuKXt2YXIgaTtpZighcihuKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoXCJuZXdMaXN0ZW5lclwiLHQscihuLmxpc3RlbmVyKT9uLmxpc3RlbmVyOm4pLHRoaXMuX2V2ZW50c1t0XT9vKHRoaXMuX2V2ZW50c1t0XSk/dGhpcy5fZXZlbnRzW3RdLnB1c2gobik6dGhpcy5fZXZlbnRzW3RdPVt0aGlzLl9ldmVudHNbdF0sbl06dGhpcy5fZXZlbnRzW3RdPW4sbyh0aGlzLl9ldmVudHNbdF0pJiYhdGhpcy5fZXZlbnRzW3RdLndhcm5lZCYmKGk9dSh0aGlzLl9tYXhMaXN0ZW5lcnMpP2UuZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMpJiZpPjAmJnRoaXMuX2V2ZW50c1t0XS5sZW5ndGg+aSYmKHRoaXMuX2V2ZW50c1t0XS53YXJuZWQ9ITAsY29uc29sZS5lcnJvcihcIihub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQuXCIsdGhpcy5fZXZlbnRzW3RdLmxlbmd0aCksXCJmdW5jdGlvblwiPT10eXBlb2YgY29uc29sZS50cmFjZSYmY29uc29sZS50cmFjZSgpKSx0aGlzfSxlLnByb3RvdHlwZS5vbj1lLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixlLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxlKSxpfHwoaT0hMCxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIXIobikpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3ZhciBpPSExO3JldHVybiBlLmxpc3RlbmVyPW4sdGhpcy5vbih0LGUpLHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsbil7dmFyIGUsaSx1LGE7aWYoIXIobikpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2lmKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pcmV0dXJuIHRoaXM7aWYoZT10aGlzLl9ldmVudHNbdF0sdT1lLmxlbmd0aCxpPS0xLGU9PT1ufHxyKGUubGlzdGVuZXIpJiZlLmxpc3RlbmVyPT09bilkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LG4pO2Vsc2UgaWYobyhlKSl7Zm9yKGE9dTthLS0gPjA7KWlmKGVbYV09PT1ufHxlW2FdLmxpc3RlbmVyJiZlW2FdLmxpc3RlbmVyPT09bil7aT1hO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpczsxPT09ZS5sZW5ndGg/KGUubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ZS5zcGxpY2UoaSwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxuKX1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBuLGU7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpcztpZighdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9ldmVudHM9e306dGhpcy5fZXZlbnRzW3RdJiZkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihuIGluIHRoaXMuX2V2ZW50cylcInJlbW92ZUxpc3RlbmVyXCIhPT1uJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhuKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9e30sdGhpc31pZihlPXRoaXMuX2V2ZW50c1t0XSxyKGUpKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxlKTtlbHNlIGlmKGUpZm9yKDtlLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbZS5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LGUucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHNbdF0/cih0aGlzLl9ldmVudHNbdF0pP1t0aGlzLl9ldmVudHNbdF1dOnRoaXMuX2V2ZW50c1t0XS5zbGljZSgpOltdfSxlLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2V2ZW50cyl7dmFyIG49dGhpcy5fZXZlbnRzW3RdO2lmKHIobikpcmV0dXJuIDE7aWYobilyZXR1cm4gbi5sZW5ndGh9cmV0dXJuIDB9LGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LG4pe3JldHVybiB0Lmxpc3RlbmVyQ291bnQobil9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz0hMH0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzIpLGk9ZSg0MTcpLG89ZSgxMzYpLHU9ZSgxMzQpKFwiSUVfUFJPVE9cIiksYT1mdW5jdGlvbigpe30sYz1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24oKXt2YXIgdCxuPWUoMTMxKShcImlmcmFtZVwiKSxyPW8ubGVuZ3RoLGk9XCI8XCIsdT1cIj5cIjtmb3Iobi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGUoMTkyKS5hcHBlbmRDaGlsZChuKSxuLnNyYz1cImphdmFzY3JpcHQ6XCIsdD1uLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsdC5vcGVuKCksdC53cml0ZShpK1wic2NyaXB0XCIrdStcImRvY3VtZW50LkY9T2JqZWN0XCIraStcIi9zY3JpcHRcIit1KSx0LmNsb3NlKCkscz10LkY7ci0tOylkZWxldGUgc1tjXVtvW3JdXTtyZXR1cm4gcygpfTt0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24odCxuKXt2YXIgZTtyZXR1cm4gbnVsbCE9PXQ/KGFbY109cih0KSxlPW5ldyBhLGFbY109bnVsbCxlW3VdPXQpOmU9cygpLHZvaWQgMD09PW4/ZTppKGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMjgpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/aShyKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LG4pe3ZhciBlPTAscj1NYXRoLnJhbmRvbSgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIlN5bWJvbChcIi5jb25jYXQodm9pZCAwPT09dD9cIlwiOnQsXCIpX1wiLCgrK2UrcikudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDY5KSxpPWUoMTMpKFwidG9TdHJpbmdUYWdcIiksbz1cIkFyZ3VtZW50c1wiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksdT1mdW5jdGlvbih0LG4pe3RyeXtyZXR1cm4gdFtuXX1jYXRjaCh0KXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG4sZSxhO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKGU9dShuPU9iamVjdCh0KSxpKSk/ZTpvP3Iobik6XCJPYmplY3RcIj09KGE9cihuKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY2FsbGVlP1wiQXJndW1lbnRzXCI6YX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0MjcpfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoNDI5KX0sZnVuY3Rpb24odCxuKXtuLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0MzIpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMiksaT1lKDYpLG89ZSg1Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGU9KGkuT2JqZWN0fHx7fSlbdF18fE9iamVjdFt0XSx1PXt9O3VbdF09bihlKSxyKHIuUytyLkYqbyhmdW5jdGlvbigpe2UoMSl9KSxcIk9iamVjdFwiLHUpfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDQ0MCl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQpLGk9ZSgyKS5kb2N1bWVudCxvPXIoaSkmJnIoaS5jcmVhdGVFbGVtZW50KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG8/aS5jcmVhdGVFbGVtZW50KHQpOnt9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksaT1lKDM0KSxvPWUoNDMpLHU9ZSgxNTUpLGE9ZSg4KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1pLlN5bWJvbHx8KGkuU3ltYm9sPW8/e306ci5TeW1ib2x8fHt9KTtcIl9cIj09dC5jaGFyQXQoMCl8fHQgaW4gbnx8YShuLHQse3ZhbHVlOnUuZih0KX0pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNzUpKFwia2V5c1wiKSxpPWUoNDIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gclt0XXx8KHJbdF09aSh0KSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMikuZG9jdW1lbnQ7dC5leHBvcnRzPXImJnIuZG9jdW1lbnRFbGVtZW50fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KSxpPWUoMSksbz1mdW5jdGlvbih0LG4pe2lmKGkodCksIXIobikmJm51bGwhPT1uKXRocm93IFR5cGVFcnJvcihuK1wiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKX07dC5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoXCJfX3Byb3RvX19cImlue30/ZnVuY3Rpb24odCxuLHIpe3RyeXtyPWUoMjIpKEZ1bmN0aW9uLmNhbGwsZSgyMCkuZihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCwyKSxyKHQsW10pLG49ISh0IGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKHQpe249ITB9cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCxlKSxuP3QuX19wcm90b19fPWU6cih0LGUpLHR9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpvfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9XCJcXHRcXG5cXHZcXGZcXHIgwqDhmoDhoI7igIDigIHigILigIPigITigIXigIbigIfigIjigInigIrigK/igZ/jgIBcXHUyMDI4XFx1MjAyOVxcdWZlZmZcIn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNCksaT1lKDEwNikuc2V0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIG8sdT1uLmNvbnN0cnVjdG9yO3JldHVybiB1IT09ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG89dS5wcm90b3R5cGUpIT09ZS5wcm90b3R5cGUmJnIobykmJmkmJmkodCxvKSx0fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMjkpLGk9ZSgyOCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPVN0cmluZyhpKHRoaXMpKSxlPVwiXCIsbz1yKHQpO2lmKG88MHx8bz09MS8wKXRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtmb3IoO28+MDsobz4+Pj0xKSYmKG4rPW4pKTEmbyYmKGUrPW4pO3JldHVybiBlfX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSxmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguZXhwbTE7dC5leHBvcnRzPSFlfHxlKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGUoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1lKC0yZS0xNyk/ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90OnQ+LTFlLTYmJnQ8MWUtNj90K3QqdC8yOk1hdGguZXhwKHQpLTF9OmV9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI5KSxpPWUoMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgbyx1LGE9U3RyaW5nKGkobikpLGM9cihlKSxzPWEubGVuZ3RoO3JldHVybiBjPDB8fGM+PXM/dD9cIlwiOnZvaWQgMDoobz1hLmNoYXJDb2RlQXQoYyksbzw1NTI5Nnx8bz41NjMxOXx8YysxPT09c3x8KHU9YS5jaGFyQ29kZUF0KGMrMSkpPDU2MzIwfHx1PjU3MzQzP3Q/YS5jaGFyQXQoYyk6bzp0P2Euc2xpY2UoYyxjKzIpOnUtNTYzMjArKG8tNTUyOTY8PDEwKSs2NTUzNil9fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNDMpLGk9ZSgwKSxvPWUoMTcpLHU9ZSgxNiksYT1lKDE1KSxjPWUoNTcpLHM9ZSgxMTQpLGY9ZSg1NSksbD1lKDIxKSxoPWUoNSkoXCJpdGVyYXRvclwiKSxwPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSksdj1cImtleXNcIixkPVwidmFsdWVzXCIseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsZyxtLF8sdyl7cyhlLG4sZyk7dmFyIGIseCxTLE89ZnVuY3Rpb24odCl7aWYoIXAmJnQgaW4gailyZXR1cm4galt0XTtzd2l0Y2godCl7Y2FzZSB2OmNhc2UgZDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMsdCl9fSxQPW4rXCIgSXRlcmF0b3JcIixrPW09PWQsRT0hMSxqPXQucHJvdG90eXBlLEE9altoXXx8altcIkBAaXRlcmF0b3JcIl18fG0mJmpbbV0sTT0hcCYmQXx8TyhtKSxUPW0/az9PKFwiZW50cmllc1wiKTpNOnZvaWQgMCxGPVwiQXJyYXlcIj09bj9qLmVudHJpZXN8fEE6QTtpZihGJiYoUz1sKEYuY2FsbChuZXcgdCkpKSE9PU9iamVjdC5wcm90b3R5cGUmJlMubmV4dCYmKGYoUyxQLCEwKSxyfHxhKFMsaCl8fHUoUyxoLHkpKSxrJiZBJiZBLm5hbWUhPT1kJiYoRT0hMCxNPWZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzKX0pLHImJiF3fHwhcCYmIUUmJmpbaF18fHUoaixoLE0pLGNbbl09TSxjW1BdPXksbSlpZihiPXt2YWx1ZXM6az9NOk8oZCksa2V5czpfP006Tyh2KSxlbnRyaWVzOlR9LHcpZm9yKHggaW4gYil4IGluIGp8fG8oaix4LGJbeF0pO2Vsc2UgaShpLlAraS5GKihwfHxFKSxuLGIpO3JldHVybiBifX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNDYpLGk9ZSg0MSksbz1lKDU1KSx1PXt9O2UoMTYpKHUsZSg1KShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPXIodSx7bmV4dDppKDEsZSl9KSxvKHQsbitcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDc5KSxpPWUoMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7aWYocihuKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrZStcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhpKHQpKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPS8uLzt0cnl7XCIvLi9cIlt0XShuKX1jYXRjaChlKXt0cnl7cmV0dXJuIG5bcl09ITEsIVwiLy4vXCJbdF0obil9Y2F0Y2godCl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDU3KSxpPWUoNSkoXCJpdGVyYXRvclwiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihyLkFycmF5PT09dHx8b1tpXT09PXQpfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoOCksaT1lKDQxKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe24gaW4gdD9yLmYodCxuLGkoMCxlKSk6dFtuXT1lfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjUpLGk9ZSg1KShcIml0ZXJhdG9yXCIpLG89ZSg1Nyk7dC5leHBvcnRzPWUoMzQpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9dClyZXR1cm4gdFtpXXx8dFtcIkBAaXRlcmF0b3JcIl18fG9bcih0KV19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiBuZXcocih0KSkobil9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxMCksaT1lKDQ1KSxvPWUoOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1yKHRoaXMpLGU9byhuLmxlbmd0aCksdT1hcmd1bWVudHMubGVuZ3RoLGE9aSh1PjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlKSxjPXU+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHM9dm9pZCAwPT09Yz9lOmkoYyxlKTtzPmE7KW5bYSsrXT10O3JldHVybiBufX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMzkpLGk9ZSgxNzEpLG89ZSg1NyksdT1lKDE5KTt0LmV4cG9ydHM9ZSgxMTMpKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LG4pe3RoaXMuX3Q9dSh0KSx0aGlzLl9pPTAsdGhpcy5faz1ufSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Qsbj10aGlzLl9rLGU9dGhpcy5faSsrO3JldHVybiF0fHxlPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsaSgxKSk6XCJrZXlzXCI9PW4/aSgwLGUpOlwidmFsdWVzXCI9PW4/aSgwLHRbZV0pOmkoMCxbZSx0W2VdXSl9LFwidmFsdWVzXCIpLG8uQXJndW1lbnRzPW8uQXJyYXkscihcImtleXNcIikscihcInZhbHVlc1wiKSxyKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByLGksbyx1PWUoMjIpLGE9ZSgxNjEpLGM9ZSgxMDUpLHM9ZSgxMDEpLGY9ZSgyKSxsPWYucHJvY2VzcyxoPWYuc2V0SW1tZWRpYXRlLHA9Zi5jbGVhckltbWVkaWF0ZSx2PWYuTWVzc2FnZUNoYW5uZWwsZD1mLkRpc3BhdGNoLHk9MCxnPXt9LG09XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixfPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYoZy5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIG49Z1t0XTtkZWxldGUgZ1t0XSxuKCl9fSx3PWZ1bmN0aW9uKHQpe18uY2FsbCh0LmRhdGEpfTtoJiZwfHwoaD1mdW5jdGlvbih0KXtmb3IodmFyIG49W10sZT0xO2FyZ3VtZW50cy5sZW5ndGg+ZTspbi5wdXNoKGFyZ3VtZW50c1tlKytdKTtyZXR1cm4gZ1srK3ldPWZ1bmN0aW9uKCl7YShcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCksbil9LHIoeSkseX0scD1mdW5jdGlvbih0KXtkZWxldGUgZ1t0XX0sXCJwcm9jZXNzXCI9PWUoMjMpKGwpP3I9ZnVuY3Rpb24odCl7bC5uZXh0VGljayh1KF8sdCwxKSl9OmQmJmQubm93P3I9ZnVuY3Rpb24odCl7ZC5ub3codShfLHQsMSkpfTp2PyhpPW5ldyB2LG89aS5wb3J0MixpLnBvcnQxLm9ubWVzc2FnZT13LHI9dShvLnBvc3RNZXNzYWdlLG8sMSkpOmYuYWRkRXZlbnRMaXN0ZW5lciYmXCJmdW5jdGlvblwiPT10eXBlb2YgcG9zdE1lc3NhZ2UmJiFmLmltcG9ydFNjcmlwdHM/KHI9ZnVuY3Rpb24odCl7Zi5wb3N0TWVzc2FnZSh0K1wiXCIsXCIqXCIpfSxmLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdywhMSkpOnI9bSBpbiBzKFwic2NyaXB0XCIpP2Z1bmN0aW9uKHQpe2MuYXBwZW5kQ2hpbGQocyhcInNjcmlwdFwiKSlbbV09ZnVuY3Rpb24oKXtjLnJlbW92ZUNoaWxkKHRoaXMpLF8uY2FsbCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodShfLHQsMSksMCl9KSx0LmV4cG9ydHM9e3NldDpoLGNsZWFyOnB9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxpPWUoMTIzKS5zZXQsbz1yLk11dGF0aW9uT2JzZXJ2ZXJ8fHIuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix1PXIucHJvY2VzcyxhPXIuUHJvbWlzZSxjPVwicHJvY2Vzc1wiPT1lKDIzKSh1KTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxuLGUscz1mdW5jdGlvbigpe3ZhciByLGk7Zm9yKGMmJihyPXUuZG9tYWluKSYmci5leGl0KCk7dDspe2k9dC5mbix0PXQubmV4dDt0cnl7aSgpfWNhdGNoKHIpe3Rocm93IHQ/ZSgpOm49dm9pZCAwLHJ9fW49dm9pZCAwLHImJnIuZW50ZXIoKX07aWYoYyllPWZ1bmN0aW9uKCl7dS5uZXh0VGljayhzKX07ZWxzZSBpZighb3x8ci5uYXZpZ2F0b3ImJnIubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYoYSYmYS5yZXNvbHZlKXt2YXIgZj1hLnJlc29sdmUoKTtlPWZ1bmN0aW9uKCl7Zi50aGVuKHMpfX1lbHNlIGU9ZnVuY3Rpb24oKXtpLmNhbGwocixzKX07ZWxzZXt2YXIgbD0hMCxoPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO25ldyBvKHMpLm9ic2VydmUoaCx7Y2hhcmFjdGVyRGF0YTohMH0pLGU9ZnVuY3Rpb24oKXtoLmRhdGE9bD0hbH19cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPXtmbjpyLG5leHQ6dm9pZCAwfTtuJiYobi5uZXh0PWkpLHR8fCh0PWksZSgpKSxuPWl9fX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCl7dmFyIG4sZTt0aGlzLnByb21pc2U9bmV3IHQoZnVuY3Rpb24odCxyKXtpZih2b2lkIDAhPT1ufHx2b2lkIDAhPT1lKXRocm93IFR5cGVFcnJvcihcIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yXCIpO249dCxlPXJ9KSx0aGlzLnJlc29sdmU9aShuKSx0aGlzLnJlamVjdD1pKGUpfXZhciBpPWUoMTEpO3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcih0KX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsbixlKXt2YXIgcixpLG8sdT1uZXcgQXJyYXkoZSksYT04KmUtbi0xLGM9KDE8PGEpLTEscz1jPj4xLGY9MjM9PT1uP0coMiwtMjQpLUcoMiwtNzcpOjAsbD0wLGg9dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PVUodCksdCE9dHx8dD09PVI/KGk9dCE9dD8xOjAscj1jKToocj1XKFYodCkvQiksdCoobz1HKDIsLXIpKTwxJiYoci0tLG8qPTIpLHQrPXIrcz49MT9mL286ZipHKDIsMS1zKSx0Km8+PTImJihyKyssby89MikscitzPj1jPyhpPTAscj1jKTpyK3M+PTE/KGk9KHQqby0xKSpHKDIsbikscis9cyk6KGk9dCpHKDIscy0xKSpHKDIsbikscj0wKSk7bj49ODt1W2wrK109MjU1JmksaS89MjU2LG4tPTgpO2ZvcihyPXI8PG58aSxhKz1uO2E+MDt1W2wrK109MjU1JnIsci89MjU2LGEtPTgpO3JldHVybiB1Wy0tbF18PTEyOCpoLHV9ZnVuY3Rpb24gaSh0LG4sZSl7dmFyIHIsaT04KmUtbi0xLG89KDE8PGkpLTEsdT1vPj4xLGE9aS03LGM9ZS0xLHM9dFtjLS1dLGY9MTI3JnM7Zm9yKHM+Pj03O2E+MDtmPTI1NipmK3RbY10sYy0tLGEtPTgpO2ZvcihyPWYmKDE8PC1hKS0xLGY+Pj0tYSxhKz1uO2E+MDtyPTI1NipyK3RbY10sYy0tLGEtPTgpO2lmKDA9PT1mKWY9MS11O2Vsc2V7aWYoZj09PW8pcmV0dXJuIHI/TmFOOnM/LVI6UjtyKz1HKDIsbiksZi09dX1yZXR1cm4ocz8tMToxKSpyKkcoMixmLW4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX1mdW5jdGlvbiB1KHQpe3JldHVyblsyNTUmdF19ZnVuY3Rpb24gYSh0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfWZ1bmN0aW9uIGModCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIHIodCw1Miw4KX1mdW5jdGlvbiBmKHQpe3JldHVybiByKHQsMjMsNCl9ZnVuY3Rpb24gbCh0LG4sZSl7ayh0W1RdLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW2VdfX0pfWZ1bmN0aW9uIGgodCxuLGUscil7dmFyIGk9K2Usbz1PKGkpO2lmKG8rbj50W0tdKXRocm93IEQoRik7dmFyIHU9dFtKXS5fYixhPW8rdFtZXSxjPXUuc2xpY2UoYSxhK24pO3JldHVybiByP2M6Yy5yZXZlcnNlKCl9ZnVuY3Rpb24gcCh0LG4sZSxyLGksbyl7dmFyIHU9K2UsYT1PKHUpO2lmKGErbj50W0tdKXRocm93IEQoRik7Zm9yKHZhciBjPXRbSl0uX2Iscz1hK3RbWV0sZj1yKCtpKSxsPTA7bDxuO2wrKyljW3MrbF09ZltvP2w6bi1sLTFdfXZhciB2PWUoMiksZD1lKDcpLHk9ZSg0MyksZz1lKDg1KSxtPWUoMTYpLF89ZSg1MSksdz1lKDMpLGI9ZSg0OSkseD1lKDI5KSxTPWUoOSksTz1lKDE4MCksUD1lKDQ3KS5mLGs9ZSg4KS5mLEU9ZSgxMjEpLGo9ZSg1NSksQT1cIkFycmF5QnVmZmVyXCIsTT1cIkRhdGFWaWV3XCIsVD1cInByb3RvdHlwZVwiLEY9XCJXcm9uZyBpbmRleCFcIixMPXZbQV0sST12W01dLE49di5NYXRoLEQ9di5SYW5nZUVycm9yLFI9di5JbmZpbml0eSxDPUwsVT1OLmFicyxHPU4ucG93LFc9Ti5mbG9vcixWPU4ubG9nLEI9Ti5MTjIscT1cImJ1ZmZlclwiLHo9XCJieXRlTGVuZ3RoXCIsSD1cImJ5dGVPZmZzZXRcIixKPWQ/XCJfYlwiOnEsSz1kP1wiX2xcIjp6LFk9ZD9cIl9vXCI6SDtpZihnLkFCVil7aWYoIXcoZnVuY3Rpb24oKXtMKDEpfSl8fCF3KGZ1bmN0aW9uKCl7bmV3IEwoLTEpfSl8fHcoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEwsbmV3IEwoMS41KSxuZXcgTChOYU4pLEwubmFtZSE9QX0pKXtMPWZ1bmN0aW9uKHQpe3JldHVybiBiKHRoaXMsTCksbmV3IEMoTyh0KSl9O2Zvcih2YXIgJCxRPUxbVF09Q1tUXSxYPVAoQyksWj0wO1gubGVuZ3RoPlo7KSgkPVhbWisrXSlpbiBMfHxtKEwsJCxDWyRdKTt5fHwoUS5jb25zdHJ1Y3Rvcj1MKX12YXIgdHQ9bmV3IEkobmV3IEwoMikpLG50PUlbVF0uc2V0SW50ODt0dC5zZXRJbnQ4KDAsMjE0NzQ4MzY0OCksdHQuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCF0dC5nZXRJbnQ4KDApJiZ0dC5nZXRJbnQ4KDEpfHxfKElbVF0se3NldEludDg6ZnVuY3Rpb24odCxuKXtudC5jYWxsKHRoaXMsdCxuPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbih0LG4pe250LmNhbGwodGhpcyx0LG48PDI0Pj4yNCl9fSwhMCl9ZWxzZSBMPWZ1bmN0aW9uKHQpe2IodGhpcyxMLEEpO3ZhciBuPU8odCk7dGhpcy5fYj1FLmNhbGwobmV3IEFycmF5KG4pLDApLHRoaXNbS109bn0sST1mdW5jdGlvbih0LG4sZSl7Yih0aGlzLEksTSksYih0LEwsTSk7dmFyIHI9dFtLXSxpPXgobik7aWYoaTwwfHxpPnIpdGhyb3cgRChcIldyb25nIG9mZnNldCFcIik7aWYoZT12b2lkIDA9PT1lP3ItaTpTKGUpLGkrZT5yKXRocm93IEQoXCJXcm9uZyBsZW5ndGghXCIpO3RoaXNbSl09dCx0aGlzW1ldPWksdGhpc1tLXT1lfSxkJiYobChMLHosXCJfbFwiKSxsKEkscSxcIl9iXCIpLGwoSSx6LFwiX2xcIiksbChJLEgsXCJfb1wiKSksXyhJW1RdLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBuPWgodGhpcywyLHQsYXJndW1lbnRzWzFdKTtyZXR1cm4oblsxXTw8OHxuWzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24odCl7dmFyIG49aCh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybiBuWzFdPDw4fG5bMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBvKGgodGhpcyw0LHQsYXJndW1lbnRzWzFdKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gbyhoKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbih0KXtyZXR1cm4gaShoKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSksMjMsNCl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkoaCh0aGlzLDgsdCxhcmd1bWVudHNbMV0pLDUyLDgpfSxzZXRJbnQ4OmZ1bmN0aW9uKHQsbil7cCh0aGlzLDEsdCx1LG4pfSxzZXRVaW50ODpmdW5jdGlvbih0LG4pe3AodGhpcywxLHQsdSxuKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxuKXtwKHRoaXMsMix0LGEsbixhcmd1bWVudHNbMl0pfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxuKXtwKHRoaXMsMix0LGEsbixhcmd1bWVudHNbMl0pfSxzZXRJbnQzMjpmdW5jdGlvbih0LG4pe3AodGhpcyw0LHQsYyxuLGFyZ3VtZW50c1syXSl9LHNldFVpbnQzMjpmdW5jdGlvbih0LG4pe3AodGhpcyw0LHQsYyxuLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxuKXtwKHRoaXMsNCx0LGYsbixhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsbil7cCh0aGlzLDgsdCxzLG4sYXJndW1lbnRzWzJdKX19KTtqKEwsQSksaihJLE0pLG0oSVtUXSxnLlZJRVcsITApLG5bQV09TCxuW01dPUl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDIpLGk9ci5uYXZpZ2F0b3I7dC5leHBvcnRzPWkmJmkudXNlckFnZW50fHxcIlwifSxmdW5jdGlvbih0LG4pe3ZhciBlPU1hdGguY2VpbCxyPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/cjplKSh0KX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg5MCksaT1lKDEyKSxvPWUoMTkwKSx1PWUoNDApLGE9ZSg1MyksYz1lKDYwKSxzPWUoNDE2KSxmPWUoNzApLGw9ZSgxOTMpLGg9ZSgxMykoXCJpdGVyYXRvclwiKSxwPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSksdj1cImtleXNcIixkPVwidmFsdWVzXCIseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUsZyxtLF8sdyl7cyhlLG4sZyk7dmFyIGIseCxTLE89ZnVuY3Rpb24odCl7aWYoIXAmJnQgaW4gailyZXR1cm4galt0XTtzd2l0Y2godCl7Y2FzZSB2OmNhc2UgZDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGUodGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMsdCl9fSxQPW4rXCIgSXRlcmF0b3JcIixrPW09PWQsRT0hMSxqPXQucHJvdG90eXBlLEE9altoXXx8altcIkBAaXRlcmF0b3JcIl18fG0mJmpbbV0sTT0hcCYmQXx8TyhtKSxUPW0/az9PKFwiZW50cmllc1wiKTpNOnZvaWQgMCxGPVwiQXJyYXlcIj09bj9qLmVudHJpZXN8fEE6QTtpZihGJiYoUz1sKEYuY2FsbChuZXcgdCkpKSE9PU9iamVjdC5wcm90b3R5cGUmJlMubmV4dCYmKGYoUyxQLCEwKSxyfHxhKFMsaCl8fHUoUyxoLHkpKSxrJiZBJiZBLm5hbWUhPT1kJiYoRT0hMCxNPWZ1bmN0aW9uKCl7cmV0dXJuIEEuY2FsbCh0aGlzKX0pLHImJiF3fHwhcCYmIUUmJmpbaF18fHUoaixoLE0pLGNbbl09TSxjW1BdPXksbSlpZihiPXt2YWx1ZXM6az9NOk8oZCksa2V5czpfP006Tyh2KSxlbnRyaWVzOlR9LHcpZm9yKHggaW4gYil4IGluIGp8fG8oaix4LGJbeF0pO2Vsc2UgaShpLlAraS5GKihwfHxFKSxuLGIpO3JldHVybiBifX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjYpLGk9ZSgxNCkuZG9jdW1lbnQsbz1yKGkpJiZyKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KSlyZXR1cm4gdDt2YXIgZSxpO2lmKG4mJlwiZnVuY3Rpb25cIj09dHlwZW9mKGU9dC50b1N0cmluZykmJiFyKGk9ZS5jYWxsKHQpKSlyZXR1cm4gaTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZihlPXQudmFsdWVPZikmJiFyKGk9ZS5jYWxsKHQpKSlyZXR1cm4gaTtpZighbiYmXCJmdW5jdGlvblwiPT10eXBlb2YoZT10LnRvU3RyaW5nKSYmIXIoaT1lLmNhbGwodCkpKXJldHVybiBpO3Rocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDY5KTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09cih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEzNSkoXCJrZXlzXCIpLGk9ZSg5Myk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByW3RdfHwoclt0XT1pKHQpKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE0KSxpPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsbz1yW2ldfHwocltpXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOTQpLGk9ZSgxMykoXCJpdGVyYXRvclwiKSxvPWUoNjApO3QuZXhwb3J0cz1lKDYpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9dClyZXR1cm4gdFtpXXx8dFtcIkBAaXRlcmF0b3JcIl18fG9bcih0KV19fSxmdW5jdGlvbih0LG4sZSl7ZnVuY3Rpb24gcih0LG4pe3ZhciBlPVtdLHI9ITAsaT0hMSxvPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGM9dSh0KTshKHI9KGE9Yy5uZXh0KCkpLmRvbmUpJiYoZS5wdXNoKGEudmFsdWUpLCFufHxlLmxlbmd0aCE9PW4pO3I9ITApO31jYXRjaCh0KXtpPSEwLG89dH1maW5hbGx5e3RyeXtyfHxudWxsPT1jLnJldHVybnx8Yy5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LG4pe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQ7aWYobyhPYmplY3QodCkpKXJldHVybiByKHQsbik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIil9dmFyIG89ZSg0MjIpLHU9ZSg5NSk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsbil7bi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKHQsbixlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXRoaXMsZT1hcmd1bWVudHM7cmV0dXJuIG5ldyBpKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gdSh0LG4pe3RyeXt2YXIgZT1zW3RdKG4pLHU9ZS52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBvKHQpfWUuZG9uZT9yKHUpOmkucmVzb2x2ZSh1KS50aGVuKGEsYyl9ZnVuY3Rpb24gYSh0KXt1KFwibmV4dFwiLHQpfWZ1bmN0aW9uIGModCl7dShcInRocm93XCIsdCl9dmFyIHM9dC5hcHBseShuLGUpO2EoKX0pfX12YXIgaT1lKDk4KTt0LmV4cG9ydHM9cn0sZnVuY3Rpb24odCxuKXt9LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLHIpe2lmKCEodCBpbnN0YW5jZW9mIG4pfHx2b2lkIDAhPT1yJiZyIGluIHQpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3ZhciBuLGU7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQscil7aWYodm9pZCAwIT09bnx8dm9pZCAwIT09ZSl0aHJvdyBUeXBlRXJyb3IoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTtuPXQsZT1yfSksdGhpcy5yZXNvbHZlPWkobiksdGhpcy5yZWplY3Q9aShlKX12YXIgaT1lKDY2KTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHIodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlKXtmb3IodmFyIGkgaW4gbillJiZ0W2ldP3RbaV09bltpXTpyKHQsaSxuW2ldKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuZXcgby5hKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihpLHUpe3RyeXt2YXIgYT1uW2ldKHUpLGM9YS52YWx1ZX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBlKHQpfWlmKCFhLmRvbmUpcmV0dXJuIG8uYS5yZXNvbHZlKGMpLnRoZW4oZnVuY3Rpb24odCl7cihcIm5leHRcIix0KX0sZnVuY3Rpb24odCl7cihcInRocm93XCIsdCl9KTt0KGMpfXJldHVybiByKFwibmV4dFwiKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxlLmQobixcInRocm90dGxlXCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLGUuZChuLFwiZ2V0RGF0YUJ5UGF0aFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSxlLmQobixcIm1peGluXCIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uX2FzeW5jVG9HZW5lcmF0b3I9cjt2YXIgaT1lKDk4KSxvPWUubihpKSx1PWUoOTYpLGE9ZS5uKHUpLGM9ZnVuY3Rpb24odCxuKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxyPWZ1bmN0aW9uKCl7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkociksbz0wO288cjtvKyspaVtvXT1hcmd1bWVudHNbb107dC5fdGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX3RpbWVvdXQpLHQuX3RpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsaSl9LG4pfTtyZXR1cm4gci5fcmVhbD10LHJ9LHM9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9bi5yZXBsYWNlKC8oXFxbfFxcXSkvZyxcIi5cIikucmVwbGFjZSgvXFwuKy9nLFwiLlwiKS5zcGxpdChcIi5cIikuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLHI9ZS5wb3AoKTtlLmxlbmd0aDspe3Q9dFtlLnNoaWZ0KCldfXJldHVybntsYXN0T2JqOnQsbGFzdEtleTpyfX0sZj1mdW5jdGlvbigpe2Zvcih2YXIgdD1mdW5jdGlvbigpe30sbj1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47cisrKWVbcl09YXJndW1lbnRzW3JdO3JldHVybiBhLmEuYXBwbHkoT2JqZWN0LFt0LnByb3RvdHlwZV0uY29uY2F0KGUpKSx0fX0sZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBlKHQsbil7aWYoISh0IGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX10LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIodCxuKXtmb3IodmFyIGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiByJiYoci53cml0YWJsZT0hMCksbyh0LHIua2V5LHIpfX1mdW5jdGlvbiBpKHQsbixlKXtyZXR1cm4gbiYmcih0LnByb3RvdHlwZSxuKSxlJiZyKHQsZSksdH12YXIgbz1lKDEwMCk7dC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsbixlKXtuLmY9ZSgxMyl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDkzKShcIm1ldGFcIiksaT1lKDI2KSxvPWUoNTMpLHU9ZSgyNSkuZixhPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxzPSFlKDUyKShmdW5jdGlvbigpe3JldHVybiBjKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksZj1mdW5jdGlvbih0KXt1KHQscix7dmFsdWU6e2k6XCJPXCIrICsrYSx3Ont9fX0pfSxsPWZ1bmN0aW9uKHQsbil7aWYoIWkodCkpcmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDooXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJTXCI6XCJQXCIpK3Q7aWYoIW8odCxyKSl7aWYoIWModCkpcmV0dXJuXCJGXCI7aWYoIW4pcmV0dXJuXCJFXCI7Zih0KX1yZXR1cm4gdFtyXS5pfSxoPWZ1bmN0aW9uKHQsbil7aWYoIW8odCxyKSl7aWYoIWModCkpcmV0dXJuITA7aWYoIW4pcmV0dXJuITE7Zih0KX1yZXR1cm4gdFtyXS53fSxwPWZ1bmN0aW9uKHQpe3JldHVybiBzJiZ2Lk5FRUQmJmModCkmJiFvKHQscikmJmYodCksdH0sdj10LmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpsLGdldFdlYWs6aCxvbkZyZWV6ZTpwfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTQpLGk9ZSg2KSxvPWUoOTApLHU9ZSgxNDgpLGE9ZSgyNSkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49aS5TeW1ib2x8fChpLlN5bWJvbD1vP3t9OnIuU3ltYm9sfHx7fSk7XCJfXCI9PXQuY2hhckF0KDApfHx0IGluIG58fGEobix0LHt2YWx1ZTp1LmYodCl9KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDk3KSxpPWUoNjcpLG89ZSg1NCksdT1lKDEzMiksYT1lKDUzKSxjPWUoMTg5KSxzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7bi5mPWUoMzMpP3M6ZnVuY3Rpb24odCxuKXtpZih0PW8odCksbj11KG4sITApLGMpdHJ5e3JldHVybiBzKHQsbil9Y2F0Y2godCl7fWlmKGEodCxuKSlyZXR1cm4gaSghci5mLmNhbGwodCxuKSx0W25dKX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NjMpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLGk9ci5yZWdlbmVyYXRvclJ1bnRpbWUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIik+PTAsbz1pJiZyLnJlZ2VuZXJhdG9yUnVudGltZTtpZihyLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDAsdC5leHBvcnRzPWUoMjE1KSxpKXIucmVnZW5lcmF0b3JSdW50aW1lPW87ZWxzZSB0cnl7ZGVsZXRlIHIucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKHQpe3IucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9IWUoNykmJiFlKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlKDEwMSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLGUpe24uZj1lKDUpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNSksaT1lKDE5KSxvPWUoNzYpKCExKSx1PWUoMTAzKShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3ZhciBlLGE9aSh0KSxjPTAscz1bXTtmb3IoZSBpbiBhKWUhPXUmJnIoYSxlKSYmcy5wdXNoKGUpO2Zvcig7bi5sZW5ndGg+YzspcihhLGU9bltjKytdKSYmKH5vKHMsZSl8fHMucHVzaChlKSk7cmV0dXJuIHN9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg4KSxpPWUoMSksbz1lKDQ0KTt0LmV4cG9ydHM9ZSg3KT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LG4pe2kodCk7Zm9yKHZhciBlLHU9byhuKSxhPXUubGVuZ3RoLGM9MDthPmM7KXIuZih0LGU9dVtjKytdLG5bZV0pO3JldHVybiB0fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTkpLGk9ZSg0NykuZixvPXt9LnRvU3RyaW5nLHU9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLGE9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpKHQpfWNhdGNoKHQpe3JldHVybiB1LnNsaWNlKCl9fTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gdSYmXCJbb2JqZWN0IFdpbmRvd11cIj09by5jYWxsKHQpP2EodCk6aShyKHQpKX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDQ0KSxpPWUoNzcpLG89ZSg2NCksdT1lKDEwKSxhPWUoNjMpLGM9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IWN8fGUoMykoZnVuY3Rpb24oKXt2YXIgdD17fSxuPXt9LGU9U3ltYm9sKCkscj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbZV09NyxyLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksNyE9Yyh7fSx0KVtlXXx8T2JqZWN0LmtleXMoYyh7fSxuKSkuam9pbihcIlwiKSE9cn0pP2Z1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXUodCksYz1hcmd1bWVudHMubGVuZ3RoLHM9MSxmPWkuZixsPW8uZjtjPnM7KWZvcih2YXIgaCxwPWEoYXJndW1lbnRzW3MrK10pLHY9Zj9yKHApLmNvbmNhdChmKHApKTpyKHApLGQ9di5sZW5ndGgseT0wO2Q+eTspbC5jYWxsKHAsaD12W3krK10pJiYoZVtoXT1wW2hdKTtyZXR1cm4gZX06Y30sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTEpLGk9ZSg0KSxvPWUoMTYxKSx1PVtdLnNsaWNlLGE9e30sYz1mdW5jdGlvbih0LG4sZSl7aWYoIShuIGluIGEpKXtmb3IodmFyIHI9W10saT0wO2k8bjtpKyspcltpXT1cImFbXCIraStcIl1cIjthW25dPUZ1bmN0aW9uKFwiRixhXCIsXCJyZXR1cm4gbmV3IEYoXCIrci5qb2luKFwiLFwiKStcIilcIil9cmV0dXJuIGFbbl0odCxlKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBuPXIodGhpcyksZT11LmNhbGwoYXJndW1lbnRzLDEpLGE9ZnVuY3Rpb24oKXt2YXIgcj1lLmNvbmNhdCh1LmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhP2MobixyLmxlbmd0aCxyKTpvKG4scix0KX07cmV0dXJuIGkobi5wcm90b3R5cGUpJiYoYS5wcm90b3R5cGU9bi5wcm90b3R5cGUpLGF9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIHI9dm9pZCAwPT09ZTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj90KCk6dC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gcj90KG5bMF0pOnQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gcj90KG5bMF0sblsxXSk6dC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHI/dChuWzBdLG5bMV0sblsyXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0pO2Nhc2UgNDpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdLG5bM10pOnQuY2FsbChlLG5bMF0sblsxXSxuWzJdLG5bM10pfXJldHVybiB0LmFwcGx5KGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKS5wYXJzZUludCxpPWUoNTYpLnRyaW0sbz1lKDEwNyksdT0vXlstK10/MFt4WF0vO3QuZXhwb3J0cz04IT09cihvK1wiMDhcIil8fDIyIT09cihvK1wiMHgxNlwiKT9mdW5jdGlvbih0LG4pe3ZhciBlPWkoU3RyaW5nKHQpLDMpO3JldHVybiByKGUsbj4+PjB8fCh1LnRlc3QoZSk/MTY6MTApKX06cn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMikucGFyc2VGbG9hdCxpPWUoNTYpLnRyaW07dC5leHBvcnRzPTEvcihlKDEwNykrXCItMFwiKSE9LTEvMD9mdW5jdGlvbih0KXt2YXIgbj1pKFN0cmluZyh0KSwzKSxlPXIobik7cmV0dXJuIDA9PT1lJiZcIi1cIj09bi5jaGFyQXQoMCk/LTA6ZX06cn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiZcIk51bWJlclwiIT1yKHQpKXRocm93IFR5cGVFcnJvcihuKTtyZXR1cm4rdH19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQpLGk9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIXIodCkmJmlzRmluaXRlKHQpJiZpKHQpPT09dH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDExMCksaT1NYXRoLnBvdyxvPWkoMiwtNTIpLHU9aSgyLC0yMyksYT1pKDIsMTI3KSooMi11KSxjPWkoMiwtMTI2KSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0KzEvby0xL299O3QuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24odCl7dmFyIG4sZSxpPU1hdGguYWJzKHQpLGY9cih0KTtyZXR1cm4gaTxjP2YqcyhpL2MvdSkqYyp1OihuPSgxK3UvbykqaSxlPW4tKG4taSksZT5hfHxlIT1lP2YqKDEvMCk6ZiplKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSxpKXt0cnl7cmV0dXJuIGk/bihyKGUpWzBdLGVbMV0pOm4oZSl9Y2F0Y2gobil7dmFyIG89dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09byYmcihvLmNhbGwodCkpLG59fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTEpLGk9ZSgxMCksbz1lKDYzKSx1PWUoOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGEsYyl7cihuKTt2YXIgcz1pKHQpLGY9byhzKSxsPXUocy5sZW5ndGgpLGg9Yz9sLTE6MCxwPWM/LTE6MTtpZihlPDIpZm9yKDs7KXtpZihoIGluIGYpe2E9ZltoXSxoKz1wO2JyZWFrfWlmKGgrPXAsYz9oPDA6bDw9aCl0aHJvdyBUeXBlRXJyb3IoXCJSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlXCIpfWZvcig7Yz9oPj0wOmw+aDtoKz1wKWggaW4gZiYmKGE9bihhLGZbaF0saCxzKSk7cmV0dXJuIGF9fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxMCksaT1lKDQ1KSxvPWUoOSk7dC5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKHQsbil7dmFyIGU9cih0aGlzKSx1PW8oZS5sZW5ndGgpLGE9aSh0LHUpLGM9aShuLHUpLHM9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsZj1NYXRoLm1pbigodm9pZCAwPT09cz91Omkocyx1KSktYyx1LWEpLGw9MTtmb3IoYzxhJiZhPGMrZiYmKGw9LTEsYys9Zi0xLGErPWYtMSk7Zi0tID4wOyljIGluIGU/ZVthXT1lW2NdOmRlbGV0ZSBlW2FdLGErPWwsYys9bDtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJue3ZhbHVlOm4sZG9uZTohIXR9fX0sZnVuY3Rpb24odCxuLGUpe2UoNykmJlwiZ1wiIT0vLi9nLmZsYWdzJiZlKDgpLmYoUmVnRXhwLnByb3RvdHlwZSxcImZsYWdzXCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZSg4MSl9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybntlOiExLHY6dCgpfX1jYXRjaCh0KXtyZXR1cm57ZTohMCx2OnR9fX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEpLGk9ZSg0KSxvPWUoMTI1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZihyKHQpLGkobikmJm4uY29uc3RydWN0b3I9PT10KXJldHVybiBuO3ZhciBlPW8uZih0KTtyZXR1cm4oMCxlLnJlc29sdmUpKG4pLGUucHJvbWlzZX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE3NiksaT1lKDU4KSxvPVwiTWFwXCI7dC5leHBvcnRzPWUoODQpKG8sZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7Z2V0OmZ1bmN0aW9uKHQpe3ZhciBuPXIuZ2V0RW50cnkoaSh0aGlzLG8pLHQpO3JldHVybiBuJiZuLnZ9LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiByLmRlZihpKHRoaXMsbyksMD09PXQ/MDp0LG4pfX0sciwhMCl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDgpLmYsaT1lKDQ2KSxvPWUoNTEpLHU9ZSgyMiksYT1lKDQ5KSxjPWUoNTApLHM9ZSgxMTMpLGY9ZSgxNzEpLGw9ZSg0OCksaD1lKDcpLHA9ZSgzOCkuZmFzdEtleSx2PWUoNTgpLGQ9aD9cIl9zXCI6XCJzaXplXCIseT1mdW5jdGlvbih0LG4pe3ZhciBlLHI9cChuKTtpZihcIkZcIiE9PXIpcmV0dXJuIHQuX2lbcl07Zm9yKGU9dC5fZjtlO2U9ZS5uKWlmKGUuaz09bilyZXR1cm4gZX07dC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LG4sZSxzKXt2YXIgZj10KGZ1bmN0aW9uKHQscil7YSh0LGYsbixcIl9pXCIpLHQuX3Q9bix0Ll9pPWkobnVsbCksdC5fZj12b2lkIDAsdC5fbD12b2lkIDAsdFtkXT0wLHZvaWQgMCE9ciYmYyhyLGUsdFtzXSx0KX0pO3JldHVybiBvKGYucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD12KHRoaXMsbiksZT10Ll9pLHI9dC5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgZVtyLmldO3QuX2Y9dC5fbD12b2lkIDAsdFtkXT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLG4pLHI9eShlLHQpO2lmKHIpe3ZhciBpPXIubixvPXIucDtkZWxldGUgZS5faVtyLmldLHIucj0hMCxvJiYoby5uPWkpLGkmJihpLnA9byksZS5fZj09ciYmKGUuX2Y9aSksZS5fbD09ciYmKGUuX2w9byksZVtkXS0tfXJldHVybiEhcn0sZm9yRWFjaDpmdW5jdGlvbih0KXt2KHRoaXMsbik7Zm9yKHZhciBlLHI9dSh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDMpO2U9ZT9lLm46dGhpcy5fZjspZm9yKHIoZS52LGUuayx0aGlzKTtlJiZlLnI7KWU9ZS5wfSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuISF5KHYodGhpcyxuKSx0KX19KSxoJiZyKGYucHJvdG90eXBlLFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdih0aGlzLG4pW2RdfX0pLGZ9LGRlZjpmdW5jdGlvbih0LG4sZSl7dmFyIHIsaSxvPXkodCxuKTtyZXR1cm4gbz9vLnY9ZToodC5fbD1vPXtpOmk9cChuLCEwKSxrOm4sdjplLHA6cj10Ll9sLG46dm9pZCAwLHI6ITF9LHQuX2Z8fCh0Ll9mPW8pLHImJihyLm49byksdFtkXSsrLFwiRlwiIT09aSYmKHQuX2lbaV09bykpLHR9LGdldEVudHJ5Onksc2V0U3Ryb25nOmZ1bmN0aW9uKHQsbixlKXtzKHQsbixmdW5jdGlvbih0LGUpe3RoaXMuX3Q9dih0LG4pLHRoaXMuX2s9ZSx0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxuPXQuX2ssZT10Ll9sO2UmJmUucjspZT1lLnA7cmV0dXJuIHQuX3QmJih0Ll9sPWU9ZT9lLm46dC5fdC5fZik/XCJrZXlzXCI9PW4/ZigwLGUuayk6XCJ2YWx1ZXNcIj09bj9mKDAsZS52KTpmKDAsW2UuayxlLnZdKToodC5fdD12b2lkIDAsZigxKSl9LGU/XCJlbnRyaWVzXCI6XCJ2YWx1ZXNcIiwhZSwhMCksbChuKX19fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxNzYpLGk9ZSg1OCksbz1cIlNldFwiO3QuZXhwb3J0cz1lKDg0KShvLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gci5kZWYoaSh0aGlzLG8pLHQ9MD09PXQ/MDp0LHQpfX0scil9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcixpPWUoMzEpKDApLG89ZSgxNyksdT1lKDM4KSxhPWUoMTU5KSxjPWUoMTc5KSxzPWUoNCksZj1lKDMpLGw9ZSg1OCksaD1cIldlYWtNYXBcIixwPXUuZ2V0V2Vhayx2PU9iamVjdC5pc0V4dGVuc2libGUsZD1jLnVmc3RvcmUseT17fSxnPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sbT17Z2V0OmZ1bmN0aW9uKHQpe2lmKHModCkpe3ZhciBuPXAodCk7cmV0dXJuITA9PT1uP2QobCh0aGlzLGgpKS5nZXQodCk6bj9uW3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbih0LG4pe3JldHVybiBjLmRlZihsKHRoaXMsaCksdCxuKX19LF89dC5leHBvcnRzPWUoODQpKGgsZyxtLGMsITAsITApO2YoZnVuY3Rpb24oKXtyZXR1cm4gNyE9KG5ldyBfKS5zZXQoKE9iamVjdC5mcmVlemV8fE9iamVjdCkoeSksNykuZ2V0KHkpfSkmJihyPWMuZ2V0Q29uc3RydWN0b3IoZyxoKSxhKHIucHJvdG90eXBlLG0pLHUuTkVFRD0hMCxpKFtcImRlbGV0ZVwiLFwiaGFzXCIsXCJnZXRcIixcInNldFwiXSxmdW5jdGlvbih0KXt2YXIgbj1fLnByb3RvdHlwZSxlPW5bdF07byhuLHQsZnVuY3Rpb24obixpKXtpZihzKG4pJiYhdihuKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IHIpO3ZhciBvPXRoaXMuX2ZbdF0obixpKTtyZXR1cm5cInNldFwiPT10P3RoaXM6b31yZXR1cm4gZS5jYWxsKHRoaXMsbixpKX0pfSkpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg1MSksaT1lKDM4KS5nZXRXZWFrLG89ZSgxKSx1PWUoNCksYT1lKDQ5KSxjPWUoNTApLHM9ZSgzMSksZj1lKDE1KSxsPWUoNTgpLGg9cyg1KSxwPXMoNiksdj0wLGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2x8fCh0Ll9sPW5ldyB5KX0seT1mdW5jdGlvbigpe3RoaXMuYT1bXX0sZz1mdW5jdGlvbih0LG4pe3JldHVybiBoKHQuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PW59KX07eS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgbj1nKHRoaXMsdCk7aWYobilyZXR1cm4gblsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhZyh0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxuKXt2YXIgZT1nKHRoaXMsdCk7ZT9lWzFdPW46dGhpcy5hLnB1c2goW3Qsbl0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIG49cCh0aGlzLmEsZnVuY3Rpb24obil7cmV0dXJuIG5bMF09PT10fSk7cmV0dXJufm4mJnRoaXMuYS5zcGxpY2UobiwxKSwhIX5ufX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LG4sZSxvKXt2YXIgcz10KGZ1bmN0aW9uKHQscil7YSh0LHMsbixcIl9pXCIpLHQuX3Q9bix0Ll9pPXYrKyx0Ll9sPXZvaWQgMCx2b2lkIDAhPXImJmMocixlLHRbb10sdCl9KTtyZXR1cm4gcihzLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKCF1KHQpKXJldHVybiExO3ZhciBlPWkodCk7cmV0dXJuITA9PT1lP2QobCh0aGlzLG4pKS5kZWxldGUodCk6ZSYmZihlLHRoaXMuX2kpJiZkZWxldGUgZVt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKHQpe2lmKCF1KHQpKXJldHVybiExO3ZhciBlPWkodCk7cmV0dXJuITA9PT1lP2QobCh0aGlzLG4pKS5oYXModCk6ZSYmZihlLHRoaXMuX2kpfX0pLHN9LGRlZjpmdW5jdGlvbih0LG4sZSl7dmFyIHI9aShvKG4pLCEwKTtyZXR1cm4hMD09PXI/ZCh0KS5zZXQobixlKTpyW3QuX2ldPWUsdH0sdWZzdG9yZTpkfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMjkpLGk9ZSg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gMDt2YXIgbj1yKHQpLGU9aShuKTtpZihuIT09ZSl0aHJvdyBSYW5nZUVycm9yKFwiV3JvbmcgbGVuZ3RoIVwiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQ3KSxpPWUoNzcpLG89ZSgxKSx1PWUoMikuUmVmbGVjdDt0LmV4cG9ydHM9dSYmdS5vd25LZXlzfHxmdW5jdGlvbih0KXt2YXIgbj1yLmYobyh0KSksZT1pLmY7cmV0dXJuIGU/bi5jb25jYXQoZSh0KSk6bn19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQsbixlLHMsZixsLGgscCl7Zm9yKHZhciB2LGQseT1mLGc9MCxtPSEhaCYmYShoLHAsMyk7ZzxzOyl7aWYoZyBpbiBlKXtpZih2PW0/bShlW2ddLGcsbik6ZVtnXSxkPSExLG8odikmJihkPXZbY10sZD12b2lkIDAhPT1kPyEhZDppKHYpKSxkJiZsPjApeT1yKHQsbix2LHUodi5sZW5ndGgpLHksbC0xKS0xO2Vsc2V7aWYoeT49OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBUeXBlRXJyb3IoKTt0W3ldPXZ9eSsrfWcrK31yZXR1cm4geX12YXIgaT1lKDc4KSxvPWUoNCksdT1lKDkpLGE9ZSgyMiksYz1lKDUpKFwiaXNDb25jYXRTcHJlYWRhYmxlXCIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5KSxpPWUoMTA5KSxvPWUoMjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSx1KXt2YXIgYT1TdHJpbmcobyh0KSksYz1hLmxlbmd0aCxzPXZvaWQgMD09PWU/XCIgXCI6U3RyaW5nKGUpLGY9cihuKTtpZihmPD1jfHxcIlwiPT1zKXJldHVybiBhO3ZhciBsPWYtYyxoPWkuY2FsbChzLE1hdGguY2VpbChsL3MubGVuZ3RoKSk7cmV0dXJuIGgubGVuZ3RoPmwmJihoPWguc2xpY2UoMCxsKSksdT9oK2E6YStofX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNDQpLGk9ZSgxOSksbz1lKDY0KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKHZhciBlLHU9aShuKSxhPXIodSksYz1hLmxlbmd0aCxzPTAsZj1bXTtjPnM7KW8uY2FsbCh1LGU9YVtzKytdKSYmZi5wdXNoKHQ/W2UsdVtlXV06dVtlXSk7cmV0dXJuIGZ9fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjUpLGk9ZSgxODYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihyKHRoaXMpIT10KXRocm93IFR5cGVFcnJvcih0K1wiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO3JldHVybiBpKHRoaXMpfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZT1bXTtyZXR1cm4gcih0LCExLGUucHVzaCxlLG4pLGV9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1NYXRoLnNjYWxlfHxmdW5jdGlvbih0LG4sZSxyLGkpe3JldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aHx8dCE9dHx8biE9bnx8ZSE9ZXx8ciE9cnx8aSE9aT9OYU46dD09PTEvMHx8dD09PS0xLzA/dDoodC1uKSooaS1yKS8oZS1uKStyfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNDEzKSxpPWUubihyKSxvPWUoMTM4KSx1PWUubihvKSxhPVwiaHR0cHM6Ly9zMi5kMnNjZG4uY29tL1wiLGM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7dmFyIHI9XCJcIjtpZighbilyZXR1cm4gbjtpZigvXmh0dHBzPy8udGVzdChuKSlyZXR1cm4gbjtpZighZSlyZXR1cm4gYStuO3ZhciBpPWUuc3BsaXQoXCIsXCIpO2lmKDMhPT1pLmxlbmd0aClyZXR1cm4gYStuO2lmKFwid2hcIj09PWlbMF0uc2xpY2UoMCwyKSlyPVwiP2ltYWdlVmlldzIvMS93L1wiLmNvbmNhdChpWzFdLFwiL2gvXCIpLmNvbmNhdChpWzJdKTtlbHNlIGlmKFwiZlwiPT09aVswXVswXSlyPVwiXCI7ZWxzZXtpZihcImNcIj09PWlbMF1bMF0pcmV0dXJuIGErXCJjcm9wLzEvRkZGRkZGL1wiLmNvbmNhdChpWzFdLFwieFwiKS5jb25jYXQoaVsyXSxcIi9cIikuY29uY2F0KG4pO1wiZFwiPT09aVswXVswXT9yPVwiP2ltYWdlTW9ncjIvYXV0by1vcmllbnQvdGh1bWJuYWlsL1wiLmNvbmNhdChpWzFdLFwieFwiKS5jb25jYXQoaVsyXSxcIiEvaW50ZXJsYWNlLzFcIik6XCJlXCI9PT1pWzBdWzBdP3I9XCI/aW1hZ2VNb2dyMi9hdXRvLW9yaWVudC90aHVtYm5haWwvIVwiLmNvbmNhdChpWzFdLFwieFwiKS5jb25jYXQoaVsyXSxcInJ8aW1hZ2VWaWV3Mi8xL3cvXCIpLmNvbmNhdChpWzFdLFwiL2gvXCIpLmNvbmNhdChpWzJdKTpcImdcIj09PWlbMF1bMF0/cj1cIj9pbWFnZVZpZXcyLzIvdy9cIi5jb25jYXQoaVsxXSk6XCJpXCI9PT1pWzBdWzBdP3I9XCI/aW1hZ2VWaWV3Mi8yL2gvXCIuY29uY2F0KGlbMl0pOlwialwiPT09aVswXVswXT9yPVwiP2ltYWdlVmlldzIvMi93L1wiLmNvbmNhdChpWzFdLFwiL2gvXCIpLmNvbmNhdChpWzJdKTpcInZcIj09PWlbMF1bMF0/cj1cIj92ZnJhbWUvanBnL29mZnNldC8wL3cvXCIuY29uY2F0KGlbMV0sXCIvaC9cIikuY29uY2F0KGlbMl0pOlwieFwiPT09aVswXVswXSYmKHI9XCI/dmZyYW1lL2pwZy9vZmZzZXQvMC93L1wiLmNvbmNhdChpWzFdKSl9aWYodCYmaVswXS5sZW5ndGg+MSYmXCJtXCI9PT1pWzBdW2lbMF0ubGVuZ3RoLTFdKXt2YXIgbz0tMSE9PXIuaW5kZXhPZihcIj9cIik/XCJ8XCI6XCI/XCI7cj1cIlwiLmNvbmNhdChyKS5jb25jYXQobykuY29uY2F0KHQuY29tcGFueS53YXRlcm1hcmtfZm9wKX1yZXR1cm4gYStuK3J9fSxzPXtxaW5pdUZhY3Rvcnk6YyxxaW5pdTpjKFwidW5kZWZpbmVkXCI9PXR5cGVvZiB3aW5kb3c/bnVsbDp3aW5kb3cuRCksZGF0ZWZvcm1hdDpmdW5jdGlvbih0LG4pe3ZhciBlLHIsbyxhLGMscztpZighdClyZXR1cm4gdDt0cnl7ZT1uZXcgRGF0ZSh0KX1jYXRjaChuKXtyZXR1cm4gdH12YXIgZj1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnRvU3RyaW5nKCksMT09PXQubGVuZ3RoP1wiMFwiLmNvbmNhdCh0KTp0fSxsPW51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBoPXQubWF0Y2goL14oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KS8pO2lmKGgpe3ZhciBwPWkoKShoLnNsaWNlKDEsNykpLHY9dSgpKHAsNik7bD12WzBdLGM9dlsxXSxyPXZbMl0sbz12WzNdLGE9dls0XSxzPXZbNV19fXN3aXRjaChsfHwobD1lLmdldFVUQ0Z1bGxZZWFyKCksYz1mKGUuZ2V0VVRDTW9udGgoKSsxKSxyPWYoZS5nZXRVVENEYXRlKCkpLG89ZihlLmdldFVUQ0hvdXJzKCkpLGE9ZihlLmdldFVUQ01pbnV0ZXMoKSkscz1mKGUuZ2V0U2Vjb25kcygpKSksbil7Y2FzZVwibGlzdFwiOnJldHVybltwYXJzZUludChsKSxwYXJzZUludChjKSxwYXJzZUludChyKSxwYXJzZUludChvKSxwYXJzZUludChhKSxwYXJzZUludChzKV07Y2FzZVwiZGF0ZVwiOnJldHVyblwiXCIuY29uY2F0KGwsXCItXCIpLmNvbmNhdChjLFwiLVwiKS5jb25jYXQocik7Y2FzZVwiZGF0ZXRpbWVcIjpyZXR1cm5cIlwiLmNvbmNhdChsLFwiLVwiKS5jb25jYXQoYyxcIi1cIikuY29uY2F0KHIsXCIgXCIpLmNvbmNhdChvLFwiOlwiKS5jb25jYXQoYSk7Y2FzZVwiZGF0ZXRpbWVzZWNvbmRzXCI6cmV0dXJuXCJcIi5jb25jYXQobCxcIi1cIikuY29uY2F0KGMsXCItXCIpLmNvbmNhdChyLFwiIFwiKS5jb25jYXQobyxcIjpcIikuY29uY2F0KGEsXCI6XCIpLmNvbmNhdChzKTtjYXNlXCJ0aW1lXCI6cmV0dXJuXCJcIi5jb25jYXQobyxcIjpcIikuY29uY2F0KGEpO2Nhc2VcInVybFwiOnJldHVyblwiXCIuY29uY2F0KGwsXCItXCIpLmNvbmNhdChjLFwiLVwiKS5jb25jYXQocixcIi1cIikuY29uY2F0KG8sXCI6XCIpLmNvbmNhdChhLFwiOlwiKS5jb25jYXQocyk7ZGVmYXVsdDpyZXR1cm4gdH19LGZpbmRWYWx1ZUluZGV4OmZ1bmN0aW9uKHQsbixlLHIpe3I9dm9pZCAwPT09cj9udWxsOnI7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKHRbaV1bbl09PT1lKXJldHVybiBpfXJldHVybiByfSxodG1sVG9UZXh0OmZ1bmN0aW9uKHQpe3JldHVybiB0PXQ/U3RyaW5nKHQpLnJlcGxhY2UoLzxzY3JpcHRcXGJbXjxdKig/Oig/ITxcXC9zY3JpcHQ+KTxbXjxdKikqPFxcL3NjcmlwdD4vZ2ksXCJcIik6XCJcIix0PXQ/U3RyaW5nKHQpLnJlcGxhY2UoLzxzdHlsZVxcYltePF0qKD86KD8hPFxcL3N0eWxlPik8W148XSopKjxcXC9zdHlsZT4vZ2ksXCJcIik6XCJcIix0PXQ/U3RyaW5nKHQpLnJlcGxhY2UoLzxbXj5dKz4vZ20sXCJcIik6XCJcIix0PXQucmVwbGFjZSgvJm5ic3A7L2csXCJcIikucmVwbGFjZSgvJmFtcDsvZyxcIiZcIil9LGRlZmF1bHQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbnVsbD09dD9uOnR9LG9yZGVyVG9DaGluZXNlOmZ1bmN0aW9uKHQpe3JldHVybnswOlwi6Zu2XCIsMTpcIuS4gFwiLDI6XCLkuoxcIiwzOlwi5LiJXCIsNDpcIuWbm1wiLDU6XCLkupRcIiw2Olwi5YWtXCIsNzpcIuS4g1wiLDg6XCLlhatcIiw5Olwi5LmdXCIsMTA6XCLljYFcIn1bdF18fHR9LHRydW5jYXRlOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHQmJnQubGVuZ3RoPm4/dC5zbGljZSgwLG4pK1wiLi4uXCI6dH0scHJpY2Vmb3JtYXQ6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD10fHwwLG49bnx8XCJpbnRcIixcImludFwiPT09bj8oTnVtYmVyKHQpLzEwMCkudG9GaXhlZCgyKTpcImNueWludFwiPT09bj9cIsKlIFwiKyhOdW1iZXIodCkvMTAwKS50b0ZpeGVkKDIpOlwiZmxvYXRcIj09PW4/TnVtYmVyKHQpLnRvRml4ZWQoMik6XCJjbnlmbG9hdFwiPT09bj9cIsKlIFwiK051bWJlcih0KS50b0ZpeGVkKDIpOnZvaWQgMH19O24uYT1zfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPSFlKDMzKSYmIWUoNTIpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlKDEzMSkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDQwKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNTMpLGk9ZSg1NCksbz1lKDQxOCkoITEpLHU9ZSgxMzQpKFwiSUVfUFJPVE9cIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGUsYT1pKHQpLGM9MCxzPVtdO2ZvcihlIGluIGEpZSE9dSYmcihhLGUpJiZzLnB1c2goZSk7Zm9yKDtuLmxlbmd0aD5jOylyKGEsZT1uW2MrK10pJiYofm8ocyxlKXx8cy5wdXNoKGUpKTtyZXR1cm4gc319LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE0KS5kb2N1bWVudDt0LmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUzKSxpPWUoNjEpLG89ZSgxMzQpKFwiSUVfUFJPVE9cIiksdT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PWkodCkscih0LG8pP3Rbb106XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD91Om51bGx9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbixlLGkpe3RyeXtyZXR1cm4gaT9uKHIoZSlbMF0sZVsxXSk6bihlKX1jYXRjaChuKXt2YXIgbz10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1vJiZyKG8uY2FsbCh0KSksbn19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg2MCksaT1lKDEzKShcIml0ZXJhdG9yXCIpLG89QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKHIuQXJyYXk9PT10fHxvW2ldPT09dCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMykoXCJpdGVyYXRvclwiKSxpPSExO3RyeXt2YXIgbz1bN11bcl0oKTtvLnJldHVybj1mdW5jdGlvbigpe2k9ITB9LEFycmF5LmZyb20obyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7aWYoIW4mJiFpKXJldHVybiExO3ZhciBlPSExO3RyeXt2YXIgbz1bN10sdT1vW3JdKCk7dS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ZT0hMH19LG9bcl09ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdChvKX1jYXRjaCh0KXt9cmV0dXJuIGV9fSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybnt2YWx1ZTpuLGRvbmU6ISF0fX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlLmQobixcImFcIixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIHI9ZSg3NCksaT1lLm4ociksbz1lKDk2KSx1PWUubihvKSxhPWUoMTQwKSxjPWUubihhKSxzPWUoOTUpLGY9ZS5uKHMpLGw9ZSgxNDUpLGg9XCJwbGFjZWhvbGRlci81MDB4NTAwL0RERC8wMDAv5pqC5peg5Zu+54mHL1wiLHA9ZnVuY3Rpb24odCl7dmFyIG49ZnVuY3Rpb24obixlKXtyZXR1cm4gdFtuXSYmdFtuXS5zdXBwb3J0P3Rbbl0udmFsdWU6ZX0sZT1uKFwiZm9wX3R5cGVcIixcImVcIik7XCJjXCIhPT1lJiZuKFwiZm9wX3dhdGVybWFya1wiLCExKSYmKGUrPVwibVwiKTt2YXIgcj1uKFwiZm9wX3dpZHRoXCIsNTAwKSxpPW4oXCJmb3BfaGVpZ2h0XCIsNTAwKTtyZXR1cm5cIlwiLmNvbmNhdChlLFwiLFwiKS5jb25jYXQocixcIixcIikuY29uY2F0KGkpfSx2PWZ1bmN0aW9uKHQsbixlKXt2YXIgcj10LmZpbHRlcnMuaHRtbFRvVGV4dChuLmRlc2NyaXB0aW9uKXx8XCJcIixpPXIucmVwbGFjZSgvW1xcbiBcXHJdL2csXCJcIikuc2xpY2UoMCwyNTUpLG89bi5pbWFnZV9rZXl8fGgsdT1uLmltYWdlcz9uLmltYWdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4uaW1hZ2U9dC5maWx0ZXJzLnFpbml1KG4uaW1hZ2UscCh0LnNsaWRlLmxpdmVjb25maWcpKSxufSk6W107aWYobi5kaXNwbGF5PXtpZDpuLmlkLG5hbWU6bi5uYW1lLHB1Yl9kYXRlOnQuZmlsdGVycy5kYXRlZm9ybWF0KG4ucHViX2RhdGUsXCJkYXRldGltZVwiKSxpbWFnZV9rZXk6byxpbWFnZTp0LmZpbHRlcnMucWluaXUobyxwKHQuc2xpZGUubGl2ZWNvbmZpZykpLGltYWdlczp1LHVzZXJjYXRlZ29yeV9kYXRhOm4udXNlcmNhdGVnb3J5X2RhdGEsYXR0cmlidXRlczpuLmF0dHJpYnV0ZXMsZGVzY3JpcHRpb246bi5kZXNjcmlwdGlvbnx8XCJcIixkZXNjcmlwdGlvbl90ZXh0OmkscHJpY2U6bi5wcmljZXx8bnVsbCxjb21wYXJlX3ByaWNlOm4uY29tcGFyZV9wcmljZXx8bnVsbCx0YWdzOm4udGFncyxicmFuZDpuLmJyYW5kLGNvdXBvbnM6bi5jb3Vwb25zfSxudWxsIT09ZSl7dmFyIGE9e2lkOm4uaWQsZGlzcGxheTp7fX07bi5tb2RlbF9uYW1lJiYoYS5tb2RlbF9uYW1lPW4ubW9kZWxfbmFtZSk7dmFyIGM9ITAscz0hMSxsPXZvaWQgMDt0cnl7Zm9yKHZhciB2LGQ9ZigpKGUpOyEoYz0odj1kLm5leHQoKSkuZG9uZSk7Yz0hMCl7dmFyIHk9di52YWx1ZTthLmRpc3BsYXlbeV09bi5kaXNwbGF5W3ldfX1jYXRjaCh0KXtzPSEwLGw9dH1maW5hbGx5e3RyeXtjfHxudWxsPT1kLnJldHVybnx8ZC5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgbH19cmV0dXJuIGF9cmV0dXJuIGNvbnNvbGUud2FybihcIuWHuuS6juaAp+iDveiAg+iZke+8jOiwg+eUqCBsb2FkTGl2ZUl0ZW1zIOWSjCBsb2FkRGV0YWlsSXRlbSDlv4XpobvmjIflrpogZmllbGRzIOWPguaVsO+8gVwiKSxufSxkPXt0aHJvdHRsZTpsLnRocm90dGxlLGl0ZW1IYW5kbGVyOnYsbG9hZExpdmVEYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9YygpKGkuYS5tYXJrKGZ1bmN0aW9uIHQoKXt2YXIgbixlLHIsbyxhLGMscyxmLGw9YXJndW1lbnRzO3JldHVybiBpLmEud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gbj1sLmxlbmd0aD4wJiZ2b2lkIDAhPT1sWzBdP2xbMF06bnVsbCxlPWwubGVuZ3RoPjEmJnZvaWQgMCE9PWxbMV0/bFsxXTp7fSxyPXRoaXMsbz1yLnNsaWRlLmxpdmVjb25maWcsYT17bGltaXQ6by5saW1pdC52YWx1ZSxvcmRlcl9ieTpvLm9yZGVyX2J5LnN1cHBvcnQ/by5vcmRlcl9ieS52YWx1ZTpcIi1pZFwiLGZpbHRlcnM6e319LG8udXNlcl9jYXRlZ29yeS5zdXBwb3J0JiZvLnVzZXJfY2F0ZWdvcnkudmFsdWUmJihhLmZpbHRlcnMuY2F0PW8udXNlcl9jYXRlZ29yeS52YWx1ZS5pZCksXCJwb3N0XCI9PT1vLm1vZGVsLnZhbHVlJiYoYS5maWx0ZXJzLnR5cGU9XCJwb3N0XCIpLFtcImNhdFwiLFwidHlwZVwiLFwicmVjb21tZW5kZWRcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdJiYoYS5maWx0ZXJzW3RdPWVbdF0sZGVsZXRlIGVbdF0pfSksdSgpKGEsZSksYz1vLm1vZGVsLnZhbHVlLFwicHJvZHVjdFwiPT09YyYmKGM9XCJwcHJvZHVjdFwiKSxzPVwicG9zdC9cIi5jb25jYXQoYyxcIi9nZXRfbGlzdF9ieV93ZWJcIiksdC5uZXh0PTE0LHIuZmV0Y2gocyxhKTtjYXNlIDE0OnJldHVybiBmPXQuc2VudCxmLmRhdGEub2JqZWN0cz1mLmRhdGEub2JqZWN0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHYocix0LG4pfSksdC5hYnJ1cHQoXCJyZXR1cm5cIixmLmRhdGEpO2Nhc2UgMTc6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGxvYWRMaXZlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgdD1jKCkoaS5hLm1hcmsoZnVuY3Rpb24gdCgpe3ZhciBuLGUscixvPWFyZ3VtZW50cztyZXR1cm4gaS5hLndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG49by5sZW5ndGg+MCYmdm9pZCAwIT09b1swXT9vWzBdOm51bGwsZT1vLmxlbmd0aD4xJiZ2b2lkIDAhPT1vWzFdP29bMV06e30sdC5uZXh0PTQsdGhpcy5sb2FkTGl2ZURhdGEobixlKTtjYXNlIDQ6cmV0dXJuIHI9dC5zZW50LHQuYWJydXB0KFwicmV0dXJuXCIsci5vYmplY3RzKTtjYXNlIDY6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLF9sb2FkRGV0YWlsSXRlbTpmdW5jdGlvbigpe3ZhciB0PWMoKShpLmEubWFyayhmdW5jdGlvbiB0KG4sZSl7dmFyIHIsbyx1LGEsYyxzLGYsbD1hcmd1bWVudHM7cmV0dXJuIGkuYS53cmFwKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiByPWwubGVuZ3RoPjImJnZvaWQgMCE9PWxbMl0mJmxbMl0sbz10aGlzLHU9by5zbGlkZS5saXZlY29uZmlnLGE9e2lkOnBhcnNlSW50KG4uaWQpLGlzX2xvYWRfY2F0OnJ9LGM9dS5tb2RlbC52YWx1ZSxcInByb2R1Y3RcIj09PWMmJihjPVwicHByb2R1Y3RcIikscz1cInBvc3QvXCIuY29uY2F0KGMsXCIvZ2V0X2RldGFpbF9ieV93ZWJcIiksdC5uZXh0PTksby5mZXRjaChzLGEpO2Nhc2UgOTpyZXR1cm4gZj10LnNlbnQsdC5hYnJ1cHQoXCJyZXR1cm5cIix2KG8sZi5kYXRhLm9iamVjdCxlKSk7Y2FzZSAxMTpjYXNlXCJlbmRcIjpyZXR1cm4gdC5zdG9wKCl9fSx0LHRoaXMpfSkpO3JldHVybiBmdW5jdGlvbihuLGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksbG9hZERldGFpbEl0ZW06ZnVuY3Rpb24oKXt2YXIgdD1jKCkoaS5hLm1hcmsoZnVuY3Rpb24gdCgpe3ZhciBuLGUscixvLHU9YXJndW1lbnRzO3JldHVybiBpLmEud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDppZihuPXUubGVuZ3RoPjAmJnZvaWQgMCE9PXVbMF0/dVswXTpudWxsLGU9dS5sZW5ndGg+MSYmdm9pZCAwIT09dVsxXSYmdVsxXSxyPXRoaXMsIXIucXVlcnkuaWQpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdChcInJldHVyblwiLHIuX2xvYWREZXRhaWxJdGVtKHIucXVlcnksbixlKSk7Y2FzZSA3OnJldHVybiB0Lm5leHQ9OSxyLmxvYWRMaXZlSXRlbXMobik7Y2FzZSA5OnJldHVybiBvPXQuc2VudCx0LmFicnVwdChcInJldHVyblwiLG9bMF0pO2Nhc2UgMTE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGxvYWRSZWxhdGVkSXRlbXM6ZnVuY3Rpb24oKXt2YXIgdD1jKCkoaS5hLm1hcmsoZnVuY3Rpb24gdChuKXt2YXIgZSxyLG8sYSxjLHMsZixsLGgscCxkPWFyZ3VtZW50cztyZXR1cm4gaS5hLndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGU9ZC5sZW5ndGg+MSYmdm9pZCAwIT09ZFsxXT9kWzFdOlwicHJvZHVjdFwiLHI9ZC5sZW5ndGg+MiYmdm9pZCAwIT09ZFsyXT9kWzJdOjEwLG89ZC5sZW5ndGg+MyYmdm9pZCAwIT09ZFszXT9kWzNdOm51bGwsYT1kLmxlbmd0aD40JiZ2b2lkIDAhPT1kWzRdP2RbNF06e30sYz10aGlzLHM9Yy5zbGlkZS5saXZlY29uZmlnLGY9e2Zyb21faWQ6bix0b190eXBlOmUsbGltaXQ6cn0sdSgpKGYsYSksbD1zLm1vZGVsLnZhbHVlLFwicHJvZHVjdFwiPT09bCYmKGw9XCJwcHJvZHVjdFwiKSxoPVwicG9zdC9cIi5jb25jYXQobCxcIi9nZXRfcmVsYXRlZF9saXN0XCIpLHQubmV4dD0xMyxjLmZldGNoKGgsZik7Y2FzZSAxMzpyZXR1cm4gcD10LnNlbnQsdC5hYnJ1cHQoXCJyZXR1cm5cIixwLmRhdGEub2JqZWN0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHYoYyx0LG8pfSkpO2Nhc2UgMTU6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxsb2FkUXVlcnlEYXRhOmZ1bmN0aW9uKCl7dmFyIHQ9YygpKGkuYS5tYXJrKGZ1bmN0aW9uIHQoKXt2YXIgbixlLHIsbyx1LGEsYyxzPWFyZ3VtZW50cztyZXR1cm4gaS5hLndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIG49cy5sZW5ndGg+MCYmdm9pZCAwIT09c1swXT9zWzBdOm51bGwsZT1zLmxlbmd0aD4xJiZ2b2lkIDAhPT1zWzFdP3NbMV06e30scj10aGlzLG89ci5zbGlkZS5saXZlY29uZmlnLHU9ZS5tb2RlbF9uYW1lfHxvLm1vZGVsLnZhbHVlLFwicHJvZHVjdFwiPT09dSYmKHU9XCJwcHJvZHVjdFwiKSxhPVwicG9zdC9cIi5jb25jYXQodSxcIi9nZXRfcXVlcnlfbGlzdFwiKSx0Lm5leHQ9OSxyLmZldGNoKGEsZSk7Y2FzZSA5OnJldHVybiBjPXQuc2VudCxjLmRhdGEub2JqZWN0cz1jLmRhdGEub2JqZWN0cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHYocix0LG4pfSksdC5hYnJ1cHQoXCJyZXR1cm5cIixjLmRhdGEpO2Nhc2UgMTI6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzIpLGk9ZSg2Niksbz1lKDEzKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7dmFyIGUsdT1yKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT11fHx2b2lkIDA9PShlPXIodSlbb10pP246aShlKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG8sdT1lKDM3KSxhPWUoNDM0KSxjPWUoMTkyKSxzPWUoMTMxKSxmPWUoMTQpLGw9Zi5wcm9jZXNzLGg9Zi5zZXRJbW1lZGlhdGUscD1mLmNsZWFySW1tZWRpYXRlLHY9Zi5NZXNzYWdlQ2hhbm5lbCxkPWYuRGlzcGF0Y2gseT0wLGc9e30sbT1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLF89ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZihnLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj1nW3RdO2RlbGV0ZSBnW3RdLG4oKX19LHc9ZnVuY3Rpb24odCl7Xy5jYWxsKHQuZGF0YSl9O2gmJnB8fChoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1bXSxlPTE7YXJndW1lbnRzLmxlbmd0aD5lOyluLnB1c2goYXJndW1lbnRzW2UrK10pO3JldHVybiBnWysreV09ZnVuY3Rpb24oKXthKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxuKX0scih5KSx5fSxwPWZ1bmN0aW9uKHQpe2RlbGV0ZSBnW3RdfSxcInByb2Nlc3NcIj09ZSg2OSkobCk/cj1mdW5jdGlvbih0KXtsLm5leHRUaWNrKHUoXyx0LDEpKX06ZCYmZC5ub3c/cj1mdW5jdGlvbih0KXtkLm5vdyh1KF8sdCwxKSl9OnY/KGk9bmV3IHYsbz1pLnBvcnQyLGkucG9ydDEub25tZXNzYWdlPXcscj11KG8ucG9zdE1lc3NhZ2UsbywxKSk6Zi5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWYuaW1wb3J0U2NyaXB0cz8ocj1mdW5jdGlvbih0KXtmLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIix3LCExKSk6cj1tIGluIHMoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7Yy5hcHBlbmRDaGlsZChzKFwic2NyaXB0XCIpKVttXT1mdW5jdGlvbigpe2MucmVtb3ZlQ2hpbGQodGhpcyksXy5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dCh1KF8sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OmgsY2xlYXI6cH19LGZ1bmN0aW9uKHQsbil7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZTohMSx2OnQoKX19Y2F0Y2godCl7cmV0dXJue2U6ITAsdjp0fX19fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMiksaT1lKDI2KSxvPWUoMTQzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZihyKHQpLGkobikmJm4uY29uc3RydWN0b3I9PT10KXJldHVybiBuO3ZhciBlPW8uZih0KTtyZXR1cm4oMCxlLnJlc29sdmUpKG4pLGUucHJvbWlzZX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE0KSxpPWUoNiksbz1lKDI1KSx1PWUoMzMpLGE9ZSgxMykoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpW3RdP2lbdF06clt0XTt1JiZuJiYhblthXSYmby5mKG4sYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UuZChuLFwiYVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KTt2YXIgcj1lKDczKSxpPWUubihyKSxvPWUoNzQpLHU9ZS5uKG8pLGE9ZSg5OCksYz1lLm4oYSkscz1lKDE0MCksZj1lLm4ocyksbD1lKDE0NiksaD1lLm4obCkscD1lKDE0Nyksdj1lLm4ocCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobixlKXtoKCkodGhpcyx0KSx0aGlzLmR3PW4sdGhpcy5zbGlkZT1lfXJldHVybiB2KCkodCxbe2tleTpcIl9jaGVja1wiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuc2xpZGUucmVsYXRlZF9wYXBwX2lkKXRocm93IG5ldyBFcnJvcihcIuivt+WFiOWIm+W7uuWFs+iBlOW6lOeUqOeoi+W6j++8gVwiKX19LHtrZXk6XCJnZXRQbGF5SWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVjaygpLHRoaXMuc2xpZGUucmVsYXRlZF9wYXBwX2lkfX0se2tleTpcImdldFBsYXlEYXRhXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2soKSx0aGlzLmR3LnJlcXVlc3QoXCJkeW5hbWljX2dldC9jb21wYW55X3BhcHAvZ2V0X3BhcHBfZGF0YVwiLHtpZDp0aGlzLmdldFBsYXlJZCgpfSl9fSx7a2V5OlwiZ2V0UGxheVVzZXJcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jaGVjaygpLHRoaXMuZHcucmVxdWVzdChcImR5bmFtaWNfZ2V0L2NvbXBhbnlfcGFwcC9nZXRfc2l0ZXVzZXJfZGF0YVwiLHtpZDp0aGlzLmdldFBsYXlJZCgpfSl9fSx7a2V5OlwiZGlzcGF0Y2hQcml6ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIHRoaXMuX2NoZWNrKCksdGhpcy5kdy5yZXF1ZXN0KFwiZHluYW1pY19wb3N0L2NvbXBhbnlfcGFwcC9kaXNwYXRjaF9wcml6ZVwiLHtpZDp0aGlzLmdldFBsYXlJZCgpLHNjb3JlOnR9KX19XSksdH0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuLGUpe2goKSh0aGlzLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGxhdGZvcm1cIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6XCJkd2FwcFwifSksdGhpcy5kdz1uLHRoaXMuc2xpZGU9ZSx0aGlzLnBsYXk9bmV3IGQobixlKX1yZXR1cm4gdigpKHQsW3trZXk6XCJpc1VzZXJMb2dpblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9ZigpKHUuYS5tYXJrKGZ1bmN0aW9uIHQoKXt2YXIgbj10aGlzO3JldHVybiB1LmEud3JhcChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gdC5hYnJ1cHQoXCJyZXR1cm5cIixuZXcgYy5hKGZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5kdy5nZXRTdG9yYWdlU3luYyhcImR3YXBwOmluc3RhbGxhdGlvblwiKXx8e307dChCb29sZWFuKHIuc2l0ZXVzZXJfdG9rZW4pKX0pKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpfSx7a2V5Olwid3hHb3RvTG9naW5cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWkoKSh0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4rXCI9XCIrdFtuXX0pLmpvaW4oXCImXCIpLGU9bj9cIj9cIituOlwiXCI7dGhpcy5kdy5nb1RvSHJlZihcImFjY291bnQtbG9naW5cIitlKX19LHtrZXk6XCJ3eExvZ2luXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuISEodGhpcy5kdy5nZXRTdG9yYWdlU3luYyhcImR3YXBwOmluc3RhbGxhdGlvblwiKXx8e30pLnNpdGV1c2VyX3Rva2VufHwodGhpcy53eEdvdG9Mb2dpbih0KSwhMSl9fSx7a2V5OlwiaXNBZG1pbkxvZ2luXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1mKCkodS5hLm1hcmsoZnVuY3Rpb24gdCgpe3ZhciBuPXRoaXM7cmV0dXJuIHUuYS53cmFwKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOnJldHVybiB0LmFicnVwdChcInJldHVyblwiLG5ldyBjLmEoZnVuY3Rpb24odCxlKXt2YXIgcj1uLmR3LmdldFN0b3JhZ2VTeW5jKFwiZHdhcHA6aW5zdGFsbGF0aW9uXCIpfHx7fTt0KEJvb2xlYW4oci51c2VyX3Rva2VuKSl9KSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19LHQsdGhpcyl9KSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0se2tleTpcInd4R290b0FkbWluTG9naW5cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWkoKSh0KS5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4rXCI9XCIrdFtuXX0pLmpvaW4oXCImXCIpLGU9bj9cIj9cIituOlwiXCI7dGhpcy5kdy5nb1RvSHJlZihcInBsdWdpbi11c2VybG9naW5cIitlKX19LHtrZXk6XCJ3eEFkbWluTG9naW5cIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4hISh0aGlzLmR3LmdldFN0b3JhZ2VTeW5jKFwiZHdhcHA6aW5zdGFsbGF0aW9uXCIpfHx7fSkudXNlcl90b2tlbnx8KHRoaXMud3hHb3RvQWRtaW5Mb2dpbih0KSwhMSl9fSx7a2V5Olwid3hBcHBMb2dpblwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSx7a2V5OlwiZ2V0UGFwcFNsdWdcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWRlLnNsdWd8fHRoaXMuc2xpZGUubWV0YS5wYXBwX3NsdWd9fSx7a2V5OlwiZ2V0UGFnZVBhcmFtc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHcucXVlcnl9fSx7a2V5OlwiZ2V0TWFzdGVyUGFnZXRlbXBsYXRlSWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNsaWRlLm1hc3Rlcl9wYWdldGVtcGxhdGVfaWR8fHBhcnNlSW50KHRoaXMuc2xpZGUudHlwZSl9fSx7a2V5OlwiYnVpbGRQYXBwVXJsXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGU9dGhpcy5nZXRQYXBwU2x1ZygpLHI9bj9pKCkobikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiXCIuY29uY2F0KHQsXCI9XCIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoblt0XSkpfSkuam9pbihcIiZcIik6XCJcIjtyZXR1cm5cImFwcF9cIi5jb25jYXQoZSxcIi1cIikuY29uY2F0KHQpLmNvbmNhdChyP1wiP1wiK3I6XCJcIil9fSx7a2V5OlwiaXNcIix2YWx1ZTpmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwibWFzdGVyXCI6cmV0dXJuISF0aGlzLnNsaWRlLnNsdWc7Y2FzZVwic2xhdmVcIjpyZXR1cm4hIXRoaXMuc2xpZGUubWFzdGVyX3BhZ2V0ZW1wbGF0ZV9pZDtkZWZhdWx0OmNvbnNvbGUud2FybihcIkFwcFByb3h5IGVycm9yOiBvbmx5IG1hc3Rlci9zbGF2ZSBpcyBzdXBwb3J0XCIpfX19LHtrZXk6XCJnZXREYXRhc2V0SWRcIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGUubWFzdGVyX2RhdGFzZXRfaWQpcmV0dXJuIHRoaXMuc2xpZGUubWFzdGVyX2RhdGFzZXRfaWQ7aWYoIXRoaXMuc2xpZGUuZGF0YXNldF9pZCl0aHJvdyBuZXcgRXJyb3IoXCJBcHBQcm94eSBlcnJvcjogZGF0YXNldCBpcyByZXF1aXJlZC5cIik7cmV0dXJuIHRoaXMuc2xpZGUuZGF0YXNldF9pZH19LHtrZXk6XCJnZXRSb3dzXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YXNldF9pZD10aGlzLmdldERhdGFzZXRJZCgpLHRoaXMuZHcuZmV0Y2goXCJwb3N0L2RhdGFzZXRyb3cvZ2V0X3Jvd3NcIix0KX19LHtrZXk6XCJnZXRRdWVyeVJvd3NcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhc2V0X2lkPXRoaXMuZ2V0RGF0YXNldElkKCksdGhpcy5kdy5mZXRjaChcInBvc3QvZGF0YXNldHF1ZXJ5L2dldF9yb3dzXCIsdCl9fSx7a2V5OlwicXVlcnlcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5nZXRSb3dzKHtxdWVyeTp0fSl9fSx7a2V5OlwiY3JlYXRlUm93XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgZT17ZGF0YTpuLGlzX2FkbWluOiExLGRhdGFzZXRfaWQ6dGhpcy5nZXREYXRhc2V0SWQoKSxkYXRhc2V0dGFibGU6dH07cmV0dXJuIHRoaXMuZHcuZmV0Y2goXCJwb3N0L2RhdGFzZXRyb3cvY3JlYXRlX3Jvd1wiLGUpfX0se2tleTpcInVwZGF0ZVJvd1wiLHZhbHVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9e2RhdGE6bixpc19hZG1pbjohMSxkYXRhc2V0X2lkOnRoaXMuZ2V0RGF0YXNldElkKCksZGF0YXNldHJvdzp0fTtyZXR1cm4gdGhpcy5kdy5mZXRjaChcInBvc3QvZGF0YXNldHJvdy91cGRhdGVfcm93XCIsZSl9fSx7a2V5OlwicmVtb3ZlUm93XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49e2lzX2FkbWluOiExLGRhdGFzZXRfaWQ6dGhpcy5nZXREYXRhc2V0SWQoKSxkYXRhc2V0cm93OnR9O3JldHVybiB0aGlzLmR3LmZldGNoKFwicG9zdC9kYXRhc2V0cm93L3JlbW92ZV9yb3dcIixuKX19LHtrZXk6XCJydW5cIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9e2lzX2FkbWluOiExLHBhZ2V0ZW1wbGF0ZV9pZDp0aGlzLnNsaWRlLm1hc3Rlcl9wYWdldGVtcGxhdGVfaWR8fHBhcnNlSW50KHRoaXMuc2xpZGUudHlwZSksZGF0YXNldF9pZDp0aGlzLmdldERhdGFzZXRJZCgpLGFjdGlvbjp0LGt3YXJnczplfTtyZXR1cm4gbmV3IGMuYShmdW5jdGlvbihlLGkpe24uZHcuZmV0Y2goXCJwb3N0L2Njb2RlL3J1bl9jY29kZVwiLHIpLnRoZW4oZnVuY3Rpb24obil7XCJzdWNjZXNzXCI9PT1uLmRhdGEuc3RhdHVzP2Uobi5kYXRhLnJlc3VsdCk6KGNvbnNvbGUuZXJyb3IoXCJDY29kZSBcIi5jb25jYXQodCxcIiBlcnJvcjogXCIpLmNvbmNhdChuLmRhdGEubWVzc2FnZSkpLGkobmV3IEVycm9yKSl9KX0pfX1dKSx0fSgpfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoNDQzKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjkpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PXIodCl9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1NCksaT1lKDIwOCkuZixvPXt9LnRvU3RyaW5nLHU9XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdLGE9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBpKHQpfWNhdGNoKHQpe3JldHVybiB1LnNsaWNlKCl9fTt0LmV4cG9ydHMuZj1mdW5jdGlvbih0KXtyZXR1cm4gdSYmXCJbb2JqZWN0IFdpbmRvd11cIj09by5jYWxsKHQpP2EodCk6aShyKHQpKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE5MSksaT1lKDEzNikuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIik7bi5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gcih0LGkpfX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gdC5leHBvcnRzPXI9aXx8ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIGU9YXJndW1lbnRzW25dO2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiYodFtyXT1lW3JdKX1yZXR1cm4gdH0sci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIGk9ZSg5Nik7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtpZighcih0KXx8dC5fdCE9PW4pdGhyb3cgVHlwZUVycm9yKFwiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBcIituK1wiIHJlcXVpcmVkIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDIxMik7ZS5kKG4sXCJhXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5hfSksZS5kKG4sXCJiXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5ifSksZS5kKG4sXCJjXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5jfSksZS5kKG4sXCJkXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5lfSksZS5kKG4sXCJlXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5mfSksZS5kKG4sXCJmXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5pfSksZS5kKG4sXCJnXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5qfSksZS5kKG4sXCJoXCIsZnVuY3Rpb24oKXtyZXR1cm4gci5rfSk7ZSg0OTApfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbnVsbCE9PXQmJlwib2JqZWN0XCI9PT1wKCkodCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm5cIltvYmplY3QgT2JqZWN0XVwiPT09bS5jYWxsKHQpfWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gdSh0KXtpZighXy50ZXN0KHQpKXt2YXIgbj10LnNwbGl0KFwiLlwiKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxuLmxlbmd0aDtlKyspe2lmKCF0KXJldHVybjt0PXRbbltlXV19cmV0dXJuIHR9fX1mdW5jdGlvbiBhKHQsbil7cmV0dXJuIHcuY2FsbCh0LG4pfWZ1bmN0aW9uIGModCxuLGUscil7bCgpKHQsbix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEhcix3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBzKHQsbil7aWYodC5sZW5ndGgpe3ZhciBlPXQuaW5kZXhPZihuKTtpZihlPi0xKXJldHVybiB0LnNwbGljZShlLDEpfX1lLmQobixcImNcIixmdW5jdGlvbigpe3JldHVybiB2fSksZS5kKG4sXCJoXCIsZnVuY3Rpb24oKXtyZXR1cm4gZH0pLGUuZChuLFwiZVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHl9KSxlLmQobixcImRcIixmdW5jdGlvbigpe3JldHVybiBnfSksbi5mPXIsbi5nPWksbi5pPW8sbi5qPXUsbi5iPWEsbi5hPWMsbi5rPXM7dmFyIGY9ZSgxMDApLGw9ZS5uKGYpLGg9ZSg2MikscD1lLm4oaCksdj1cIl9fcHJvdG9fX1wiaW57fSxkPWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fSx5PWZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fSxnPUFycmF5LmlzQXJyYXksbT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLF89L1teXFx3LiRdLyx3PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgcj1lKDIxNCk7bi5kZWZhdWx0PXIuYX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNzQpLGk9ZS5uKHIpLG89ZSgyMTYpLHU9KGUubihvKSxlKDE1MykpLGE9KGUubih1KSxlKDg5KSksYz1lLm4oYSkscz1lKDE4OCksZj1lKDE5OCksbD1lKDIwNCksaD1lKDQ0MikscD1lKDQ1Miksdj1lKDE0NSk7bi5hPXtyZWdlbmVyYXRvclJ1bnRpbWU6aS5hLGV2ZW50czpjLmEsdXRpbHM6dixmaWx0ZXJzOnMuYSxEd01peGluOmYuYSxEd0FwcFByb3h5OmwuYSxidWlsZFBhZ2VDb25maWc6aC5hLGJ1aWxkRHc6cC5hfX0sZnVuY3Rpb24odCxuKXshZnVuY3Rpb24obil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LG4sZSxyKXt2YXIgbz1uJiZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIGk/bjppLHU9T2JqZWN0LmNyZWF0ZShvLnByb3RvdHlwZSksYT1uZXcgcChyfHxbXSk7cmV0dXJuIHUuX2ludm9rZT1zKHQsZSxhKSx1fWZ1bmN0aW9uIHIodCxuLGUpe3RyeXtyZXR1cm57dHlwZTpcIm5vcm1hbFwiLGFyZzp0LmNhbGwobixlKX19Y2F0Y2godCl7cmV0dXJue3R5cGU6XCJ0aHJvd1wiLGFyZzp0fX19ZnVuY3Rpb24gaSgpe31mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIHUoKXt9ZnVuY3Rpb24gYSh0KXtbXCJuZXh0XCIsXCJ0aHJvd1wiLFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faW52b2tlKG4sdCl9fSl9ZnVuY3Rpb24gYyh0KXtmdW5jdGlvbiBuKGUsaSxvLHUpe3ZhciBhPXIodFtlXSx0LGkpO2lmKFwidGhyb3dcIiE9PWEudHlwZSl7dmFyIGM9YS5hcmcscz1jLnZhbHVlO3JldHVybiBzJiZcIm9iamVjdFwiPT10eXBlb2YgcyYmbS5jYWxsKHMsXCJfX2F3YWl0XCIpP1Byb21pc2UucmVzb2x2ZShzLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odCl7bihcIm5leHRcIix0LG8sdSl9LGZ1bmN0aW9uKHQpe24oXCJ0aHJvd1wiLHQsbyx1KX0pOlByb21pc2UucmVzb2x2ZShzKS50aGVuKGZ1bmN0aW9uKHQpe2MudmFsdWU9dCxvKGMpfSx1KX11KGEuYXJnKX1mdW5jdGlvbiBlKHQsZSl7ZnVuY3Rpb24gcigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe24odCxlLHIsaSl9KX1yZXR1cm4gaT1pP2kudGhlbihyLHIpOnIoKX12YXIgaTt0aGlzLl9pbnZva2U9ZX1mdW5jdGlvbiBzKHQsbixlKXt2YXIgaT1QO3JldHVybiBmdW5jdGlvbihvLHUpe2lmKGk9PT1FKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYoaT09PWope2lmKFwidGhyb3dcIj09PW8pdGhyb3cgdTtyZXR1cm4gZCgpfWZvcihlLm1ldGhvZD1vLGUuYXJnPXU7Oyl7dmFyIGE9ZS5kZWxlZ2F0ZTtpZihhKXt2YXIgYz1mKGEsZSk7aWYoYyl7aWYoYz09PUEpY29udGludWU7cmV0dXJuIGN9fWlmKFwibmV4dFwiPT09ZS5tZXRob2QpZS5zZW50PWUuX3NlbnQ9ZS5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1lLm1ldGhvZCl7aWYoaT09PVApdGhyb3cgaT1qLGUuYXJnO2UuZGlzcGF0Y2hFeGNlcHRpb24oZS5hcmcpfWVsc2VcInJldHVyblwiPT09ZS5tZXRob2QmJmUuYWJydXB0KFwicmV0dXJuXCIsZS5hcmcpO2k9RTt2YXIgcz1yKHQsbixlKTtpZihcIm5vcm1hbFwiPT09cy50eXBlKXtpZihpPWUuZG9uZT9qOmsscy5hcmc9PT1BKWNvbnRpbnVlO3JldHVybnt2YWx1ZTpzLmFyZyxkb25lOmUuZG9uZX19XCJ0aHJvd1wiPT09cy50eXBlJiYoaT1qLGUubWV0aG9kPVwidGhyb3dcIixlLmFyZz1zLmFyZyl9fX1mdW5jdGlvbiBmKHQsbil7dmFyIGU9dC5pdGVyYXRvcltuLm1ldGhvZF07aWYoZT09PXkpe2lmKG4uZGVsZWdhdGU9bnVsbCxcInRocm93XCI9PT1uLm1ldGhvZCl7aWYodC5pdGVyYXRvci5yZXR1cm4mJihuLm1ldGhvZD1cInJldHVyblwiLG4uYXJnPXksZih0LG4pLFwidGhyb3dcIj09PW4ubWV0aG9kKSlyZXR1cm4gQTtuLm1ldGhvZD1cInRocm93XCIsbi5hcmc9bmV3IFR5cGVFcnJvcihcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIil9cmV0dXJuIEF9dmFyIGk9cihlLHQuaXRlcmF0b3Isbi5hcmcpO2lmKFwidGhyb3dcIj09PWkudHlwZSlyZXR1cm4gbi5tZXRob2Q9XCJ0aHJvd1wiLG4uYXJnPWkuYXJnLG4uZGVsZWdhdGU9bnVsbCxBO3ZhciBvPWkuYXJnO3JldHVybiBvP28uZG9uZT8oblt0LnJlc3VsdE5hbWVdPW8udmFsdWUsbi5uZXh0PXQubmV4dExvYyxcInJldHVyblwiIT09bi5tZXRob2QmJihuLm1ldGhvZD1cIm5leHRcIixuLmFyZz15KSxuLmRlbGVnYXRlPW51bGwsQSk6bzoobi5tZXRob2Q9XCJ0aHJvd1wiLG4uYXJnPW5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSxuLmRlbGVnYXRlPW51bGwsQSl9ZnVuY3Rpb24gbCh0KXt2YXIgbj17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKG4uY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYobi5maW5hbGx5TG9jPXRbMl0sbi5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChuKX1mdW5jdGlvbiBoKHQpe3ZhciBuPXQuY29tcGxldGlvbnx8e307bi50eXBlPVwibm9ybWFsXCIsZGVsZXRlIG4uYXJnLHQuY29tcGxldGlvbj1ufWZ1bmN0aW9uIHAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOlwicm9vdFwifV0sdC5mb3JFYWNoKGwsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gdih0KXtpZih0KXt2YXIgbj10W3ddO2lmKG4pcmV0dXJuIG4uY2FsbCh0KTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIGU9LTEscj1mdW5jdGlvbiBuKCl7Zm9yKDsrK2U8dC5sZW5ndGg7KWlmKG0uY2FsbCh0LGUpKXJldHVybiBuLnZhbHVlPXRbZV0sbi5kb25lPSExLG47cmV0dXJuIG4udmFsdWU9eSxuLmRvbmU9ITAsbn07cmV0dXJuIHIubmV4dD1yfX1yZXR1cm57bmV4dDpkfX1mdW5jdGlvbiBkKCl7cmV0dXJue3ZhbHVlOnksZG9uZTohMH19dmFyIHksZz1PYmplY3QucHJvdG90eXBlLG09Zy5oYXNPd25Qcm9wZXJ0eSxfPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sdz1fLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixiPV8uYXN5bmNJdGVyYXRvcnx8XCJAQGFzeW5jSXRlcmF0b3JcIix4PV8udG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiLFM9XCJvYmplY3RcIj09dHlwZW9mIHQsTz1uLnJlZ2VuZXJhdG9yUnVudGltZTtpZihPKXJldHVybiB2b2lkKFMmJih0LmV4cG9ydHM9TykpO089bi5yZWdlbmVyYXRvclJ1bnRpbWU9Uz90LmV4cG9ydHM6e30sTy53cmFwPWU7dmFyIFA9XCJzdXNwZW5kZWRTdGFydFwiLGs9XCJzdXNwZW5kZWRZaWVsZFwiLEU9XCJleGVjdXRpbmdcIixqPVwiY29tcGxldGVkXCIsQT17fSxNPXt9O01bd109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dmFyIFQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLEY9VCYmVChUKHYoW10pKSk7RiYmRiE9PWcmJm0uY2FsbChGLHcpJiYoTT1GKTt2YXIgTD11LnByb3RvdHlwZT1pLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE0pO28ucHJvdG90eXBlPUwuY29uc3RydWN0b3I9dSx1LmNvbnN0cnVjdG9yPW8sdVt4XT1vLmRpc3BsYXlOYW1lPVwiR2VuZXJhdG9yRnVuY3Rpb25cIixPLmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24odCl7dmFyIG49XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4hIW4mJihuPT09b3x8XCJHZW5lcmF0b3JGdW5jdGlvblwiPT09KG4uZGlzcGxheU5hbWV8fG4ubmFtZSkpfSxPLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCx1KToodC5fX3Byb3RvX189dSx4IGluIHR8fCh0W3hdPVwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTCksdH0sTy5hd3JhcD1mdW5jdGlvbih0KXtyZXR1cm57X19hd2FpdDp0fX0sYShjLnByb3RvdHlwZSksYy5wcm90b3R5cGVbYl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sTy5Bc3luY0l0ZXJhdG9yPWMsTy5hc3luYz1mdW5jdGlvbih0LG4scixpKXt2YXIgbz1uZXcgYyhlKHQsbixyLGkpKTtyZXR1cm4gTy5pc0dlbmVyYXRvckZ1bmN0aW9uKG4pP286by5uZXh0KCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KX0sYShMKSxMW3hdPVwiR2VuZXJhdG9yXCIsTFt3XT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxMLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IEdlbmVyYXRvcl1cIn0sTy5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBuPVtdO2Zvcih2YXIgZSBpbiB0KW4ucHVzaChlKTtyZXR1cm4gbi5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7bi5sZW5ndGg7KXt2YXIgcj1uLnBvcCgpO2lmKHIgaW4gdClyZXR1cm4gZS52YWx1ZT1yLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LE8udmFsdWVzPXYscC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9eSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPVwibmV4dFwiLHRoaXMuYXJnPXksdGhpcy50cnlFbnRyaWVzLmZvckVhY2goaCksIXQpZm9yKHZhciBuIGluIHRoaXMpXCJ0XCI9PT1uLmNoYXJBdCgwKSYmbS5jYWxsKHRoaXMsbikmJiFpc05hTigrbi5zbGljZSgxKSkmJih0aGlzW25dPXkpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXSxuPXQuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1uLnR5cGUpdGhyb3cgbi5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybiBvLnR5cGU9XCJ0aHJvd1wiLG8uYXJnPXQsZS5uZXh0PW4sciYmKGUubWV0aG9kPVwibmV4dFwiLGUuYXJnPXkpLCEhcn1pZih0aGlzLmRvbmUpdGhyb3cgdDtmb3IodmFyIGU9dGhpcyxyPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW3JdLG89aS5jb21wbGV0aW9uO2lmKFwicm9vdFwiPT09aS50cnlMb2MpcmV0dXJuIG4oXCJlbmRcIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHU9bS5jYWxsKGksXCJjYXRjaExvY1wiKSxhPW0uY2FsbChpLFwiZmluYWxseUxvY1wiKTtpZih1JiZhKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBuKGkuZmluYWxseUxvYyl9ZWxzZSBpZih1KXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gbihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFhKXRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPD10aGlzLnByZXYmJm0uY2FsbChyLFwiZmluYWxseUxvY1wiKSYmdGhpcy5wcmV2PHIuZmluYWxseUxvYyl7dmFyIGk9cjticmVha319aSYmKFwiYnJlYWtcIj09PXR8fFwiY29udGludWVcIj09PXQpJiZpLnRyeUxvYzw9biYmbjw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9bixpPyh0aGlzLm1ldGhvZD1cIm5leHRcIix0aGlzLm5leHQ9aS5maW5hbGx5TG9jLEEpOnRoaXMuY29tcGxldGUobyl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsbil7aWYoXCJ0aHJvd1wiPT09dC50eXBlKXRocm93IHQuYXJnO3JldHVyblwiYnJlYWtcIj09PXQudHlwZXx8XCJjb250aW51ZVwiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzpcInJldHVyblwiPT09dC50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9dC5hcmcsdGhpcy5tZXRob2Q9XCJyZXR1cm5cIix0aGlzLm5leHQ9XCJlbmRcIik6XCJub3JtYWxcIj09PXQudHlwZSYmbiYmKHRoaXMubmV4dD1uKSxBfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGU9dGhpcy50cnlFbnRyaWVzW25dO2lmKGUuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoZS5jb21wbGV0aW9uLGUuYWZ0ZXJMb2MpLGgoZSksQX19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBlPXRoaXMudHJ5RW50cmllc1tuXTtpZihlLnRyeUxvYz09PXQpe3ZhciByPWUuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1yLnR5cGUpe3ZhciBpPXIuYXJnO2goZSl9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOnYodCkscmVzdWx0TmFtZTpuLG5leHRMb2M6ZX0sXCJuZXh0XCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXkpLEF9fX0oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpKX0sZnVuY3Rpb24odCxuLGUpe2UoMjE3KSxlKDIxOSksZSgyMjApLGUoMjIxKSxlKDIyMiksZSgyMjMpLGUoMjI0KSxlKDIyNSksZSgyMjYpLGUoMjI3KSxlKDIyOCksZSgyMjkpLGUoMjMwKSxlKDIzMSksZSgyMzIpLGUoMjMzKSxlKDIzNSksZSgyMzYpLGUoMjM3KSxlKDIzOCksZSgyMzkpLGUoMjQwKSxlKDI0MSksZSgyNDIpLGUoMjQzKSxlKDI0NCksZSgyNDUpLGUoMjQ2KSxlKDI0NyksZSgyNDgpLGUoMjQ5KSxlKDI1MCksZSgyNTEpLGUoMjUyKSxlKDI1MyksZSgyNTQpLGUoMjU1KSxlKDI1NiksZSgyNTcpLGUoMjU4KSxlKDI1OSksZSgyNjApLGUoMjYxKSxlKDI2MiksZSgyNjMpLGUoMjY0KSxlKDI2NSksZSgyNjYpLGUoMjY3KSxlKDI2OCksZSgyNjkpLGUoMjcwKSxlKDI3MSksZSgyNzIpLGUoMjczKSxlKDI3NCksZSgyNzUpLGUoMjc2KSxlKDI3NyksZSgyNzgpLGUoMjc5KSxlKDI4MCksZSgyODEpLGUoMjgyKSxlKDI4MyksZSgyODQpLGUoMjg1KSxlKDI4NiksZSgyODcpLGUoMjg4KSxlKDI4OSksZSgyOTApLGUoMjkxKSxlKDI5MiksZSgyOTMpLGUoMjk0KSxlKDI5NSksZSgyOTcpLGUoMjk4KSxlKDMwMCksZSgzMDEpLGUoMzAyKSxlKDMwMyksZSgzMDQpLGUoMzA1KSxlKDMwNiksZSgzMDgpLGUoMzA5KSxlKDMxMCksZSgzMTEpLGUoMzEyKSxlKDMxMyksZSgzMTQpLGUoMzE1KSxlKDMxNiksZSgzMTcpLGUoMzE4KSxlKDMxOSksZSgzMjApLGUoMTIyKSxlKDMyMSksZSgzMjIpLGUoMTcyKSxlKDMyMyksZSgzMjQpLGUoMzI1KSxlKDMyNiksZSgzMjcpLGUoMTc1KSxlKDE3NyksZSgxNzgpLGUoMzI4KSxlKDMyOSksZSgzMzApLGUoMzMxKSxlKDMzMiksZSgzMzMpLGUoMzM0KSxlKDMzNSksZSgzMzYpLGUoMzM3KSxlKDMzOCksZSgzMzkpLGUoMzQwKSxlKDM0MSksZSgzNDIpLGUoMzQzKSxlKDM0NCksZSgzNDUpLGUoMzQ2KSxlKDM0NyksZSgzNDgpLGUoMzQ5KSxlKDM1MCksZSgzNTEpLGUoMzUyKSxlKDM1MyksZSgzNTQpLGUoMzU1KSxlKDM1NiksZSgzNTcpLGUoMzU4KSxlKDM1OSksZSgzNjApLGUoMzYxKSxlKDM2MiksZSgzNjMpLGUoMzY0KSxlKDM2NSksZSgzNjYpLGUoMzY3KSxlKDM2OCksZSgzNjkpLGUoMzcwKSxlKDM3MSksZSgzNzIpLGUoMzczKSxlKDM3NCksZSgzNzUpLGUoMzc2KSxlKDM3NyksZSgzNzgpLGUoMzc5KSxlKDM4MCksZSgzODEpLGUoMzgyKSxlKDM4MyksZSgzODQpLGUoMzg1KSxlKDM4NiksZSgzODcpLGUoMzg4KSxlKDM4OSksZSgzOTApLGUoMzkxKSxlKDM5MiksZSgzOTMpLGUoMzk0KSxlKDM5NSksZSgzOTYpLGUoMzk3KSxlKDM5OCksZSgzOTkpLGUoNDAwKSxlKDQwMSksZSg0MDIpLGUoNDAzKSxlKDQwNCksZSg0MDUpLGUoNDA2KSxlKDQwNyksZSg0MDgpLGUoNDA5KSxlKDQxMCksZSg0MTEpLGUoNDEyKSx0LmV4cG9ydHM9ZSgzNCl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDIpLGk9ZSgxNSksbz1lKDcpLHU9ZSgwKSxhPWUoMTcpLGM9ZSgzOCkuS0VZLHM9ZSgzKSxmPWUoNzUpLGw9ZSg1NSksaD1lKDQyKSxwPWUoNSksdj1lKDE1NSksZD1lKDEwMikseT1lKDIxOCksZz1lKDc4KSxtPWUoMSksXz1lKDQpLHc9ZSgxOSksYj1lKDI3KSx4PWUoNDEpLFM9ZSg0NiksTz1lKDE1OCksUD1lKDIwKSxrPWUoOCksRT1lKDQ0KSxqPVAuZixBPWsuZixNPU8uZixUPXIuU3ltYm9sLEY9ci5KU09OLEw9RiYmRi5zdHJpbmdpZnksST1cInByb3RvdHlwZVwiLE49cChcIl9oaWRkZW5cIiksRD1wKFwidG9QcmltaXRpdmVcIiksUj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxDPWYoXCJzeW1ib2wtcmVnaXN0cnlcIiksVT1mKFwic3ltYm9sc1wiKSxHPWYoXCJvcC1zeW1ib2xzXCIpLFc9T2JqZWN0W0ldLFY9XCJmdW5jdGlvblwiPT10eXBlb2YgVCxCPXIuUU9iamVjdCxxPSFCfHwhQltJXXx8IUJbSV0uZmluZENoaWxkLHo9byYmcyhmdW5jdGlvbigpe3JldHVybiA3IT1TKEEoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBBKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24odCxuLGUpe3ZhciByPWooVyxuKTtyJiZkZWxldGUgV1tuXSxBKHQsbixlKSxyJiZ0IT09VyYmQShXLG4scil9OkEsSD1mdW5jdGlvbih0KXt2YXIgbj1VW3RdPVMoVFtJXSk7cmV0dXJuIG4uX2s9dCxufSxKPVYmJlwic3ltYm9sXCI9PXR5cGVvZiBULml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFR9LEs9ZnVuY3Rpb24odCxuLGUpe3JldHVybiB0PT09VyYmSyhHLG4sZSksbSh0KSxuPWIobiwhMCksbShlKSxpKFUsbik/KGUuZW51bWVyYWJsZT8oaSh0LE4pJiZ0W05dW25dJiYodFtOXVtuXT0hMSksZT1TKGUse2VudW1lcmFibGU6eCgwLCExKX0pKTooaSh0LE4pfHxBKHQsTix4KDEse30pKSx0W05dW25dPSEwKSx6KHQsbixlKSk6QSh0LG4sZSl9LFk9ZnVuY3Rpb24odCxuKXttKHQpO2Zvcih2YXIgZSxyPXkobj13KG4pKSxpPTAsbz1yLmxlbmd0aDtvPmk7KUsodCxlPXJbaSsrXSxuW2VdKTtyZXR1cm4gdH0sJD1mdW5jdGlvbih0LG4pe3JldHVybiB2b2lkIDA9PT1uP1ModCk6WShTKHQpLG4pfSxRPWZ1bmN0aW9uKHQpe3ZhciBuPVIuY2FsbCh0aGlzLHQ9Yih0LCEwKSk7cmV0dXJuISh0aGlzPT09VyYmaShVLHQpJiYhaShHLHQpKSYmKCEobnx8IWkodGhpcyx0KXx8IWkoVSx0KXx8aSh0aGlzLE4pJiZ0aGlzW05dW3RdKXx8bil9LFg9ZnVuY3Rpb24odCxuKXtpZih0PXcodCksbj1iKG4sITApLHQhPT1XfHwhaShVLG4pfHxpKEcsbikpe3ZhciBlPWoodCxuKTtyZXR1cm4hZXx8IWkoVSxuKXx8aSh0LE4pJiZ0W05dW25dfHwoZS5lbnVtZXJhYmxlPSEwKSxlfX0sWj1mdW5jdGlvbih0KXtmb3IodmFyIG4sZT1NKHcodCkpLHI9W10sbz0wO2UubGVuZ3RoPm87KWkoVSxuPWVbbysrXSl8fG49PU58fG49PWN8fHIucHVzaChuKTtyZXR1cm4gcn0sdHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9dD09PVcscj1NKGU/Rzp3KHQpKSxvPVtdLHU9MDtyLmxlbmd0aD51OykhaShVLG49clt1KytdKXx8ZSYmIWkoVyxuKXx8by5wdXNoKFVbbl0pO3JldHVybiBvfTtWfHwoVD1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBUKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIHQ9aChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksbj1mdW5jdGlvbihlKXt0aGlzPT09VyYmbi5jYWxsKEcsZSksaSh0aGlzLE4pJiZpKHRoaXNbTl0sdCkmJih0aGlzW05dW3RdPSExKSx6KHRoaXMsdCx4KDEsZSkpfTtyZXR1cm4gbyYmcSYmeihXLHQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLEgodCl9LGEoVFtJXSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFAuZj1YLGsuZj1LLGUoNDcpLmY9Ty5mPVosZSg2NCkuZj1RLGUoNzcpLmY9dHQsbyYmIWUoNDMpJiZhKFcsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFEsITApLHYuZj1mdW5jdGlvbih0KXtyZXR1cm4gSChwKHQpKX0pLHUodS5HK3UuVyt1LkYqIVYse1N5bWJvbDpUfSk7Zm9yKHZhciBudD1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLGV0PTA7bnQubGVuZ3RoPmV0OylwKG50W2V0KytdKTtmb3IodmFyIHJ0PUUocC5zdG9yZSksaXQ9MDtydC5sZW5ndGg+aXQ7KWQocnRbaXQrK10pO3UodS5TK3UuRiohVixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkoQyx0Kz1cIlwiKT9DW3RdOkNbdF09VCh0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFKKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIik7Zm9yKHZhciBuIGluIEMpaWYoQ1tuXT09PXQpcmV0dXJuIG59LHVzZVNldHRlcjpmdW5jdGlvbigpe3E9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3E9ITF9fSksdSh1LlMrdS5GKiFWLFwiT2JqZWN0XCIse2NyZWF0ZTokLGRlZmluZVByb3BlcnR5OkssZGVmaW5lUHJvcGVydGllczpZLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpYLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxGJiZ1KHUuUyt1LkYqKCFWfHxzKGZ1bmN0aW9uKCl7dmFyIHQ9VCgpO3JldHVyblwiW251bGxdXCIhPUwoW3RdKXx8XCJ7fVwiIT1MKHthOnR9KXx8XCJ7fVwiIT1MKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPVt0XSxpPTE7YXJndW1lbnRzLmxlbmd0aD5pOylyLnB1c2goYXJndW1lbnRzW2krK10pO2lmKGU9bj1yWzFdLChfKG4pfHx2b2lkIDAhPT10KSYmIUoodCkpcmV0dXJuIGcobil8fChuPWZ1bmN0aW9uKHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKG49ZS5jYWxsKHRoaXMsdCxuKSksIUoobikpcmV0dXJuIG59KSxyWzFdPW4sTC5hcHBseShGLHIpfX0pLFRbSV1bRF18fGUoMTYpKFRbSV0sRCxUW0ldLnZhbHVlT2YpLGwoVCxcIlN5bWJvbFwiKSxsKE1hdGgsXCJNYXRoXCIsITApLGwoci5KU09OLFwiSlNPTlwiLCEwKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNDQpLGk9ZSg3Nyksbz1lKDY0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG49cih0KSxlPWkuZjtpZihlKWZvcih2YXIgdSxhPWUodCksYz1vLmYscz0wO2EubGVuZ3RoPnM7KWMuY2FsbCh0LHU9YVtzKytdKSYmbi5wdXNoKHUpO3JldHVybiBufX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJPYmplY3RcIix7Y3JlYXRlOmUoNDYpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TK3IuRiohZSg3KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0eTplKDgpLmZ9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMrci5GKiFlKDcpLFwiT2JqZWN0XCIse2RlZmluZVByb3BlcnRpZXM6ZSgxNTcpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE5KSxpPWUoMjApLmY7ZSgzMCkoXCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBpKHIodCksbil9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEwKSxpPWUoMjEpO2UoMzApKFwiZ2V0UHJvdG90eXBlT2ZcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShyKHQpKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTApLGk9ZSg0NCk7ZSgzMCkoXCJrZXlzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkocih0KSl9fSl9LGZ1bmN0aW9uKHQsbixlKXtlKDMwKShcImdldE93blByb3BlcnR5TmFtZXNcIixmdW5jdGlvbigpe3JldHVybiBlKDE1OCkuZn0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KSxpPWUoMzgpLm9uRnJlZXplO2UoMzApKFwiZnJlZXplXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0JiZyKG4pP3QoaShuKSk6bn19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNCksaT1lKDM4KS5vbkZyZWV6ZTtlKDMwKShcInNlYWxcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQmJnIobik/dChpKG4pKTpufX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KSxpPWUoMzgpLm9uRnJlZXplO2UoMzApKFwicHJldmVudEV4dGVuc2lvbnNcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQmJnIobik/dChpKG4pKTpufX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg0KTtlKDMwKShcImlzRnJvemVuXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFyKG4pfHwhIXQmJnQobil9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQpO2UoMzApKFwiaXNTZWFsZWRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIXIobil8fCEhdCYmdChuKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNCk7ZSgzMCkoXCJpc0V4dGVuc2libGVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISFyKG4pJiYoIXR8fHQobikpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUytyLkYsXCJPYmplY3RcIix7YXNzaWduOmUoMTU5KX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk9iamVjdFwiLHtpczplKDIzNCl9KX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LG4pe3JldHVybiB0PT09bj8wIT09dHx8MS90PT0xL246dCE9dCYmbiE9bn19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiT2JqZWN0XCIse3NldFByb3RvdHlwZU9mOmUoMTA2KS5zZXR9KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNjUpLGk9e307aVtlKDUpKFwidG9TdHJpbmdUYWdcIildPVwielwiLGkrXCJcIiE9XCJbb2JqZWN0IHpdXCImJmUoMTcpKE9iamVjdC5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK3IodGhpcykrXCJdXCJ9LCEwKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlAsXCJGdW5jdGlvblwiLHtiaW5kOmUoMTYwKX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg4KS5mLGk9RnVuY3Rpb24ucHJvdG90eXBlLG89L15cXHMqZnVuY3Rpb24gKFteIChdKikvLHU9XCJuYW1lXCI7dSBpbiBpfHxlKDcpJiZyKGksdSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXtyZXR1cm4oXCJcIit0aGlzKS5tYXRjaChvKVsxXX1jYXRjaCh0KXtyZXR1cm5cIlwifX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoNCksaT1lKDIxKSxvPWUoNSkoXCJoYXNJbnN0YW5jZVwiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZTtvIGluIHV8fGUoOCkuZih1LG8se3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXN8fCFyKHQpKXJldHVybiExO2lmKCFyKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDE2Mik7cihyLkcrci5GKihwYXJzZUludCE9aSkse3BhcnNlSW50Oml9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDE2Myk7cihyLkcrci5GKihwYXJzZUZsb2F0IT1pKSx7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDIpLGk9ZSgxNSksbz1lKDIzKSx1PWUoMTA4KSxhPWUoMjcpLGM9ZSgzKSxzPWUoNDcpLmYsZj1lKDIwKS5mLGw9ZSg4KS5mLGg9ZSg1NikudHJpbSxwPVwiTnVtYmVyXCIsdj1yW3BdLGQ9dix5PXYucHJvdG90eXBlLGc9byhlKDQ2KSh5KSk9PXAsbT1cInRyaW1cImluIFN0cmluZy5wcm90b3R5cGUsXz1mdW5jdGlvbih0KXt2YXIgbj1hKHQsITEpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiZuLmxlbmd0aD4yKXtuPW0/bi50cmltKCk6aChuLDMpO3ZhciBlLHIsaSxvPW4uY2hhckNvZGVBdCgwKTtpZig0Mz09PW98fDQ1PT09byl7aWYoODg9PT0oZT1uLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1lKXJldHVybiBOYU59ZWxzZSBpZig0OD09PW8pe3N3aXRjaChuLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpyPTIsaT00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOnI9OCxpPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK259Zm9yKHZhciB1LGM9bi5zbGljZSgyKSxzPTAsZj1jLmxlbmd0aDtzPGY7cysrKWlmKCh1PWMuY2hhckNvZGVBdChzKSk8NDh8fHU+aSlyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChjLHIpfX1yZXR1cm4rbn07aWYoIXYoXCIgMG8xXCIpfHwhdihcIjBiMVwiKXx8dihcIisweDFcIikpe3Y9ZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxlPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiB2JiYoZz9jKGZ1bmN0aW9uKCl7eS52YWx1ZU9mLmNhbGwoZSl9KTpvKGUpIT1wKT91KG5ldyBkKF8obikpLGUsdik6XyhuKX07Zm9yKHZhciB3LGI9ZSg3KT9zKGQpOlwiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXJcIi5zcGxpdChcIixcIikseD0wO2IubGVuZ3RoPng7eCsrKWkoZCx3PWJbeF0pJiYhaSh2LHcpJiZsKHYsdyxmKGQsdykpO3YucHJvdG90eXBlPXkseS5jb25zdHJ1Y3Rvcj12LGUoMTcpKHIscCx2KX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgyOSksbz1lKDE2NCksdT1lKDEwOSksYT0xLi50b0ZpeGVkLGM9TWF0aC5mbG9vcixzPVswLDAsMCwwLDAsMF0sZj1cIk51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIixsPVwiMFwiLGg9ZnVuY3Rpb24odCxuKXtmb3IodmFyIGU9LTEscj1uOysrZTw2OylyKz10KnNbZV0sc1tlXT1yJTFlNyxyPWMoci8xZTcpfSxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj02LGU9MDstLW4+PTA7KWUrPXNbbl0sc1tuXT1jKGUvdCksZT1lJXQqMWU3fSx2PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTYsbj1cIlwiOy0tdD49MDspaWYoXCJcIiE9PW58fDA9PT10fHwwIT09c1t0XSl7dmFyIGU9U3RyaW5nKHNbdF0pO249XCJcIj09PW4/ZTpuK3UuY2FsbChsLDctZS5sZW5ndGgpK2V9cmV0dXJuIG59LGQ9ZnVuY3Rpb24odCxuLGUpe3JldHVybiAwPT09bj9lOm4lMj09MT9kKHQsbi0xLGUqdCk6ZCh0KnQsbi8yLGUpfSx5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLGU9dDtlPj00MDk2OyluKz0xMixlLz00MDk2O2Zvcig7ZT49Mjspbis9MSxlLz0yO3JldHVybiBufTtyKHIuUCtyLkYqKCEhYSYmKFwiMC4wMDBcIiE9PThlLTUudG9GaXhlZCgzKXx8XCIxXCIhPT0uOS50b0ZpeGVkKDApfHxcIjEuMjVcIiE9PTEuMjU1LnRvRml4ZWQoMil8fFwiMTAwMDAwMDAwMDAwMDAwMDEyOFwiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IWUoMykoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGEsYz1vKHRoaXMsZikscz1pKHQpLGc9XCJcIixtPWw7aWYoczwwfHxzPjIwKXRocm93IFJhbmdlRXJyb3IoZik7aWYoYyE9YylyZXR1cm5cIk5hTlwiO2lmKGM8PS0xZTIxfHxjPj0xZTIxKXJldHVybiBTdHJpbmcoYyk7aWYoYzwwJiYoZz1cIi1cIixjPS1jKSxjPjFlLTIxKWlmKG49eShjKmQoMiw2OSwxKSktNjksZT1uPDA/YypkKDIsLW4sMSk6Yy9kKDIsbiwxKSxlKj00NTAzNTk5NjI3MzcwNDk2LChuPTUyLW4pPjApe2ZvcihoKDAsZSkscj1zO3I+PTc7KWgoMWU3LDApLHItPTc7Zm9yKGgoZCgxMCxyLDEpLDApLHI9bi0xO3I+PTIzOylwKDE8PDIzKSxyLT0yMztwKDE8PHIpLGgoMSwxKSxwKDIpLG09digpfWVsc2UgaCgwLGUpLGgoMTw8LW4sMCksbT12KCkrdS5jYWxsKGwscyk7cmV0dXJuIHM+MD8oYT1tLmxlbmd0aCxtPWcrKGE8PXM/XCIwLlwiK3UuY2FsbChsLHMtYSkrbTptLnNsaWNlKDAsYS1zKStcIi5cIittLnNsaWNlKGEtcykpKTptPWcrbSxtfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMyksbz1lKDE2NCksdT0xLi50b1ByZWNpc2lvbjtyKHIuUCtyLkYqKGkoZnVuY3Rpb24oKXtyZXR1cm5cIjFcIiE9PXUuY2FsbCgxLHZvaWQgMCl9KXx8IWkoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3ZhciBuPW8odGhpcyxcIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB2b2lkIDA9PT10P3UuY2FsbChuKTp1LmNhbGwobix0KX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJOdW1iZXJcIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDIpLmlzRmluaXRlO3Ioci5TLFwiTnVtYmVyXCIse2lzRmluaXRlOmZ1bmN0aW9uKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0JiZpKHQpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk51bWJlclwiLHtpc0ludGVnZXI6ZSgxNjUpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTnVtYmVyXCIse2lzTmFOOmZ1bmN0aW9uKHQpe3JldHVybiB0IT10fX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTY1KSxvPU1hdGguYWJzO3Ioci5TLFwiTnVtYmVyXCIse2lzU2FmZUludGVnZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCkmJm8odCk8PTkwMDcxOTkyNTQ3NDA5OTF9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTnVtYmVyXCIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk51bWJlclwiLHtNSU5fU0FGRV9JTlRFR0VSOi05MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgxNjMpO3Ioci5TK3IuRiooTnVtYmVyLnBhcnNlRmxvYXQhPWkpLFwiTnVtYmVyXCIse3BhcnNlRmxvYXQ6aX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTYyKTtyKHIuUytyLkYqKE51bWJlci5wYXJzZUludCE9aSksXCJOdW1iZXJcIix7cGFyc2VJbnQ6aX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTY2KSxvPU1hdGguc3FydCx1PU1hdGguYWNvc2g7cihyLlMrci5GKiEodSYmNzEwPT1NYXRoLmZsb29yKHUoTnVtYmVyLk1BWF9WQUxVRSkpJiZ1KDEvMCk9PTEvMCksXCJNYXRoXCIse2Fjb3NoOmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KTwxP05hTjp0Pjk0OTA2MjY1LjYyNDI1MTU2P01hdGgubG9nKHQpK01hdGguTE4yOmkodC0xK28odC0xKSpvKHQrMSkpfX0pfSxmdW5jdGlvbih0LG4sZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gaXNGaW5pdGUodD0rdCkmJjAhPXQ/dDwwPy1yKC10KTpNYXRoLmxvZyh0K01hdGguc3FydCh0KnQrMSkpOnR9dmFyIGk9ZSgwKSxvPU1hdGguYXNpbmg7aShpLlMraS5GKiEobyYmMS9vKDApPjApLFwiTWF0aFwiLHthc2luaDpyfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9TWF0aC5hdGFuaDtyKHIuUytyLkYqIShpJiYxL2koLTApPDApLFwiTWF0aFwiLHthdGFuaDpmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6TWF0aC5sb2coKDErdCkvKDEtdCkpLzJ9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgxMTApO3Ioci5TLFwiTWF0aFwiLHtjYnJ0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHQ9K3QpKk1hdGgucG93KE1hdGguYWJzKHQpLDEvMyl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTWF0aFwiLHtjbHozMjpmdW5jdGlvbih0KXtyZXR1cm4odD4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKHQrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPU1hdGguZXhwO3Ioci5TLFwiTWF0aFwiLHtjb3NoOmZ1bmN0aW9uKHQpe3JldHVybihpKHQ9K3QpK2koLXQpKS8yfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTExKTtyKHIuUytyLkYqKGkhPU1hdGguZXhwbTEpLFwiTWF0aFwiLHtleHBtMTppfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTWF0aFwiLHtmcm91bmQ6ZSgxNjcpfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9TWF0aC5hYnM7cihyLlMsXCJNYXRoXCIse2h5cG90OmZ1bmN0aW9uKHQsbil7Zm9yKHZhciBlLHIsbz0wLHU9MCxhPWFyZ3VtZW50cy5sZW5ndGgsYz0wO3U8YTspZT1pKGFyZ3VtZW50c1t1KytdKSxjPGU/KHI9Yy9lLG89bypyKnIrMSxjPWUpOmU+MD8ocj1lL2Msbys9cipyKTpvKz1lO3JldHVybiBjPT09MS8wPzEvMDpjKk1hdGguc3FydChvKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1NYXRoLmltdWw7cihyLlMrci5GKmUoMykoZnVuY3Rpb24oKXtyZXR1cm4tNSE9aSg0Mjk0OTY3Mjk1LDUpfHwyIT1pLmxlbmd0aH0pLFwiTWF0aFwiLHtpbXVsOmZ1bmN0aW9uKHQsbil7dmFyIGU9NjU1MzUscj0rdCxpPStuLG89ZSZyLHU9ZSZpO3JldHVybiAwfG8qdSsoKGUmcj4+PjE2KSp1K28qKGUmaT4+PjE2KTw8MTY+Pj4wKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzEwRX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse2xvZzFwOmUoMTY2KX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk1hdGhcIix7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTWF0aFwiLHtzaWduOmUoMTEwKX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTExKSxvPU1hdGguZXhwO3Ioci5TK3IuRiplKDMpKGZ1bmN0aW9uKCl7cmV0dXJuLTJlLTE3IT0hTWF0aC5zaW5oKC0yZS0xNyl9KSxcIk1hdGhcIix7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD0rdCk8MT8oaSh0KS1pKC10KSkvMjoobyh0LTEpLW8oLXQtMSkpKihNYXRoLkUvMil9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgxMTEpLG89TWF0aC5leHA7cihyLlMsXCJNYXRoXCIse3Rhbmg6ZnVuY3Rpb24odCl7dmFyIG49aSh0PSt0KSxlPWkoLXQpO3JldHVybiBuPT0xLzA/MTplPT0xLzA/LTE6KG4tZSkvKG8odCkrbygtdCkpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk1hdGhcIix7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkodCl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSg0NSksbz1TdHJpbmcuZnJvbUNoYXJDb2RlLHU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7cihyLlMrci5GKighIXUmJjEhPXUubGVuZ3RoKSxcIlN0cmluZ1wiLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPVtdLHI9YXJndW1lbnRzLmxlbmd0aCx1PTA7cj51Oyl7aWYobj0rYXJndW1lbnRzW3UrK10saShuLDExMTQxMTEpIT09bil0aHJvdyBSYW5nZUVycm9yKG4rXCIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludFwiKTtlLnB1c2gobjw2NTUzNj9vKG4pOm8oNTUyOTYrKChuLT02NTUzNik+PjEwKSxuJTEwMjQrNTYzMjApKX1yZXR1cm4gZS5qb2luKFwiXCIpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTkpLG89ZSg5KTtyKHIuUyxcIlN0cmluZ1wiLHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBuPWkodC5yYXcpLGU9byhuLmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLHU9W10sYT0wO2U+YTspdS5wdXNoKFN0cmluZyhuW2ErK10pKSxhPHImJnUucHVzaChTdHJpbmcoYXJndW1lbnRzW2FdKSk7cmV0dXJuIHUuam9pbihcIlwiKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoNTYpKFwidHJpbVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMyl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDExMikoITApO2UoMTEzKShTdHJpbmcsXCJTdHJpbmdcIixmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLl90LGU9dGhpcy5faTtyZXR1cm4gZT49bi5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1yKG4sZSksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgxMTIpKCExKTtyKHIuUCxcIlN0cmluZ1wiLHtjb2RlUG9pbnRBdDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoOSksbz1lKDExNSksdT1cImVuZHNXaXRoXCIsYT1cIlwiW3VdO3Ioci5QK3IuRiplKDExNikodSksXCJTdHJpbmdcIix7ZW5kc1dpdGg6ZnVuY3Rpb24odCl7dmFyIG49byh0aGlzLHQsdSksZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPWkobi5sZW5ndGgpLGM9dm9pZCAwPT09ZT9yOk1hdGgubWluKGkoZSkscikscz1TdHJpbmcodCk7cmV0dXJuIGE/YS5jYWxsKG4scyxjKTpuLnNsaWNlKGMtcy5sZW5ndGgsYyk9PT1zfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMTE1KSxvPVwiaW5jbHVkZXNcIjtyKHIuUCtyLkYqZSgxMTYpKG8pLFwiU3RyaW5nXCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfmkodGhpcyx0LG8pLmluZGV4T2YodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5QLFwiU3RyaW5nXCIse3JlcGVhdDplKDEwOSl9KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDkpLG89ZSgxMTUpLHU9XCJzdGFydHNXaXRoXCIsYT1cIlwiW3VdO3Ioci5QK3IuRiplKDExNikodSksXCJTdHJpbmdcIix7c3RhcnRzV2l0aDpmdW5jdGlvbih0KXt2YXIgbj1vKHRoaXMsdCx1KSxlPWkoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbi5sZW5ndGgpKSxyPVN0cmluZyh0KTtyZXR1cm4gYT9hLmNhbGwobixyLGUpOm4uc2xpY2UoZSxlK3IubGVuZ3RoKT09PXJ9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlKDE4KShcImFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCh0aGlzLFwiYVwiLFwibmFtZVwiLG4pfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSgxOCkoXCJiaWdcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmlnXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoMTgpKFwiYmxpbmtcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmxpbmtcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSgxOCkoXCJib2xkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImJcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSgxOCkoXCJmaXhlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJ0dFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlKDE4KShcImZvbnRjb2xvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCh0aGlzLFwiZm9udFwiLFwiY29sb3JcIixuKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoMTgpKFwiZm9udHNpemVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQodGhpcyxcImZvbnRcIixcInNpemVcIixuKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoMTgpKFwiaXRhbGljc1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJpXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoMTgpKFwibGlua1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdCh0aGlzLFwiYVwiLFwiaHJlZlwiLG4pfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSgxOCkoXCJzbWFsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzbWFsbFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlKDE4KShcInN0cmlrZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdHJpa2VcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSgxOCkoXCJzdWJcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3ViXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoMTgpKFwic3VwXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN1cFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiRGF0ZVwiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwKSxvPWUoMjcpO3Ioci5QK3IuRiplKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPT1uZXcgRGF0ZShOYU4pLnRvSlNPTigpfHwxIT09RGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoe3RvSVNPU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSl9KSxcIkRhdGVcIix7dG9KU09OOmZ1bmN0aW9uKHQpe3ZhciBuPWkodGhpcyksZT1vKG4pO3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlfHxpc0Zpbml0ZShlKT9uLnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDI5Nik7cihyLlArci5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PWkpLFwiRGF0ZVwiLHt0b0lTT1N0cmluZzppfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDMpLGk9RGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxvPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nLHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+OT90OlwiMFwiK3R9O3QuZXhwb3J0cz1yKGZ1bmN0aW9uKCl7cmV0dXJuXCIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVpcIiE9by5jYWxsKG5ldyBEYXRlKC01ZTEzLTEpKX0pfHwhcihmdW5jdGlvbigpe28uY2FsbChuZXcgRGF0ZShOYU4pKX0pP2Z1bmN0aW9uKCl7aWYoIWlzRmluaXRlKGkuY2FsbCh0aGlzKSkpdGhyb3cgUmFuZ2VFcnJvcihcIkludmFsaWQgdGltZSB2YWx1ZVwiKTt2YXIgdD10aGlzLG49dC5nZXRVVENGdWxsWWVhcigpLGU9dC5nZXRVVENNaWxsaXNlY29uZHMoKSxyPW48MD9cIi1cIjpuPjk5OTk/XCIrXCI6XCJcIjtyZXR1cm4gcisoXCIwMDAwMFwiK01hdGguYWJzKG4pKS5zbGljZShyPy02Oi00KStcIi1cIit1KHQuZ2V0VVRDTW9udGgoKSsxKStcIi1cIit1KHQuZ2V0VVRDRGF0ZSgpKStcIlRcIit1KHQuZ2V0VVRDSG91cnMoKSkrXCI6XCIrdSh0LmdldFVUQ01pbnV0ZXMoKSkrXCI6XCIrdSh0LmdldFVUQ1NlY29uZHMoKSkrXCIuXCIrKGU+OTk/ZTpcIjBcIit1KGUpKStcIlpcIn06b30sZnVuY3Rpb24odCxuLGUpe3ZhciByPURhdGUucHJvdG90eXBlLGk9XCJJbnZhbGlkIERhdGVcIixvPVwidG9TdHJpbmdcIix1PXJbb10sYT1yLmdldFRpbWU7bmV3IERhdGUoTmFOKStcIlwiIT1pJiZlKDE3KShyLG8sZnVuY3Rpb24oKXt2YXIgdD1hLmNhbGwodGhpcyk7cmV0dXJuIHQ9PT10P3UuY2FsbCh0aGlzKTppfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDUpKFwidG9QcmltaXRpdmVcIiksaT1EYXRlLnByb3RvdHlwZTtyIGluIGl8fGUoMTYpKGkscixlKDI5OSkpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxKSxpPWUoMjcpLG89XCJudW1iZXJcIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9PXQmJnQhPT1vJiZcImRlZmF1bHRcIiE9PXQpdGhyb3cgVHlwZUVycm9yKFwiSW5jb3JyZWN0IGhpbnRcIik7cmV0dXJuIGkocih0aGlzKSx0IT1vKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiQXJyYXlcIix7aXNBcnJheTplKDc4KX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyMiksaT1lKDApLG89ZSgxMCksdT1lKDE2OCksYT1lKDExNyksYz1lKDkpLHM9ZSgxMTgpLGY9ZSgxMTkpO2koaS5TK2kuRiohZSg4MCkoZnVuY3Rpb24odCl7QXJyYXkuZnJvbSh0KX0pLFwiQXJyYXlcIix7ZnJvbTpmdW5jdGlvbih0KXt2YXIgbixlLGksbCxoPW8odCkscD1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXksdj1hcmd1bWVudHMubGVuZ3RoLGQ9dj4xP2FyZ3VtZW50c1sxXTp2b2lkIDAseT12b2lkIDAhPT1kLGc9MCxtPWYoaCk7aWYoeSYmKGQ9cihkLHY+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSx2b2lkIDA9PW18fHA9PUFycmF5JiZhKG0pKWZvcihuPWMoaC5sZW5ndGgpLGU9bmV3IHAobik7bj5nO2crKylzKGUsZyx5P2QoaFtnXSxnKTpoW2ddKTtlbHNlIGZvcihsPW0uY2FsbChoKSxlPW5ldyBwOyEoaT1sLm5leHQoKSkuZG9uZTtnKyspcyhlLGcseT91KGwsZCxbaS52YWx1ZSxnXSwhMCk6aS52YWx1ZSk7cmV0dXJuIGUubGVuZ3RoPWcsZX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDExOCk7cihyLlMrci5GKmUoMykoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoQXJyYXkub2YuY2FsbCh0KWluc3RhbmNlb2YgdCl9KSxcIkFycmF5XCIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsbj1hcmd1bWVudHMubGVuZ3RoLGU9bmV3KFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkobik7bj50OylpKGUsdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIGUubGVuZ3RoPW4sZX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDE5KSxvPVtdLmpvaW47cihyLlArci5GKihlKDYzKSE9T2JqZWN0fHwhZSgyNCkobykpLFwiQXJyYXlcIix7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKGkodGhpcyksdm9pZCAwPT09dD9cIixcIjp0KX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwNSksbz1lKDIzKSx1PWUoNDUpLGE9ZSg5KSxjPVtdLnNsaWNlO3Ioci5QK3IuRiplKDMpKGZ1bmN0aW9uKCl7aSYmYy5jYWxsKGkpfSksXCJBcnJheVwiLHtzbGljZTpmdW5jdGlvbih0LG4pe3ZhciBlPWEodGhpcy5sZW5ndGgpLHI9byh0aGlzKTtpZihuPXZvaWQgMD09PW4/ZTpuLFwiQXJyYXlcIj09cilyZXR1cm4gYy5jYWxsKHRoaXMsdCxuKTtmb3IodmFyIGk9dSh0LGUpLHM9dShuLGUpLGY9YShzLWkpLGw9bmV3IEFycmF5KGYpLGg9MDtoPGY7aCsrKWxbaF09XCJTdHJpbmdcIj09cj90aGlzLmNoYXJBdChpK2gpOnRoaXNbaStoXTtyZXR1cm4gbH19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDExKSxvPWUoMTApLHU9ZSgzKSxhPVtdLnNvcnQsYz1bMSwyLDNdO3Ioci5QK3IuRioodShmdW5jdGlvbigpe2Muc29ydCh2b2lkIDApfSl8fCF1KGZ1bmN0aW9uKCl7Yy5zb3J0KG51bGwpfSl8fCFlKDI0KShhKSksXCJBcnJheVwiLHtzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChvKHRoaXMpKTphLmNhbGwobyh0aGlzKSxpKHQpKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDMxKSgwKSxvPWUoMjQpKFtdLmZvckVhY2gsITApO3Ioci5QK3IuRiohbyxcIkFycmF5XCIse2ZvckVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQpLGk9ZSg3OCksbz1lKDUpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGkodCkmJihuPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8biE9PUFycmF5JiYhaShuLnByb3RvdHlwZSl8fChuPXZvaWQgMCkscihuKSYmbnVsbD09PShuPW5bb10pJiYobj12b2lkIDApKSx2b2lkIDA9PT1uP0FycmF5Om59fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMzEpKDEpO3Ioci5QK3IuRiohZSgyNCkoW10ubWFwLCEwKSxcIkFycmF5XCIse21hcDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDMxKSgyKTtyKHIuUCtyLkYqIWUoMjQpKFtdLmZpbHRlciwhMCksXCJBcnJheVwiLHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgzMSkoMyk7cihyLlArci5GKiFlKDI0KShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgzMSkoNCk7cihyLlArci5GKiFlKDI0KShbXS5ldmVyeSwhMCksXCJBcnJheVwiLHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDE2OSk7cihyLlArci5GKiFlKDI0KShbXS5yZWR1Y2UsITApLFwiQXJyYXlcIix7cmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMSl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgxNjkpO3Ioci5QK3IuRiohZSgyNCkoW10ucmVkdWNlUmlnaHQsITApLFwiQXJyYXlcIix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDc2KSghMSksbz1bXS5pbmRleE9mLHU9ISFvJiYxL1sxXS5pbmRleE9mKDEsLTApPDA7cihyLlArci5GKih1fHwhZSgyNCkobykpLFwiQXJyYXlcIix7aW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gdT9vLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDppKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMTkpLG89ZSgyOSksdT1lKDkpLGE9W10ubGFzdEluZGV4T2YsYz0hIWEmJjEvWzFdLmxhc3RJbmRleE9mKDEsLTApPDA7cihyLlArci5GKihjfHwhZSgyNCkoYSkpLFwiQXJyYXlcIix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24odCl7aWYoYylyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIG49aSh0aGlzKSxlPXUobi5sZW5ndGgpLHI9ZS0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihyPU1hdGgubWluKHIsbyhhcmd1bWVudHNbMV0pKSkscjwwJiYocj1lK3IpO3I+PTA7ci0tKWlmKHIgaW4gbiYmbltyXT09PXQpcmV0dXJuIHJ8fDA7cmV0dXJuLTF9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5QLFwiQXJyYXlcIix7Y29weVdpdGhpbjplKDE3MCl9KSxlKDM5KShcImNvcHlXaXRoaW5cIil9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5QLFwiQXJyYXlcIix7ZmlsbDplKDEyMSl9KSxlKDM5KShcImZpbGxcIil9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgzMSkoNSksbz1cImZpbmRcIix1PSEwO28gaW5bXSYmQXJyYXkoMSlbb10oZnVuY3Rpb24oKXt1PSExfSkscihyLlArci5GKnUsXCJBcnJheVwiLHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksZSgzOSkobyl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgzMSkoNiksbz1cImZpbmRJbmRleFwiLHU9ITA7byBpbltdJiZBcnJheSgxKVtvXShmdW5jdGlvbigpe3U9ITF9KSxyKHIuUCtyLkYqdSxcIkFycmF5XCIse2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGUoMzkpKG8pfSxmdW5jdGlvbih0LG4sZSl7ZSg0OCkoXCJBcnJheVwiKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMiksaT1lKDEwOCksbz1lKDgpLmYsdT1lKDQ3KS5mLGE9ZSg3OSksYz1lKDgxKSxzPXIuUmVnRXhwLGY9cyxsPXMucHJvdG90eXBlLGg9L2EvZyxwPS9hL2csdj1uZXcgcyhoKSE9PWg7aWYoZSg3KSYmKCF2fHxlKDMpKGZ1bmN0aW9uKCl7cmV0dXJuIHBbZSg1KShcIm1hdGNoXCIpXT0hMSxzKGgpIT1ofHxzKHApPT1wfHxcIi9hL2lcIiE9cyhoLFwiaVwiKX0pKSl7cz1mdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMgaW5zdGFuY2VvZiBzLHI9YSh0KSxvPXZvaWQgMD09PW47cmV0dXJuIWUmJnImJnQuY29uc3RydWN0b3I9PT1zJiZvP3Q6aSh2P25ldyBmKHImJiFvP3Quc291cmNlOnQsbik6Zigocj10IGluc3RhbmNlb2Ygcyk/dC5zb3VyY2U6dCxyJiZvP2MuY2FsbCh0KTpuKSxlP3RoaXM6bCxzKX07Zm9yKHZhciBkPShmdW5jdGlvbih0KXt0IGluIHN8fG8ocyx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZbdF19LHNldDpmdW5jdGlvbihuKXtmW3RdPW59fSl9KSx5PXUoZiksZz0wO3kubGVuZ3RoPmc7KWQoeVtnKytdKTtsLmNvbnN0cnVjdG9yPXMscy5wcm90b3R5cGU9bCxlKDE3KShyLFwiUmVnRXhwXCIscyl9ZSg0OCkoXCJSZWdFeHBcIil9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlKDE3Mik7dmFyIHI9ZSgxKSxpPWUoODEpLG89ZSg3KSx1PVwidG9TdHJpbmdcIixhPS8uL1t1XSxjPWZ1bmN0aW9uKHQpe2UoMTcpKFJlZ0V4cC5wcm90b3R5cGUsdSx0LCEwKX07ZSgzKShmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT1hLmNhbGwoe3NvdXJjZTpcImFcIixmbGFnczpcImJcIn0pfSk/YyhmdW5jdGlvbigpe3ZhciB0PXIodGhpcyk7cmV0dXJuXCIvXCIuY29uY2F0KHQuc291cmNlLFwiL1wiLFwiZmxhZ3NcImluIHQ/dC5mbGFnczohbyYmdCBpbnN0YW5jZW9mIFJlZ0V4cD9pLmNhbGwodCk6dm9pZCAwKX0pOmEubmFtZSE9dSYmYyhmdW5jdGlvbigpe3JldHVybiBhLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxuLGUpe2UoODIpKFwibWF0Y2hcIiwxLGZ1bmN0aW9uKHQsbixlKXtyZXR1cm5bZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dCh0aGlzKSxpPXZvaWQgMD09ZT92b2lkIDA6ZVtuXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwoZSxyKTpuZXcgUmVnRXhwKGUpW25dKFN0cmluZyhyKSl9LGVdfSl9LGZ1bmN0aW9uKHQsbixlKXtlKDgyKShcInJlcGxhY2VcIiwyLGZ1bmN0aW9uKHQsbixlKXtyZXR1cm5bZnVuY3Rpb24ocixpKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10KHRoaXMpLHU9dm9pZCAwPT1yP3ZvaWQgMDpyW25dO3JldHVybiB2b2lkIDAhPT11P3UuY2FsbChyLG8saSk6ZS5jYWxsKFN0cmluZyhvKSxyLGkpfSxlXX0pfSxmdW5jdGlvbih0LG4sZSl7ZSg4MikoXCJzZWFyY2hcIiwxLGZ1bmN0aW9uKHQsbixlKXtyZXR1cm5bZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9dCh0aGlzKSxpPXZvaWQgMD09ZT92b2lkIDA6ZVtuXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwoZSxyKTpuZXcgUmVnRXhwKGUpW25dKFN0cmluZyhyKSl9LGVdfSl9LGZ1bmN0aW9uKHQsbixlKXtlKDgyKShcInNwbGl0XCIsMixmdW5jdGlvbih0LG4scil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZSg3OSksbz1yLHU9W10ucHVzaCxhPVwic3BsaXRcIixjPVwibGVuZ3RoXCIscz1cImxhc3RJbmRleFwiO2lmKFwiY1wiPT1cImFiYmNcIlthXSgvKGIpKi8pWzFdfHw0IT1cInRlc3RcIlthXSgvKD86KS8sLTEpW2NdfHwyIT1cImFiXCJbYV0oLyg/OmFiKSovKVtjXXx8NCE9XCIuXCJbYV0oLyguPykoLj8pLylbY118fFwiLlwiW2FdKC8oKSgpLylbY10+MXx8XCJcIlthXSgvLj8vKVtjXSl7dmFyIGY9dm9pZCAwPT09LygpPz8vLmV4ZWMoXCJcIilbMV07cj1mdW5jdGlvbih0LG4pe3ZhciBlPVN0cmluZyh0aGlzKTtpZih2b2lkIDA9PT10JiYwPT09bilyZXR1cm5bXTtpZighaSh0KSlyZXR1cm4gby5jYWxsKGUsdCxuKTt2YXIgcixhLGwsaCxwLHY9W10sZD0odC5pZ25vcmVDYXNlP1wiaVwiOlwiXCIpKyh0Lm11bHRpbGluZT9cIm1cIjpcIlwiKSsodC51bmljb2RlP1widVwiOlwiXCIpKyh0LnN0aWNreT9cInlcIjpcIlwiKSx5PTAsZz12b2lkIDA9PT1uPzQyOTQ5NjcyOTU6bj4+PjAsbT1uZXcgUmVnRXhwKHQuc291cmNlLGQrXCJnXCIpO2ZvcihmfHwocj1uZXcgUmVnRXhwKFwiXlwiK20uc291cmNlK1wiJCg/IVxcXFxzKVwiLGQpKTsoYT1tLmV4ZWMoZSkpJiYhKChsPWEuaW5kZXgrYVswXVtjXSk+eSYmKHYucHVzaChlLnNsaWNlKHksYS5pbmRleCkpLCFmJiZhW2NdPjEmJmFbMF0ucmVwbGFjZShyLGZ1bmN0aW9uKCl7Zm9yKHA9MTtwPGFyZ3VtZW50c1tjXS0yO3ArKyl2b2lkIDA9PT1hcmd1bWVudHNbcF0mJihhW3BdPXZvaWQgMCl9KSxhW2NdPjEmJmEuaW5kZXg8ZVtjXSYmdS5hcHBseSh2LGEuc2xpY2UoMSkpLGg9YVswXVtjXSx5PWwsdltjXT49ZykpOyltW3NdPT09YS5pbmRleCYmbVtzXSsrO3JldHVybiB5PT09ZVtjXT8haCYmbS50ZXN0KFwiXCIpfHx2LnB1c2goXCJcIik6di5wdXNoKGUuc2xpY2UoeSkpLHZbY10+Zz92LnNsaWNlKDAsZyk6dn19ZWxzZVwiMFwiW2FdKHZvaWQgMCwwKVtjXSYmKHI9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PW4/W106by5jYWxsKHRoaXMsdCxuKX0pO3JldHVybltmdW5jdGlvbihlLGkpe3ZhciBvPXQodGhpcyksdT12b2lkIDA9PWU/dm9pZCAwOmVbbl07cmV0dXJuIHZvaWQgMCE9PXU/dS5jYWxsKGUsbyxpKTpyLmNhbGwoU3RyaW5nKG8pLGUsaSl9LHJdfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcixpLG8sdSxhPWUoNDMpLGM9ZSgyKSxzPWUoMjIpLGY9ZSg2NSksbD1lKDApLGg9ZSg0KSxwPWUoMTEpLHY9ZSg0OSksZD1lKDUwKSx5PWUoODMpLGc9ZSgxMjMpLnNldCxtPWUoMTI0KSgpLF89ZSgxMjUpLHc9ZSgxNzMpLGI9ZSgxNzQpLHg9XCJQcm9taXNlXCIsUz1jLlR5cGVFcnJvcixPPWMucHJvY2VzcyxQPWNbeF0saz1cInByb2Nlc3NcIj09ZihPKSxFPWZ1bmN0aW9uKCl7fSxqPWk9Xy5mLEE9ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1QLnJlc29sdmUoMSksbj0odC5jb25zdHJ1Y3Rvcj17fSlbZSg1KShcInNwZWNpZXNcIildPWZ1bmN0aW9uKHQpe3QoRSxFKX07cmV0dXJuKGt8fFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJnQudGhlbihFKWluc3RhbmNlb2Ygbn1jYXRjaCh0KXt9fSgpLE09ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuISghaCh0KXx8XCJmdW5jdGlvblwiIT10eXBlb2Yobj10LnRoZW4pKSYmbn0sVD1mdW5jdGlvbih0LG4pe2lmKCF0Ll9uKXt0Ll9uPSEwO3ZhciBlPXQuX2M7bShmdW5jdGlvbigpe2Zvcih2YXIgcj10Ll92LGk9MT09dC5fcyxvPTAsdT1mdW5jdGlvbihuKXt2YXIgZSxvLHU9aT9uLm9rOm4uZmFpbCxhPW4ucmVzb2x2ZSxjPW4ucmVqZWN0LHM9bi5kb21haW47dHJ5e3U/KGl8fCgyPT10Ll9oJiZJKHQpLHQuX2g9MSksITA9PT11P2U9cjoocyYmcy5lbnRlcigpLGU9dShyKSxzJiZzLmV4aXQoKSksZT09PW4ucHJvbWlzZT9jKFMoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKToobz1NKGUpKT9vLmNhbGwoZSxhLGMpOmEoZSkpOmMocil9Y2F0Y2godCl7Yyh0KX19O2UubGVuZ3RoPm87KXUoZVtvKytdKTt0Ll9jPVtdLHQuX249ITEsbiYmIXQuX2gmJkYodCl9KX19LEY9ZnVuY3Rpb24odCl7Zy5jYWxsKGMsZnVuY3Rpb24oKXt2YXIgbixlLHIsaT10Ll92LG89TCh0KTtpZihvJiYobj13KGZ1bmN0aW9uKCl7az9PLmVtaXQoXCJ1bmhhbmRsZWRSZWplY3Rpb25cIixpLHQpOihlPWMub251bmhhbmRsZWRyZWplY3Rpb24pP2Uoe3Byb21pc2U6dCxyZWFzb246aX0pOihyPWMuY29uc29sZSkmJnIuZXJyb3ImJnIuZXJyb3IoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixpKX0pLHQuX2g9a3x8TCh0KT8yOjEpLHQuX2E9dm9pZCAwLG8mJm4uZSl0aHJvdyBuLnZ9KX0sTD1mdW5jdGlvbih0KXtyZXR1cm4gMSE9PXQuX2gmJjA9PT0odC5fYXx8dC5fYykubGVuZ3RofSxJPWZ1bmN0aW9uKHQpe2cuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG47az9PLmVtaXQoXCJyZWplY3Rpb25IYW5kbGVkXCIsdCk6KG49Yy5vbnJlamVjdGlvbmhhbmRsZWQpJiZuKHtwcm9taXNlOnQscmVhc29uOnQuX3Z9KX0pfSxOPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7bi5fZHx8KG4uX2Q9ITAsbj1uLl93fHxuLG4uX3Y9dCxuLl9zPTIsbi5fYXx8KG4uX2E9bi5fYy5zbGljZSgpKSxUKG4sITApKX0sRD1mdW5jdGlvbih0KXt2YXIgbixlPXRoaXM7aWYoIWUuX2Qpe2UuX2Q9ITAsZT1lLl93fHxlO3RyeXtpZihlPT09dCl0aHJvdyBTKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7KG49TSh0KSk/bShmdW5jdGlvbigpe3ZhciByPXtfdzplLF9kOiExfTt0cnl7bi5jYWxsKHQscyhELHIsMSkscyhOLHIsMSkpfWNhdGNoKHQpe04uY2FsbChyLHQpfX0pOihlLl92PXQsZS5fcz0xLFQoZSwhMSkpfWNhdGNoKHQpe04uY2FsbCh7X3c6ZSxfZDohMX0sdCl9fX07QXx8KFA9ZnVuY3Rpb24odCl7dih0aGlzLFAseCxcIl9oXCIpLHAodCksci5jYWxsKHRoaXMpO3RyeXt0KHMoRCx0aGlzLDEpLHMoTix0aGlzLDEpKX1jYXRjaCh0KXtOLmNhbGwodGhpcyx0KX19LHI9ZnVuY3Rpb24odCl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0sci5wcm90b3R5cGU9ZSg1MSkoUC5wcm90b3R5cGUse3RoZW46ZnVuY3Rpb24odCxuKXt2YXIgZT1qKHkodGhpcyxQKSk7cmV0dXJuIGUub2s9XCJmdW5jdGlvblwiIT10eXBlb2YgdHx8dCxlLmZhaWw9XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbixlLmRvbWFpbj1rP08uZG9tYWluOnZvaWQgMCx0aGlzLl9jLnB1c2goZSksdGhpcy5fYSYmdGhpcy5fYS5wdXNoKGUpLHRoaXMuX3MmJlQodGhpcywhMSksZS5wcm9taXNlfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCx0KX19KSxvPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHI7dGhpcy5wcm9taXNlPXQsdGhpcy5yZXNvbHZlPXMoRCx0LDEpLHRoaXMucmVqZWN0PXMoTix0LDEpfSxfLmY9aj1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVB8fHQ9PT11P25ldyBvKHQpOmkodCl9KSxsKGwuRytsLlcrbC5GKiFBLHtQcm9taXNlOlB9KSxlKDU1KShQLHgpLGUoNDgpKHgpLHU9ZSgzNClbeF0sbChsLlMrbC5GKiFBLHgse3JlamVjdDpmdW5jdGlvbih0KXt2YXIgbj1qKHRoaXMpO3JldHVybigwLG4ucmVqZWN0KSh0KSxuLnByb21pc2V9fSksbChsLlMrbC5GKihhfHwhQSkseCx7cmVzb2x2ZTpmdW5jdGlvbih0KXtyZXR1cm4gYihhJiZ0aGlzPT09dT9QOnRoaXMsdCl9fSksbChsLlMrbC5GKiEoQSYmZSg4MCkoZnVuY3Rpb24odCl7UC5hbGwodCkuY2F0Y2goRSl9KSkseCx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1qKG4pLHI9ZS5yZXNvbHZlLGk9ZS5yZWplY3Qsbz13KGZ1bmN0aW9uKCl7dmFyIGU9W10sbz0wLHU9MTtkKHQsITEsZnVuY3Rpb24odCl7dmFyIGE9bysrLGM9ITE7ZS5wdXNoKHZvaWQgMCksdSsrLG4ucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGVbYV09dCwtLXV8fHIoZSkpfSxpKX0pLC0tdXx8cihlKX0pO3JldHVybiBvLmUmJmkoby52KSxlLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPWoobikscj1lLnJlamVjdCxpPXcoZnVuY3Rpb24oKXtkKHQsITEsZnVuY3Rpb24odCl7bi5yZXNvbHZlKHQpLnRoZW4oZS5yZXNvbHZlLHIpfSl9KTtyZXR1cm4gaS5lJiZyKGkudiksZS5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxNzkpLGk9ZSg1OCksbz1cIldlYWtTZXRcIjtlKDg0KShvLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gci5kZWYoaSh0aGlzLG8pLHQsITApfX0sciwhMSwhMCl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSg4NSksbz1lKDEyNiksdT1lKDEpLGE9ZSg0NSksYz1lKDkpLHM9ZSg0KSxmPWUoMikuQXJyYXlCdWZmZXIsbD1lKDgzKSxoPW8uQXJyYXlCdWZmZXIscD1vLkRhdGFWaWV3LHY9aS5BQlYmJmYuaXNWaWV3LGQ9aC5wcm90b3R5cGUuc2xpY2UseT1pLlZJRVcsZz1cIkFycmF5QnVmZmVyXCI7cihyLkcrci5XK3IuRiooZiE9PWgpLHtBcnJheUJ1ZmZlcjpofSkscihyLlMrci5GKiFpLkNPTlNUUixnLHtpc1ZpZXc6ZnVuY3Rpb24odCl7cmV0dXJuIHYmJnYodCl8fHModCkmJnkgaW4gdH19KSxyKHIuUCtyLlUrci5GKmUoMykoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGgoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSxnLHtzbGljZTpmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWQmJnZvaWQgMD09PW4pcmV0dXJuIGQuY2FsbCh1KHRoaXMpLHQpO2Zvcih2YXIgZT11KHRoaXMpLmJ5dGVMZW5ndGgscj1hKHQsZSksaT1hKHZvaWQgMD09PW4/ZTpuLGUpLG89bmV3KGwodGhpcyxoKSkoYyhpLXIpKSxzPW5ldyBwKHRoaXMpLGY9bmV3IHAobyksdj0wO3I8aTspZi5zZXRVaW50OCh2Kysscy5nZXRVaW50OChyKyspKTtyZXR1cm4gb319KSxlKDQ4KShnKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLkcrci5XK3IuRiohZSg4NSkuQUJWLHtEYXRhVmlldzplKDEyNikuRGF0YVZpZXd9KX0sZnVuY3Rpb24odCxuLGUpe2UoMzUpKFwiSW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gdCh0aGlzLG4sZSxyKX19KX0sZnVuY3Rpb24odCxuLGUpe2UoMzUpKFwiVWludDhcIiwxLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUscil7cmV0dXJuIHQodGhpcyxuLGUscil9fSl9LGZ1bmN0aW9uKHQsbixlKXtlKDM1KShcIlVpbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3JldHVybiB0KHRoaXMsbixlLHIpfX0sITApfSxmdW5jdGlvbih0LG4sZSl7ZSgzNSkoXCJJbnQxNlwiLDIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gdCh0aGlzLG4sZSxyKX19KX0sZnVuY3Rpb24odCxuLGUpe2UoMzUpKFwiVWludDE2XCIsMixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3JldHVybiB0KHRoaXMsbixlLHIpfX0pfSxmdW5jdGlvbih0LG4sZSl7ZSgzNSkoXCJJbnQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSxyKXtyZXR1cm4gdCh0aGlzLG4sZSxyKX19KX0sZnVuY3Rpb24odCxuLGUpe2UoMzUpKFwiVWludDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3JldHVybiB0KHRoaXMsbixlLHIpfX0pfSxmdW5jdGlvbih0LG4sZSl7ZSgzNSkoXCJGbG9hdDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3JldHVybiB0KHRoaXMsbixlLHIpfX0pfSxmdW5jdGlvbih0LG4sZSl7ZSgzNSkoXCJGbG9hdDY0XCIsOCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlLHIpe3JldHVybiB0KHRoaXMsbixlLHIpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTEpLG89ZSgxKSx1PShlKDIpLlJlZmxlY3R8fHt9KS5hcHBseSxhPUZ1bmN0aW9uLmFwcGx5O3Ioci5TK3IuRiohZSgzKShmdW5jdGlvbigpe3UoZnVuY3Rpb24oKXt9KX0pLFwiUmVmbGVjdFwiLHthcHBseTpmdW5jdGlvbih0LG4sZSl7dmFyIHI9aSh0KSxjPW8oZSk7cmV0dXJuIHU/dShyLG4sYyk6YS5jYWxsKHIsbixjKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDQ2KSxvPWUoMTEpLHU9ZSgxKSxhPWUoNCksYz1lKDMpLHM9ZSgxNjApLGY9KGUoMikuUmVmbGVjdHx8e30pLmNvbnN0cnVjdCxsPWMoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoZihmdW5jdGlvbigpe30sW10sdClpbnN0YW5jZW9mIHQpfSksaD0hYyhmdW5jdGlvbigpe2YoZnVuY3Rpb24oKXt9KX0pO3Ioci5TK3IuRioobHx8aCksXCJSZWZsZWN0XCIse2NvbnN0cnVjdDpmdW5jdGlvbih0LG4pe28odCksdShuKTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDM/dDpvKGFyZ3VtZW50c1syXSk7aWYoaCYmIWwpcmV0dXJuIGYodCxuLGUpO2lmKHQ9PWUpe3N3aXRjaChuLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KG5bMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KG5bMF0sblsxXSxuWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KG5bMF0sblsxXSxuWzJdLG5bM10pfXZhciByPVtudWxsXTtyZXR1cm4gci5wdXNoLmFwcGx5KHIsbiksbmV3KHMuYXBwbHkodCxyKSl9dmFyIGM9ZS5wcm90b3R5cGUscD1pKGEoYyk/YzpPYmplY3QucHJvdG90eXBlKSx2PUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxwLG4pO3JldHVybiBhKHYpP3Y6cH19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOCksaT1lKDApLG89ZSgxKSx1PWUoMjcpO2koaS5TK2kuRiplKDMpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLFwiUmVmbGVjdFwiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LG4sZSl7byh0KSxuPXUobiwhMCksbyhlKTt0cnl7cmV0dXJuIHIuZih0LG4sZSksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMjApLmYsbz1lKDEpO3Ioci5TLFwiUmVmbGVjdFwiLHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih0LG4pe3ZhciBlPWkobyh0KSxuKTtyZXR1cm4hKGUmJiFlLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB0W25dfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMSksbz1mdW5jdGlvbih0KXt0aGlzLl90PWkodCksdGhpcy5faT0wO3ZhciBuLGU9dGhpcy5faz1bXTtmb3IobiBpbiB0KWUucHVzaChuKX07ZSgxMTQpKG8sXCJPYmplY3RcIixmdW5jdGlvbigpe3ZhciB0LG49dGhpcyxlPW4uX2s7ZG97aWYobi5faT49ZS5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX13aGlsZSghKCh0PWVbbi5faSsrXSlpbiBuLl90KSk7cmV0dXJue3ZhbHVlOnQsZG9uZTohMX19KSxyKHIuUyxcIlJlZmxlY3RcIix7ZW51bWVyYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0KX19KX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIodCxuKXt2YXIgZSxhLGY9YXJndW1lbnRzLmxlbmd0aDwzP3Q6YXJndW1lbnRzWzJdO3JldHVybiBzKHQpPT09Zj90W25dOihlPWkuZih0LG4pKT91KGUsXCJ2YWx1ZVwiKT9lLnZhbHVlOnZvaWQgMCE9PWUuZ2V0P2UuZ2V0LmNhbGwoZik6dm9pZCAwOmMoYT1vKHQpKT9yKGEsbixmKTp2b2lkIDB9dmFyIGk9ZSgyMCksbz1lKDIxKSx1PWUoMTUpLGE9ZSgwKSxjPWUoNCkscz1lKDEpO2EoYS5TLFwiUmVmbGVjdFwiLHtnZXQ6cn0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyMCksaT1lKDApLG89ZSgxKTtpKGkuUyxcIlJlZmxlY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsbil7cmV0dXJuIHIuZihvKHQpLG4pfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMjEpLG89ZSgxKTtyKHIuUyxcIlJlZmxlY3RcIix7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiUmVmbGVjdFwiLHtoYXM6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbiBpbiB0fX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMSksbz1PYmplY3QuaXNFeHRlbnNpYmxlO3Ioci5TLFwiUmVmbGVjdFwiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCksIW98fG8odCl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiUmVmbGVjdFwiLHtvd25LZXlzOmUoMTgxKX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMSksbz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7cihyLlMsXCJSZWZsZWN0XCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3JldHVybiBvJiZvKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIodCxuLGUpe3ZhciBjLGgscD1hcmd1bWVudHMubGVuZ3RoPDQ/dDphcmd1bWVudHNbM10sdj1vLmYoZih0KSxuKTtpZighdil7aWYobChoPXUodCkpKXJldHVybiByKGgsbixlLHApO3Y9cygwKX1yZXR1cm4gYSh2LFwidmFsdWVcIik/ISghMT09PXYud3JpdGFibGV8fCFsKHApKSYmKGM9by5mKHAsbil8fHMoMCksYy52YWx1ZT1lLGkuZihwLG4sYyksITApOnZvaWQgMCE9PXYuc2V0JiYodi5zZXQuY2FsbChwLGUpLCEwKX12YXIgaT1lKDgpLG89ZSgyMCksdT1lKDIxKSxhPWUoMTUpLGM9ZSgwKSxzPWUoNDEpLGY9ZSgxKSxsPWUoNCk7YyhjLlMsXCJSZWZsZWN0XCIse3NldDpyfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgxMDYpO2kmJnIoci5TLFwiUmVmbGVjdFwiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbih0LG4pe2kuY2hlY2sodCxuKTt0cnl7cmV0dXJuIGkuc2V0KHQsbiksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoNzYpKCEwKTtyKHIuUCxcIkFycmF5XCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksZSgzOSkoXCJpbmNsdWRlc1wiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDE4Miksbz1lKDEwKSx1PWUoOSksYT1lKDExKSxjPWUoMTIwKTtyKHIuUCxcIkFycmF5XCIse2ZsYXRNYXA6ZnVuY3Rpb24odCl7dmFyIG4sZSxyPW8odGhpcyk7cmV0dXJuIGEodCksbj11KHIubGVuZ3RoKSxlPWMociwwKSxpKGUscixyLG4sMCwxLHQsYXJndW1lbnRzWzFdKSxlfX0pLGUoMzkpKFwiZmxhdE1hcFwiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDE4Miksbz1lKDEwKSx1PWUoOSksYT1lKDI5KSxjPWUoMTIwKTtyKHIuUCxcIkFycmF5XCIse2ZsYXR0ZW46ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sbj1vKHRoaXMpLGU9dShuLmxlbmd0aCkscj1jKG4sMCk7cmV0dXJuIGkocixuLG4sZSwwLHZvaWQgMD09PXQ/MTphKHQpKSxyfX0pLGUoMzkpKFwiZmxhdHRlblwiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDExMikoITApO3Ioci5QLFwiU3RyaW5nXCIse2F0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgxODMpLG89ZSgxMjcpO3Ioci5QK3IuRiovVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KG8pLFwiU3RyaW5nXCIse3BhZFN0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwhMCl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgxODMpLG89ZSgxMjcpO3Ioci5QK3IuRiovVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KG8pLFwiU3RyaW5nXCIse3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITEpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZSg1NikoXCJ0cmltTGVmdFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMSl9fSxcInRyaW1TdGFydFwiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UoNTYpKFwidHJpbVJpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywyKX19LFwidHJpbUVuZFwiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDI4KSxvPWUoOSksdT1lKDc5KSxhPWUoODEpLGM9UmVnRXhwLnByb3RvdHlwZSxzPWZ1bmN0aW9uKHQsbil7dGhpcy5fcj10LHRoaXMuX3M9bn07ZSgxMTQpKHMsXCJSZWdFeHAgU3RyaW5nXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yLmV4ZWModGhpcy5fcyk7cmV0dXJue3ZhbHVlOnQsZG9uZTpudWxsPT09dH19KSxyKHIuUCxcIlN0cmluZ1wiLHttYXRjaEFsbDpmdW5jdGlvbih0KXtpZihpKHRoaXMpLCF1KHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHJlZ2V4cCFcIik7dmFyIG49U3RyaW5nKHRoaXMpLGU9XCJmbGFnc1wiaW4gYz9TdHJpbmcodC5mbGFncyk6YS5jYWxsKHQpLHI9bmV3IFJlZ0V4cCh0LnNvdXJjZSx+ZS5pbmRleE9mKFwiZ1wiKT9lOlwiZ1wiK2UpO3JldHVybiByLmxhc3RJbmRleD1vKHQubGFzdEluZGV4KSxuZXcgcyhyLG4pfX0pfSxmdW5jdGlvbih0LG4sZSl7ZSgxMDIpKFwiYXN5bmNJdGVyYXRvclwiKX0sZnVuY3Rpb24odCxuLGUpe2UoMTAyKShcIm9ic2VydmFibGVcIil9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9ZSgxODEpLG89ZSgxOSksdT1lKDIwKSxhPWUoMTE4KTtyKHIuUyxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlLHI9byh0KSxjPXUuZixzPWkociksZj17fSxsPTA7cy5sZW5ndGg+bDspdm9pZCAwIT09KGU9YyhyLG49c1tsKytdKSkmJmEoZixuLGUpO3JldHVybiBmfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTg0KSghMSk7cihyLlMsXCJPYmplY3RcIix7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTg0KSghMCk7cihyLlMsXCJPYmplY3RcIix7ZW50cmllczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwKSxvPWUoMTEpLHU9ZSg4KTtlKDcpJiZyKHIuUCtlKDg2KSxcIk9iamVjdFwiLHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsbil7dS5mKGkodGhpcyksdCx7Z2V0Om8obiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwKSxvPWUoMTEpLHU9ZSg4KTtlKDcpJiZyKHIuUCtlKDg2KSxcIk9iamVjdFwiLHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsbil7dS5mKGkodGhpcyksdCx7c2V0Om8obiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwKSxvPWUoMjcpLHU9ZSgyMSksYT1lKDIwKS5mO2UoNykmJnIoci5QK2UoODYpLFwiT2JqZWN0XCIse19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIG4sZT1pKHRoaXMpLHI9byh0LCEwKTtkb3tpZihuPWEoZSxyKSlyZXR1cm4gbi5nZXR9d2hpbGUoZT11KGUpKX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMCksaT1lKDEwKSxvPWUoMjcpLHU9ZSgyMSksYT1lKDIwKS5mO2UoNykmJnIoci5QK2UoODYpLFwiT2JqZWN0XCIse19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIG4sZT1pKHRoaXMpLHI9byh0LCEwKTtkb3tpZihuPWEoZSxyKSlyZXR1cm4gbi5zZXR9d2hpbGUoZT11KGUpKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlArci5SLFwiTWFwXCIse3RvSlNPTjplKDE4NSkoXCJNYXBcIil9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlArci5SLFwiU2V0XCIse3RvSlNPTjplKDE4NSkoXCJTZXRcIil9KX0sZnVuY3Rpb24odCxuLGUpe2UoODcpKFwiTWFwXCIpfSxmdW5jdGlvbih0LG4sZSl7ZSg4NykoXCJTZXRcIil9LGZ1bmN0aW9uKHQsbixlKXtlKDg3KShcIldlYWtNYXBcIil9LGZ1bmN0aW9uKHQsbixlKXtlKDg3KShcIldlYWtTZXRcIil9LGZ1bmN0aW9uKHQsbixlKXtlKDg4KShcIk1hcFwiKX0sZnVuY3Rpb24odCxuLGUpe2UoODgpKFwiU2V0XCIpfSxmdW5jdGlvbih0LG4sZSl7ZSg4OCkoXCJXZWFrTWFwXCIpfSxmdW5jdGlvbih0LG4sZSl7ZSg4OCkoXCJXZWFrU2V0XCIpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuRyx7Z2xvYmFsOmUoMil9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJTeXN0ZW1cIix7Z2xvYmFsOmUoMil9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDIzKTtyKHIuUyxcIkVycm9yXCIse2lzRXJyb3I6ZnVuY3Rpb24odCl7cmV0dXJuXCJFcnJvclwiPT09aSh0KX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse2NsYW1wOmZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gTWF0aC5taW4oZSxNYXRoLm1heChuLHQpKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse0RFR19QRVJfUkFEOk1hdGguUEkvMTgwfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9MTgwL01hdGguUEk7cihyLlMsXCJNYXRoXCIse2RlZ3JlZXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqaX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDE4Nyksbz1lKDE2Nyk7cihyLlMsXCJNYXRoXCIse2ZzY2FsZTpmdW5jdGlvbih0LG4sZSxyLHUpe3JldHVybiBvKGkodCxuLGUscix1KSl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTWF0aFwiLHtpYWRkaDpmdW5jdGlvbih0LG4sZSxyKXt2YXIgaT10Pj4+MCxvPW4+Pj4wLHU9ZT4+PjA7cmV0dXJuIG8rKHI+Pj4wKSsoKGkmdXwoaXx1KSZ+KGkrdT4+PjApKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk1hdGhcIix7aXN1Ymg6ZnVuY3Rpb24odCxuLGUscil7dmFyIGk9dD4+PjAsbz1uPj4+MCx1PWU+Pj4wO3JldHVybiBvLShyPj4+MCktKCh+aSZ1fH4oaV51KSZpLXU+Pj4wKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk1hdGhcIix7aW11bGg6ZnVuY3Rpb24odCxuKXt2YXIgZT02NTUzNSxyPSt0LGk9K24sbz1yJmUsdT1pJmUsYT1yPj4xNixjPWk+PjE2LHM9KGEqdT4+PjApKyhvKnU+Pj4xNik7cmV0dXJuIGEqYysocz4+MTYpKygobypjPj4+MCkrKHMmZSk+PjE2KX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse1JBRF9QRVJfREVHOjE4MC9NYXRoLlBJfSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApLGk9TWF0aC5QSS8xODA7cihyLlMsXCJNYXRoXCIse3JhZGlhbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQqaX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCk7cihyLlMsXCJNYXRoXCIse3NjYWxlOmUoMTg3KX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKTtyKHIuUyxcIk1hdGhcIix7dW11bGg6ZnVuY3Rpb24odCxuKXt2YXIgZT02NTUzNSxyPSt0LGk9K24sbz1yJmUsdT1pJmUsYT1yPj4+MTYsYz1pPj4+MTYscz0oYSp1Pj4+MCkrKG8qdT4+PjE2KTtyZXR1cm4gYSpjKyhzPj4+MTYpKygobypjPj4+MCkrKHMmZSk+Pj4xNil9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDApO3Ioci5TLFwiTWF0aFwiLHtzaWduYml0OmZ1bmN0aW9uKHQpe3JldHVybih0PSt0KSE9dD90OjA9PXQ/MS90PT0xLzA6dD4wfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMzQpLG89ZSgyKSx1PWUoODMpLGE9ZSgxNzQpO3Ioci5QK3IuUixcIlByb21pc2VcIix7ZmluYWxseTpmdW5jdGlvbih0KXt2YXIgbj11KHRoaXMsaS5Qcm9taXNlfHxvLlByb21pc2UpLGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdDtyZXR1cm4gdGhpcy50aGVuKGU/ZnVuY3Rpb24oZSl7cmV0dXJuIGEobix0KCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gZX0pfTp0LGU/ZnVuY3Rpb24oZSl7cmV0dXJuIGEobix0KCkpLnRoZW4oZnVuY3Rpb24oKXt0aHJvdyBlfSl9OnQpfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgwKSxpPWUoMTI1KSxvPWUoMTczKTtyKHIuUyxcIlByb21pc2VcIix7dHJ5OmZ1bmN0aW9uKHQpe3ZhciBuPWkuZih0aGlzKSxlPW8odCk7cmV0dXJuKGUuZT9uLnJlamVjdDpuLnJlc29sdmUpKGUudiksbi5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzNiksaT1lKDEpLG89ci5rZXksdT1yLnNldDtyLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxuLGUscil7dSh0LG4saShlKSxvKHIpKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLGk9ZSgxKSxvPXIua2V5LHU9ci5tYXAsYT1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbih0LG4pe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pLHI9dShpKG4pLGUsITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZSh0KSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIGM9YS5nZXQobik7cmV0dXJuIGMuZGVsZXRlKGUpLCEhYy5zaXplfHxhLmRlbGV0ZShuKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLGk9ZSgxKSxvPWUoMjEpLHU9ci5oYXMsYT1yLmdldCxjPXIua2V5LHM9ZnVuY3Rpb24odCxuLGUpe2lmKHUodCxuLGUpKXJldHVybiBhKHQsbixlKTt2YXIgcj1vKG4pO3JldHVybiBudWxsIT09cj9zKHQscixlKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbih0LG4pe3JldHVybiBzKHQsaShuKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDE3NyksaT1lKDE4Niksbz1lKDM2KSx1PWUoMSksYT1lKDIxKSxjPW8ua2V5cyxzPW8ua2V5LGY9ZnVuY3Rpb24odCxuKXt2YXIgZT1jKHQsbiksbz1hKHQpO2lmKG51bGw9PT1vKXJldHVybiBlO3ZhciB1PWYobyxuKTtyZXR1cm4gdS5sZW5ndGg/ZS5sZW5ndGg/aShuZXcgcihlLmNvbmNhdCh1KSkpOnU6ZX07by5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gZih1KHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6cyhhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLGk9ZSgxKSxvPXIuZ2V0LHU9ci5rZXk7ci5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsbil7cmV0dXJuIG8odCxpKG4pLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzYpLGk9ZSgxKSxvPXIua2V5cyx1PXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0KSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOnUoYXJndW1lbnRzWzFdKSl9fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDM2KSxpPWUoMSksbz1lKDIxKSx1PXIuaGFzLGE9ci5rZXksYz1mdW5jdGlvbih0LG4sZSl7aWYodSh0LG4sZSkpcmV0dXJuITA7dmFyIHI9byhuKTtyZXR1cm4gbnVsbCE9PXImJmModCxyLGUpfTtyLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24odCxuKXtyZXR1cm4gYyh0LGkobiksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDphKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzNiksaT1lKDEpLG89ci5oYXMsdT1yLmtleTtyLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24odCxuKXtyZXR1cm4gbyh0LGkobiksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzNiksaT1lKDEpLG89ZSgxMSksdT1yLmtleSxhPXIuc2V0O3IuZXhwKHttZXRhZGF0YTpmdW5jdGlvbih0LG4pe3JldHVybiBmdW5jdGlvbihlLHIpe2EodCxuLCh2b2lkIDAhPT1yP2k6bykoZSksdShyKSl9fX0pfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgwKSxpPWUoMTI0KSgpLG89ZSgyKS5wcm9jZXNzLHU9XCJwcm9jZXNzXCI9PWUoMjMpKG8pO3Ioci5HLHthc2FwOmZ1bmN0aW9uKHQpe3ZhciBuPXUmJm8uZG9tYWluO2kobj9uLmJpbmQodCk6dCl9fSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDApLGk9ZSgyKSxvPWUoMzQpLHU9ZSgxMjQpKCksYT1lKDUpKFwib2JzZXJ2YWJsZVwiKSxjPWUoMTEpLHM9ZSgxKSxmPWUoNDkpLGw9ZSg1MSksaD1lKDE2KSxwPWUoNTApLHY9cC5SRVRVUk4sZD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD92b2lkIDA6Yyh0KX0seT1mdW5jdGlvbih0KXt2YXIgbj10Ll9jO24mJih0Ll9jPXZvaWQgMCxuKCkpfSxnPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Ll9vfSxtPWZ1bmN0aW9uKHQpe2codCl8fCh0Ll9vPXZvaWQgMCx5KHQpKX0sXz1mdW5jdGlvbih0LG4pe3ModCksdGhpcy5fYz12b2lkIDAsdGhpcy5fbz10LHQ9bmV3IHcodGhpcyk7dHJ5e3ZhciBlPW4odCkscj1lO251bGwhPWUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnVuc3Vic2NyaWJlP2U9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKCl9OmMoZSksdGhpcy5fYz1lKX1jYXRjaChuKXtyZXR1cm4gdm9pZCB0LmVycm9yKG4pfWcodGhpcykmJnkodGhpcyl9O18ucHJvdG90eXBlPWwoe30se3Vuc3Vic2NyaWJlOmZ1bmN0aW9uKCl7bSh0aGlzKX19KTt2YXIgdz1mdW5jdGlvbih0KXt0aGlzLl9zPXR9O3cucHJvdG90eXBlPWwoe30se25leHQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fcztpZighZyhuKSl7dmFyIGU9bi5fbzt0cnl7dmFyIHI9ZChlLm5leHQpO2lmKHIpcmV0dXJuIHIuY2FsbChlLHQpfWNhdGNoKHQpe3RyeXttKG4pfWZpbmFsbHl7dGhyb3cgdH19fX0sZXJyb3I6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fcztpZihnKG4pKXRocm93IHQ7dmFyIGU9bi5fbztuLl9vPXZvaWQgMDt0cnl7dmFyIHI9ZChlLmVycm9yKTtpZighcil0aHJvdyB0O3Q9ci5jYWxsKGUsdCl9Y2F0Y2godCl7dHJ5e3kobil9ZmluYWxseXt0aHJvdyB0fX1yZXR1cm4geShuKSx0fSxjb21wbGV0ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9zO2lmKCFnKG4pKXt2YXIgZT1uLl9vO24uX289dm9pZCAwO3RyeXt2YXIgcj1kKGUuY29tcGxldGUpO3Q9cj9yLmNhbGwoZSx0KTp2b2lkIDB9Y2F0Y2godCl7dHJ5e3kobil9ZmluYWxseXt0aHJvdyB0fX1yZXR1cm4geShuKSx0fX19KTt2YXIgYj1mdW5jdGlvbih0KXtmKHRoaXMsYixcIk9ic2VydmFibGVcIixcIl9mXCIpLl9mPWModCl9O2woYi5wcm90b3R5cGUse3N1YnNjcmliZTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IF8odCx0aGlzLl9mKX0sZm9yRWFjaDpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiBuZXcoby5Qcm9taXNlfHxpLlByb21pc2UpKGZ1bmN0aW9uKGUscil7Yyh0KTt2YXIgaT1uLnN1YnNjcmliZSh7bmV4dDpmdW5jdGlvbihuKXt0cnl7cmV0dXJuIHQobil9Y2F0Y2godCl7cih0KSxpLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpyLGNvbXBsZXRlOmV9KX0pfX0pLGwoYix7ZnJvbTpmdW5jdGlvbih0KXt2YXIgbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6YixlPWQocyh0KVthXSk7aWYoZSl7dmFyIHI9cyhlLmNhbGwodCkpO3JldHVybiByLmNvbnN0cnVjdG9yPT09bj9yOm5ldyBuKGZ1bmN0aW9uKHQpe3JldHVybiByLnN1YnNjcmliZSh0KX0pfXJldHVybiBuZXcgbihmdW5jdGlvbihuKXt2YXIgZT0hMTtyZXR1cm4gdShmdW5jdGlvbigpe2lmKCFlKXt0cnl7aWYocCh0LCExLGZ1bmN0aW9uKHQpe2lmKG4ubmV4dCh0KSxlKXJldHVybiB2fSk9PT12KXJldHVybn1jYXRjaCh0KXtpZihlKXRocm93IHQ7cmV0dXJuIHZvaWQgbi5lcnJvcih0KX1uLmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtlPSEwfX0pfSxvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLG49YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheShuKTt0PG47KWVbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG5ldyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6YikoZnVuY3Rpb24odCl7dmFyIG49ITE7cmV0dXJuIHUoZnVuY3Rpb24oKXtpZighbil7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpaWYodC5uZXh0KGVbcl0pLG4pcmV0dXJuO3QuY29tcGxldGUoKX19KSxmdW5jdGlvbigpe249ITB9fSl9fSksaChiLnByb3RvdHlwZSxhLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxyKHIuRyx7T2JzZXJ2YWJsZTpifSksZSg0OCkoXCJPYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgyKSxpPWUoMCksbz1lKDEyNyksdT1bXS5zbGljZSxhPS9NU0lFIC5cXC4vLnRlc3QobyksYz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obixlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjIsaT0hIXImJnUuY2FsbChhcmd1bWVudHMsMik7cmV0dXJuIHQocj9mdW5jdGlvbigpeyhcImZ1bmN0aW9uXCI9PXR5cGVvZiBuP246RnVuY3Rpb24obikpLmFwcGx5KHRoaXMsaSl9Om4sZSl9fTtpKGkuRytpLkIraS5GKmEse3NldFRpbWVvdXQ6YyhyLnNldFRpbWVvdXQpLHNldEludGVydmFsOmMoci5zZXRJbnRlcnZhbCl9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMCksaT1lKDEyMyk7cihyLkcrci5CLHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSxmdW5jdGlvbih0LG4sZSl7Zm9yKHZhciByPWUoMTIyKSxpPWUoNDQpLG89ZSgxNyksdT1lKDIpLGE9ZSgxNiksYz1lKDU3KSxzPWUoNSksZj1zKFwiaXRlcmF0b3JcIiksbD1zKFwidG9TdHJpbmdUYWdcIiksaD1jLkFycmF5LHA9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSx2PWkocCksZD0wO2Q8di5sZW5ndGg7ZCsrKXt2YXIgeSxnPXZbZF0sbT1wW2ddLF89dVtnXSx3PV8mJl8ucHJvdG90eXBlO2lmKHcmJih3W2ZdfHxhKHcsZixoKSx3W2xdfHxhKHcsbCxnKSxjW2ddPWgsbSkpZm9yKHkgaW4gcil3W3ldfHxvKHcseSxyW3ldLCEwKX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0MTQpfSxmdW5jdGlvbih0LG4sZSl7ZSg1OSksZSg0MjApLHQuZXhwb3J0cz1lKDYpLkFycmF5LmZyb219LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEyOCksaT1lKDEyOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLGUpe3ZhciBvLHUsYT1TdHJpbmcoaShuKSksYz1yKGUpLHM9YS5sZW5ndGg7cmV0dXJuIGM8MHx8Yz49cz90P1wiXCI6dm9pZCAwOihvPWEuY2hhckNvZGVBdChjKSxvPDU1Mjk2fHxvPjU2MzE5fHxjKzE9PT1zfHwodT1hLmNoYXJDb2RlQXQoYysxKSk8NTYzMjB8fHU+NTczNDM/dD9hLmNoYXJBdChjKTpvOnQ/YS5zbGljZShjLGMrMik6dS01NjMyMCsoby01NTI5Njw8MTApKzY1NTM2KX19fSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg5MSksaT1lKDY3KSxvPWUoNzApLHU9e307ZSg0MCkodSxlKDEzKShcIml0ZXJhdG9yXCIpLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe3QucHJvdG90eXBlPXIodSx7bmV4dDppKDEsZSl9KSxvKHQsbitcIiBJdGVyYXRvclwiKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI1KSxpPWUoMzIpLG89ZSg2OCk7dC5leHBvcnRzPWUoMzMpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsbil7aSh0KTtmb3IodmFyIGUsdT1vKG4pLGE9dS5sZW5ndGgsYz0wO2E+Yzspci5mKHQsZT11W2MrK10sbltlXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg1NCksaT1lKDkyKSxvPWUoNDE5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4sZSx1KXt2YXIgYSxjPXIobikscz1pKGMubGVuZ3RoKSxmPW8odSxzKTtpZih0JiZlIT1lKXtmb3IoO3M+ZjspaWYoKGE9Y1tmKytdKSE9YSlyZXR1cm4hMH1lbHNlIGZvcig7cz5mO2YrKylpZigodHx8ZiBpbiBjKSYmY1tmXT09PWUpcmV0dXJuIHR8fGZ8fDA7cmV0dXJuIXQmJi0xfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEyOCksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiB0PXIodCksdDwwP2kodCtuLDApOm8odCxuKX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDM3KSxpPWUoMTIpLG89ZSg2MSksdT1lKDE5NCksYT1lKDE5NSksYz1lKDkyKSxzPWUoNDIxKSxmPWUoMTM3KTtpKGkuUytpLkYqIWUoMTk2KShmdW5jdGlvbih0KXtBcnJheS5mcm9tKHQpfSksXCJBcnJheVwiLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBuLGUsaSxsLGg9byh0KSxwPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSx2PWFyZ3VtZW50cy5sZW5ndGgsZD12PjE/YXJndW1lbnRzWzFdOnZvaWQgMCx5PXZvaWQgMCE9PWQsZz0wLG09ZihoKTtpZih5JiYoZD1yKGQsdj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLHZvaWQgMD09bXx8cD09QXJyYXkmJmEobSkpZm9yKG49YyhoLmxlbmd0aCksZT1uZXcgcChuKTtuPmc7ZysrKXMoZSxnLHk/ZChoW2ddLGcpOmhbZ10pO2Vsc2UgZm9yKGw9bS5jYWxsKGgpLGU9bmV3IHA7IShpPWwubmV4dCgpKS5kb25lO2crKylzKGUsZyx5P3UobCxkLFtpLnZhbHVlLGddLCEwKTppLnZhbHVlKTtyZXR1cm4gZS5sZW5ndGg9ZyxlfX0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyNSksaT1lKDY3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUpe24gaW4gdD9yLmYodCxuLGkoMCxlKSk6dFtuXT1lfX0sZnVuY3Rpb24odCxuLGUpe3QuZXhwb3J0cz1lKDQyMyl9LGZ1bmN0aW9uKHQsbixlKXtlKDcxKSxlKDU5KSx0LmV4cG9ydHM9ZSg0MjYpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg0MjUpLGk9ZSgxOTcpLG89ZSg2MCksdT1lKDU0KTt0LmV4cG9ydHM9ZSgxMzApKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LG4pe3RoaXMuX3Q9dSh0KSx0aGlzLl9pPTAsdGhpcy5faz1ufSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3Qsbj10aGlzLl9rLGU9dGhpcy5faSsrO3JldHVybiF0fHxlPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsaSgxKSk6XCJrZXlzXCI9PW4/aSgwLGUpOlwidmFsdWVzXCI9PW4/aSgwLHRbZV0pOmkoMCxbZSx0W2VdXSl9LFwidmFsdWVzXCIpLG8uQXJndW1lbnRzPW8uQXJyYXkscihcImtleXNcIikscihcInZhbHVlc1wiKSxyKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxuKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSg5NCksaT1lKDEzKShcIml0ZXJhdG9yXCIpLG89ZSg2MCk7dC5leHBvcnRzPWUoNikuaXNJdGVyYWJsZT1mdW5jdGlvbih0KXt2YXIgbj1PYmplY3QodCk7cmV0dXJuIHZvaWQgMCE9PW5baV18fFwiQEBpdGVyYXRvclwiaW4gbnx8by5oYXNPd25Qcm9wZXJ0eShyKG4pKX19LGZ1bmN0aW9uKHQsbixlKXtlKDcxKSxlKDU5KSx0LmV4cG9ydHM9ZSg0MjgpfSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgzMiksaT1lKDEzNyk7dC5leHBvcnRzPWUoNikuZ2V0SXRlcmF0b3I9ZnVuY3Rpb24odCl7dmFyIG49aSh0KTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBpdGVyYWJsZSFcIik7cmV0dXJuIHIobi5jYWxsKHQpKX19LGZ1bmN0aW9uKHQsbixlKXtlKDQzMCksdC5leHBvcnRzPWUoNikuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTIpO3Ioci5TK3IuRixcIk9iamVjdFwiLHthc3NpZ246ZSg0MzEpfSl9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDY4KSxpPWUoMTM5KSxvPWUoOTcpLHU9ZSg2MSksYT1lKDEzMyksYz1PYmplY3QuYXNzaWduO3QuZXhwb3J0cz0hY3x8ZSg1MikoZnVuY3Rpb24oKXt2YXIgdD17fSxuPXt9LGU9U3ltYm9sKCkscj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbZV09NyxyLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT10fSksNyE9Yyh7fSx0KVtlXXx8T2JqZWN0LmtleXMoYyh7fSxuKSkuam9pbihcIlwiKSE9cn0pP2Z1bmN0aW9uKHQsbil7Zm9yKHZhciBlPXUodCksYz1hcmd1bWVudHMubGVuZ3RoLHM9MSxmPWkuZixsPW8uZjtjPnM7KWZvcih2YXIgaCxwPWEoYXJndW1lbnRzW3MrK10pLHY9Zj9yKHApLmNvbmNhdChmKHApKTpyKHApLGQ9di5sZW5ndGgseT0wO2Q+eTspbC5jYWxsKHAsaD12W3krK10pJiYoZVtoXT1wW2hdKTtyZXR1cm4gZX06Y30sZnVuY3Rpb24odCxuLGUpe2UoMTQxKSxlKDU5KSxlKDcxKSxlKDQzMyksZSg0MzYpLGUoNDM3KSx0LmV4cG9ydHM9ZSg2KS5Qcm9taXNlfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsaSxvLHUsYT1lKDkwKSxjPWUoMTQpLHM9ZSgzNyksZj1lKDk0KSxsPWUoMTIpLGg9ZSgyNikscD1lKDY2KSx2PWUoMTQyKSxkPWUoNzIpLHk9ZSgxOTkpLGc9ZSgyMDApLnNldCxtPWUoNDM1KSgpLF89ZSgxNDMpLHc9ZSgyMDEpLGI9ZSgyMDIpLHg9XCJQcm9taXNlXCIsUz1jLlR5cGVFcnJvcixPPWMucHJvY2VzcyxQPWNbeF0saz1cInByb2Nlc3NcIj09ZihPKSxFPWZ1bmN0aW9uKCl7fSxqPWk9Xy5mLEE9ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1QLnJlc29sdmUoMSksbj0odC5jb25zdHJ1Y3Rvcj17fSlbZSgxMykoXCJzcGVjaWVzXCIpXT1mdW5jdGlvbih0KXt0KEUsRSl9O3JldHVybihrfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZ0LnRoZW4oRSlpbnN0YW5jZW9mIG59Y2F0Y2godCl7fX0oKSxNPWZ1bmN0aW9uKHQpe3ZhciBuO3JldHVybiEoIWgodCl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mKG49dC50aGVuKSkmJm59LFQ9ZnVuY3Rpb24odCxuKXtpZighdC5fbil7dC5fbj0hMDt2YXIgZT10Ll9jO20oZnVuY3Rpb24oKXtmb3IodmFyIHI9dC5fdixpPTE9PXQuX3Msbz0wLHU9ZnVuY3Rpb24obil7dmFyIGUsbyx1PWk/bi5vazpuLmZhaWwsYT1uLnJlc29sdmUsYz1uLnJlamVjdCxzPW4uZG9tYWluO3RyeXt1PyhpfHwoMj09dC5faCYmSSh0KSx0Ll9oPTEpLCEwPT09dT9lPXI6KHMmJnMuZW50ZXIoKSxlPXUocikscyYmcy5leGl0KCkpLGU9PT1uLnByb21pc2U/YyhTKFwiUHJvbWlzZS1jaGFpbiBjeWNsZVwiKSk6KG89TShlKSk/by5jYWxsKGUsYSxjKTphKGUpKTpjKHIpfWNhdGNoKHQpe2ModCl9fTtlLmxlbmd0aD5vOyl1KGVbbysrXSk7dC5fYz1bXSx0Ll9uPSExLG4mJiF0Ll9oJiZGKHQpfSl9fSxGPWZ1bmN0aW9uKHQpe2cuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIG4sZSxyLGk9dC5fdixvPUwodCk7aWYobyYmKG49dyhmdW5jdGlvbigpe2s/Ty5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsaSx0KTooZT1jLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9lKHtwcm9taXNlOnQscmVhc29uOml9KToocj1jLmNvbnNvbGUpJiZyLmVycm9yJiZyLmVycm9yKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsaSl9KSx0Ll9oPWt8fEwodCk/MjoxKSx0Ll9hPXZvaWQgMCxvJiZuLmUpdGhyb3cgbi52fSl9LEw9ZnVuY3Rpb24odCl7cmV0dXJuIDEhPT10Ll9oJiYwPT09KHQuX2F8fHQuX2MpLmxlbmd0aH0sST1mdW5jdGlvbih0KXtnLmNhbGwoYyxmdW5jdGlvbigpe3ZhciBuO2s/Ty5lbWl0KFwicmVqZWN0aW9uSGFuZGxlZFwiLHQpOihuPWMub25yZWplY3Rpb25oYW5kbGVkKSYmbih7cHJvbWlzZTp0LHJlYXNvbjp0Ll92fSl9KX0sTj1mdW5jdGlvbih0KXt2YXIgbj10aGlzO24uX2R8fChuLl9kPSEwLG49bi5fd3x8bixuLl92PXQsbi5fcz0yLG4uX2F8fChuLl9hPW4uX2Muc2xpY2UoKSksVChuLCEwKSl9LEQ9ZnVuY3Rpb24odCl7dmFyIG4sZT10aGlzO2lmKCFlLl9kKXtlLl9kPSEwLGU9ZS5fd3x8ZTt0cnl7aWYoZT09PXQpdGhyb3cgUyhcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpOyhuPU0odCkpP20oZnVuY3Rpb24oKXt2YXIgcj17X3c6ZSxfZDohMX07dHJ5e24uY2FsbCh0LHMoRCxyLDEpLHMoTixyLDEpKX1jYXRjaCh0KXtOLmNhbGwocix0KX19KTooZS5fdj10LGUuX3M9MSxUKGUsITEpKX1jYXRjaCh0KXtOLmNhbGwoe193OmUsX2Q6ITF9LHQpfX19O0F8fChQPWZ1bmN0aW9uKHQpe3YodGhpcyxQLHgsXCJfaFwiKSxwKHQpLHIuY2FsbCh0aGlzKTt0cnl7dChzKEQsdGhpcywxKSxzKE4sdGhpcywxKSl9Y2F0Y2godCl7Ti5jYWxsKHRoaXMsdCl9fSxyPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LHIucHJvdG90eXBlPWUoMTQ0KShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LG4pe3ZhciBlPWooeSh0aGlzLFApKTtyZXR1cm4gZS5vaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0LGUuZmFpbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuLGUuZG9tYWluPWs/Ty5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChlKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2goZSksdGhpcy5fcyYmVCh0aGlzLCExKSxlLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLG89ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cyhELHQsMSksdGhpcy5yZWplY3Q9cyhOLHQsMSl9LF8uZj1qPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UHx8dD09PXU/bmV3IG8odCk6aSh0KX0pLGwobC5HK2wuVytsLkYqIUEse1Byb21pc2U6UH0pLGUoNzApKFAseCksZSgyMDMpKHgpLHU9ZSg2KVt4XSxsKGwuUytsLkYqIUEseCx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBuPWoodGhpcyk7cmV0dXJuKDAsbi5yZWplY3QpKHQpLG4ucHJvbWlzZX19KSxsKGwuUytsLkYqKGF8fCFBKSx4LHtyZXNvbHZlOmZ1bmN0aW9uKHQpe3JldHVybiBiKGEmJnRoaXM9PT11P1A6dGhpcyx0KX19KSxsKGwuUytsLkYqIShBJiZlKDE5NikoZnVuY3Rpb24odCl7UC5hbGwodCkuY2F0Y2goRSl9KSkseCx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMsZT1qKG4pLHI9ZS5yZXNvbHZlLGk9ZS5yZWplY3Qsbz13KGZ1bmN0aW9uKCl7dmFyIGU9W10sbz0wLHU9MTtkKHQsITEsZnVuY3Rpb24odCl7dmFyIGE9bysrLGM9ITE7ZS5wdXNoKHZvaWQgMCksdSsrLG4ucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKHQpe2N8fChjPSEwLGVbYV09dCwtLXV8fHIoZSkpfSxpKX0pLC0tdXx8cihlKX0pO3JldHVybiBvLmUmJmkoby52KSxlLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPWoobikscj1lLnJlamVjdCxpPXcoZnVuY3Rpb24oKXtkKHQsITEsZnVuY3Rpb24odCl7bi5yZXNvbHZlKHQpLnRoZW4oZS5yZXNvbHZlLHIpfSl9KTtyZXR1cm4gaS5lJiZyKGkudiksZS5wcm9taXNlfX0pfSxmdW5jdGlvbih0LG4pe3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7dmFyIHI9dm9pZCAwPT09ZTtzd2l0Y2gobi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj90KCk6dC5jYWxsKGUpO2Nhc2UgMTpyZXR1cm4gcj90KG5bMF0pOnQuY2FsbChlLG5bMF0pO2Nhc2UgMjpyZXR1cm4gcj90KG5bMF0sblsxXSk6dC5jYWxsKGUsblswXSxuWzFdKTtjYXNlIDM6cmV0dXJuIHI/dChuWzBdLG5bMV0sblsyXSk6dC5jYWxsKGUsblswXSxuWzFdLG5bMl0pO2Nhc2UgNDpyZXR1cm4gcj90KG5bMF0sblsxXSxuWzJdLG5bM10pOnQuY2FsbChlLG5bMF0sblsxXSxuWzJdLG5bM10pfXJldHVybiB0LmFwcGx5KGUsbil9fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxNCksaT1lKDIwMCkuc2V0LG89ci5NdXRhdGlvbk9ic2VydmVyfHxyLldlYktpdE11dGF0aW9uT2JzZXJ2ZXIsdT1yLnByb2Nlc3MsYT1yLlByb21pc2UsYz1cInByb2Nlc3NcIj09ZSg2OSkodSk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsbixlLHM9ZnVuY3Rpb24oKXt2YXIgcixpO2ZvcihjJiYocj11LmRvbWFpbikmJnIuZXhpdCgpO3Q7KXtpPXQuZm4sdD10Lm5leHQ7dHJ5e2koKX1jYXRjaChyKXt0aHJvdyB0P2UoKTpuPXZvaWQgMCxyfX1uPXZvaWQgMCxyJiZyLmVudGVyKCl9O2lmKGMpZT1mdW5jdGlvbigpe3UubmV4dFRpY2socyl9O2Vsc2UgaWYoIW98fHIubmF2aWdhdG9yJiZyLm5hdmlnYXRvci5zdGFuZGFsb25lKWlmKGEmJmEucmVzb2x2ZSl7dmFyIGY9YS5yZXNvbHZlKCk7ZT1mdW5jdGlvbigpe2YudGhlbihzKX19ZWxzZSBlPWZ1bmN0aW9uKCl7aS5jYWxsKHIscyl9O2Vsc2V7dmFyIGw9ITAsaD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtuZXcgbyhzKS5vYnNlcnZlKGgse2NoYXJhY3RlckRhdGE6ITB9KSxlPWZ1bmN0aW9uKCl7aC5kYXRhPWw9IWx9fXJldHVybiBmdW5jdGlvbihyKXt2YXIgaT17Zm46cixuZXh0OnZvaWQgMH07biYmKG4ubmV4dD1pKSx0fHwodD1pLGUoKSksbj1pfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDEyKSxpPWUoNiksbz1lKDE0KSx1PWUoMTk5KSxhPWUoMjAyKTtyKHIuUCtyLlIsXCJQcm9taXNlXCIse2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIG49dSh0aGlzLGkuUHJvbWlzZXx8by5Qcm9taXNlKSxlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ7cmV0dXJuIHRoaXMudGhlbihlP2Z1bmN0aW9uKGUpe3JldHVybiBhKG4sdCgpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGV9KX06dCxlP2Z1bmN0aW9uKGUpe3JldHVybiBhKG4sdCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTp0KX19KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTIpLGk9ZSgxNDMpLG89ZSgyMDEpO3Ioci5TLFwiUHJvbWlzZVwiLHt0cnk6ZnVuY3Rpb24odCl7dmFyIG49aS5mKHRoaXMpLGU9byh0KTtyZXR1cm4oZS5lP24ucmVqZWN0Om4ucmVzb2x2ZSkoZS52KSxuLnByb21pc2V9fSl9LGZ1bmN0aW9uKHQsbixlKXtlKDQzOSksdC5leHBvcnRzPWUoNikuT2JqZWN0LmtleXN9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYxKSxpPWUoNjgpO2UoOTkpKFwia2V5c1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKHIodCkpfX0pfSxmdW5jdGlvbih0LG4sZSl7ZSg0NDEpO3ZhciByPWUoNikuT2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4sZSl7cmV0dXJuIHIuZGVmaW5lUHJvcGVydHkodCxuLGUpfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTIpO3Ioci5TK3IuRiohZSgzMyksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydHk6ZSgyNSkuZn0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5kKG4sXCJhXCIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pO3ZhciByPWUoMjA1KSxpPWUubihyKSxvPWUoNjIpLHU9ZS5uKG8pLGE9ZSg3MyksYz1lLm4oYSkscz1lKDg5KSxmPWUubihzKSxsPWZ1bmN0aW9uKHQpe3ZhciBuPXQuRHdGYWN0b3J5LGU9dC5Ed1Byb3h5LHI9dC5hcHBDb25maWcsbz10LnNsaWRlLGE9dC5hY3RvcnMscz10Lnd4LGw9KHQuaXNTd2FuLHQuaXNNeSx0LmFwcCksaD10LmdldEN1cnJlbnRQYWdlcyxwPXQuY29tcG9uZW50c1BhY2thZ2VzLHY9MCxkPXIuYXBwLnRhYkJhciYmci5hcHAudGFiQmFyJiZyLmFwcC50YWJCYXIubGlzdD9yLmFwcC50YWJCYXIubGlzdC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQucGFnZVBhdGh9KTpbXSx5PXIuYXBwLnN1YlBhY2thZ2VzfHxbXSxnPXt9LG09bmV3IGYuYS5FdmVudEVtaXR0ZXI7bS5zZXRNYXhMaXN0ZW5lcnMoMTAwKTt2YXIgXz1mdW5jdGlvbih0KXt2YXIgbj1jKCkodCkuc29ydCgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbitcIj1cIit0W25dfSkuam9pbihcIiZcIik7cmV0dXJuIG4/XCI/XCIrbjpcIlwifTthLm1hcChmdW5jdGlvbih0KXt0LmNvbXBvbmVudD1vLmNvbXBvbmVudHNbdC5rZXldLHQuZHc9bmV3IGUodC5jb21wb25lbnQsdCxsLHtjb21wb25lbnRzUGFja2FnZXM6cH0pLHQuYWN0b3I9dC5mdW5jKHQuZHcpO3ZhciBuPXtkYXRhOnQuYWN0b3IuZGF0YSxjb21wdXRlZDp0LmFjdG9yLmNvbXB1dGVkLHdhdGNoOnQuYWN0b3Iud2F0Y2gscm9vdFNsaWRlOm8sYWN0b3JzOmEscGFnZUxvY2FsczpnLHBhZ2VFdmVudDptfTtpZih0LmR3Ll91cGRhdGVBY3RvckRhdGEobiksdC5kdy5fc2V0RXh0cmFEYXRhKHtiZW5jaFNsaWRlOm99KSxcIm9iamVjdFwiPT09dSgpKHQuYWN0b3IubWV0aG9kcykpZm9yKHZhciByIGluIHQuYWN0b3IubWV0aG9kcyl0LmR3Lm1ldGhvZHNbcl09dC5hY3Rvci5tZXRob2RzW3JdO3QuY29tcG9uZW50LmR3ZGF0YT10LmFjdG9yLmRhdGF9KTt2YXIgdz1mdW5jdGlvbih0KXtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheShuPjE/bi0xOjApLHI9MTtyPG47cisrKWVbci0xXT1hcmd1bWVudHNbcl07YS5tYXAoZnVuY3Rpb24obil7aWYodCBpbiBuLmFjdG9yKWlmKFtcIm9uTG9hZFwiLFwib25TaG93XCJdLmluY2x1ZGVzKHQpKW4uZHcuZGVjb3JhdGVNZXRob2Qobi5hY3Rvclt0XSkuYXBwbHkodm9pZCAwLGUpO2Vsc2V7dmFyIHI7KHI9bi5hY3Rvclt0XSkuY2FsbC5hcHBseShyLFtuLmR3XS5jb25jYXQoZSkpfX0pfSxiPXtkYXRhOntzbGlkZTpvLGNvbXBhbnk6ci5jb21wYW55LHF1ZXJ5Ont9LGV4dHJhUXVlcnk6e30sc2hhcmU6e3RpdGxlOm51bGwsaW1hZ2VVcmw6bnVsbCxzdWNjZXNzOltdLGZhaWw6W10sY29tcGxldGU6W119LG92ZXJpZGVzOntvblNoYXJlQXBwTWVzc2FnZTpudWxsfX0sZ2V0UGFnZUxvY2FsczpmdW5jdGlvbih0KXtyZXR1cm4gZ1t0XX0sc2V0UGFnZUxvY2FsczpmdW5jdGlvbih0LG4pe2dbdF09bn0sZ2V0Q3VycmVudFBhZ2VzOmZ1bmN0aW9uKCl7cmV0dXJuIGgoKX0sb25Mb2FkOmZ1bmN0aW9uKHQpe2lmKGNvbnNvbGUubG9nKFwiUGFnZUZhY3Rvcnkub25sb2FkIGt3YXJnczpcIix0KSx0LnBzaG9wX2lkJiYvXlxcZCskLy50ZXN0KHQucHNob3BfaWQpKXt2YXIgZT1wYXJzZUludCh0LnBzaG9wX2lkKTtzLnNldFN0b3JhZ2VTeW5jKFwicHNob3BfaWRcIixlKSxuLkR3VXRpbHMucmVxdWVzdChcInBvc3QvY29tcGFueV9hY2NvdW50L2FmdGVyX2R3YXBwX2xvZ2luX3dpdGhfcHNob3BfaWRcIix7cHNob3BfaWQ6ZX0pLnRoZW4oZnVuY3Rpb24odCl7Y29uc29sZS5sb2coXCJwb3N0L2NvbXBhbnlfYWNjb3VudC9hZnRlcl9kd2FwcF9sb2dpbl93aXRoX3BzaG9wX2lkXCIsZSx0KX0pfXZhciByPXRoaXM7dGhpcy5zZXREYXRhKHtxdWVyeTp0fSksYS5tYXAoZnVuY3Rpb24obil7bi5kdy5fYWZ0ZXJPbkxvYWQocix0LHthcHA6bCx0YWJCYXJQYXRoczpkfSl9KSx3KFwib25Mb2FkXCIsdCl9LG9uUmVhZHk6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxlPTA7ZTx0O2UrKyluW2VdPWFyZ3VtZW50c1tlXTt3LmFwcGx5KHZvaWQgMCxbXCJvblJlYWR5XCJdLmNvbmNhdChuKSl9LG9uU2hvdzpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLGU9MDtlPHQ7ZSsrKW5bZV09YXJndW1lbnRzW2VdO3cuYXBwbHkodm9pZCAwLFtcIm9uU2hvd1wiXS5jb25jYXQobikpfSxvbkhpZGU6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxlPTA7ZTx0O2UrKyluW2VdPWFyZ3VtZW50c1tlXTt3LmFwcGx5KHZvaWQgMCxbXCJvbkhpZGVcIl0uY29uY2F0KG4pKX0sb25VbmxvYWQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxlPTA7ZTx0O2UrKyluW2VdPWFyZ3VtZW50c1tlXTt3LmFwcGx5KHZvaWQgMCxbXCJvblVubG9hZFwiXS5jb25jYXQobikpfSxvblB1bGxEb3duUmVmcmVzaDpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLGU9MDtlPHQ7ZSsrKW5bZV09YXJndW1lbnRzW2VdO3cuYXBwbHkodm9pZCAwLFtcIm9uUHVsbERvd25SZWZyZXNoXCJdLmNvbmNhdChuKSl9LG9uUmVhY2hCb3R0b206ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheSh0KSxlPTA7ZTx0O2UrKyluW2VdPWFyZ3VtZW50c1tlXTt3LmFwcGx5KHZvaWQgMCxbXCJvblJlYWNoQm90dG9tXCJdLmNvbmNhdChuKSl9LG9uUGFnZVNjcm9sbDpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHQpLGU9MDtlPHQ7ZSsrKW5bZV09YXJndW1lbnRzW2VdO3cuYXBwbHkodm9pZCAwLFtcIm9uUGFnZVNjcm9sbFwiXS5jb25jYXQobikpfSxvbkVycm9yOmZ1bmN0aW9uKHQpe24uRHdVdGlscy5mZXRjaChcInBvc3QvZHdhcHAvY2FwdHVyZV9lcnJvclwiLHtlcnJvcjp0fSl9LG9uU2hhcmVBcHBNZXNzYWdlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YS5vdmVyaWRlcy5vblNoYXJlQXBwTWVzc2FnZSlyZXR1cm4gdGhpcy5kYXRhLm92ZXJpZGVzLm9uU2hhcmVBcHBNZXNzYWdlKHQpO3ZhciBuPXRoaXMsZT1oKCkscj1lW2UubGVuZ3RoLTFdLHU9ci5yb3V0ZSxhPUpTT04ucGFyc2UoaSgpKHRoaXMuZGF0YS5xdWVyeSkpO2Zvcih2YXIgZiBpbiB0aGlzLmRhdGEuZXh0cmFRdWVyeSlhW2ZdPXRoaXMuZGF0YS5leHRyYVF1ZXJ5W2ZdO3ZhciBsO3RyeXtsPXMuZ2V0U3RvcmFnZVN5bmMoXCJzaXRldXNlcl9pZFwiKX1jYXRjaCh0KXtsPW51bGx9bCYmKGEucHNob3BfaWQ9bCk7dmFyIHA9YygpKGEpLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCtcIj1cIithW3RdfSkuam9pbihcIiZcIik7cD1wP1wiP1wiK3A6XCJcIixjb25zb2xlLmxvZyhcIlBhZ2VGYWN0b3J5Om9uU2hhcmVBcHBNZXNzYWdlOiB0aXRsZT1cIi5jb25jYXQoby5hbGlhcyxcIiBwYXRoPVwiKS5jb25jYXQodStwKSk7dmFyIHY9e3RpdGxlOm8uYWxpYXMscGF0aDp1K3Asc3VjY2VzczpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO24uZGF0YS5zaGFyZS5zdWNjZXNzLmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGUpfSl9LGZhaWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPWFyZ3VtZW50c1tyXTtuLmRhdGEuc2hhcmUuZmFpbC5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pfSxjb21wbGV0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09YXJndW1lbnRzW3JdO24uZGF0YS5zaGFyZS5jb21wbGV0ZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmFwcGx5KHZvaWQgMCxlKX0pfX07cmV0dXJuIHRoaXMuZGF0YS5zaGFyZS50aXRsZSYmKHYudGl0bGU9dGhpcy5kYXRhLnNoYXJlLnRpdGxlKSx0aGlzLmRhdGEuc2hhcmUuaW1hZ2VVcmwmJih2LmltYWdlVXJsPXRoaXMuZGF0YS5zaGFyZS5pbWFnZVVybCksdn0sZ29Ub0hyZWY6ZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGU9bi5yZWRpcmVjdFRvLHI9dm9pZCAwIT09ZSYmZSxpPXQuc3BsaXQoXCI/XCIpLG89aVswXSx1PW8uc3BsaXQoXCItXCIpO2lmKFwidGVsXCI9PT11WzBdJiZ1WzFdKXJldHVybiBzLm1ha2VQaG9uZUNhbGwoe3Bob25lTnVtYmVyOnVbMV19KTtpZihcInd4YXBwXCI9PT11WzBdJiZ1WzFdKXJldHVybiBzLm5hdmlnYXRlVG9NaW5pUHJvZ3JhbSh7YXBwSWQ6dVsxXX0pO2lmKGlbMV0pe3ZhciBhPWlbMV0uc3BsaXQoXCI9XCIpLGM9YVswXSxmPWFbMV07XCJjYXRfaWRcIj09PWMmJnMuc2V0U3RvcmFnZVN5bmMoYyxmKX12YXIgbD1pWzFdP1wiP1wiK2lbMV06XCJcIjt0aGlzLmdvVG9Mb2NhdGlvbihvLGwse3JlZGlyZWN0VG86cn0pfSxnb1RvUGFnZTpmdW5jdGlvbih0LG4pe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxyPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fSxpPXIucmVkaXJlY3RUbyxvPXZvaWQgMCE9PWkmJmksdT1fKGUpLGE9XCJwYXBwX1wiK3QrXCItXCIrbjt0aGlzLmdvVG9Mb2NhdGlvbihhLHUse3JlZGlyZWN0VG86b30pfSxnb1RvUGFwcFBhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nb1RvUGFnZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGdldEN1cnJlbnRQYXRoOmZ1bmN0aW9uKCl7dmFyIHQ9aCgpO2lmKHQubGVuZ3RoKXtyZXR1cm4gdFt0Lmxlbmd0aC0xXS5yb3V0ZX19LGlzVGFiYmFyOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5kZXhPZih0aGlzLmdldEN1cnJlbnRQYXRoKCkpPi0xfSxnb1RvTG9jYXRpb246ZnVuY3Rpb24odCxuKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e30scj1lLnJlZGlyZWN0VG8saT12b2lkIDAhPT1yJiZyLG89aCgpLHU9XCJwYWdlcy9cIit0K1wiL2luZGV4XCIsYT1kLmluZGV4T2YodSk+LTEsYz15LmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQucGFnZXMuaW5kZXhPZih1KT4tMX0pLGY9Yz9jLnJvb3Q6bnVsbCxsPWY/XCIvXCIrZitcIi9wYWdlcy9cIit0K1wiL2luZGV4XCIrbjpcIi9wYWdlcy9cIit0K1wiL2luZGV4XCIrbjtpZihhKXMuc3dpdGNoVGFiKHt1cmw6bH0pO2Vsc2UgaWYoaXx8by5sZW5ndGg+OClzLnJlZGlyZWN0VG8oe3VybDpsfSk7ZWxzZXt2YXIgcD1vLmZpbmQoZnVuY3Rpb24odCl7cmV0dXJuIHQucm91dGU9PT11fSk7aWYocCl7dmFyIHY9cC5yb3V0ZStfKHAuZGF0YS5xdWVyeXx8e30pO2lmKGNvbnNvbGUubG9nKFwidXJsLCBvbGRQYWdlVXJsXCIsbCx2KSxsPT09XCIvXCIrdil7dmFyIGc9by5maW5kSW5kZXgoZnVuY3Rpb24odCl7cmV0dXJuIHQucm91dGU9PT11fSksbT1vLmxlbmd0aC1nLTE7cmV0dXJuIHZvaWQobT4wJiZzLm5hdmlnYXRlQmFjayh7ZGVsdGE6bX0pKX19cy5uYXZpZ2F0ZVRvKHt1cmw6bH0pfX0sZ2V0QWJzb2x1dGVVcmw6ZnVuY3Rpb24odCl7dmFyIG49dC5zcGxpdChcIj9cIiksZT1uWzBdLHI9blsxXT9cIj9cIituWzFdOlwiXCIsaT1cInBhZ2VzL1wiK2UrXCIvaW5kZXhcIixvPXkuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWdlcy5pbmRleE9mKGkpPi0xfSksdT1vP28ucm9vdDpudWxsO3JldHVybiB1P1wiL1wiK3UrXCIvcGFnZXMvXCIrZStcIi9pbmRleFwiK3I6XCIvcGFnZXMvXCIrZStcIi9pbmRleFwiK3J9LHBhZ2VHb3RvOmZ1bmN0aW9uKHQpe3ZhciBuPXQuY3VycmVudFRhcmdldC5kYXRhc2V0LmR3SHJlZjtuJiZ0aGlzLmdvVG9IcmVmKG4pfSxzZXRFbmFibGVEZWJ1ZzpmdW5jdGlvbigpe3YrKz44JiZ0aGlzLmdvVG9IcmVmKFwicGx1Z2luLWRlYnVnXCIpfX07cmV0dXJuIGEubWFwKGZ1bmN0aW9uKHQpe2lmKHQuYWN0b3IubWV0aG9kcylmb3IodmFyIG4gaW4gdC5hY3Rvci5tZXRob2RzKXt2YXIgZT1bdC5wYXRoU2x1ZyxuXS5qb2luKFwiX19cIik7YltlXT10LmR3LmRlY29yYXRlTWV0aG9kKHQuYWN0b3IubWV0aG9kc1tuXSl9fSksYn19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDYpLGk9ci5KU09OfHwoci5KU09OPXtzdHJpbmdpZnk6SlNPTi5zdHJpbmdpZnl9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkuc3RyaW5naWZ5LmFwcGx5KGksYXJndW1lbnRzKX19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NDUpfSxmdW5jdGlvbih0LG4sZSl7ZSg1OSksZSg3MSksdC5leHBvcnRzPWUoMTQ4KS5mKFwiaXRlcmF0b3JcIil9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NDcpfSxmdW5jdGlvbih0LG4sZSl7ZSg0NDgpLGUoMTQxKSxlKDQ1MCksZSg0NTEpLHQuZXhwb3J0cz1lKDYpLlN5bWJvbH0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO3ZhciByPWUoMTQpLGk9ZSg1Myksbz1lKDMzKSx1PWUoMTIpLGE9ZSgxOTApLGM9ZSgxNDkpLktFWSxzPWUoNTIpLGY9ZSgxMzUpLGw9ZSg3MCksaD1lKDkzKSxwPWUoMTMpLHY9ZSgxNDgpLGQ9ZSgxNTApLHk9ZSg0NDkpLGc9ZSgyMDYpLG09ZSgzMiksXz1lKDI2KSx3PWUoNTQpLGI9ZSgxMzIpLHg9ZSg2NyksUz1lKDkxKSxPPWUoMjA3KSxQPWUoMTUxKSxrPWUoMjUpLEU9ZSg2OCksaj1QLmYsQT1rLmYsTT1PLmYsVD1yLlN5bWJvbCxGPXIuSlNPTixMPUYmJkYuc3RyaW5naWZ5LEk9XCJwcm90b3R5cGVcIixOPXAoXCJfaGlkZGVuXCIpLEQ9cChcInRvUHJpbWl0aXZlXCIpLFI9e30ucHJvcGVydHlJc0VudW1lcmFibGUsQz1mKFwic3ltYm9sLXJlZ2lzdHJ5XCIpLFU9ZihcInN5bWJvbHNcIiksRz1mKFwib3Atc3ltYm9sc1wiKSxXPU9iamVjdFtJXSxWPVwiZnVuY3Rpb25cIj09dHlwZW9mIFQsQj1yLlFPYmplY3QscT0hQnx8IUJbSV18fCFCW0ldLmZpbmRDaGlsZCx6PW8mJnMoZnVuY3Rpb24oKXtyZXR1cm4gNyE9UyhBKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQSh0aGlzLFwiYVwiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKHQsbixlKXt2YXIgcj1qKFcsbik7ciYmZGVsZXRlIFdbbl0sQSh0LG4sZSksciYmdCE9PVcmJkEoVyxuLHIpfTpBLEg9ZnVuY3Rpb24odCl7dmFyIG49VVt0XT1TKFRbSV0pO3JldHVybiBuLl9rPXQsbn0sSj1WJiZcInN5bWJvbFwiPT10eXBlb2YgVC5pdGVyYXRvcj9mdW5jdGlvbih0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUfSxLPWZ1bmN0aW9uKHQsbixlKXtyZXR1cm4gdD09PVcmJksoRyxuLGUpLG0odCksbj1iKG4sITApLG0oZSksaShVLG4pPyhlLmVudW1lcmFibGU/KGkodCxOKSYmdFtOXVtuXSYmKHRbTl1bbl09ITEpLGU9UyhlLHtlbnVtZXJhYmxlOngoMCwhMSl9KSk6KGkodCxOKXx8QSh0LE4seCgxLHt9KSksdFtOXVtuXT0hMCkseih0LG4sZSkpOkEodCxuLGUpfSxZPWZ1bmN0aW9uKHQsbil7bSh0KTtmb3IodmFyIGUscj15KG49dyhuKSksaT0wLG89ci5sZW5ndGg7bz5pOylLKHQsZT1yW2krK10sbltlXSk7cmV0dXJuIHR9LCQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdm9pZCAwPT09bj9TKHQpOlkoUyh0KSxuKX0sUT1mdW5jdGlvbih0KXt2YXIgbj1SLmNhbGwodGhpcyx0PWIodCwhMCkpO3JldHVybiEodGhpcz09PVcmJmkoVSx0KSYmIWkoRyx0KSkmJighKG58fCFpKHRoaXMsdCl8fCFpKFUsdCl8fGkodGhpcyxOKSYmdGhpc1tOXVt0XSl8fG4pfSxYPWZ1bmN0aW9uKHQsbil7aWYodD13KHQpLG49YihuLCEwKSx0IT09V3x8IWkoVSxuKXx8aShHLG4pKXt2YXIgZT1qKHQsbik7cmV0dXJuIWV8fCFpKFUsbil8fGkodCxOKSYmdFtOXVtuXXx8KGUuZW51bWVyYWJsZT0hMCksZX19LFo9ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGU9TSh3KHQpKSxyPVtdLG89MDtlLmxlbmd0aD5vOylpKFUsbj1lW28rK10pfHxuPT1OfHxuPT1jfHxyLnB1c2gobik7cmV0dXJuIHJ9LHR0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgbixlPXQ9PT1XLHI9TShlP0c6dyh0KSksbz1bXSx1PTA7ci5sZW5ndGg+dTspIWkoVSxuPXJbdSsrXSl8fGUmJiFpKFcsbil8fG8ucHVzaChVW25dKTtyZXR1cm4gb307Vnx8KFQ9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgVCl0aHJvdyBUeXBlRXJyb3IoXCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhXCIpO3ZhciB0PWgoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLG49ZnVuY3Rpb24oZSl7dGhpcz09PVcmJm4uY2FsbChHLGUpLGkodGhpcyxOKSYmaSh0aGlzW05dLHQpJiYodGhpc1tOXVt0XT0hMSkseih0aGlzLHQseCgxLGUpKX07cmV0dXJuIG8mJnEmJnooVyx0LHtjb25maWd1cmFibGU6ITAsc2V0Om59KSxIKHQpfSxhKFRbSV0sXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxQLmY9WCxrLmY9SyxlKDIwOCkuZj1PLmY9WixlKDk3KS5mPVEsZSgxMzkpLmY9dHQsbyYmIWUoOTApJiZhKFcsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLFEsITApLHYuZj1mdW5jdGlvbih0KXtyZXR1cm4gSChwKHQpKX0pLHUodS5HK3UuVyt1LkYqIVYse1N5bWJvbDpUfSk7Zm9yKHZhciBudD1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLGV0PTA7bnQubGVuZ3RoPmV0OylwKG50W2V0KytdKTtmb3IodmFyIHJ0PUUocC5zdG9yZSksaXQ9MDtydC5sZW5ndGg+aXQ7KWQocnRbaXQrK10pO3UodS5TK3UuRiohVixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkoQyx0Kz1cIlwiKT9DW3RdOkNbdF09VCh0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFKKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIik7Zm9yKHZhciBuIGluIEMpaWYoQ1tuXT09PXQpcmV0dXJuIG59LHVzZVNldHRlcjpmdW5jdGlvbigpe3E9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe3E9ITF9fSksdSh1LlMrdS5GKiFWLFwiT2JqZWN0XCIse2NyZWF0ZTokLGRlZmluZVByb3BlcnR5OkssZGVmaW5lUHJvcGVydGllczpZLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpYLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxGJiZ1KHUuUyt1LkYqKCFWfHxzKGZ1bmN0aW9uKCl7dmFyIHQ9VCgpO3JldHVyblwiW251bGxdXCIhPUwoW3RdKXx8XCJ7fVwiIT1MKHthOnR9KXx8XCJ7fVwiIT1MKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtmb3IodmFyIG4sZSxyPVt0XSxpPTE7YXJndW1lbnRzLmxlbmd0aD5pOylyLnB1c2goYXJndW1lbnRzW2krK10pO2lmKGU9bj1yWzFdLChfKG4pfHx2b2lkIDAhPT10KSYmIUoodCkpcmV0dXJuIGcobil8fChuPWZ1bmN0aW9uKHQsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKG49ZS5jYWxsKHRoaXMsdCxuKSksIUoobikpcmV0dXJuIG59KSxyWzFdPW4sTC5hcHBseShGLHIpfX0pLFRbSV1bRF18fGUoNDApKFRbSV0sRCxUW0ldLnZhbHVlT2YpLGwoVCxcIlN5bWJvbFwiKSxsKE1hdGgsXCJNYXRoXCIsITApLGwoci5KU09OLFwiSlNPTlwiLCEwKX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjgpLGk9ZSgxMzkpLG89ZSg5Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBuPXIodCksZT1pLmY7aWYoZSlmb3IodmFyIHUsYT1lKHQpLGM9by5mLHM9MDthLmxlbmd0aD5zOyljLmNhbGwodCx1PWFbcysrXSkmJm4ucHVzaCh1KTtyZXR1cm4gbn19LGZ1bmN0aW9uKHQsbixlKXtlKDE1MCkoXCJhc3luY0l0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LG4sZSl7ZSgxNTApKFwib2JzZXJ2YWJsZVwiKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UuZChuLFwiYVwiLGZ1bmN0aW9uKCl7cmV0dXJuIHF9KTt2YXIgcj1lKDIwOSksaT1lLm4ociksbz1lKDEzOCksdT1lLm4obyksYT1lKDQ1MyksYz1lLm4oYSkscz1lKDk1KSxmPWUubihzKSxsPWUoNzQpLGg9ZS5uKGwpLHA9ZSgxNDApLHY9ZS5uKHApLGQ9ZSg0NTQpLHk9ZS5uKGQpLGc9ZSgxNDYpLG09ZS5uKGcpLF89ZSgxNDcpLHc9ZS5uKF8pLGI9ZSg0NTcpLHg9ZS5uKGIpLFM9ZSg0NTgpLE89ZS5uKFMpLFA9ZSg0NjUpLGs9ZS5uKFApLEU9ZSg3Myksaj1lLm4oRSksQT1lKDYyKSxNPWUubihBKSxUPWUoOTgpLEY9ZS5uKFQpLEw9ZSg4OSksST1lLm4oTCksTj1lKDE4OCksRD1lKDQ2NiksUj1lKDE5OCksQz1lKDE0NSksVT1lKDQ2NyksRz1lKDQ2OCksVz1lKDIwNCksVj1lKDQ5MiksQj17fSxxPWZ1bmN0aW9uKHQpe3ZhciBuPXQuY29uZmlnLGU9dC5XeFBhcnNlLHI9dC53eCxvPXQuaXNTd2FuLGE9dC5pc015LHM9dC5nZXRDdXJyZW50UGFnZXMsbD1PYmplY3QoVi5hKSh7d3g6cixpc1N3YW46byxpc015OmF9KSxwPW4uYXBwLnN1YlBhY2thZ2VzfHxbXSxkPXIuZ2V0U3lzdGVtSW5mb1N5bmMoKSxnPWZ1bmN0aW9uKHQpe3JldHVybiBuLmFwaVVybCtcIi91L1wiK24uY29tcGFueS5uaWNrbmFtZStcIi9jYXBpL3YxL1wiK3R9LF89ZnVuY3Rpb24odCl7cmV0dXJuIG4uYXBpVXJsK1wiL2RhcGkvdS9cIituLmNvbXBhbnkubmlja25hbWUrXCIvXCIrdH0sYj1mdW5jdGlvbiB0KGUsaSxvLHUpe3ZhciBhO3RyeXthPWwuZ2V0U3RvcmFnZVN5bmMoXCJkd2FwcDppbnN0YWxsYXRpb25cIil8fHt9fWNhdGNoKHQpe2NvbnNvbGUubG9nKHQpLGE9e319aWYoIShhLmluc3RhbGxhdGlvbl9pZCYmYS5jb21wYW55X2lkPT09bi5jb21wYW55LmlkfHx1KSlyZXR1cm4gbmV3IEYuYShmdW5jdGlvbihyLHUpe0IucmVnaXN0ZXJQcm9taXNlPUIucmVnaXN0ZXJQcm9taXNlfHxuZXcgRi5hKGZ1bmN0aW9uKGUscil7dChcInBvc3RcIixnKFwiZHdhcHAvcmVnaXN0ZXJcIikse2NvbXBhbnk6bi5jb21wYW55LHN5c3RlbV9pbmZvOmR9LCEwKS50aGVuKGUpLmNhdGNoKHIpfSksQi5yZWdpc3RlclByb21pc2UudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gbC5zZXRTdG9yYWdlU3luYyhcImR3YXBwOmluc3RhbGxhdGlvblwiLG4uZGF0YS5pbnN0YWxsYXRpb24pLHQoZSxpLG8pLnRoZW4ocikuY2F0Y2godSksbn0pfSk7dmFyIGM9e1wiY29udGVudC10eXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9O3JldHVybiBhLmluc3RhbGxhdGlvbl9pZCYmKGNbXCJYLUFwcC1JbnN0YWxsLUlkXCJdPWEuaW5zdGFsbGF0aW9uX2lkKSxhLnNpdGV1c2VyX3Rva2VuJiYoY1tcIlgtQXBwLVRva2VuXCJdPWEuc2l0ZXVzZXJfdG9rZW4pLGEudXNlcl90b2tlbiYmKGNbXCJYLUFwcC1Vc2VyLVRva2VuXCJdPWEudXNlcl90b2tlbiksbmV3IEYuYShmdW5jdGlvbih0LG4pe3IucmVxdWVzdCh7bWV0aG9kOmUsdXJsOmksZGF0YTpvLGhlYWRlcjpjLHN1Y2Nlc3M6ZnVuY3Rpb24obil7bi5kd1N0YXR1cz1uLnN0YXR1c0NvZGUsbi5kd0hlYWRlcnM9bi5oZWFkZXIsdChuKX0sZmFpbDpmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQpLHU9MDt1PHQ7dSsrKXJbdV09YXJndW1lbnRzW3VdO2NvbnNvbGUubG9nKFwid3gucmVxdWVzdCBlcnJvciwgbWV0aG9kPVwiLmNvbmNhdChlLFwiLCB1cmw9XCIpLmNvbmNhdChpLFwiLCBkYXRhLCBhcmdzXCIpLG8sciksbi5hcHBseSh2b2lkIDAscil9fSl9KX0sUz1mdW5jdGlvbih0LG4pe249bnx8e307dmFyIGUscj10LnNwbGl0KFwiL1wiKSxpPXJbMF0udG9VcHBlckNhc2UoKSxvPXJbMV0sdT1yWzJdO3JldHVybltcIkRZTkFNSUNfR0VUXCIsXCJEWU5BTUlDX1BPU1RcIixcIkRZTkFNSUNfUFVUXCIsXCJEWU5BTUlDX0RFTEVURVwiXS5pbmRleE9mKGkpPi0xPyhlPWcobytcIi9cIituLmlkK1wiL1wiK3UpLGk9aS5zcGxpdChcIl9cIilbMV0pOmU9ZyhbXCJxdWVyeVwiLFwicG9zdFwiLFwic2F2ZVwiXS5pbmRleE9mKHUpPi0xP286W1wiZ2V0XCIsXCJwdXRcIixcImRlbGV0ZVwiLFwidXBkYXRlXCJdLmluZGV4T2YodSk+LTE/bytcIi9cIituLmlkOm8rXCIvXCIrdSksYihpLGUsbil9LFA9ZnVuY3Rpb24odCxuKXtuPW58fHt9O3ZhciBlPXQuc3BsaXQoXCIvXCIpLHI9ZVswXS50b1VwcGVyQ2FzZSgpLGk9ZVsxXSxvPWVbMl0sdT1fKGkrXCIvXCIrbyk7cmV0dXJuIGIocix1LG4pfSxFPWZ1bmN0aW9uKHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpcIlwiLGU9XCJvYmplY3RcIj09PU0oKShuKT9qKCkobikubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0K1wiPVwiK25bdF19KS5qb2luKFwiJlwiKTpuLHI9ZT9cIj9cIitlOlwiXCIsaT1cInBhZ2VzL1wiK3QrXCIvaW5kZXhcIixvPXAuZmluZChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYWdlcy5pbmRleE9mKGkpPi0xfSksdT1vP28ucm9vdDpudWxsO3JldHVybiB1P1wiL1wiK3UrXCIvcGFnZXMvXCIrdCtcIi9pbmRleFwiK3I6XCIvcGFnZXMvXCIrdCtcIi9pbmRleFwiK3J9LEE9e3NldEV4dHJhUXVlcnk6ZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpdGhpcy5wYWdlLmRhdGEuZXh0cmFRdWVyeVtuXT10W25dfSxzZXRTaGFyZVRpdGxlOmZ1bmN0aW9uKHQpe3RoaXMucGFnZS5kYXRhLnNoYXJlLnRpdGxlPXR9LHNldFNoYXJlSW1hZ2VVcmw6ZnVuY3Rpb24odCl7dGhpcy5wYWdlLmRhdGEuc2hhcmUuaW1hZ2VVcmw9dH0sYWRkU2hhcmVDYWxsYmFjazpmdW5jdGlvbih0LG4pe3RoaXMucGFnZS5kYXRhLnNoYXJlW3RdLnB1c2gobil9LHNldE92ZXJpZGU6ZnVuY3Rpb24odCxuKXt0aGlzLnBhZ2UuZGF0YS5vdmVyaWRlc1t0XT1ufX07cmV0dXJue0R3UHJveHk6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaSh0LGUsdSxjKXt2YXIgZixsPWMuY29tcG9uZW50c1BhY2thZ2VzO3JldHVybiBtKCkodGhpcyxpKSxmPXgoKSh0aGlzLChpLl9fcHJvdG9fX3x8eSgpKGkpKS5jYWxsKHRoaXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaygpKGYpLFwiZmlsdGVyc1wiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpOLmF9KSxmLnBsYXRmb3JtPVwiZHdhcHBcIixmLnNsaWRlPXQsZi5kYXRhPW51bGwsZi5hY3Rvcj1lLGYucGFnZT1udWxsLGYucXVlcnk9e30sZi5tZXRob2RzPXt9LGYuY29uZmlnPW4sZi5ldmVudD1udWxsLGYuaXNTd2FuPW8sZi5pc015PWEsZi5hY3RvcnM9bnVsbCxmLnJvb3RTbGlkZT1udWxsLGYud3g9cixmLnd4YXBwPXUsZi5nZXRDdXJyZW50UGFnZXM9cyxmLmFwcD1uZXcgVy5hKGsoKShmKSxmLnNsaWRlKSxmLnBhZ2VMb2NhbHM9bnVsbCxmLmV2ZW50PW5ldyBJLmEuRXZlbnRFbWl0dGVyLGYucGFnZUV2ZW50PW51bGwsZi5nbG9iYWxFdmVudD1VLmEsZi5leHRyYT17fSxmLmNvbXBvbmVudHNQYWNrYWdlcz1sLGYuJGRpcnR5PW5ldyBHLmEsZn1yZXR1cm4gTygpKGksdCksdygpKGksW3trZXk6XCJvblwiLHZhbHVlOmZ1bmN0aW9uKHQsbil7dGhpcy5ldmVudC5vbih0LG4pfX0se2tleTpcImVtaXRcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3RoaXMuZXZlbnQuZW1pdCh0LG4pfX0se2tleTpcImRlc3Ryb3lcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuZXZlbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCl9fSx7a2V5OlwiX2FmdGVyT25Mb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCxuLGUpe3RoaXMucGFnZT10LHRoaXMucXVlcnk9bix0aGlzLmVudj1lLHRoaXMuc2xpZGUuZHdhcHAubmV3X3ZlcnNpb24mJk9iamVjdChHLmIpKHRoaXMpfX0se2tleTpcIl91cGRhdGVBY3RvckRhdGFcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10LmRhdGEsZT10LmNvbXB1dGVkLHI9dC53YXRjaCxpPXQuYWN0b3JzLG89dC5yb290U2xpZGUsdT10LnBhZ2VMb2NhbHMsYT10LnBhZ2VFdmVudDt0aGlzLmRhdGE9bix0aGlzLmNvbXB1dGVkPWUsdGhpcy53YXRjaD1yLHRoaXMuYWN0b3JzPWksdGhpcy5yb290U2xpZGU9byx0aGlzLnBhZ2VMb2NhbHM9dSx0aGlzLnBhZ2VFdmVudD1hfX0se2tleTpcIl9zZXRFeHRyYURhdGFcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmV4dHJhPXR9fSx7a2V5Olwic2VsZWN0Q29tcG9uZW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFnZS5zZWxlY3RDb21wb25lbnQoXCIuXCIuY29uY2F0KHQpKX19LHtrZXk6XCJnZXRDb21wb25lbnRQYWNrYWdlXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD12KCkoaC5hLm1hcmsoZnVuY3Rpb24gdChuKXtyZXR1cm4gaC5hLndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQuYWJydXB0KFwicmV0dXJuXCIsdGhpcy5jb21wb25lbnRzUGFja2FnZXNbbl0uZGVmYXVsdCk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiB0LnN0b3AoKX19LHQsdGhpcyl9KSk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCl9LHtrZXk6XCJnZXRQYWdlTG9jYWxzXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFnZUxvY2Fsc1t0XX19LHtrZXk6XCJzZXRQYWdlTG9jYWxzXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt0aGlzLnBhZ2VMb2NhbHNbdF09bn19LHtrZXk6XCJnZXRHbG9iYWxMb2NhbHNcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53eGFwcC5nZXRHbG9iYWxEYXRhKHQpfX0se2tleTpcInNldEdsb2JhbExvY2Fsc1wiLHZhbHVlOmZ1bmN0aW9uKHQsbil7dGhpcy53eGFwcC5zZXRHbG9iYWxEYXRhKHQsbil9fSx7a2V5Olwic3VibWl0Rm9ybVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5yb290U2xpZGUuaWQpcmV0dXJuIHRoaXMuc2hvd01vZGFsKHt0aXRsZTpcIuihqOWNleaPkOS6pOmUmeivr1wiLGNvbnRlbnQ6XCLor7flhYjkv53lrZjlsI/nqIvluo/lho3nlJ/miJDlsI/nqIvluo/vvIFcIixzaG93Q2FuY2VsOiExfSk7dmFyIG49dGhpcy5hY3RvcnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR3LnNsaWRlLmZvcm1fZmllbGQmJlwiX3N1Ym1pdFwiIT09dC5kdy5zbGlkZS5mb3JtX2ZpZWxkLnR5cGVfd2lkZ2V0fSkubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0LmR3fSksZT0hMCxyPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8sdT1mKCkobik7IShlPShvPXUubmV4dCgpKS5kb25lKTtlPSEwKXt2YXIgYT1vLnZhbHVlO2lmKGEuc2xpZGUuZm9ybV9maWVsZC5yZXF1aXJlZCYmKG51bGw9PWEuZGF0YS52YWx1ZXx8XCJcIj09PWEuZGF0YS52YWx1ZSkpcmV0dXJuIHRoaXMuc2hvd01vZGFsKHt0aXRsZTpcIuivt+Whq+WGmeWujOaVtO+8gVwiLGNvbnRlbnQ6YS5zbGlkZS5mb3JtX2ZpZWxkLmxhYmVsK1wi5piv5b+F5aGr5a2X5q6177yBXCIsc2hvd0NhbmNlbDohMX0pfX1jYXRjaCh0KXtyPSEwLGk9dH1maW5hbGx5e3RyeXtlfHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKHIpdGhyb3cgaX19dmFyIGM9bi5tYXAoZnVuY3Rpb24odCl7cmV0dXJue25hbWU6dC5zbGlkZS5yYW5kb21pZCx2YWx1ZTp0LmRhdGEudmFsdWV9fSk7aWYoIWMubGVuZ3RoKXJldHVybiB0aGlzLnNob3dNb2RhbCh7dGl0bGU6XCLooajljZXmj5DkuqTplJnor69cIixjb250ZW50Olwi6K+35YWI5re75Yqg6KGo5Y2V57uE5Lu277yBXCIsc2hvd0NhbmNlbDohMX0pO3ZhciBzPXtmaWxlX2RhdGE6e30sZmllbGRzOmMsc2xpZGVfaWQ6dGhpcy5yb290U2xpZGUuaWR9O3RoaXMuc2hvd0xvYWRpbmcoe3RpdGxlOlwi5o+Q5Lqk5LitLi4uXCJ9KSx0aGlzLnJlcXVlc3QoXCJwb3N0L2NvbXBhbnlfZm9ybS9zdWJtaXRfcGFnZXNsaWRlX2Zvcm1cIixzKS50aGVuKGZ1bmN0aW9uKG4pe2lmKFwiZXJyb3JcIj09PW4uZGF0YS5zdGF0dXMpcmV0dXJuIHQuaGlkZUxvYWRpbmcoKSx0LnNob3dNb2RhbCh7dGl0bGU6XCLooajljZXmj5DkuqTplJnor69cIixjb250ZW50Om4uZGF0YS5tZXNzYWdlLHNob3dDYW5jZWw6ITF9KTtpZihuLmRhdGEub3JkZXJfcmVzcG9uc2Upe3ZhciBlPW4uZGF0YS5vcmRlcl9yZXNwb25zZS5yZWRpcmVjdF9kYXRhLmNoYXJnZV9pZDtyZXR1cm4gdC5nb1RvSHJlZihcImNoYXJnZT9pZD1cIi5jb25jYXQoZSkse3JlZGlyZWN0VG86ITB9KX12YXIgcj1bXTtmb3IodmFyIGkgaW4gbi5kYXRhLmRhdGEpci5wdXNoKGkrXCI6IFwiK24uZGF0YS5kYXRhW2ldKTt0LmhpZGVMb2FkaW5nKCksdC5zaG93TW9kYWwoe3RpdGxlOlwi6KGo5Y2V5o+Q5Lqk5oiQ5Yqf77yBXCIsY29udGVudDpyLnNsaWNlKDAsNSkuam9pbihcIlxcblwiKSxzaG93Q2FuY2VsOiExfSl9KX19LHtrZXk6XCJnZXRBYnNvbHV0ZVBhdGhcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hY3Rvci5wYXRoK1wiLmR3ZGF0YS5cIit0fX0se2tleTpcImJ1aWxkRGFwaVJlc291cmNlVXJsXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gXy5hcHBseSh2b2lkIDAsYXJndW1lbnRzKX19LHtrZXk6XCJzZXRXeFBhcnNlXCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLmdldEFic29sdXRlUGF0aCh0KTtlLnd4UGFyc2UocixcImh0bWxcIixufHxcIlwiLHRoaXMucGFnZSw1KX19LHtrZXk6XCJfcmVzb2x2ZURhdGFzXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxlPXRoaXMucGFnZS5kYXRhLnNsaWRlLmNvbXBvbmVudHNbdGhpcy5hY3Rvci5rZXldLmR3ZGF0YSxyPXt9LGk9ZnVuY3Rpb24odCxlKXt2YXIgaT1uLmdldEFic29sdXRlUGF0aCh0KTtyW2ldPXZvaWQgMCE9PWU/ZTpudWxsfTtmb3IodmFyIG8gaW4gdCl7dmFyIHU9dFtvXTtpZihvLmVuZHNXaXRoKFwiX19jb25jYXRcIikpIWZ1bmN0aW9uKCl7dmFyIHQ9by5zbGljZSgwLC1cIl9fY29uY2F0XCIubGVuZ3RoKSxuPU9iamVjdChDLmdldERhdGFCeVBhdGgpKGUsdCkscj1uLmxhc3RPYmosYT1uLmxhc3RLZXksYz1yW2FdO3UuZm9yRWFjaChmdW5jdGlvbihuLGUpe3ZhciByPVwiXCIuY29uY2F0KHQsXCJbXCIpLmNvbmNhdChjLmxlbmd0aCtlLFwiXVwiKTtpKHIsbil9KX0oKTtlbHNlIGlmKG8uZW5kc1dpdGgoXCJfX3Vjb25jYXRcIikpIWZ1bmN0aW9uKCl7dmFyIHQ9by5zbGljZSgwLC1cIl9fdWNvbmNhdFwiLmxlbmd0aCksbj1PYmplY3QoQy5nZXREYXRhQnlQYXRoKShlLHQpLHI9bi5sYXN0T2JqLGE9bi5sYXN0S2V5LGM9clthXSxzPXUuZmllbGQsZj11Lmxpc3QsbD1yW2FdLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdFtzXX0pO2YuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiFsLmluY2x1ZGVzKHRbc10pfSkuZm9yRWFjaChmdW5jdGlvbihuLGUpe3ZhciByPVwiXCIuY29uY2F0KHQsXCJbXCIpLmNvbmNhdChjLmxlbmd0aCtlLFwiXVwiKTtpKHIsbil9KX0oKTtlbHNlIGlmKG8uZW5kc1dpdGgoXCJfX3B1c2hcIikpe3ZhciBhPW8uc2xpY2UoMCwtXCJfX3B1c2hcIi5sZW5ndGgpLGM9T2JqZWN0KEMuZ2V0RGF0YUJ5UGF0aCkodGhpcy5kYXRhLGEpLHM9Yy5sYXN0T2JqLGY9Yy5sYXN0S2V5LGw9c1tmXSxoPVwiXCIuY29uY2F0KGEsXCJbXCIpLmNvbmNhdChsLmxlbmd0aCxcIl1cIik7aShoLHUpfWVsc2UgaWYoby5lbmRzV2l0aChcIl9fdXBkYXRlXCIpKXt2YXIgcD1vLnNsaWNlKDAsLVwiX191cGRhdGVcIi5sZW5ndGgpO2Zvcih2YXIgdiBpbiB1KWkoXCJcIi5jb25jYXQocCxcIi5cIikuY29uY2F0KHYpLHVbdl0pfWVsc2UgaShvLHUpfXJldHVybiByfX0se2tleTpcInNldERhdGFcIix2YWx1ZTpmdW5jdGlvbih0LG4sZSl7cmV0dXJuIHRoaXMuc2V0RGF0YXMoYygpKHt9LHQsbiksZSl9fSx7a2V5Olwic2V0RGF0YXNcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3ZhciBlPXRoaXMuX3Jlc29sdmVEYXRhcyh0KTt0aGlzLnBhZ2Uuc2V0RGF0YShlLG4pLHRoaXMuZGF0YT10aGlzLnBhZ2UuZGF0YS5zbGlkZS5jb21wb25lbnRzW3RoaXMuYWN0b3Iua2V5XS5kd2RhdGF9fSx7a2V5OlwiZ2V0RHd0b29sc1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsdGVyc319LHtrZXk6XCJyZXF1ZXN0XCIsdmFsdWU6ZnVuY3Rpb24odCxuKXt0cnl7cmV0dXJuIFModCxuKX1jYXRjaChlKXt0aHJvdyBjb25zb2xlLmxvZyhcImR3LnJlcXVlc3QgZXJyb3I6IHBhdGgsIGRhdGEsIGVcIix0LG4sZSksZX19fSx7a2V5OlwiZmV0Y2hcIix2YWx1ZTpmdW5jdGlvbih0LG4pe3RyeXtyZXR1cm4gUCh0LG4pfWNhdGNoKGUpe3Rocm93IGNvbnNvbGUubG9nKFwiZHcuZmV0Y2ggZXJyb3I6IHBhdGgsIGRhdGEsIGVcIix0LG4sZSksZX19fSx7a2V5OlwiZmV0Y2hQYXBwQXBpXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LGU9dC5zcGxpdChcIi9cIikscj11KCkoZSwyKSxpPXJbMF0sbz1yWzFdO3JldHVybiBQKFwicG9zdC9jY29kZS9ydW5fYXBpXCIse3BhcHBfc2x1ZzppLGFwaV9uYW1lOm8sZXZlbnRfZGF0YTpufSl9fSx7a2V5OlwiYWxlcnRcIix2YWx1ZTpmdW5jdGlvbih0LG4sZSl7ZT1lfHxmdW5jdGlvbigpe30sdGhpcy5zaG93TW9kYWwoe3RpdGxlOnQsY29udGVudDpuLHNob3dDYW5jZWw6ITEsc3VjY2VzczpmdW5jdGlvbigpe2UoKX19KX19LHtrZXk6XCJpc1RhYmJhclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZS5pc1RhYmJhcigpfX0se2tleTpcImdvVG9IcmVmXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD10aGlzLnBhZ2UpLmdvVG9IcmVmLmFwcGx5KHQsYXJndW1lbnRzKX19LHtrZXk6XCJnZXRBYnNvbHV0ZVVybFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuKHQ9dGhpcy5wYWdlKS5nZXRBYnNvbHV0ZVVybC5hcHBseSh0LGFyZ3VtZW50cyl9fSx7a2V5OlwiZ29Ub1BhZ2VcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdCxuPWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkobikscj0wO3I8bjtyKyspZVtyXT1hcmd1bWVudHNbcl07cmV0dXJuKHQ9dGhpcy5wYWdlKS5nb1RvUGFnZS5hcHBseSh0LFt0aGlzLnNsaWRlLnR5cGVdLmNvbmNhdChlKSl9fSx7a2V5OlwiZ29Ub1BhcHBQYWdlXCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsbj1hcmd1bWVudHMubGVuZ3RoLGU9bmV3IEFycmF5KG4pLHI9MDtyPG47cisrKWVbcl09YXJndW1lbnRzW3JdO3JldHVybih0PXRoaXMucGFnZSkuZ29Ub1BhcHBQYWdlLmFwcGx5KHQsW3RoaXMuc2xpZGUudHlwZV0uY29uY2F0KGUpKX19LHtrZXk6XCJnb1RvUGFwcEhvbWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxlPW4ucmVkaXJlY3RUbyxyPXZvaWQgMCE9PWUmJmU7aWYodGhpcy5zbGlkZS5kd2FwcF9ob21lJiZ0aGlzLnNsaWRlLmR3YXBwX2hvbWUuZ3JvdXAmJnRoaXMuc2xpZGUuZHdhcHBfaG9tZS5zbHVnKXt2YXIgaT10aGlzLnNsaWRlLmR3YXBwX2hvbWUsbz1pLmdyb3VwLHU9aS5zbHVnLGE9XCJcIi5jb25jYXQobyxcIi1cIikuY29uY2F0KHUpLGM9aigpKHQpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbitcIj1cIit0W25dfSkuam9pbihcIiZcIikscz1jP1wiP1wiK2M6XCJcIjtyZXR1cm4gdGhpcy5wYWdlLmdvVG9Mb2NhdGlvbihhLHMse3JlZGlyZWN0VG86cn0pfXRocm93IEVycm9yKFwiZHcuZ29Ub1BhcHBIb21lIEVycm9yOiDlj6rog73lnKjpgJrnlKjnu4Tku7blrZDpobXpnaLlhoXosIPnlKjmraTmlrnms5VcIil9fSx7a2V5OlwicmVwb3J0Rm9ybUlkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD12KCkoaC5hLm1hcmsoZnVuY3Rpb24gdChuKXt2YXIgZSxyPWFyZ3VtZW50cztyZXR1cm4gaC5hLndyYXAoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIGU9ci5sZW5ndGg+MSYmdm9pZCAwIT09clsxXT9yWzFdOlwiZGVmYXVsdFwiLHQuYWJydXB0KFwicmV0dXJuXCIsdGhpcy5mZXRjaChcInBvc3QvYXBwdXNlcnRlbXBsYXRlbWVzc2FnZS9jcmVhdGVfYXBwdXNlcnRlbXBsYXRlbWVzc2FnZV9yZWNvcmRcIix7Zm9ybWlkOm4uZGV0YWlsLmZvcm1JZCxzb3VyY2U6ZX0pKTtjYXNlIDI6Y2FzZVwiZW5kXCI6cmV0dXJuIHQuc3RvcCgpfX0sdCx0aGlzKX0pKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0se2tleTpcIiRjbGVhclwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy4kZGlydHkubGVuZ3RoKCkmJnRoaXMuc2V0RGF0YXModGhpcy4kZGlydHkucG9wKCkpfX0se2tleTpcIiR0aHJvdHRsZUNsZWFyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0KEQuYSkodGhpcy4kY2xlYXIuYmluZCh0aGlzKSw1MCx0aGlzKSgpfX0se2tleTpcImRlY29yYXRlTWV0aG9kXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcztyZXR1cm4gdGhpcy5zbGlkZS5kd2FwcC5uZXdfdmVyc2lvbj9cIkFzeW5jRnVuY3Rpb25cIj09PXQuY29uc3RydWN0b3IubmFtZT92KCkoaC5hLm1hcmsoZnVuY3Rpb24gZSgpe3ZhciByLGksbyx1LGE9YXJndW1lbnRzO3JldHVybiBoLmEud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpmb3Iocj1hLmxlbmd0aCxpPW5ldyBBcnJheShyKSxvPTA7bzxyO28rKylpW29dPWFbb107cmV0dXJuIGUubmV4dD0zLHQuY2FsbC5hcHBseSh0LFtuXS5jb25jYXQoaSkpO2Nhc2UgMzpyZXR1cm4gdT1lLnNlbnQsbi4kdGhyb3R0bGVDbGVhcigpLGUuYWJydXB0KFwicmV0dXJuXCIsdSk7Y2FzZSA2OmNhc2VcImVuZFwiOnJldHVybiBlLnN0b3AoKX19LGUsdGhpcyl9KSk6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTt2YXIgbz10LmNhbGwuYXBwbHkodCxbbl0uY29uY2F0KHIpKTtyZXR1cm4gbi4kdGhyb3R0bGVDbGVhcigpLG99OnR9fV0pLGl9KE9iamVjdChDLm1peGluKShSLmEsQSxsKSksRHdVdGlsczppKCkoe3JlcXVlc3Q6UyxmZXRjaDpQLGJ1aWxkUmVxdWVzdDpiLGJ1aWxkQWJzb2x1dGVVcmw6RSxmaWx0ZXJzOk4uYX0sbCl9fX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIodCxuLGUpe3JldHVybiBuIGluIHQ/aSh0LG4se3ZhbHVlOmUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W25dPWUsdH12YXIgaT1lKDEwMCk7dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NTUpfSxmdW5jdGlvbih0LG4sZSl7ZSg0NTYpLHQuZXhwb3J0cz1lKDYpLk9iamVjdC5nZXRQcm90b3R5cGVPZn0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNjEpLGk9ZSgxOTMpO2UoOTkpKFwiZ2V0UHJvdG90eXBlT2ZcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShyKHQpKX19KX0sZnVuY3Rpb24odCxuLGUpe2Z1bmN0aW9uIHIodCxuKXtpZihuJiYoXCJvYmplY3RcIj09PWkobil8fFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pKXJldHVybiBuO2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiB0fXZhciBpPWUoNjIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LG4sZSl7ZnVuY3Rpb24gcih0LG4pe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4mJm51bGwhPT1uKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTt0LnByb3RvdHlwZT1vKG4mJm4ucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxuJiYoaT9pKHQsbik6dC5fX3Byb3RvX189bil9dmFyIGk9ZSg0NTkpLG89ZSgxNTIpO3QuZXhwb3J0cz1yfSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoNDYwKX0sZnVuY3Rpb24odCxuLGUpe2UoNDYxKSx0LmV4cG9ydHM9ZSg2KS5PYmplY3Quc2V0UHJvdG90eXBlT2Z9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDEyKTtyKHIuUyxcIk9iamVjdFwiLHtzZXRQcm90b3R5cGVPZjplKDQ2Mikuc2V0fSl9LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI2KSxpPWUoMzIpLG89ZnVuY3Rpb24odCxuKXtpZihpKHQpLCFyKG4pJiZudWxsIT09bil0aHJvdyBUeXBlRXJyb3IobitcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIil9O3QuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKHQsbixyKXt0cnl7cj1lKDM3KShGdW5jdGlvbi5jYWxsLGUoMTUxKS5mKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0LDIpLHIodCxbXSksbj0hKHQgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2godCl7bj0hMH1yZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LGUpLG4/dC5fX3Byb3RvX189ZTpyKHQsZSksdH19KHt9LCExKTp2b2lkIDApLGNoZWNrOm99fSxmdW5jdGlvbih0LG4sZSl7ZSg0NjQpO3ZhciByPWUoNikuT2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmNyZWF0ZSh0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMTIpO3Ioci5TLFwiT2JqZWN0XCIse2NyZWF0ZTplKDkxKX0pfSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGUodCl7aWYodm9pZCAwPT09dCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIHR9dC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjtlLmQobixcImFcIixmdW5jdGlvbigpe3JldHVybiBzfSk7dmFyIHI9ZSg5NiksaT0oZS5uKHIpLGUoMTM4KSksbz0oZS5uKGkpLGUoNzMpKSx1PShlLm4obyksZSg5NSkpLGE9KGUubih1KSxlKDIwNSkpLGM9KGUubihhKSxlKDYyKSkscz0oZS5uKGMpLEFycmF5LmlzQXJyYXksZnVuY3Rpb24odCxuKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxyPWZ1bmN0aW9uKCl7dC5fdGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX3RpbWVvdXQpO3ZhciByPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7dC5fdGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxyKX0sbil9O3JldHVybiByLl9yZWFsPXQscn0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7ZS5kKG4sXCJhXCIsZnVuY3Rpb24oKXtyZXR1cm4gb30pO3ZhciByPWUoODkpLGk9ZS5uKHIpLG89bmV3IGkuYS5FdmVudEVtaXR0ZXI7by5zZXRNYXhMaXN0ZW5lcnMoMTAwKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxuLGUpe3QuX19wcm90b19fPW59ZnVuY3Rpb24gaSh0LG4sZSl7Zm9yKHZhciByPTAsaT1lLmxlbmd0aDtyPGk7cisrKXt2YXIgbz1lW3JdO09iamVjdChOLmEpKHQsbyxuW29dKX19ZnVuY3Rpb24gbyh0KXtHLnRhcmdldCYmVy5wdXNoKEcudGFyZ2V0KSxHLnRhcmdldD10fWZ1bmN0aW9uIHUoKXtHLnRhcmdldD1XLnBvcCgpfWZ1bmN0aW9uIGEodCl7dmFyIG49dC52bSxlPXQub2JqLHI9dC5rZXksaT10LnZhbHVlLG89dC5wYXJlbnQsdT1uZXcgRyxhPU8oKShlLHIpO2lmKCFhfHwhMSE9PWEuY29uZmlndXJhYmxlKXt2YXIgZj1hJiZhLmdldCxsPWEmJmEuc2V0LGg9cyh7dm06bixrZXk6cix2YWx1ZTppLHBhcmVudDpvfSk7eCgpKGUscix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIHQ9Zj9mLmNhbGwoZSk6aTtyZXR1cm4gRy50YXJnZXQmJih1LmRlcGVuZCgpLGgmJmguZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkodCkmJmModCkpLHR9LHNldDpmdW5jdGlvbih0KXt2YXIgYT1mP2YuY2FsbChlKTppO2lmKHQhPT1hJiYodD09PXR8fGE9PT1hKSl7bz1vfHxyO3ZhciBjPVYocixlKSxwPWMucm9vdCx2PWMucGF0aDtuLiRkaXJ0eS5wdXNoKHAsdix0KSxsP2wuY2FsbChlLHQpOmk9dCxoPXMoe3ZtOm4sa2V5OnIsdmFsdWU6aSxwYXJlbnQ6b30pLHUubm90aWZ5KCl9fX0pfX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgbixlPTAscj10Lmxlbmd0aDtlPHI7ZSsrKW49dFtlXSxuJiZuLl9fb2JfXyYmbi5fX29iX18uZGVwLmRlcGVuZCgpLEFycmF5LmlzQXJyYXkobikmJmMobil9ZnVuY3Rpb24gcyh0KXt2YXIgbj10LnZtLGU9dC5rZXkscj10LnZhbHVlLGk9dC5wYXJlbnQ7aWYoT2JqZWN0KE4uZSkocikpe3JldHVybiBPYmplY3QoTi5iKShyLFwiX19vYl9fXCIpJiZyLl9fb2JfXyBpbnN0YW5jZW9mIEI/ci5fX29iX186bmV3IEIoe3ZtOm4sa2V5OmUsdmFsdWU6cixwYXJlbnQ6aX0pfX1mdW5jdGlvbiBmKHQsbixlKXt2YXIgcj1uZXcgcSh7dm06dCxleHBPckZuOm4sY2I6ZX0pO3JldHVybiBmdW5jdGlvbigpe3IudGVhcmRvd24oKX19ZnVuY3Rpb24gbCh0LG4sZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZT8oQy5nZXQ9aCh0LG4pLEMuc2V0PU4uZik6KEMuZ2V0PWUuZ2V0PyExIT09ZS5jYWNoZT9oKHQsbik6ZS5nZXQ6Ti5mLEMuc2V0PWUuc2V0P2Uuc2V0Ok4uZikseCgpKHQsbixDKX1mdW5jdGlvbiBoKHQsbil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5fY29tcHV0ZWRXYXRjaGVycyYmdC5fY29tcHV0ZWRXYXRjaGVyc1tuXTtpZihlKXJldHVybiBlLmRpcnR5JiZlLmV2YWx1YXRlKCksRy50YXJnZXQmJmUuZGVwZW5kKCksZS52YWx1ZX19ZnVuY3Rpb24gcCh0LG4pe2Zvcih2YXIgZSBpbiBuKXt2YXIgcj1uW2VdO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspZih0LGUscltpXSk7ZWxzZSBmKHQsZSxyKX19ZnVuY3Rpb24gdih0LG4pe3ZhciBlPXQuX2NvbXB1dGVkV2F0Y2hlcnM9dygpKG51bGwpO2Zvcih2YXIgciBpbiBuKXt2YXIgaT1uW3JdLG89XCJmdW5jdGlvblwiPT10eXBlb2YgaT9pOmkuZ2V0O2Vbcl09bmV3IHEoe3ZtOnQsa2V5OnIsZXhwT3JGbjpvLG9wdGlvbnM6SH0pLHIgaW4gdC5kYXRhfHxsKHQscixpKX19ZnVuY3Rpb24gZCh0LG4pe2ooKShuKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09bltlXX0pfWZ1bmN0aW9uIHkodCxuLGUpe0MuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbbl1bZV19LEMuc2V0PWZ1bmN0aW9uKHQpe3RoaXNbbl1bZV09dH0seCgpKHQsZSxDKX1mdW5jdGlvbiBnKHQpe3ZhciBuLGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O249XCJmdW5jdGlvblwiPT10eXBlb2YgZT9lLmNhbGwodCk6ZSx0Ll9kYXRhPW4saigpKG4pLmZvckVhY2goZnVuY3Rpb24obil7eSh0LFwiX2RhdGFcIixuKX0pLHMoe3ZtOnQsa2V5OlwiXCIsdmFsdWU6bixwYXJlbnQ6XCJcIn0pfWZ1bmN0aW9uIG0odCl7dC5tZXRob2RzJiZkKHQsdC5tZXRob2RzKSxnKHQsdC5kYXRhKSx0LmNvbXB1dGVkJiZ2KHQsdC5jb21wdXRlZCksdC53YXRjaCYmcCh0LHQud2F0Y2gpLHQuJHRocm90dGxlQ2xlYXIoKX1lLmQobixcImFcIixmdW5jdGlvbigpe3JldHVybiB6fSksbi5iPW07dmFyIF89ZSgxNTIpLHc9ZS5uKF8pLGI9ZSgxMDApLHg9ZS5uKGIpLFM9ZSg0NjkpLE89ZS5uKFMpLFA9ZSg0NzIpLGs9ZS5uKFApLEU9ZSg3Myksaj1lLm4oRSksQT1lKDE0NiksTT1lLm4oQSksVD1lKDE0NyksRj1lLm4oVCksTD1lKDQ4NyksST1lLm4oTCksTj1lKDIxMSksRD1lKDQ5MSksUj1JKCkoRC5hKSxDPXtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6Ti5mLHNldDpOLmZ9LFU9MCxHPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe00oKSh0aGlzLHQpLHRoaXMuaWQ9VSsrLHRoaXMuc3Vicz1bXX1yZXR1cm4gRigpKHQsW3trZXk6XCJhZGRTdWJcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnN1YnMucHVzaCh0KX19LHtrZXk6XCJyZW1vdmVTdWJcIix2YWx1ZTpmdW5jdGlvbih0KXtPYmplY3QoTi5oKSh0aGlzLnN1YnMsdCl9fSx7a2V5OlwiZGVwZW5kXCIsdmFsdWU6ZnVuY3Rpb24oKXt0LnRhcmdldCYmdC50YXJnZXQuYWRkRGVwKHRoaXMpfX0se2tleTpcIm5vdGlmeVwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3Vicy5zbGljZSgpLG49MCxlPXQubGVuZ3RoO248ZTtuKyspdFtuXS51cGRhdGUoKX19XSksdH0oKTtHLnRhcmdldD1udWxsO3ZhciBXPVtdLFY9ZnVuY3Rpb24odCxuKXt2YXIgZT1cIlwiO2lmKG4mJihlPW4uX19vYl9fLnBhdGgpKXtlPU9iamVjdChOLmQpKHQpP1wiXCIuY29uY2F0KGUsXCJbXCIpLmNvbmNhdCh0LFwiXVwiKTpcIlwiLmNvbmNhdChlLFwiLlwiKS5jb25jYXQodCk7Zm9yKHZhciByPVwiXCIsaT0wO2k8ZS5sZW5ndGgmJlwiLlwiIT09ZVtpXSYmXCJbXCIhPT1lW2ldOylyKz1lW2krK107cmV0dXJue3BhdGg6ZSxyb290OnJ9fXJldHVybntyb290OnQscGF0aDp0fX0sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQobil7dmFyIGU9bi52bSxvPW4ua2V5LHU9bi52YWx1ZSxhPW4ucGFyZW50O00oKSh0aGlzLHQpLHRoaXMudmFsdWU9dSx0aGlzLnZtPWUsdGhpcy5rZXk9bzt2YXIgYz1WKG8sYSk7aWYodGhpcy5yb290PWMucm9vdCx0aGlzLnBhdGg9Yy5wYXRoLHRoaXMuZGVwPW5ldyBHLE9iamVjdChOLmEpKHUsXCJfX29iX19cIix0aGlzKSxBcnJheS5pc0FycmF5KHUpKXsoTi5jP3I6aSkodSxELmEsUiksdGhpcy5vYnNlcnZlQXJyYXkodSl9ZWxzZSB0aGlzLndhbGsodSl9cmV0dXJuIEYoKSh0LFt7a2V5Olwid2Fsa1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1qKCkodCksZT0wO2U8bi5sZW5ndGg7ZSsrKWEoe3ZtOnRoaXMudm0sb2JqOnQsa2V5Om5bZV0sdmFsdWU6dFtuW2VdXSxwYXJlbnQ6dH0pfX0se2tleTpcIm9ic2VydmVBcnJheVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLGU9dC5sZW5ndGg7bjxlO24rKylzKHt2bTp0aGlzLnZtLGtleTpuLHZhbHVlOnRbbl0scGFyZW50OnR9KX19XSksdH0oKSxxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChuKXt2YXIgZT1uLnZtLHI9bi5rZXksaT1uLmV4cE9yRm4sbz1uLmNiLHU9bi5vcHRpb25zO00oKSh0aGlzLHQpLHRoaXMudm09ZSx0aGlzLmtleT1yLGUuX3dhdGNoZXJzPWUuX3dhdGNoZXJzfHxbXSxlLl93YXRjaGVycy5wdXNoKHRoaXMpLHRoaXMubGF6eT0hIXUmJiEhdS5sYXp5LHRoaXMuaWQ9KytVLHRoaXMuY2I9b3x8Ti5mLHRoaXMuYWN0aXZlPSEwLHRoaXMuZGlydHk9dGhpcy5sYXp5LHRoaXMuZGVwcz1bXSx0aGlzLm5ld0RlcHM9W10sdGhpcy5kZXBJZHM9bmV3IGsuYSx0aGlzLm5ld0RlcElkcz1uZXcgay5hLFwiZnVuY3Rpb25cIj09dHlwZW9mIGk/dGhpcy5nZXR0ZXI9aToodGhpcy5nZXR0ZXI9T2JqZWN0KE4uZykoaSksdGhpcy5nZXR0ZXJ8fCh0aGlzLmdldHRlcj1OLmYpKSx0aGlzLnZhbHVlPXRoaXMuZ2V0KCksdGhpcy5kaXJ0eSYmdGhpcy52bS4kZGlydHkucHVzaCh0aGlzLmtleSx0aGlzLmtleSx0aGlzLnZhbHVlKX1yZXR1cm4gRigpKHQsW3trZXk6XCJnZXRcIix2YWx1ZTpmdW5jdGlvbigpe28odGhpcyk7dmFyIHQ9dGhpcy5nZXR0ZXIuY2FsbCh0aGlzLnZtLHRoaXMudm0pO3JldHVybiB1KCksdGhpcy5jbGVhbnVwRGVwcygpLHR9fSx7a2V5OlwiZXZhbHVhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmFsdWU9dGhpcy5nZXQoKSx0aGlzLmRpcnR5PSExfX0se2tleTpcImRlcGVuZFwiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuZGVwcy5sZW5ndGg7dC0tOyl0aGlzLmRlcHNbdF0uZGVwZW5kKCl9fSx7a2V5OlwiYWRkRGVwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIG49dC5pZDt0aGlzLm5ld0RlcElkcy5oYXMobil8fCh0aGlzLm5ld0RlcElkcy5hZGQobiksdGhpcy5uZXdEZXBzLnB1c2godCksdGhpcy5kZXBJZHMuaGFzKG4pfHx0LmFkZFN1Yih0aGlzKSl9fSx7a2V5OlwiY2xlYW51cERlcHNcIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRlcHMubGVuZ3RoO3QtLTspe3ZhciBuPXRoaXMuZGVwc1t0XTt0aGlzLm5ld0RlcElkcy5oYXMobi5pZCl8fG4ucmVtb3ZlU3ViKHRoaXMpfXZhciBlPXRoaXMuZGVwSWRzO3RoaXMuZGVwSWRzPXRoaXMubmV3RGVwSWRzLHRoaXMubmV3RGVwSWRzPWUsdGhpcy5uZXdEZXBJZHMuY2xlYXIoKSxlPXRoaXMuZGVwcyx0aGlzLmRlcHM9dGhpcy5uZXdEZXBzLHRoaXMubmV3RGVwcz1lLHRoaXMubmV3RGVwcy5sZW5ndGg9MH19LHtrZXk6XCJ1cGRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMubGF6eSl7dGhpcy5kaXJ0eT0hMDt2YXIgdD10aGlzLmdldCgpO3RoaXMudmFsdWUhPT10JiYodGhpcy52YWx1ZT10LHRoaXMudm0uJGRpcnR5LnB1c2godGhpcy5rZXksdGhpcy5rZXksdCkpfWVsc2UgdGhpcy5ydW4oKX19LHtrZXk6XCJydW5cIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXt2YXIgdD10aGlzLmdldCgpLG49dGhpcy52YWx1ZTt0aGlzLnZhbHVlPXQsdGhpcy5jYi5jYWxsKHRoaXMudm0sdCxuKX19fSx7a2V5OlwidGVhcmRvd25cIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuYWN0aXZlKXtPYmplY3QoTi5oKSh0aGlzLnZtLl93YXRjaGVycyx0aGlzKTtmb3IodmFyIHQ9dGhpcy5kZXBzLmxlbmd0aDt0LS07KXRoaXMuZGVwc1t0XS5yZW1vdmVTdWIodGhpcyk7dGhpcy5hY3RpdmU9ITF9fX1dKSx0fSgpLHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KG4pe00oKSh0aGlzLHQpLHRoaXMucmVzZXQoKSx0aGlzLnR5cGU9bnx8XCJwYXRoXCIsdGhpcy5hY3RpdmU9ITB9cmV0dXJuIEYoKSh0LFt7a2V5OlwicHVzaFwiLHZhbHVlOmZ1bmN0aW9uKHQsbixlKXt0aGlzLmFjdGl2ZSYmKHRoaXMuX3BhdGhbbl09ZSx0aGlzLl9sZW5ndGgrKyl9fSx7a2V5OlwicG9wXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD13KCkobnVsbCk7cmV0dXJuXCJwYXRoXCI9PT10aGlzLnR5cGU/dD10aGlzLl9wYXRoOnRoaXMudHlwZSx0aGlzLnJlc2V0KCksdH19LHtrZXk6XCJyZXNldFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcGF0aD17fSx0aGlzLl9sZW5ndGg9MH19LHtrZXk6XCJsZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW5ndGh9fSx7a2V5OlwidmFjdW9cIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZT0hMSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0KCksdGhpcy5hY3RpdmU9ITB9fV0pLHR9KCksSD17bGF6eTohMH19LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NzApfSxmdW5jdGlvbih0LG4sZSl7ZSg0NzEpO3ZhciByPWUoNikuT2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbih0LG4pe3JldHVybiByLmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG4pfX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoNTQpLGk9ZSgxNTEpLmY7ZSg5OSkoXCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LG4pe3JldHVybiBpKHIodCksbil9fSl9LGZ1bmN0aW9uKHQsbixlKXt0LmV4cG9ydHM9ZSg0NzMpfSxmdW5jdGlvbih0LG4sZSl7ZSgxNDEpLGUoNTkpLGUoNzEpLGUoNDc0KSxlKDQ4MCksZSg0ODMpLGUoNDg1KSx0LmV4cG9ydHM9ZSg2KS5TZXR9LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDQ3NSksaT1lKDIxMCksbz1cIlNldFwiO3QuZXhwb3J0cz1lKDQ3NikobyxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIHIuZGVmKGkodGhpcyxvKSx0PTA9PT10PzA6dCx0KX19LHIpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgyNSkuZixpPWUoOTEpLG89ZSgxNDQpLHU9ZSgzNyksYT1lKDE0MiksYz1lKDcyKSxzPWUoMTMwKSxmPWUoMTk3KSxsPWUoMjAzKSxoPWUoMzMpLHA9ZSgxNDkpLmZhc3RLZXksdj1lKDIxMCksZD1oP1wiX3NcIjpcInNpemVcIix5PWZ1bmN0aW9uKHQsbil7dmFyIGUscj1wKG4pO2lmKFwiRlwiIT09cilyZXR1cm4gdC5faVtyXTtmb3IoZT10Ll9mO2U7ZT1lLm4paWYoZS5rPT1uKXJldHVybiBlfTt0LmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHQsbixlLHMpe3ZhciBmPXQoZnVuY3Rpb24odCxyKXthKHQsZixuLFwiX2lcIiksdC5fdD1uLHQuX2k9aShudWxsKSx0Ll9mPXZvaWQgMCx0Ll9sPXZvaWQgMCx0W2RdPTAsdm9pZCAwIT1yJiZjKHIsZSx0W3NdLHQpfSk7cmV0dXJuIG8oZi5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXYodGhpcyxuKSxlPXQuX2kscj10Ll9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBlW3IuaV07dC5fZj10Ll9sPXZvaWQgMCx0W2RdPTB9LGRlbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT12KHRoaXMsbikscj15KGUsdCk7aWYocil7dmFyIGk9ci5uLG89ci5wO2RlbGV0ZSBlLl9pW3IuaV0sci5yPSEwLG8mJihvLm49aSksaSYmKGkucD1vKSxlLl9mPT1yJiYoZS5fZj1pKSxlLl9sPT1yJiYoZS5fbD1vKSxlW2RdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe3YodGhpcyxuKTtmb3IodmFyIGUscj11KHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2Uubjp0aGlzLl9mOylmb3IocihlLnYsZS5rLHRoaXMpO2UmJmUucjspZT1lLnB9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXkodih0aGlzLG4pLHQpfX0pLGgmJnIoZi5wcm90b3R5cGUsXCJzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2KHRoaXMsbilbZF19fSksZn0sZGVmOmZ1bmN0aW9uKHQsbixlKXt2YXIgcixpLG89eSh0LG4pO3JldHVybiBvP28udj1lOih0Ll9sPW89e2k6aT1wKG4sITApLGs6bix2OmUscDpyPXQuX2wsbjp2b2lkIDAscjohMX0sdC5fZnx8KHQuX2Y9byksciYmKHIubj1vKSx0W2RdKyssXCJGXCIhPT1pJiYodC5faVtpXT1vKSksdH0sZ2V0RW50cnk6eSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxuLGUpe3ModCxuLGZ1bmN0aW9uKHQsZSl7dGhpcy5fdD12KHQsbiksdGhpcy5faz1lLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLG49dC5fayxlPXQuX2w7ZSYmZS5yOyllPWUucDtyZXR1cm4gdC5fdCYmKHQuX2w9ZT1lP2Uubjp0Ll90Ll9mKT9cImtleXNcIj09bj9mKDAsZS5rKTpcInZhbHVlc1wiPT1uP2YoMCxlLnYpOmYoMCxbZS5rLGUudl0pOih0Ll90PXZvaWQgMCxmKDEpKX0sZT9cImVudHJpZXNcIjpcInZhbHVlc1wiLCFlLCEwKSxsKG4pfX19LGZ1bmN0aW9uKHQsbixlKXtcInVzZSBzdHJpY3RcIjt2YXIgcj1lKDE0KSxpPWUoMTIpLG89ZSgxNDkpLHU9ZSg1MiksYT1lKDQwKSxjPWUoMTQ0KSxzPWUoNzIpLGY9ZSgxNDIpLGw9ZSgyNiksaD1lKDcwKSxwPWUoMjUpLmYsdj1lKDQ3NykoMCksZD1lKDMzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuLGUseSxnLG0pe3ZhciBfPXJbdF0sdz1fLGI9Zz9cInNldFwiOlwiYWRkXCIseD13JiZ3LnByb3RvdHlwZSxTPXt9O3JldHVybiBkJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB3JiYobXx8eC5mb3JFYWNoJiYhdShmdW5jdGlvbigpeyhuZXcgdykuZW50cmllcygpLm5leHQoKX0pKT8odz1uKGZ1bmN0aW9uKG4sZSl7ZihuLHcsdCxcIl9jXCIpLG4uX2M9bmV3IF8sdm9pZCAwIT1lJiZzKGUsZyxuW2JdLG4pfSksdihcImFkZCxjbGVhcixkZWxldGUsZm9yRWFjaCxnZXQsaGFzLHNldCxrZXlzLHZhbHVlcyxlbnRyaWVzLHRvSlNPTlwiLnNwbGl0KFwiLFwiKSxmdW5jdGlvbih0KXt2YXIgbj1cImFkZFwiPT10fHxcInNldFwiPT10O3QgaW4geCYmKCFtfHxcImNsZWFyXCIhPXQpJiZhKHcucHJvdG90eXBlLHQsZnVuY3Rpb24oZSxyKXtpZihmKHRoaXMsdyx0KSwhbiYmbSYmIWwoZSkpcmV0dXJuXCJnZXRcIj09dCYmdm9pZCAwO3ZhciBpPXRoaXMuX2NbdF0oMD09PWU/MDplLHIpO3JldHVybiBuP3RoaXM6aX0pfSksbXx8cCh3LnByb3RvdHlwZSxcInNpemVcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Muc2l6ZX19KSk6KHc9eS5nZXRDb25zdHJ1Y3RvcihuLHQsZyxiKSxjKHcucHJvdG90eXBlLGUpLG8uTkVFRD0hMCksaCh3LHQpLFNbdF09dyxpKGkuRytpLlcraS5GLFMpLG18fHkuc2V0U3Ryb25nKHcsdCxnKSx3fX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoMzcpLGk9ZSgxMzMpLG89ZSg2MSksdT1lKDkyKSxhPWUoNDc4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZT0xPT10LGM9Mj09dCxzPTM9PXQsZj00PT10LGw9Nj09dCxoPTU9PXR8fGwscD1ufHxhO3JldHVybiBmdW5jdGlvbihuLGEsdil7Zm9yKHZhciBkLHksZz1vKG4pLG09aShnKSxfPXIoYSx2LDMpLHc9dShtLmxlbmd0aCksYj0wLHg9ZT9wKG4sdyk6Yz9wKG4sMCk6dm9pZCAwO3c+YjtiKyspaWYoKGh8fGIgaW4gbSkmJihkPW1bYl0seT1fKGQsYixnKSx0KSlpZihlKXhbYl09eTtlbHNlIGlmKHkpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGQ7Y2FzZSA2OnJldHVybiBiO2Nhc2UgMjp4LnB1c2goZCl9ZWxzZSBpZihmKXJldHVybiExO3JldHVybiBsPy0xOnN8fGY/Zjp4fX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDQ3OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsbil7cmV0dXJuIG5ldyhyKHQpKShuKX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDI2KSxpPWUoMjA2KSxvPWUoMTMpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIG47cmV0dXJuIGkodCkmJihuPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2Ygbnx8biE9PUFycmF5JiYhaShuLnByb3RvdHlwZSl8fChuPXZvaWQgMCkscihuKSYmbnVsbD09PShuPW5bb10pJiYobj12b2lkIDApKSx2b2lkIDA9PT1uP0FycmF5Om59fSxmdW5jdGlvbih0LG4sZSl7dmFyIHI9ZSgxMik7cihyLlArci5SLFwiU2V0XCIse3RvSlNPTjplKDQ4MSkoXCJTZXRcIil9KX0sZnVuY3Rpb24odCxuLGUpe3ZhciByPWUoOTQpLGk9ZSg0ODIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihyKHRoaXMpIT10KXRocm93IFR5cGVFcnJvcih0K1wiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO3JldHVybiBpKHRoaXMpfX19LGZ1bmN0aW9uKHQsbixlKXt2YXIgcj1lKDcyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxuKXt2YXIgZT1bXTtyZXR1cm4gcih0LCExLGUucHVzaCxlLG4pLGV9fSxmdW5jdGlvbih0LG4sZSl7ZSg0ODQpKFwiU2V0XCIpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxMik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3Ioci5TLHQse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkodCk7dC0tOyluW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gbmV3IHRoaXMobil9fSl9fSxmdW5jdGlvbih0LG4sZSl7ZSg0ODYpKFwiU2V0XCIpfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSgxMiksaT1lKDY2KSxvPWUoMzcpLHU9ZSg3Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3Ioci5TLHQse2Zyb206ZnVuY3Rpb24odCl7dmFyIG4sZSxyLGEsYz1hcmd1bWVudHNbMV07cmV0dXJuIGkodGhpcyksbj12b2lkIDAhPT1jLG4mJmkoYyksdm9pZCAwPT10P25ldyB0aGlzOihlPVtdLG4/KHI9MCxhPW8oYyxhcmd1bWVudHNbMl0sMiksdSh0LCExLGZ1bmN0aW9uKHQpe2UucHVzaChhKHQscisrKSl9KSk6dSh0LCExLGUucHVzaCxlKSxuZXcgdGhpcyhlKSl9fSl9fSxmdW5jdGlvbih0LG4sZSl7dC5leHBvcnRzPWUoNDg4KX0sZnVuY3Rpb24odCxuLGUpe2UoNDg5KTt2YXIgcj1lKDYpLk9iamVjdDt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX19LGZ1bmN0aW9uKHQsbixlKXtlKDk5KShcImdldE93blByb3BlcnR5TmFtZXNcIixmdW5jdGlvbigpe3JldHVybiBlKDIwNykuZn0pfSxmdW5jdGlvbih0LG4sZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZSg2Mik7ZS5uKHIpLGUoMjEyKX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UuZChuLFwiYVwiLGZ1bmN0aW9uKCl7cmV0dXJuIGF9KTt2YXIgcj1lKDE1MiksaT1lLm4ociksbz1lKDIxMSksdT1BcnJheS5wcm90b3R5cGUsYT1pKCkodSk7W1wicHVzaFwiLFwicG9wXCIsXCJzaGlmdFwiLFwidW5zaGlmdFwiLFwic3BsaWNlXCIsXCJzb3J0XCIsXCJyZXZlcnNlXCJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dVt0XTtPYmplY3Qoby5hKShhLHQsZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyBBcnJheShlKSxpPTA7aTxlO2krKylyW2ldPWFyZ3VtZW50c1tpXTt2YXIgbyx1PW4uYXBwbHkodGhpcyxyKSxhPXRoaXMuX19vYl9fLGM9YS52bTtzd2l0Y2goXCJwdXNoXCIhPT10JiZjLiRkaXJ0eS5wdXNoKGEua2V5LGEucGF0aCxhLnZhbHVlKSx0KXtjYXNlXCJwdXNoXCI6Yy4kZGlydHkucHVzaChhLmtleSxcIlwiLmNvbmNhdChhLnBhdGgsXCJbXCIpLmNvbmNhdCh1LTEsXCJdXCIpLHJbMF0pO2JyZWFrO2Nhc2VcInVuc2hpZnRcIjpvPWEudmFsdWU7YnJlYWs7Y2FzZVwic3BsaWNlXCI6bz1yLnNsaWNlKDIpfXJldHVybiBvJiZhLm9ic2VydmVBcnJheShhLmtleSxvKSxhLmRlcC5ub3RpZnkoKSx1fSl9KX0sZnVuY3Rpb24odCxuLGUpe1widXNlIHN0cmljdFwiO2UuZChuLFwiYVwiLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTt2YXIgcj1lKDIwOSksaT1lLm4ociksbz1mdW5jdGlvbih0KXt2YXIgbj10Lnd4LGU9KHQuaXNTd2FuLHQuaXNNeSk7cmV0dXJue2dldFN0b3JhZ2VTeW5jOmZ1bmN0aW9uKHQpe2lmKGUpcmV0dXJuIG4uZ2V0U3RvcmFnZVN5bmMoe2tleTp0fSkuZGF0YTt0cnl7cmV0dXJuIG4uZ2V0U3RvcmFnZVN5bmModCl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxzZXRTdG9yYWdlU3luYzpmdW5jdGlvbih0LHIpe3JldHVybiBlP24uc2V0U3RvcmFnZVN5bmMoe2tleTp0LGRhdGE6cn0pOm4uc2V0U3RvcmFnZVN5bmModCxyKX0sc2hvd01vZGFsOmZ1bmN0aW9uKHQpe2U/bi5hbGVydChpKCkoe30sdCx7dGl0bGU6dC50aXRsZSxjb250ZW50OnQuY29udGVudH0pKTpuLnNob3dNb2RhbChpKCkoe30sdCkpfSxzaG93TG9hZGluZzpmdW5jdGlvbih0KXtlP24uc2hvd0xvYWRpbmcoaSgpKHt9LHQse2NvbnRlbnQ6dC50aXRsZX0pKTpuLnNob3dMb2FkaW5nKGkoKSh7fSx0KSl9LGhpZGVMb2FkaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIG4uaGlkZUxvYWRpbmcuYXBwbHkobixhcmd1bWVudHMpfX19fV0pOyIsIm1vZHVsZS5leHBvcnRzID0gc2VsZi5BRkFwcFg7Il0sInNvdXJjZVJvb3QiOiIifQ==
This file has been truncated, but you can view the full file.
(function (exports, require, module, __filename, __dirname, process, global, Buffer) { return function (exports, require, module, __filename, __dirname) { /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __we
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment