CINXE.COM

Loading...

<!DOCTYPE html> <!-- Build: 1.1.298.0 --> <!-- StateVersion: 2.1.1 --> <!-- DeploymentMode: Production --> <!-- CorrelationId: fa17cfd5-ab9b-4da5-9bf8-9795734e4793 --> <!-- DataCenter: BL2 --> <!-- Slice: 001-000 --> <html lang="en"><head><link rel="icon" href="data:;base64,iVBORw0KGgo="><script data-container="true" nonce="KKzWz9U7NgjdEUvRU1AFbA==">var CP = {"list":[]}; var SA_FIELDS = {"AttributeFields":[{"UX_INPUT_TYPE":"TextBox","USER_INPUT_TYPE":"TextBox","IS_TEXT":true,"IS_EMAIL":false,"IS_PASSWORD":false,"IS_DATE":false,"IS_RADIO":false,"IS_DROP":false,"IS_TEXT_IN_PARAGRAPH":false,"IS_CHECK_MULTI":false,"IS_LINK":false,"VERIFY":false,"DN":"Email Address","ID":"email_withoutPattern","U_HELP":"Email address that can be used to contact you.","DAY_PRE":"0","MONTH_PRE":"0","YEAR_PRE":"0","PAT":"^(?!.{101})([a-zA-Z0-9.!#$%&amp;&#39;^_`{}~-]+@[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]+)*)$","PAT_DESC":"Please enter a valid email address.","IS_REQ":true,"IS_RDO":false,"OPTIONS":[]}]}; var CONTENT = {"remember_me":"Keep me signed in","invalid_generic":"Please enter a valid {0}","createaccount_one_link":"Sign up now","forgotpassword_link":"Forgot your password?","createaccount_three_links":"Sign up with {0}, {1}, or {2}","requiredField_generic":"Please enter your {0}","local_intro_generic":"Sign in with your existing account","unknown_error":"We are having trouble signing you in. Please try again later.","requiredField_password":"Please enter your password","divider_title":"OR","createaccount_intro":"Don&#39;t have an account?","social_intro":"Sign in with your social account","button_signin":"Continue","heading":"Sign in","createaccount_two_links":"Sign up with {0} or {1}"}; var SETTINGS = {"remoteResource":"https://uxpatterns.cfainstitute.org/Static/CIAM/unified.html?v=2","retryLimit":3,"trimSpacesInPassword":true,"api":"CombinedSigninAndSignup","csrf":"cEMxdmszNEdSdHRPMGN0NWVIN3A0MnlRM3IweEVMUEdsZjVCSWcya0tGNis1NFFqa3pOTm9CTXd1S2YzWnI5MGN0TWNaQlgySGVwbWkwZ0lNMGIxaHc9PTsyMDI0LTExLTIzVDEwOjQxOjMzLjQwNjA2NzlaOytud3d1eE5yZ01FbHNwSnNEcmpDcGc9PTt7Ik9yY2hlc3RyYXRpb25TdGVwIjoyfQ==","transId":"StateProperties=eyJUSUQiOiJmYTE3Y2ZkNS1hYjliLTRkYTUtOWJmOC05Nzk1NzM0ZTQ3OTMifQ","pageViewId":"bf0f6a4d-a8cd-43fd-abf3-b79715d6f958","suppressElementCss":false,"isPageViewIdSentWithHeader":false,"allowAutoFocusOnPasswordField":true,"pageMode":1,"config":{"showSignupLink":"True","sendHintOnSignup":"False","includePasswordRequirements":"true","enableRememberMe":"false","showHeading":"true","showCancelButton":"false","announceVerCompleteMsg":"True"},"hosts":{"tenant":"/azprdb2c1.onmicrosoft.com/B2C_1A_CustomerNoPid_CFA_signup_signin_B2CLogin","policy":"B2C_1A_CustomerNoPid_CFA_signup_signin_B2CLogin","static":"https://azprdb2c1.b2clogin.com/static/"},"locale":{"lang":"en"},"tenantBranding":{"Locale":"0","bannerLogoUrl":"https://aadcdn.msftauthimages.net/dbd5a2dd-ppsnsue4ptovh2hod7g4ag5bonwo3bpt88frf8id-hq/logintenantbranding/0/bannerlogo?ts=637630813618492096","backgroundColor":"#002f6c"},"xhrSettings":{"retryEnabled":true,"retryMaxAttempts":3,"retryDelay":200,"retryExponent":2,"retryOn":["error","timeout"]}}; </script><script nonce="KKzWz9U7NgjdEUvRU1AFbA==">window.staticHost="https://azprdb2c1.b2clogin.com/static";window.targetSlice="001-000";window.targetDc="BL2";window.initializationTimeout=30000;window.diagsAlways=true;window.maxTrace=1000</script><script id="element" data-script="element" nonce="KKzWz9U7NgjdEUvRU1AFbA==">/* inject:qrcodejs.qrcode.js */ /* endinject */ /* inject:jquery-3.4.1.min.js */ /*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ !function (e, t) { "use strict"; "object" == typeof module && "object" == typeof module.exports ? module.exports = e.document ? t(e, !0) : function (e) { if (!e.document) throw new Error("jQuery requires a window with a document"); return t(e) } : t(e) }("undefined" != typeof window ? window : this, function (C, e) { "use strict"; var t = [], E = C.document, r = Object.getPrototypeOf, s = t.slice, g = t.concat, u = t.push, i = t.indexOf, n = {}, o = n.toString, v = n.hasOwnProperty, a = v.toString, l = a.call(Object), y = {}, m = function (e) { return "function" == typeof e && "number" != typeof e.nodeType }, x = function (e) { return null != e && e === e.window }, c = { type: !0, src: !0, nonce: !0, noModule: !0 }; function b(e, t, n) { var r, i, o = (n = n || E).createElement("script"); if (o.text = e, t) for (r in c) (i = t[r] || t.getAttribute && t.getAttribute(r)) && o.setAttribute(r, i); n.head.appendChild(o).parentNode.removeChild(o) } function w(e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? n[o.call(e)] || "object" : typeof e } var f = "3.4.1", k = function (e, t) { return new k.fn.init(e, t) }, p = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; function d(e) { var t = !!e && "length" in e && e.length, n = w(e); return !m(e) && !x(e) && ("array" === n || 0 === t || "number" == typeof t && 0 < t && t - 1 in e) } k.fn = k.prototype = { jquery: f, constructor: k, length: 0, toArray: function () { return s.call(this) }, get: function (e) { return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e] }, pushStack: function (e) { var t = k.merge(this.constructor(), e); return t.prevObject = this, t }, each: function (e) { return k.each(this, e) }, map: function (n) { return this.pushStack(k.map(this, function (e, t) { return n.call(e, t, e) })) }, slice: function () { return this.pushStack(s.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (e) { var t = this.length, n = +e + (e < 0 ? t : 0); return this.pushStack(0 <= n && n < t ? [this[n]] : []) }, end: function () { return this.prevObject || this.constructor() }, push: u, sort: t.sort, splice: t.splice }, k.extend = k.fn.extend = function () { var e, t, n, r, i, o, a = arguments[0] || {}, s = 1, u = arguments.length, l = !1; for ("boolean" == typeof a && (l = a, a = arguments[s] || {}, s++), "object" == typeof a || m(a) || (a = {}), s === u && (a = this, s--); s < u; s++)if (null != (e = arguments[s])) for (t in e) r = e[t], "__proto__" !== t && a !== r && (l && r && (k.isPlainObject(r) || (i = Array.isArray(r))) ? (n = a[t], o = i && !Array.isArray(n) ? [] : i || k.isPlainObject(n) ? n : {}, i = !1, a[t] = k.extend(l, o, r)) : void 0 !== r && (a[t] = r)); return a }, k.extend({ expando: "jQuery" + (f + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (e) { throw new Error(e) }, noop: function () { }, isPlainObject: function (e) { var t, n; return !(!e || "[object Object]" !== o.call(e)) && (!(t = r(e)) || "function" == typeof (n = v.call(t, "constructor") && t.constructor) && a.call(n) === l) }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, globalEval: function (e, t) { b(e, { nonce: t && t.nonce }) }, each: function (e, t) { var n, r = 0; if (d(e)) { for (n = e.length; r < n; r++)if (!1 === t.call(e[r], r, e[r])) break } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break; return e }, trim: function (e) { return null == e ? "" : (e + "").replace(p, "") }, makeArray: function (e, t) { var n = t || []; return null != e && (d(Object(e)) ? k.merge(n, "string" == typeof e ? [e] : e) : u.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : i.call(t, e, n) }, merge: function (e, t) { for (var n = +t.length, r = 0, i = e.length; r < n; r++)e[i++] = t[r]; return e.length = i, e }, grep: function (e, t, n) { for (var r = [], i = 0, o = e.length, a = !n; i < o; i++)!t(e[i], i) !== a && r.push(e[i]); return r }, map: function (e, t, n) { var r, i, o = 0, a = []; if (d(e)) for (r = e.length; o < r; o++)null != (i = t(e[o], o, n)) && a.push(i); else for (o in e) null != (i = t(e[o], o, n)) && a.push(i); return g.apply([], a) }, guid: 1, support: y }), "function" == typeof Symbol && (k.fn[Symbol.iterator] = t[Symbol.iterator]), k.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (e, t) { n["[object " + t + "]"] = t.toLowerCase() }); var h = function (n) { var e, d, b, o, i, h, f, g, w, u, l, T, C, a, E, v, s, c, y, k = "sizzle" + 1 * new Date, m = n.document, S = 0, r = 0, p = ue(), x = ue(), N = ue(), A = ue(), D = function (e, t) { return e === t && (l = !0), 0 }, j = {}.hasOwnProperty, t = [], q = t.pop, L = t.push, H = t.push, O = t.slice, P = function (e, t) { for (var n = 0, r = e.length; n < r; n++)if (e[n] === t) return n; return -1 }, R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", M = "[\\x20\\t\\r\\n\\f]", I = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", W = "\\[" + M + "*(" + I + ")(?:" + M + "*([*^$|!~]?=)" + M + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + I + "))|)" + M + "*\\]", $ = ":(" + I + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + W + ")*)|.*)\\)|)", F = new RegExp(M + "+", "g"), B = new RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), _ = new RegExp("^" + M + "*," + M + "*"), z = new RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), U = new RegExp(M + "|>"), X = new RegExp($), V = new RegExp("^" + I + "$"), G = { ID: new RegExp("^#(" + I + ")"), CLASS: new RegExp("^\\.(" + I + ")"), TAG: new RegExp("^(" + I + "|[*])"), ATTR: new RegExp("^" + W), PSEUDO: new RegExp("^" + $), CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"), bool: new RegExp("^(?:" + R + ")$", "i"), needsContext: new RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i") }, Y = /HTML$/i, Q = /^(?:input|select|textarea|button)$/i, J = /^h\d$/i, K = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ee = /[+~]/, te = new RegExp("\\\\([\\da-f]{1,6}" + M + "?|(" + M + ")|.)", "ig"), ne = function (e, t, n) { var r = "0x" + t - 65536; return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320) }, re = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, ie = function (e, t) { return t ? "\0" === e ? "\ufffd" : e.slice(0, -1) + "\\" + e.charCodeAt(e.length - 1).toString(16) + " " : "\\" + e }, oe = function () { T() }, ae = be(function (e) { return !0 === e.disabled && "fieldset" === e.nodeName.toLowerCase() }, { dir: "parentNode", next: "legend" }); try { H.apply(t = O.call(m.childNodes), m.childNodes), t[m.childNodes.length].nodeType } catch (e) { H = { apply: t.length ? function (e, t) { L.apply(e, O.call(t)) } : function (e, t) { var n = e.length, r = 0; while (e[n++] = t[r++]); e.length = n - 1 } } } function se(t, e, n, r) { var i, o, a, s, u, l, c, f = e && e.ownerDocument, p = e ? e.nodeType : 9; if (n = n || [], "string" != typeof t || !t || 1 !== p && 9 !== p && 11 !== p) return n; if (!r && ((e ? e.ownerDocument || e : m) !== C && T(e), e = e || C, E)) { if (11 !== p && (u = Z.exec(t))) if (i = u[1]) { if (9 === p) { if (!(a = e.getElementById(i))) return n; if (a.id === i) return n.push(a), n } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n } else { if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n; if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n } if (d.qsa && !A[t + " "] && (!v || !v.test(t)) && (1 !== p || "object" !== e.nodeName.toLowerCase())) { if (c = t, f = e, 1 === p && U.test(t)) { (s = e.getAttribute("id")) ? s = s.replace(re, ie) : e.setAttribute("id", s = k), o = (l = h(t)).length; while (o--) l[o] = "#" + s + " " + xe(l[o]); c = l.join(","), f = ee.test(t) && ye(e.parentNode) || e } try { return H.apply(n, f.querySelectorAll(c)), n } catch (e) { A(t, !0) } finally { s === k && e.removeAttribute("id") } } } return g(t.replace(B, "$1"), e, n, r) } function ue() { var r = []; return function e(t, n) { return r.push(t + " ") > b.cacheLength && delete e[r.shift()], e[t + " "] = n } } function le(e) { return e[k] = !0, e } function ce(e) { var t = C.createElement("fieldset"); try { return !!e(t) } catch (e) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function fe(e, t) { var n = e.split("|"), r = n.length; while (r--) b.attrHandle[n[r]] = t } function pe(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex; if (r) return r; if (n) while (n = n.nextSibling) if (n === t) return -1; return e ? 1 : -1 } function de(t) { return function (e) { return "input" === e.nodeName.toLowerCase() && e.type === t } } function he(n) { return function (e) { var t = e.nodeName.toLowerCase(); return ("input" === t || "button" === t) && e.type === n } } function ge(t) { return function (e) { return "form" in e ? e.parentNode && !1 === e.disabled ? "label" in e ? "label" in e.parentNode ? e.parentNode.disabled === t : e.disabled === t : e.isDisabled === t || e.isDisabled !== !t && ae(e) === t : e.disabled === t : "label" in e && e.disabled === t } } function ve(a) { return le(function (o) { return o = +o, le(function (e, t) { var n, r = a([], e.length, o), i = r.length; while (i--) e[n = r[i]] && (e[n] = !(t[n] = e[n])) }) }) } function ye(e) { return e && "undefined" != typeof e.getElementsByTagName && e } for (e in d = se.support = {}, i = se.isXML = function (e) { var t = e.namespaceURI, n = (e.ownerDocument || e).documentElement; return !Y.test(t || n && n.nodeName || "HTML") }, T = se.setDocument = function (e) { var t, n, r = e ? e.ownerDocument || e : m; return r !== C && 9 === r.nodeType && r.documentElement && (a = (C = r).documentElement, E = !i(C), m !== C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener("unload", oe, !1) : n.attachEvent && n.attachEvent("onunload", oe)), d.attributes = ce(function (e) { return e.className = "i", !e.getAttribute("className") }), d.getElementsByTagName = ce(function (e) { return e.appendChild(C.createComment("")), !e.getElementsByTagName("*").length }), d.getElementsByClassName = K.test(C.getElementsByClassName), d.getById = ce(function (e) { return a.appendChild(e).id = k, !C.getElementsByName || !C.getElementsByName(k).length }), d.getById ? (b.filter.ID = function (e) { var t = e.replace(te, ne); return function (e) { return e.getAttribute("id") === t } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && E) { var n = t.getElementById(e); return n ? [n] : [] } }) : (b.filter.ID = function (e) { var n = e.replace(te, ne); return function (e) { var t = "undefined" != typeof e.getAttributeNode && e.getAttributeNode("id"); return t && t.value === n } }, b.find.ID = function (e, t) { if ("undefined" != typeof t.getElementById && E) { var n, r, i, o = t.getElementById(e); if (o) { if ((n = o.getAttributeNode("id")) && n.value === e) return [o]; i = t.getElementsByName(e), r = 0; while (o = i[r++]) if ((n = o.getAttributeNode("id")) && n.value === e) return [o] } return [] } }), b.find.TAG = d.getElementsByTagName ? function (e, t) { return "undefined" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0 } : function (e, t) { var n, r = [], i = 0, o = t.getElementsByTagName(e); if ("*" === e) { while (n = o[i++]) 1 === n.nodeType && r.push(n); return r } return o }, b.find.CLASS = d.getElementsByClassName && function (e, t) { if ("undefined" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e) }, s = [], v = [], (d.qsa = K.test(C.querySelectorAll)) && (ce(function (e) { a.appendChild(e).innerHTML = "<a id='" + k + "'></a><select id='" + k + "-\r\\' msallowcapture=''><option selected=''></option></select>", e.querySelectorAll("[msallowcapture^='']").length && v.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll("[selected]").length || v.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll("[id~=" + k + "-]").length || v.push("~="), e.querySelectorAll(":checked").length || v.push(":checked"), e.querySelectorAll("a#" + k + "+*").length || v.push(".#.+[+~]") }), ce(function (e) { e.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>"; var t = C.createElement("input"); t.setAttribute("type", "hidden"), e.appendChild(t).setAttribute("name", "D"), e.querySelectorAll("[name=d]").length && v.push("name" + M + "*[*^$|!~]?="), 2 !== e.querySelectorAll(":enabled").length && v.push(":enabled", ":disabled"), a.appendChild(e).disabled = !0, 2 !== e.querySelectorAll(":disabled").length && v.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), v.push(",.*:") })), (d.matchesSelector = K.test(c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector)) && ce(function (e) { d.disconnectedMatch = c.call(e, "*"), c.call(e, "[s!='']:x"), s.push("!=", $) }), v = v.length && new RegExp(v.join("|")), s = s.length && new RegExp(s.join("|")), t = K.test(a.compareDocumentPosition), y = t || K.test(a.contains) ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) } : function (e, t) { if (t) while (t = t.parentNode) if (t === e) return !0; return !1 }, D = t ? function (e, t) { if (e === t) return l = !0, 0; var n = !e.compareDocumentPosition - !t.compareDocumentPosition; return n || (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || !d.sortDetached && t.compareDocumentPosition(e) === n ? e === C || e.ownerDocument === m && y(m, e) ? -1 : t === C || t.ownerDocument === m && y(m, t) ? 1 : u ? P(u, e) - P(u, t) : 0 : 4 & n ? -1 : 1) } : function (e, t) { if (e === t) return l = !0, 0; var n, r = 0, i = e.parentNode, o = t.parentNode, a = [e], s = [t]; if (!i || !o) return e === C ? -1 : t === C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0; if (i === o) return pe(e, t); n = e; while (n = n.parentNode) a.unshift(n); n = t; while (n = n.parentNode) s.unshift(n); while (a[r] === s[r]) r++; return r ? pe(a[r], s[r]) : a[r] === m ? -1 : s[r] === m ? 1 : 0 }), C }, se.matches = function (e, t) { return se(e, null, null, t) }, se.matchesSelector = function (e, t) { if ((e.ownerDocument || e) !== C && T(e), d.matchesSelector && E && !A[t + " "] && (!s || !s.test(t)) && (!v || !v.test(t))) try { var n = c.call(e, t); if (n || d.disconnectedMatch || e.document && 11 !== e.document.nodeType) return n } catch (e) { A(t, !0) } return 0 < se(t, C, null, [e]).length }, se.contains = function (e, t) { return (e.ownerDocument || e) !== C && T(e), y(e, t) }, se.attr = function (e, t) { (e.ownerDocument || e) !== C && T(e); var n = b.attrHandle[t.toLowerCase()], r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0; return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }, se.escape = function (e) { return (e + "").replace(re, ie) }, se.error = function (e) { throw new Error("Syntax error, unrecognized expression: " + e) }, se.uniqueSort = function (e) { var t, n = [], r = 0, i = 0; if (l = !d.detectDuplicates, u = !d.sortStable && e.slice(0), e.sort(D), l) { while (t = e[i++]) t === e[i] && (r = n.push(i)); while (r--) e.splice(n[r], 1) } return u = null, e }, o = se.getText = function (e) { var t, n = "", r = 0, i = e.nodeType; if (i) { if (1 === i || 9 === i || 11 === i) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling)n += o(e) } else if (3 === i || 4 === i) return e.nodeValue } else while (t = e[r++]) n += o(t); return n }, (b = se.selectors = { cacheLength: 50, createPseudo: le, match: G, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(te, ne), e[3] = (e[3] || e[4] || e[5] || "").replace(te, ne), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function (e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && se.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[6] && e[2]; return G.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[4] || e[5] || "" : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function (e) { var t = e.replace(te, ne).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function (e) { var t = p[e + " "]; return t || (t = new RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && p(e, function (e) { return t.test("string" == typeof e.className && e.className || "undefined" != typeof e.getAttribute && e.getAttribute("class") || "") }) }, ATTR: function (n, r, i) { return function (e) { var t = se.attr(e, n); return null == t ? "!=" === r : !r || (t += "", "=" === r ? t === i : "!=" === r ? t !== i : "^=" === r ? i && 0 === t.indexOf(i) : "*=" === r ? i && -1 < t.indexOf(i) : "$=" === r ? i && t.slice(-i.length) === i : "~=" === r ? -1 < (" " + t.replace(F, " ") + " ").indexOf(i) : "|=" === r && (t === i || t.slice(0, i.length + 1) === i + "-")) } }, CHILD: function (h, e, t, g, v) { var y = "nth" !== h.slice(0, 3), m = "last" !== h.slice(-4), x = "of-type" === e; return 1 === g && 0 === v ? function (e) { return !!e.parentNode } : function (e, t, n) { var r, i, o, a, s, u, l = y !== m ? "nextSibling" : "previousSibling", c = e.parentNode, f = x && e.nodeName.toLowerCase(), p = !n && !x, d = !1; if (c) { if (y) { while (l) { a = e; while (a = a[l]) if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1; u = l = "only" === h && !u && "nextSibling" } return !0 } if (u = [m ? c.firstChild : c.lastChild], m && p) { d = (s = (r = (i = (o = (a = c)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]) && r[2], a = s && c.childNodes[s]; while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if (1 === a.nodeType && ++d && a === e) { i[h] = [S, s, d]; break } } else if (p && (d = s = (r = (i = (o = (a = e)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]), !1 === d) while (a = ++s && a && a[l] || (d = s = 0) || u.pop()) if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [S, d]), a === e)) break; return (d -= v) === g || d % g == 0 && 0 <= d / g } } }, PSEUDO: function (e, o) { var t, a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error("unsupported pseudo: " + e); return a[k] ? a(o) : 1 < a.length ? (t = [e, e, "", o], b.setFilters.hasOwnProperty(e.toLowerCase()) ? le(function (e, t) { var n, r = a(e, o), i = r.length; while (i--) e[n = P(e, r[i])] = !(t[n] = r[i]) }) : function (e) { return a(e, 0, t) }) : a } }, pseudos: { not: le(function (e) { var r = [], i = [], s = f(e.replace(B, "$1")); return s[k] ? le(function (e, t, n, r) { var i, o = s(e, null, r, []), a = e.length; while (a--) (i = o[a]) && (e[a] = !(t[a] = i)) }) : function (e, t, n) { return r[0] = e, s(r, null, n, i), r[0] = null, !i.pop() } }), has: le(function (t) { return function (e) { return 0 < se(t, e).length } }), contains: le(function (t) { return t = t.replace(te, ne), function (e) { return -1 < (e.textContent || o(e)).indexOf(t) } }), lang: le(function (n) { return V.test(n || "") || se.error("unsupported lang: " + n), n = n.replace(te, ne).toLowerCase(), function (e) { var t; do { if (t = E ? e.lang : e.getAttribute("xml:lang") || e.getAttribute("lang")) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + "-") } while ((e = e.parentNode) && 1 === e.nodeType); return !1 } }), target: function (e) { var t = n.location && n.location.hash; return t && t.slice(1) === e.id }, root: function (e) { return e === a }, focus: function (e) { return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: ge(!1), disabled: ge(!0), checked: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling)if (e.nodeType < 6) return !1; return !0 }, parent: function (e) { return !b.pseudos.empty(e) }, header: function (e) { return J.test(e.nodeName) }, input: function (e) { return Q.test(e.nodeName) }, button: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || "text" === t.toLowerCase()) }, first: ve(function () { return [0] }), last: ve(function (e, t) { return [t - 1] }), eq: ve(function (e, t, n) { return [n < 0 ? n + t : n] }), even: ve(function (e, t) { for (var n = 0; n < t; n += 2)e.push(n); return e }), odd: ve(function (e, t) { for (var n = 1; n < t; n += 2)e.push(n); return e }), lt: ve(function (e, t, n) { for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r;)e.push(r); return e }), gt: ve(function (e, t, n) { for (var r = n < 0 ? n + t : n; ++r < t;)e.push(r); return e }) } }).pseudos.nth = b.pseudos.eq, { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) b.pseudos[e] = de(e); for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e); function me() { } function xe(e) { for (var t = 0, n = e.length, r = ""; t < n; t++)r += e[t].value; return r } function be(s, e, t) { var u = e.dir, l = e.next, c = l || u, f = t && "parentNode" === c, p = r++; return e.first ? function (e, t, n) { while (e = e[u]) if (1 === e.nodeType || f) return s(e, t, n); return !1 } : function (e, t, n) { var r, i, o, a = [S, p]; if (n) { while (e = e[u]) if ((1 === e.nodeType || f) && s(e, t, n)) return !0 } else while (e = e[u]) if (1 === e.nodeType || f) if (i = (o = e[k] || (e[k] = {}))[e.uniqueID] || (o[e.uniqueID] = {}), l && l === e.nodeName.toLowerCase()) e = e[u] || e; else { if ((r = i[c]) && r[0] === S && r[1] === p) return a[2] = r[2]; if ((i[c] = a)[2] = s(e, t, n)) return !0 } return !1 } } function we(i) { return 1 < i.length ? function (e, t, n) { var r = i.length; while (r--) if (!i[r](e, t, n)) return !1; return !0 } : i[0] } function Te(e, t, n, r, i) { for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)(o = e[s]) && (n && !n(o, r, i) || (a.push(o), l && t.push(s))); return a } function Ce(d, h, g, v, y, e) { return v && !v[k] && (v = Ce(v)), y && !y[k] && (y = Ce(y, e)), le(function (e, t, n, r) { var i, o, a, s = [], u = [], l = t.length, c = e || function (e, t, n) { for (var r = 0, i = t.length; r < i; r++)se(e, t[r], n); return n }(h || "*", n.nodeType ? [n] : n, []), f = !d || !e && h ? c : Te(c, s, d, n, r), p = g ? y || (e ? d : l || v) ? [] : t : f; if (g && g(f, p, n, r), v) { i = Te(p, u), v(i, [], n, r), o = i.length; while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a)) } if (e) { if (y || d) { if (y) { i = [], o = p.length; while (o--) (a = p[o]) && i.push(f[o] = a); y(null, p = [], i, r) } o = p.length; while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a)) } } else p = Te(p === t ? p.splice(l, p.length) : p), y ? y(null, t, p, r) : H.apply(t, p) }) } function Ee(e) { for (var i, t, n, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, u = be(function (e) { return e === i }, a, !0), l = be(function (e) { return -1 < P(i, e) }, a, !0), c = [function (e, t, n) { var r = !o && (n || t !== w) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n)); return i = null, r }]; s < r; s++)if (t = b.relative[e[s].type]) c = [be(we(c), t)]; else { if ((t = b.filter[e[s].type].apply(null, e[s].matches))[k]) { for (n = ++s; n < r; n++)if (b.relative[e[n].type]) break; return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({ value: " " === e[s - 2].type ? "*" : "" })).replace(B, "$1"), t, s < n && Ee(e.slice(s, n)), n < r && Ee(e = e.slice(n)), n < r && xe(e)) } c.push(t) } return we(c) } return me.prototype = b.filters = b.pseudos, b.setFilters = new me, h = se.tokenize = function (e, t) { var n, r, i, o, a, s, u, l = x[e + " "]; if (l) return t ? 0 : l.slice(0); a = e, s = [], u = b.preFilter; while (a) { for (o in n && !(r = _.exec(a)) || (r && (a = a.slice(r[0].length) || a), s.push(i = [])), n = !1, (r = z.exec(a)) && (n = r.shift(), i.push({ value: n, type: r[0].replace(B, " ") }), a = a.slice(n.length)), b.filter) !(r = G[o].exec(a)) || u[o] && !(r = u[o](r)) || (n = r.shift(), i.push({ value: n, type: o, matches: r }), a = a.slice(n.length)); if (!n) break } return t ? a.length : a ? se.error(e) : x(e, s).slice(0) }, f = se.compile = function (e, t) { var n, v, y, m, x, r, i = [], o = [], a = N[e + " "]; if (!a) { t || (t = h(e)), n = t.length; while (n--) (a = Ee(t[n]))[k] ? i.push(a) : o.push(a); (a = N(e, (v = o, m = 0 < (y = i).length, x = 0 < v.length, r = function (e, t, n, r, i) { var o, a, s, u = 0, l = "0", c = e && [], f = [], p = w, d = e || x && b.find.TAG("*", i), h = S += null == p ? 1 : Math.random() || .1, g = d.length; for (i && (w = t === C || t || i); l !== g && null != (o = d[l]); l++) { if (x && o) { a = 0, t || o.ownerDocument === C || (T(o), n = !E); while (s = v[a++]) if (s(o, t || C, n)) { r.push(o); break } i && (S = h) } m && ((o = !s && o) && u-- , e && c.push(o)) } if (u += l, m && l !== u) { a = 0; while (s = y[a++]) s(c, f, t, n); if (e) { if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r)); f = Te(f) } H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r) } return i && (S = h, w = p), c }, m ? le(r) : r))).selector = e } return a }, g = se.select = function (e, t, n, r) { var i, o, a, s, u, l = "function" == typeof e && e, c = !r && h(e = l.selector || e); if (n = n || [], 1 === c.length) { if (2 < (o = c[0] = c[0].slice(0)).length && "ID" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) { if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n; l && (t = t.parentNode), e = e.slice(o.shift().value.length) } i = G.needsContext.test(e) ? 0 : o.length; while (i--) { if (a = o[i], b.relative[s = a.type]) break; if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), ee.test(o[0].type) && ye(t.parentNode) || t))) { if (o.splice(i, 1), !(e = r.length && xe(o))) return H.apply(n, r), n; break } } } return (l || f(e, c))(r, t, !E, n, !t || ee.test(e) && ye(t.parentNode) || t), n }, d.sortStable = k.split("").sort(D).join("") === k, d.detectDuplicates = !!l, T(), d.sortDetached = ce(function (e) { return 1 & e.compareDocumentPosition(C.createElement("fieldset")) }), ce(function (e) { return e.innerHTML = "<a href='#'></a>", "#" === e.firstChild.getAttribute("href") }) || fe("type|href|height|width", function (e, t, n) { if (!n) return e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), d.attributes && ce(function (e) { return e.innerHTML = "<input/>", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || fe("value", function (e, t, n) { if (!n && "input" === e.nodeName.toLowerCase()) return e.defaultValue }), ce(function (e) { return null == e.getAttribute("disabled") }) || fe(R, function (e, t, n) { var r; if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null }), se }(C); k.find = h, k.expr = h.selectors, k.expr[":"] = k.expr.pseudos, k.uniqueSort = k.unique = h.uniqueSort, k.text = h.getText, k.isXMLDoc = h.isXML, k.contains = h.contains, k.escapeSelector = h.escape; var T = function (e, t, n) { var r = [], i = void 0 !== n; while ((e = e[t]) && 9 !== e.nodeType) if (1 === e.nodeType) { if (i && k(e).is(n)) break; r.push(e) } return r }, S = function (e, t) { for (var n = []; e; e = e.nextSibling)1 === e.nodeType && e !== t && n.push(e); return n }, N = k.expr.match.needsContext; function A(e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() } var D = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i; function j(e, n, r) { return m(n) ? k.grep(e, function (e, t) { return !!n.call(e, t, e) !== r }) : n.nodeType ? k.grep(e, function (e) { return e === n !== r }) : "string" != typeof n ? k.grep(e, function (e) { return -1 < i.call(n, e) !== r }) : k.filter(n, e, r) } k.filter = function (e, t, n) { var r = t[0]; return n && (e = ":not(" + e + ")"), 1 === t.length && 1 === r.nodeType ? k.find.matchesSelector(r, e) ? [r] : [] : k.find.matches(e, k.grep(t, function (e) { return 1 === e.nodeType })) }, k.fn.extend({ find: function (e) { var t, n, r = this.length, i = this; if ("string" != typeof e) return this.pushStack(k(e).filter(function () { for (t = 0; t < r; t++)if (k.contains(i[t], this)) return !0 })); for (n = this.pushStack([]), t = 0; t < r; t++)k.find(e, i[t], n); return 1 < r ? k.uniqueSort(n) : n }, filter: function (e) { return this.pushStack(j(this, e || [], !1)) }, not: function (e) { return this.pushStack(j(this, e || [], !0)) }, is: function (e) { return !!j(this, "string" == typeof e && N.test(e) ? k(e) : e || [], !1).length } }); var q, L = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/; (k.fn.init = function (e, t, n) { var r, i; if (!e) return this; if (n = n || q, "string" == typeof e) { if (!(r = "<" === e[0] && ">" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : L.exec(e)) || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (t = t instanceof k ? t[0] : t, k.merge(this, k.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), D.test(r[1]) && k.isPlainObject(t)) for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this } return (i = E.getElementById(r[2])) && (this[0] = i, this.length = 1), this } return e.nodeType ? (this[0] = e, this.length = 1, this) : m(e) ? void 0 !== n.ready ? n.ready(e) : e(k) : k.makeArray(e, this) }).prototype = k.fn, q = k(E); var H = /^(?:parents|prev(?:Until|All))/, O = { children: !0, contents: !0, next: !0, prev: !0 }; function P(e, t) { while ((e = e[t]) && 1 !== e.nodeType); return e } k.fn.extend({ has: function (e) { var t = k(e, this), n = t.length; return this.filter(function () { for (var e = 0; e < n; e++)if (k.contains(this, t[e])) return !0 }) }, closest: function (e, t) { var n, r = 0, i = this.length, o = [], a = "string" != typeof e && k(e); if (!N.test(e)) for (; r < i; r++)for (n = this[r]; n && n !== t; n = n.parentNode)if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && k.find.matchesSelector(n, e))) { o.push(n); break } return this.pushStack(1 < o.length ? k.uniqueSort(o) : o) }, index: function (e) { return e ? "string" == typeof e ? i.call(k(e), this[0]) : i.call(this, e.jquery ? e[0] : e) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1 }, add: function (e, t) { return this.pushStack(k.uniqueSort(k.merge(this.get(), k(e, t)))) }, addBack: function (e) { return this.add(null == e ? this.prevObject : this.prevObject.filter(e)) } }), k.each({ parent: function (e) { var t = e.parentNode; return t && 11 !== t.nodeType ? t : null }, parents: function (e) { return T(e, "parentNode") }, parentsUntil: function (e, t, n) { return T(e, "parentNode", n) }, next: function (e) { return P(e, "nextSibling") }, prev: function (e) { return P(e, "previousSibling") }, nextAll: function (e) { return T(e, "nextSibling") }, prevAll: function (e) { return T(e, "previousSibling") }, nextUntil: function (e, t, n) { return T(e, "nextSibling", n) }, prevUntil: function (e, t, n) { return T(e, "previousSibling", n) }, siblings: function (e) { return S((e.parentNode || {}).firstChild, e) }, children: function (e) { return S(e.firstChild) }, contents: function (e) { return "undefined" != typeof e.contentDocument ? e.contentDocument : (A(e, "template") && (e = e.content || e), k.merge([], e.childNodes)) } }, function (r, i) { k.fn[r] = function (e, t) { var n = k.map(this, i, e); return "Until" !== r.slice(-5) && (t = e), t && "string" == typeof t && (n = k.filter(t, n)), 1 < this.length && (O[r] || k.uniqueSort(n), H.test(r) && n.reverse()), this.pushStack(n) } }); var R = /[^\x20\t\r\n\f]+/g; function M(e) { return e } function I(e) { throw e } function W(e, t, n, r) { var i; try { e && m(i = e.promise) ? i.call(e).done(t).fail(n) : e && m(i = e.then) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r)) } catch (e) { n.apply(void 0, [e]) } } k.Callbacks = function (r) { var e, n; r = "string" == typeof r ? (e = r, n = {}, k.each(e.match(R) || [], function (e, t) { n[t] = !0 }), n) : k.extend({}, r); var i, t, o, a, s = [], u = [], l = -1, c = function () { for (a = a || r.once, o = i = !0; u.length; l = -1) { t = u.shift(); while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && (l = s.length, t = !1) } r.memory || (t = !1), i = !1, a && (s = t ? [] : "") }, f = { add: function () { return s && (t && !i && (l = s.length - 1, u.push(t)), function n(e) { k.each(e, function (e, t) { m(t) ? r.unique && f.has(t) || s.push(t) : t && t.length && "string" !== w(t) && n(t) }) }(arguments), t && !i && c()), this }, remove: function () { return k.each(arguments, function (e, t) { var n; while (-1 < (n = k.inArray(t, s, n))) s.splice(n, 1), n <= l && l-- }), this }, has: function (e) { return e ? -1 < k.inArray(e, s) : 0 < s.length }, empty: function () { return s && (s = []), this }, disable: function () { return a = u = [], s = t = "", this }, disabled: function () { return !s }, lock: function () { return a = u = [], t || i || (s = t = ""), this }, locked: function () { return !!a }, fireWith: function (e, t) { return a || (t = [e, (t = t || []).slice ? t.slice() : t], u.push(t), i || c()), this }, fire: function () { return f.fireWith(this, arguments), this }, fired: function () { return !!o } }; return f }, k.extend({ Deferred: function (e) { var o = [["notify", "progress", k.Callbacks("memory"), k.Callbacks("memory"), 2], ["resolve", "done", k.Callbacks("once memory"), k.Callbacks("once memory"), 0, "resolved"], ["reject", "fail", k.Callbacks("once memory"), k.Callbacks("once memory"), 1, "rejected"]], i = "pending", a = { state: function () { return i }, always: function () { return s.done(arguments).fail(arguments), this }, "catch": function (e) { return a.then(null, e) }, pipe: function () { var i = arguments; return k.Deferred(function (r) { k.each(o, function (e, t) { var n = m(i[t[4]]) && i[t[4]]; s[t[1]](function () { var e = n && n.apply(this, arguments); e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + "With"](this, n ? [e] : arguments) }) }), i = null }).promise() }, then: function (t, n, r) { var u = 0; function l(i, o, a, s) { return function () { var n = this, r = arguments, e = function () { var e, t; if (!(i < u)) { if ((e = a.apply(n, r)) === o.promise()) throw new TypeError("Thenable self-resolution"); t = e && ("object" == typeof e || "function" == typeof e) && e.then, m(t) ? s ? t.call(e, l(u, o, M, s), l(u, o, I, s)) : (u++ , t.call(e, l(u, o, M, s), l(u, o, I, s), l(u, o, M, o.notifyWith))) : (a !== M && (n = void 0, r = [e]), (s || o.resolveWith)(n, r)) } }, t = s ? e : function () { try { e() } catch (e) { k.Deferred.exceptionHook && k.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== I && (n = void 0, r = [e]), o.rejectWith(n, r)) } }; i ? t() : (k.Deferred.getStackHook && (t.stackTrace = k.Deferred.getStackHook()), C.setTimeout(t)) } } return k.Deferred(function (e) { o[0][3].add(l(0, e, m(r) ? r : M, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : M)), o[2][3].add(l(0, e, m(n) ? n : I)) }).promise() }, promise: function (e) { return null != e ? k.extend(e, a) : a } }, s = {}; return k.each(o, function (e, t) { var n = t[2], r = t[5]; a[t[1]] = n.add, r && n.add(function () { i = r }, o[3 - e][2].disable, o[3 - e][3].disable, o[0][2].lock, o[0][3].lock), n.add(t[3].fire), s[t[0]] = function () { return s[t[0] + "With"](this === s ? void 0 : this, arguments), this }, s[t[0] + "With"] = n.fireWith }), a.promise(s), e && e.call(s, s), s }, when: function (e) { var n = arguments.length, t = n, r = Array(t), i = s.call(arguments), o = k.Deferred(), a = function (t) { return function (e) { r[t] = this, i[t] = 1 < arguments.length ? s.call(arguments) : e, --n || o.resolveWith(r, i) } }; if (n <= 1 && (W(e, o.done(a(t)).resolve, o.reject, !n), "pending" === o.state() || m(i[t] && i[t].then))) return o.then(); while (t--) W(i[t], a(t), o.reject); return o.promise() } }); var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; k.Deferred.exceptionHook = function (e, t) { C.console && C.console.warn && e && $.test(e.name) && C.console.warn("jQuery.Deferred exception: " + e.message, e.stack, t) }, k.readyException = function (e) { C.setTimeout(function () { throw e }) }; var F = k.Deferred(); function B() { E.removeEventListener("DOMContentLoaded", B), C.removeEventListener("load", B), k.ready() } k.fn.ready = function (e) { return F.then(e)["catch"](function (e) { k.readyException(e) }), this }, k.extend({ isReady: !1, readyWait: 1, ready: function (e) { (!0 === e ? --k.readyWait : k.isReady) || (k.isReady = !0) !== e && 0 < --k.readyWait || F.resolveWith(E, [k]) } }), k.ready.then = F.then, "complete" === E.readyState || "loading" !== E.readyState && !E.documentElement.doScroll ? C.setTimeout(k.ready) : (E.addEventListener("DOMContentLoaded", B), C.addEventListener("load", B)); var _ = function (e, t, n, r, i, o, a) { var s = 0, u = e.length, l = null == n; if ("object" === w(n)) for (s in i = !0, n) _(e, t, s, n[s], !0, o, a); else if (void 0 !== r && (i = !0, m(r) || (a = !0), l && (a ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { return l.call(k(e), n) })), t)) for (; s < u; s++)t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n))); return i ? e : l ? t.call(e) : u ? t(e[0], n) : o }, z = /^-ms-/, U = /-([a-z])/g; function X(e, t) { return t.toUpperCase() } function V(e) { return e.replace(z, "ms-").replace(U, X) } var G = function (e) { return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType }; function Y() { this.expando = k.expando + Y.uid++ } Y.uid = 1, Y.prototype = { cache: function (e) { var t = e[this.expando]; return t || (t = {}, G(e) && (e.nodeType ? e[this.expando] = t : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t }, set: function (e, t, n) { var r, i = this.cache(e); if ("string" == typeof t) i[V(t)] = n; else for (r in t) i[V(r)] = t[r]; return i }, get: function (e, t) { return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)] }, access: function (e, t, n) { return void 0 === t || t && "string" == typeof t && void 0 === n ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t) }, remove: function (e, t) { var n, r = e[this.expando]; if (void 0 !== r) { if (void 0 !== t) { n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in r ? [t] : t.match(R) || []).length; while (n--) delete r[t[n]] } (void 0 === t || k.isEmptyObject(r)) && (e.nodeType ? e[this.expando] = void 0 : delete e[this.expando]) } }, hasData: function (e) { var t = e[this.expando]; return void 0 !== t && !k.isEmptyObject(t) } }; var Q = new Y, J = new Y, K = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, Z = /[A-Z]/g; function ee(e, t, n) { var r, i; if (void 0 === n && 1 === e.nodeType) if (r = "data-" + t.replace(Z, "-$&").toLowerCase(), "string" == typeof (n = e.getAttribute(r))) { try { n = "true" === (i = n) || "false" !== i && ("null" === i ? null : i === +i + "" ? +i : K.test(i) ? JSON.parse(i) : i) } catch (e) { } J.set(e, t, n) } else n = void 0; return n } k.extend({ hasData: function (e) { return J.hasData(e) || Q.hasData(e) }, data: function (e, t, n) { return J.access(e, t, n) }, removeData: function (e, t) { J.remove(e, t) }, _data: function (e, t, n) { return Q.access(e, t, n) }, _removeData: function (e, t) { Q.remove(e, t) } }), k.fn.extend({ data: function (n, e) { var t, r, i, o = this[0], a = o && o.attributes; if (void 0 === n) { if (this.length && (i = J.get(o), 1 === o.nodeType && !Q.get(o, "hasDataAttrs"))) { t = a.length; while (t--) a[t] && 0 === (r = a[t].name).indexOf("data-") && (r = V(r.slice(5)), ee(o, r, i[r])); Q.set(o, "hasDataAttrs", !0) } return i } return "object" == typeof n ? this.each(function () { J.set(this, n) }) : _(this, function (e) { var t; if (o && void 0 === e) return void 0 !== (t = J.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0; this.each(function () { J.set(this, n, e) }) }, null, e, 1 < arguments.length, null, !0) }, removeData: function (e) { return this.each(function () { J.remove(this, e) }) } }), k.extend({ queue: function (e, t, n) { var r; if (e) return t = (t || "fx") + "queue", r = Q.get(e, t), n && (!r || Array.isArray(n) ? r = Q.access(e, t, k.makeArray(n)) : r.push(n)), r || [] }, dequeue: function (e, t) { t = t || "fx"; var n = k.queue(e, t), r = n.length, i = n.shift(), o = k._queueHooks(e, t); "inprogress" === i && (i = n.shift(), r--), i && ("fx" === t && n.unshift("inprogress"), delete o.stop, i.call(e, function () { k.dequeue(e, t) }, o)), !r && o && o.empty.fire() }, _queueHooks: function (e, t) { var n = t + "queueHooks"; return Q.get(e, n) || Q.access(e, n, { empty: k.Callbacks("once memory").add(function () { Q.remove(e, [t + "queue", n]) }) }) } }), k.fn.extend({ queue: function (t, n) { var e = 2; return "string" != typeof t && (n = t, t = "fx", e--), arguments.length < e ? k.queue(this[0], t) : void 0 === n ? this : this.each(function () { var e = k.queue(this, t, n); k._queueHooks(this, t), "fx" === t && "inprogress" !== e[0] && k.dequeue(this, t) }) }, dequeue: function (e) { return this.each(function () { k.dequeue(this, e) }) }, clearQueue: function (e) { return this.queue(e || "fx", []) }, promise: function (e, t) { var n, r = 1, i = k.Deferred(), o = this, a = this.length, s = function () { --r || i.resolveWith(o, [o]) }; "string" != typeof e && (t = e, e = void 0), e = e || "fx"; while (a--) (n = Q.get(o[a], e + "queueHooks")) && n.empty && (r++ , n.empty.add(s)); return s(), i.promise(t) } }); var te = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, ne = new RegExp("^(?:([+-])=|)(" + te + ")([a-z%]*)$", "i"), re = ["Top", "Right", "Bottom", "Left"], ie = E.documentElement, oe = function (e) { return k.contains(e.ownerDocument, e) }, ae = { composed: !0 }; ie.getRootNode && (oe = function (e) { return k.contains(e.ownerDocument, e) || e.getRootNode(ae) === e.ownerDocument }); var se = function (e, t) { return "none" === (e = t || e).style.display || "" === e.style.display && oe(e) && "none" === k.css(e, "display") }, ue = function (e, t, n, r) { var i, o, a = {}; for (o in t) a[o] = e.style[o], e.style[o] = t[o]; for (o in i = n.apply(e, r || []), t) e.style[o] = a[o]; return i }; function le(e, t, n, r) { var i, o, a = 20, s = r ? function () { return r.cur() } : function () { return k.css(e, t, "") }, u = s(), l = n && n[3] || (k.cssNumber[t] ? "" : "px"), c = e.nodeType && (k.cssNumber[t] || "px" !== l && +u) && ne.exec(k.css(e, t)); if (c && c[3] !== l) { u /= 2, l = l || c[3], c = +u || 1; while (a--) k.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || .5)) <= 0 && (a = 0), c /= o; c *= 2, k.style(e, t, c + l), n = n || [] } return n && (c = +c || +u || 0, i = n[1] ? c + (n[1] + 1) * n[2] : +n[2], r && (r.unit = l, r.start = c, r.end = i)), i } var ce = {}; function fe(e, t) { for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)(r = e[c]).style && (n = r.style.display, t ? ("none" === n && (l[c] = Q.get(r, "display") || null, l[c] || (r.style.display = "")), "" === r.style.display && se(r) && (l[c] = (u = a = o = void 0, a = (i = r).ownerDocument, s = i.nodeName, (u = ce[s]) || (o = a.body.appendChild(a.createElement(s)), u = k.css(o, "display"), o.parentNode.removeChild(o), "none" === u && (u = "block"), ce[s] = u)))) : "none" !== n && (l[c] = "none", Q.set(r, "display", n))); for (c = 0; c < f; c++)null != l[c] && (e[c].style.display = l[c]); return e } k.fn.extend({ show: function () { return fe(this, !0) }, hide: function () { return fe(this) }, toggle: function (e) { return "boolean" == typeof e ? e ? this.show() : this.hide() : this.each(function () { se(this) ? k(this).show() : k(this).hide() }) } }); var pe = /^(?:checkbox|radio)$/i, de = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i, he = /^$|^module$|\/(?:java|ecma)script/i, ge = { option: [1, "<select multiple='multiple'>", "</select>"], thead: [1, "<table>", "</table>"], col: [2, "<table><colgroup>", "</colgroup></table>"], tr: [2, "<table><tbody>", "</tbody></table>"], td: [3, "<table><tbody><tr>", "</tr></tbody></table>"], _default: [0, "", ""] }; function ve(e, t) { var n; return n = "undefined" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || "*") : "undefined" != typeof e.querySelectorAll ? e.querySelectorAll(t || "*") : [], void 0 === t || t && A(e, t) ? k.merge([e], n) : n } function ye(e, t) { for (var n = 0, r = e.length; n < r; n++)Q.set(e[n], "globalEval", !t || Q.get(t[n], "globalEval")) } ge.optgroup = ge.option, ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead, ge.th = ge.td; var me, xe, be = /<|&#?\w+;/; function we(e, t, n, r, i) { for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)if ((o = e[d]) || 0 === o) if ("object" === w(o)) k.merge(p, o.nodeType ? [o] : o); else if (be.test(o)) { a = a || f.appendChild(t.createElement("div")), s = (de.exec(o) || ["", ""])[1].toLowerCase(), u = ge[s] || ge._default, a.innerHTML = u[1] + k.htmlPrefilter(o) + u[2], c = u[0]; while (c--) a = a.lastChild; k.merge(p, a.childNodes), (a = f.firstChild).textContent = "" } else p.push(t.createTextNode(o)); f.textContent = "", d = 0; while (o = p[d++]) if (r && -1 < k.inArray(o, r)) i && i.push(o); else if (l = oe(o), a = ve(f.appendChild(o), "script"), l && ye(a), n) { c = 0; while (o = a[c++]) he.test(o.type || "") && n.push(o) } return f } me = E.createDocumentFragment().appendChild(E.createElement("div")), (xe = E.createElement("input")).setAttribute("type", "radio"), xe.setAttribute("checked", "checked"), xe.setAttribute("name", "t"), me.appendChild(xe), y.checkClone = me.cloneNode(!0).cloneNode(!0).lastChild.checked, me.innerHTML = "<textarea>x</textarea>", y.noCloneChecked = !!me.cloneNode(!0).lastChild.defaultValue; var Te = /^key/, Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, Ee = /^([^.]*)(?:\.(.+)|)/; function ke() { return !0 } function Se() { return !1 } function Ne(e, t) { return e === function () { try { return E.activeElement } catch (e) { } }() == ("focus" === t) } function Ae(e, t, n, r, i, o) { var a, s; if ("object" == typeof t) { for (s in "string" != typeof n && (r = r || n, n = void 0), t) Ae(e, s, n, r, t[s], o); return e } if (null == r && null == i ? (i = n, r = n = void 0) : null == i && ("string" == typeof n ? (i = r, r = void 0) : (i = r, r = n, n = void 0)), !1 === i) i = Se; else if (!i) return e; return 1 === o && (a = i, (i = function (e) { return k().off(e), a.apply(this, arguments) }).guid = a.guid || (a.guid = k.guid++)), e.each(function () { k.event.add(this, t, i, r, n) }) } function De(e, i, o) { o ? (Q.set(e, i, !1), k.event.add(e, i, { namespace: !1, handler: function (e) { var t, n, r = Q.get(this, i); if (1 & e.isTrigger && this[i]) { if (r.length) (k.event.special[i] || {}).delegateType && e.stopPropagation(); else if (r = s.call(arguments), Q.set(this, i, r), t = o(this, i), this[i](), r !== (n = Q.get(this, i)) || t ? Q.set(this, i, !1) : n = {}, r !== n) return e.stopImmediatePropagation(), e.preventDefault(), n.value } else r.length && (Q.set(this, i, { value: k.event.trigger(k.extend(r[0], k.Event.prototype), r.slice(1), this) }), e.stopImmediatePropagation()) } })) : void 0 === Q.get(e, i) && k.event.add(e, i, ke) } k.event = { global: {}, add: function (t, e, n, r, i) { var o, a, s, u, l, c, f, p, d, h, g, v = Q.get(t); if (v) { n.handler && (n = (o = n).handler, i = o.selector), i && k.find.matchesSelector(ie, i), n.guid || (n.guid = k.guid++), (u = v.events) || (u = v.events = {}), (a = v.handle) || (a = v.handle = function (e) { return "undefined" != typeof k && k.event.triggered !== e.type ? k.event.dispatch.apply(t, arguments) : void 0 }), l = (e = (e || "").match(R) || [""]).length; while (l--) d = g = (s = Ee.exec(e[l]) || [])[1], h = (s[2] || "").split(".").sort(), d && (f = k.event.special[d] || {}, d = (i ? f.delegateType : f.bindType) || d, f = k.event.special[d] || {}, c = k.extend({ type: d, origType: g, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && k.expr.match.needsContext.test(i), namespace: h.join(".") }, o), (p = u[d]) || ((p = u[d] = []).delegateCount = 0, f.setup && !1 !== f.setup.call(t, r, h, a) || t.addEventListener && t.addEventListener(d, a)), f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)), i ? p.splice(p.delegateCount++, 0, c) : p.push(c), k.event.global[d] = !0) } }, remove: function (e, t, n, r, i) { var o, a, s, u, l, c, f, p, d, h, g, v = Q.hasData(e) && Q.get(e); if (v && (u = v.events)) { l = (t = (t || "").match(R) || [""]).length; while (l--) if (d = g = (s = Ee.exec(t[l]) || [])[1], h = (s[2] || "").split(".").sort(), d) { f = k.event.special[d] || {}, p = u[d = (r ? f.delegateType : f.bindType) || d] || [], s = s[2] && new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)"), a = o = p.length; while (o--) c = p[o], !i && g !== c.origType || n && n.guid !== c.guid || s && !s.test(c.namespace) || r && r !== c.selector && ("**" !== r || !c.selector) || (p.splice(o, 1), c.selector && p.delegateCount-- , f.remove && f.remove.call(e, c)); a && !p.length && (f.teardown && !1 !== f.teardown.call(e, h, v.handle) || k.removeEvent(e, d, v.handle), delete u[d]) } else for (d in u) k.event.remove(e, d + t[l], n, r, !0); k.isEmptyObject(u) && Q.remove(e, "handle events") } }, dispatch: function (e) { var t, n, r, i, o, a, s = k.event.fix(e), u = new Array(arguments.length), l = (Q.get(this, "events") || {})[s.type] || [], c = k.event.special[s.type] || {}; for (u[0] = s, t = 1; t < arguments.length; t++)u[t] = arguments[t]; if (s.delegateTarget = this, !c.preDispatch || !1 !== c.preDispatch.call(this, s)) { a = k.event.handlers.call(this, s, l), t = 0; while ((i = a[t++]) && !s.isPropagationStopped()) { s.currentTarget = i.elem, n = 0; while ((o = i.handlers[n++]) && !s.isImmediatePropagationStopped()) s.rnamespace && !1 !== o.namespace && !s.rnamespace.test(o.namespace) || (s.handleObj = o, s.data = o.data, void 0 !== (r = ((k.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, u)) && !1 === (s.result = r) && (s.preventDefault(), s.stopPropagation())) } return c.postDispatch && c.postDispatch.call(this, s), s.result } }, handlers: function (e, t) { var n, r, i, o, a, s = [], u = t.delegateCount, l = e.target; if (u && l.nodeType && !("click" === e.type && 1 <= e.button)) for (; l !== this; l = l.parentNode || this)if (1 === l.nodeType && ("click" !== e.type || !0 !== l.disabled)) { for (o = [], a = {}, n = 0; n < u; n++)void 0 === a[i = (r = t[n]).selector + " "] && (a[i] = r.needsContext ? -1 < k(i, this).index(l) : k.find(i, this, null, [l]).length), a[i] && o.push(r); o.length && s.push({ elem: l, handlers: o }) } return l = this, u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s }, addProp: function (t, e) { Object.defineProperty(k.Event.prototype, t, { enumerable: !0, configurable: !0, get: m(e) ? function () { if (this.originalEvent) return e(this.originalEvent) } : function () { if (this.originalEvent) return this.originalEvent[t] }, set: function (e) { Object.defineProperty(this, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) } }) }, fix: function (e) { return e[k.expando] ? e : new k.Event(e) }, special: { load: { noBubble: !0 }, click: { setup: function (e) { var t = this || e; return pe.test(t.type) && t.click && A(t, "input") && De(t, "click", ke), !1 }, trigger: function (e) { var t = this || e; return pe.test(t.type) && t.click && A(t, "input") && De(t, "click"), !0 }, _default: function (e) { var t = e.target; return pe.test(t.type) && t.click && A(t, "input") && Q.get(t, "click") || A(t, "a") } }, beforeunload: { postDispatch: function (e) { void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result) } } } }, k.removeEvent = function (e, t, n) { e.removeEventListener && e.removeEventListener(t, n) }, k.Event = function (e, t) { if (!(this instanceof k.Event)) return new k.Event(e, t); e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || void 0 === e.defaultPrevented && !1 === e.returnValue ? ke : Se, this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target, this.currentTarget = e.currentTarget, this.relatedTarget = e.relatedTarget) : this.type = e, t && k.extend(this, t), this.timeStamp = e && e.timeStamp || Date.now(), this[k.expando] = !0 }, k.Event.prototype = { constructor: k.Event, isDefaultPrevented: Se, isPropagationStopped: Se, isImmediatePropagationStopped: Se, isSimulated: !1, preventDefault: function () { var e = this.originalEvent; this.isDefaultPrevented = ke, e && !this.isSimulated && e.preventDefault() }, stopPropagation: function () { var e = this.originalEvent; this.isPropagationStopped = ke, e && !this.isSimulated && e.stopPropagation() }, stopImmediatePropagation: function () { var e = this.originalEvent; this.isImmediatePropagationStopped = ke, e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation() } }, k.each({ altKey: !0, bubbles: !0, cancelable: !0, changedTouches: !0, ctrlKey: !0, detail: !0, eventPhase: !0, metaKey: !0, pageX: !0, pageY: !0, shiftKey: !0, view: !0, "char": !0, code: !0, charCode: !0, key: !0, keyCode: !0, button: !0, buttons: !0, clientX: !0, clientY: !0, offsetX: !0, offsetY: !0, pointerId: !0, pointerType: !0, screenX: !0, screenY: !0, targetTouches: !0, toElement: !0, touches: !0, which: function (e) { var t = e.button; return null == e.which && Te.test(e.type) ? null != e.charCode ? e.charCode : e.keyCode : !e.which && void 0 !== t && Ce.test(e.type) ? 1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0 : e.which } }, k.event.addProp), k.each({ focus: "focusin", blur: "focusout" }, function (e, t) { k.event.special[e] = { setup: function () { return De(this, e, Ne), !1 }, trigger: function () { return De(this, e), !0 }, delegateType: t } }), k.each({ mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function (e, i) { k.event.special[e] = { delegateType: i, bindType: i, handle: function (e) { var t, n = e.relatedTarget, r = e.handleObj; return n && (n === this || k.contains(this, n)) || (e.type = r.origType, t = r.handler.apply(this, arguments), e.type = i), t } } }), k.fn.extend({ on: function (e, t, n, r) { return Ae(this, e, t, n, r) }, one: function (e, t, n, r) { return Ae(this, e, t, n, r, 1) }, off: function (e, t, n) { var r, i; if (e && e.preventDefault && e.handleObj) return r = e.handleObj, k(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler), this; if ("object" == typeof e) { for (i in e) this.off(i, t, e[i]); return this } return !1 !== t && "function" != typeof t || (n = t, t = void 0), !1 === n && (n = Se), this.each(function () { k.event.remove(this, e, n, t) }) } }); var je = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, qe = /<script|<style|<link/i, Le = /checked\s*(?:[^=]|=\s*.checked.)/i, He = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; function Oe(e, t) { return A(e, "table") && A(11 !== t.nodeType ? t : t.firstChild, "tr") && k(e).children("tbody")[0] || e } function Pe(e) { return e.type = (null !== e.getAttribute("type")) + "/" + e.type, e } function Re(e) { return "true/" === (e.type || "").slice(0, 5) ? e.type = e.type.slice(5) : e.removeAttribute("type"), e } function Me(e, t) { var n, r, i, o, a, s, u, l; if (1 === t.nodeType) { if (Q.hasData(e) && (o = Q.access(e), a = Q.set(t, o), l = o.events)) for (i in delete a.handle, a.events = {}, l) for (n = 0, r = l[i].length; n < r; n++)k.event.add(t, i, l[i][n]); J.hasData(e) && (s = J.access(e), u = k.extend({}, s), J.set(t, u)) } } function Ie(n, r, i, o) { r = g.apply([], r); var e, t, a, s, u, l, c = 0, f = n.length, p = f - 1, d = r[0], h = m(d); if (h || 1 < f && "string" == typeof d && !y.checkClone && Le.test(d)) return n.each(function (e) { var t = n.eq(e); h && (r[0] = d.call(this, e, t.html())), Ie(t, r, i, o) }); if (f && (t = (e = we(r, n[0].ownerDocument, !1, n, o)).firstChild, 1 === e.childNodes.length && (e = t), t || o)) { for (s = (a = k.map(ve(e, "script"), Pe)).length; c < f; c++)u = e, c !== p && (u = k.clone(u, !0, !0), s && k.merge(a, ve(u, "script"))), i.call(n[c], u, c); if (s) for (l = a[a.length - 1].ownerDocument, k.map(a, Re), c = 0; c < s; c++)u = a[c], he.test(u.type || "") && !Q.access(u, "globalEval") && k.contains(l, u) && (u.src && "module" !== (u.type || "").toLowerCase() ? k._evalUrl && !u.noModule && k._evalUrl(u.src, { nonce: u.nonce || u.getAttribute("nonce") }) : b(u.textContent.replace(He, ""), u, l)) } return n } function We(e, t, n) { for (var r, i = t ? k.filter(t, e) : e, o = 0; null != (r = i[o]); o++)n || 1 !== r.nodeType || k.cleanData(ve(r)), r.parentNode && (n && oe(r) && ye(ve(r, "script")), r.parentNode.removeChild(r)); return e } k.extend({ htmlPrefilter: function (e) { return e.replace(je, "<$1></$2>") }, clone: function (e, t, n) { var r, i, o, a, s, u, l, c = e.cloneNode(!0), f = oe(e); if (!(y.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || k.isXMLDoc(e))) for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++)s = o[r], u = a[r], void 0, "input" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? u.checked = s.checked : "input" !== l && "textarea" !== l || (u.defaultValue = s.defaultValue); if (t) if (n) for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++)Me(o[r], a[r]); else Me(e, c); return 0 < (a = ve(c, "script")).length && ye(a, !f && ve(e, "script")), c }, cleanData: function (e) { for (var t, n, r, i = k.event.special, o = 0; void 0 !== (n = e[o]); o++)if (G(n)) { if (t = n[Q.expando]) { if (t.events) for (r in t.events) i[r] ? k.event.remove(n, r) : k.removeEvent(n, r, t.handle); n[Q.expando] = void 0 } n[J.expando] && (n[J.expando] = void 0) } } }), k.fn.extend({ detach: function (e) { return We(this, e, !0) }, remove: function (e) { return We(this, e) }, text: function (e) { return _(this, function (e) { return void 0 === e ? k.text(this) : this.empty().each(function () { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = e) }) }, null, e, arguments.length) }, append: function () { return Ie(this, arguments, function (e) { 1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || Oe(this, e).appendChild(e) }) }, prepend: function () { return Ie(this, arguments, function (e) { if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) { var t = Oe(this, e); t.insertBefore(e, t.firstChild) } }) }, before: function () { return Ie(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this) }) }, after: function () { return Ie(this, arguments, function (e) { this.parentNode && this.parentNode.insertBefore(e, this.nextSibling) }) }, empty: function () { for (var e, t = 0; null != (e = this[t]); t++)1 === e.nodeType && (k.cleanData(ve(e, !1)), e.textContent = ""); return this }, clone: function (e, t) { return e = null != e && e, t = null == t ? e : t, this.map(function () { return k.clone(this, e, t) }) }, html: function (e) { return _(this, function (e) { var t = this[0] || {}, n = 0, r = this.length; if (void 0 === e && 1 === t.nodeType) return t.innerHTML; if ("string" == typeof e && !qe.test(e) && !ge[(de.exec(e) || ["", ""])[1].toLowerCase()]) { e = k.htmlPrefilter(e); try { for (; n < r; n++)1 === (t = this[n] || {}).nodeType && (k.cleanData(ve(t, !1)), t.innerHTML = e); t = 0 } catch (e) { } } t && this.empty().append(e) }, null, e, arguments.length) }, replaceWith: function () { var n = []; return Ie(this, arguments, function (e) { var t = this.parentNode; k.inArray(this, n) < 0 && (k.cleanData(ve(this)), t && t.replaceChild(e, this)) }, n) } }), k.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function (e, a) { k.fn[e] = function (e) { for (var t, n = [], r = k(e), i = r.length - 1, o = 0; o <= i; o++)t = o === i ? this : this.clone(!0), k(r[o])[a](t), u.apply(n, t.get()); return this.pushStack(n) } }); var $e = new RegExp("^(" + te + ")(?!px)[a-z%]+$", "i"), Fe = function (e) { var t = e.ownerDocument.defaultView; return t && t.opener || (t = C), t.getComputedStyle(e) }, Be = new RegExp(re.join("|"), "i"); function _e(e, t, n) { var r, i, o, a, s = e.style; return (n = n || Fe(e)) && ("" !== (a = n.getPropertyValue(t) || n[t]) || oe(e) || (a = k.style(e, t)), !y.pixelBoxStyles() && $e.test(a) && Be.test(t) && (r = s.width, i = s.minWidth, o = s.maxWidth, s.minWidth = s.maxWidth = s.width = a, a = n.width, s.width = r, s.minWidth = i, s.maxWidth = o)), void 0 !== a ? a + "" : a } function ze(e, t) { return { get: function () { if (!e()) return (this.get = t).apply(this, arguments); delete this.get } } } !function () { function e() { if (u) { s.style.cssText = "position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0", u.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%", ie.appendChild(s).appendChild(u); var e = C.getComputedStyle(u); n = "1%" !== e.top, a = 12 === t(e.marginLeft), u.style.right = "60%", o = 36 === t(e.right), r = 36 === t(e.width), u.style.position = "absolute", i = 12 === t(u.offsetWidth / 3), ie.removeChild(s), u = null } } function t(e) { return Math.round(parseFloat(e)) } var n, r, i, o, a, s = E.createElement("div"), u = E.createElement("div"); u.style && (u.style.backgroundClip = "content-box", u.cloneNode(!0).style.backgroundClip = "", y.clearCloneStyle = "content-box" === u.style.backgroundClip, k.extend(y, { boxSizingReliable: function () { return e(), r }, pixelBoxStyles: function () { return e(), o }, pixelPosition: function () { return e(), n }, reliableMarginLeft: function () { return e(), a }, scrollboxSize: function () { return e(), i } })) }(); var Ue = ["Webkit", "Moz", "ms"], Xe = E.createElement("div").style, Ve = {}; function Ge(e) { var t = k.cssProps[e] || Ve[e]; return t || (e in Xe ? e : Ve[e] = function (e) { var t = e[0].toUpperCase() + e.slice(1), n = Ue.length; while (n--) if ((e = Ue[n] + t) in Xe) return e }(e) || e) } var Ye = /^(none|table(?!-c[ea]).+)/, Qe = /^--/, Je = { position: "absolute", visibility: "hidden", display: "block" }, Ke = { letterSpacing: "0", fontWeight: "400" }; function Ze(e, t, n) { var r = ne.exec(t); return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || "px") : t } function et(e, t, n, r, i, o) { var a = "width" === t ? 1 : 0, s = 0, u = 0; if (n === (r ? "border" : "content")) return 0; for (; a < 4; a += 2)"margin" === n && (u += k.css(e, n + re[a], !0, i)), r ? ("content" === n && (u -= k.css(e, "padding" + re[a], !0, i)), "margin" !== n && (u -= k.css(e, "border" + re[a] + "Width", !0, i))) : (u += k.css(e, "padding" + re[a], !0, i), "padding" !== n ? u += k.css(e, "border" + re[a] + "Width", !0, i) : s += k.css(e, "border" + re[a] + "Width", !0, i)); return !r && 0 <= o && (u += Math.max(0, Math.ceil(e["offset" + t[0].toUpperCase() + t.slice(1)] - o - u - s - .5)) || 0), u } function tt(e, t, n) { var r = Fe(e), i = (!y.boxSizingReliable() || n) && "border-box" === k.css(e, "boxSizing", !1, r), o = i, a = _e(e, t, r), s = "offset" + t[0].toUpperCase() + t.slice(1); if ($e.test(a)) { if (!n) return a; a = "auto" } return (!y.boxSizingReliable() && i || "auto" === a || !parseFloat(a) && "inline" === k.css(e, "display", !1, r)) && e.getClientRects().length && (i = "border-box" === k.css(e, "boxSizing", !1, r), (o = s in e) && (a = e[s])), (a = parseFloat(a) || 0) + et(e, t, n || (i ? "border" : "content"), o, r, a) + "px" } function nt(e, t, n, r, i) { return new nt.prototype.init(e, t, n, r, i) } k.extend({ cssHooks: { opacity: { get: function (e, t) { if (t) { var n = _e(e, "opacity"); return "" === n ? "1" : n } } } }, cssNumber: { animationIterationCount: !0, columnCount: !0, fillOpacity: !0, flexGrow: !0, flexShrink: !0, fontWeight: !0, gridArea: !0, gridColumn: !0, gridColumnEnd: !0, gridColumnStart: !0, gridRow: !0, gridRowEnd: !0, gridRowStart: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, widows: !0, zIndex: !0, zoom: !0 }, cssProps: {}, style: function (e, t, n, r) { if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) { var i, o, a, s = V(t), u = Qe.test(t), l = e.style; if (u || (t = Ge(s)), a = k.cssHooks[t] || k.cssHooks[s], void 0 === n) return a && "get" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t]; "string" === (o = typeof n) && (i = ne.exec(n)) && i[1] && (n = le(e, t, i), o = "number"), null != n && n == n && ("number" !== o || u || (n += i && i[3] || (k.cssNumber[s] ? "" : "px")), y.clearCloneStyle || "" !== n || 0 !== t.indexOf("background") || (l[t] = "inherit"), a && "set" in a && void 0 === (n = a.set(e, n, r)) || (u ? l.setProperty(t, n) : l[t] = n)) } }, css: function (e, t, n, r) { var i, o, a, s = V(t); return Qe.test(t) || (t = Ge(s)), (a = k.cssHooks[t] || k.cssHooks[s]) && "get" in a && (i = a.get(e, !0, n)), void 0 === i && (i = _e(e, t, r)), "normal" === i && t in Ke && (i = Ke[t]), "" === n || n ? (o = parseFloat(i), !0 === n || isFinite(o) ? o || 0 : i) : i } }), k.each(["height", "width"], function (e, u) { k.cssHooks[u] = { get: function (e, t, n) { if (t) return !Ye.test(k.css(e, "display")) || e.getClientRects().length && e.getBoundingClientRect().width ? tt(e, u, n) : ue(e, Je, function () { return tt(e, u, n) }) }, set: function (e, t, n) { var r, i = Fe(e), o = !y.scrollboxSize() && "absolute" === i.position, a = (o || n) && "border-box" === k.css(e, "boxSizing", !1, i), s = n ? et(e, u, n, a, i) : 0; return a && o && (s -= Math.ceil(e["offset" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - et(e, u, "border", !1, i) - .5)), s && (r = ne.exec(t)) && "px" !== (r[3] || "px") && (e.style[u] = t, t = k.css(e, u)), Ze(0, t, s) } } }), k.cssHooks.marginLeft = ze(y.reliableMarginLeft, function (e, t) { if (t) return (parseFloat(_e(e, "marginLeft")) || e.getBoundingClientRect().left - ue(e, { marginLeft: 0 }, function () { return e.getBoundingClientRect().left })) + "px" }), k.each({ margin: "", padding: "", border: "Width" }, function (i, o) { k.cssHooks[i + o] = { expand: function (e) { for (var t = 0, n = {}, r = "string" == typeof e ? e.split(" ") : [e]; t < 4; t++)n[i + re[t] + o] = r[t] || r[t - 2] || r[0]; return n } }, "margin" !== i && (k.cssHooks[i + o].set = Ze) }), k.fn.extend({ css: function (e, t) { return _(this, function (e, t, n) { var r, i, o = {}, a = 0; if (Array.isArray(t)) { for (r = Fe(e), i = t.length; a < i; a++)o[t[a]] = k.css(e, t[a], !1, r); return o } return void 0 !== n ? k.style(e, t, n) : k.css(e, t) }, e, t, 1 < arguments.length) } }), ((k.Tween = nt).prototype = { constructor: nt, init: function (e, t, n, r, i, o) { this.elem = e, this.prop = n, this.easing = i || k.easing._default, this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = o || (k.cssNumber[n] ? "" : "px") }, cur: function () { var e = nt.propHooks[this.prop]; return e && e.get ? e.get(this) : nt.propHooks._default.get(this) }, run: function (e) { var t, n = nt.propHooks[this.prop]; return this.options.duration ? this.pos = t = k.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : nt.propHooks._default.set(this), this } }).init.prototype = nt.prototype, (nt.propHooks = { _default: { get: function (e) { var t; return 1 !== e.elem.nodeType || null != e.elem[e.prop] && null == e.elem.style[e.prop] ? e.elem[e.prop] : (t = k.css(e.elem, e.prop, "")) && "auto" !== t ? t : 0 }, set: function (e) { k.fx.step[e.prop] ? k.fx.step[e.prop](e) : 1 !== e.elem.nodeType || !k.cssHooks[e.prop] && null == e.elem.style[Ge(e.prop)] ? e.elem[e.prop] = e.now : k.style(e.elem, e.prop, e.now + e.unit) } } }).scrollTop = nt.propHooks.scrollLeft = { set: function (e) { e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) } }, k.easing = { linear: function (e) { return e }, swing: function (e) { return .5 - Math.cos(e * Math.PI) / 2 }, _default: "swing" }, k.fx = nt.prototype.init, k.fx.step = {}; var rt, it, ot, at, st = /^(?:toggle|show|hide)$/, ut = /queueHooks$/; function lt() { it && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(lt) : C.setTimeout(lt, k.fx.interval), k.fx.tick()) } function ct() { return C.setTimeout(function () { rt = void 0 }), rt = Date.now() } function ft(e, t) { var n, r = 0, i = { height: e }; for (t = t ? 1 : 0; r < 4; r += 2 - t)i["margin" + (n = re[r])] = i["padding" + n] = e; return t && (i.opacity = i.width = e), i } function pt(e, t, n) { for (var r, i = (dt.tweeners[t] || []).concat(dt.tweeners["*"]), o = 0, a = i.length; o < a; o++)if (r = i[o].call(n, t, e)) return r } function dt(o, e, t) { var n, a, r = 0, i = dt.prefilters.length, s = k.Deferred().always(function () { delete u.elem }), u = function () { if (a) return !1; for (var e = rt || ct(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++)l.tweens[r].run(n); return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1) }, l = s.promise({ elem: o, props: k.extend({}, e), opts: k.extend(!0, { specialEasing: {}, easing: k.easing._default }, t), originalProperties: e, originalOptions: t, startTime: rt || ct(), duration: t.duration, tweens: [], createTween: function (e, t) { var n = k.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing); return l.tweens.push(n), n }, stop: function (e) { var t = 0, n = e ? l.tweens.length : 0; if (a) return this; for (a = !0; t < n; t++)l.tweens[t].run(1); return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this } }), c = l.props; for (!function (e, t) { var n, r, i, o, a; for (n in e) if (i = t[r = V(n)], o = e[n], Array.isArray(o) && (i = o[1], o = e[n] = o[0]), n !== r && (e[r] = o, delete e[n]), (a = k.cssHooks[r]) && "expand" in a) for (n in o = a.expand(o), delete e[r], o) n in e || (e[n] = o[n], t[n] = i); else t[r] = i }(c, l.opts.specialEasing); r < i; r++)if (n = dt.prefilters[r].call(l, o, c, l.opts)) return m(n.stop) && (k._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n; return k.map(c, pt, l), m(l.opts.start) && l.opts.start.call(o, l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), k.fx.timer(k.extend(u, { elem: o, anim: l, queue: l.opts.queue })), l } k.Animation = k.extend(dt, { tweeners: { "*": [function (e, t) { var n = this.createTween(e, t); return le(n.elem, e, ne.exec(t), n), n }] }, tweener: function (e, t) { m(e) ? (t = e, e = ["*"]) : e = e.match(R); for (var n, r = 0, i = e.length; r < i; r++)n = e[r], dt.tweeners[n] = dt.tweeners[n] || [], dt.tweeners[n].unshift(t) }, prefilters: [function (e, t, n) { var r, i, o, a, s, u, l, c, f = "width" in t || "height" in t, p = this, d = {}, h = e.style, g = e.nodeType && se(e), v = Q.get(e, "fxshow"); for (r in n.queue || (null == (a = k._queueHooks(e, "fx")).unqueued && (a.unqueued = 0, s = a.empty.fire, a.empty.fire = function () { a.unqueued || s() }), a.unqueued++ , p.always(function () { p.always(function () { a.unqueued-- , k.queue(e, "fx").length || a.empty.fire() }) })), t) if (i = t[r], st.test(i)) { if (delete t[r], o = o || "toggle" === i, i === (g ? "hide" : "show")) { if ("show" !== i || !v || void 0 === v[r]) continue; g = !0 } d[r] = v && v[r] || k.style(e, r) } if ((u = !k.isEmptyObject(t)) || !k.isEmptyObject(d)) for (r in f && 1 === e.nodeType && (n.overflow = [h.overflow, h.overflowX, h.overflowY], null == (l = v && v.display) && (l = Q.get(e, "display")), "none" === (c = k.css(e, "display")) && (l ? c = l : (fe([e], !0), l = e.style.display || l, c = k.css(e, "display"), fe([e]))), ("inline" === c || "inline-block" === c && null != l) && "none" === k.css(e, "float") && (u || (p.done(function () { h.display = l }), null == l && (c = h.display, l = "none" === c ? "" : c)), h.display = "inline-block")), n.overflow && (h.overflow = "hidden", p.always(function () { h.overflow = n.overflow[0], h.overflowX = n.overflow[1], h.overflowY = n.overflow[2] })), u = !1, d) u || (v ? "hidden" in v && (g = v.hidden) : v = Q.access(e, "fxshow", { display: l }), o && (v.hidden = !g), g && fe([e], !0), p.done(function () { for (r in g || fe([e]), Q.remove(e, "fxshow"), d) k.style(e, r, d[r]) })), u = pt(g ? v[r] : 0, r, p), r in v || (v[r] = u.start, g && (u.end = u.start, u.start = 0)) }], prefilter: function (e, t) { t ? dt.prefilters.unshift(e) : dt.prefilters.push(e) } }), k.speed = function (e, t, n) { var r = e && "object" == typeof e ? k.extend({}, e) : { complete: n || !n && t || m(e) && e, duration: e, easing: n && t || t && !m(t) && t }; return k.fx.off ? r.duration = 0 : "number" != typeof r.duration && (r.duration in k.fx.speeds ? r.duration = k.fx.speeds[r.duration] : r.duration = k.fx.speeds._default), null != r.queue && !0 !== r.queue || (r.queue = "fx"), r.old = r.complete, r.complete = function () { m(r.old) && r.old.call(this), r.queue && k.dequeue(this, r.queue) }, r }, k.fn.extend({ fadeTo: function (e, t, n, r) { return this.filter(se).css("opacity", 0).show().end().animate({ opacity: t }, e, n, r) }, animate: function (t, e, n, r) { var i = k.isEmptyObject(t), o = k.speed(e, n, r), a = function () { var e = dt(this, k.extend({}, t), o); (i || Q.get(this, "finish")) && e.stop(!0) }; return a.finish = a, i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a) }, stop: function (i, e, o) { var a = function (e) { var t = e.stop; delete e.stop, t(o) }; return "string" != typeof i && (o = e, e = i, i = void 0), e && !1 !== i && this.queue(i || "fx", []), this.each(function () { var e = !0, t = null != i && i + "queueHooks", n = k.timers, r = Q.get(this); if (t) r[t] && r[t].stop && a(r[t]); else for (t in r) r[t] && r[t].stop && ut.test(t) && a(r[t]); for (t = n.length; t--;)n[t].elem !== this || null != i && n[t].queue !== i || (n[t].anim.stop(o), e = !1, n.splice(t, 1)); !e && o || k.dequeue(this, i) }) }, finish: function (a) { return !1 !== a && (a = a || "fx"), this.each(function () { var e, t = Q.get(this), n = t[a + "queue"], r = t[a + "queueHooks"], i = k.timers, o = n ? n.length : 0; for (t.finish = !0, k.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--;)i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1)); for (e = 0; e < o; e++)n[e] && n[e].finish && n[e].finish.call(this); delete t.finish }) } }), k.each(["toggle", "show", "hide"], function (e, r) { var i = k.fn[r]; k.fn[r] = function (e, t, n) { return null == e || "boolean" == typeof e ? i.apply(this, arguments) : this.animate(ft(r, !0), e, t, n) } }), k.each({ slideDown: ft("show"), slideUp: ft("hide"), slideToggle: ft("toggle"), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function (e, r) { k.fn[e] = function (e, t, n) { return this.animate(r, e, t, n) } }), k.timers = [], k.fx.tick = function () { var e, t = 0, n = k.timers; for (rt = Date.now(); t < n.length; t++)(e = n[t])() || n[t] !== e || n.splice(t--, 1); n.length || k.fx.stop(), rt = void 0 }, k.fx.timer = function (e) { k.timers.push(e), k.fx.start() }, k.fx.interval = 13, k.fx.start = function () { it || (it = !0, lt()) }, k.fx.stop = function () { it = null }, k.fx.speeds = { slow: 600, fast: 200, _default: 400 }, k.fn.delay = function (r, e) { return r = k.fx && k.fx.speeds[r] || r, e = e || "fx", this.queue(e, function (e, t) { var n = C.setTimeout(e, r); t.stop = function () { C.clearTimeout(n) } }) }, ot = E.createElement("input"), at = E.createElement("select").appendChild(E.createElement("option")), ot.type = "checkbox", y.checkOn = "" !== ot.value, y.optSelected = at.selected, (ot = E.createElement("input")).value = "t", ot.type = "radio", y.radioValue = "t" === ot.value; var ht, gt = k.expr.attrHandle; k.fn.extend({ attr: function (e, t) { return _(this, k.attr, e, t, 1 < arguments.length) }, removeAttr: function (e) { return this.each(function () { k.removeAttr(this, e) }) } }), k.extend({ attr: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return "undefined" == typeof e.getAttribute ? k.prop(e, t, n) : (1 === o && k.isXMLDoc(e) || (i = k.attrHooks[t.toLowerCase()] || (k.expr.match.bool.test(t) ? ht : void 0)), void 0 !== n ? null === n ? void k.removeAttr(e, t) : i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e.setAttribute(t, n + ""), n) : i && "get" in i && null !== (r = i.get(e, t)) ? r : null == (r = k.find.attr(e, t)) ? void 0 : r) }, attrHooks: { type: { set: function (e, t) { if (!y.radioValue && "radio" === t && A(e, "input")) { var n = e.value; return e.setAttribute("type", t), n && (e.value = n), t } } } }, removeAttr: function (e, t) { var n, r = 0, i = t && t.match(R); if (i && 1 === e.nodeType) while (n = i[r++]) e.removeAttribute(n) } }), ht = { set: function (e, t, n) { return !1 === t ? k.removeAttr(e, n) : e.setAttribute(n, n), n } }, k.each(k.expr.match.bool.source.match(/\w+/g), function (e, t) { var a = gt[t] || k.find.attr; gt[t] = function (e, t, n) { var r, i, o = t.toLowerCase(); return n || (i = gt[o], gt[o] = r, r = null != a(e, t, n) ? o : null, gt[o] = i), r } }); var vt = /^(?:input|select|textarea|button)$/i, yt = /^(?:a|area)$/i; function mt(e) { return (e.match(R) || []).join(" ") } function xt(e) { return e.getAttribute && e.getAttribute("class") || "" } function bt(e) { return Array.isArray(e) ? e : "string" == typeof e && e.match(R) || [] } k.fn.extend({ prop: function (e, t) { return _(this, k.prop, e, t, 1 < arguments.length) }, removeProp: function (e) { return this.each(function () { delete this[k.propFix[e] || e] }) } }), k.extend({ prop: function (e, t, n) { var r, i, o = e.nodeType; if (3 !== o && 8 !== o && 2 !== o) return 1 === o && k.isXMLDoc(e) || (t = k.propFix[t] || t, i = k.propHooks[t]), void 0 !== n ? i && "set" in i && void 0 !== (r = i.set(e, n, t)) ? r : e[t] = n : i && "get" in i && null !== (r = i.get(e, t)) ? r : e[t] }, propHooks: { tabIndex: { get: function (e) { var t = k.find.attr(e, "tabindex"); return t ? parseInt(t, 10) : vt.test(e.nodeName) || yt.test(e.nodeName) && e.href ? 0 : -1 } } }, propFix: { "for": "htmlFor", "class": "className" } }), y.optSelected || (k.propHooks.selected = { get: function (e) { var t = e.parentNode; return t && t.parentNode && t.parentNode.selectedIndex, null }, set: function (e) { var t = e.parentNode; t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex) } }), k.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () { k.propFix[this.toLowerCase()] = this }), k.fn.extend({ addClass: function (t) { var e, n, r, i, o, a, s, u = 0; if (m(t)) return this.each(function (e) { k(this).addClass(t.call(this, e, xt(this))) }); if ((e = bt(t)).length) while (n = this[u++]) if (i = xt(n), r = 1 === n.nodeType && " " + mt(i) + " ") { a = 0; while (o = e[a++]) r.indexOf(" " + o + " ") < 0 && (r += o + " "); i !== (s = mt(r)) && n.setAttribute("class", s) } return this }, removeClass: function (t) { var e, n, r, i, o, a, s, u = 0; if (m(t)) return this.each(function (e) { k(this).removeClass(t.call(this, e, xt(this))) }); if (!arguments.length) return this.attr("class", ""); if ((e = bt(t)).length) while (n = this[u++]) if (i = xt(n), r = 1 === n.nodeType && " " + mt(i) + " ") { a = 0; while (o = e[a++]) while (-1 < r.indexOf(" " + o + " ")) r = r.replace(" " + o + " ", " "); i !== (s = mt(r)) && n.setAttribute("class", s) } return this }, toggleClass: function (i, t) { var o = typeof i, a = "string" === o || Array.isArray(i); return "boolean" == typeof t && a ? t ? this.addClass(i) : this.removeClass(i) : m(i) ? this.each(function (e) { k(this).toggleClass(i.call(this, e, xt(this), t), t) }) : this.each(function () { var e, t, n, r; if (a) { t = 0, n = k(this), r = bt(i); while (e = r[t++]) n.hasClass(e) ? n.removeClass(e) : n.addClass(e) } else void 0 !== i && "boolean" !== o || ((e = xt(this)) && Q.set(this, "__className__", e), this.setAttribute && this.setAttribute("class", e || !1 === i ? "" : Q.get(this, "__className__") || "")) }) }, hasClass: function (e) { var t, n, r = 0; t = " " + e + " "; while (n = this[r++]) if (1 === n.nodeType && -1 < (" " + mt(xt(n)) + " ").indexOf(t)) return !0; return !1 } }); var wt = /\r/g; k.fn.extend({ val: function (n) { var r, e, i, t = this[0]; return arguments.length ? (i = m(n), this.each(function (e) { var t; 1 === this.nodeType && (null == (t = i ? n.call(this, e, k(this).val()) : n) ? t = "" : "number" == typeof t ? t += "" : Array.isArray(t) && (t = k.map(t, function (e) { return null == e ? "" : e + "" })), (r = k.valHooks[this.type] || k.valHooks[this.nodeName.toLowerCase()]) && "set" in r && void 0 !== r.set(this, t, "value") || (this.value = t)) })) : t ? (r = k.valHooks[t.type] || k.valHooks[t.nodeName.toLowerCase()]) && "get" in r && void 0 !== (e = r.get(t, "value")) ? e : "string" == typeof (e = t.value) ? e.replace(wt, "") : null == e ? "" : e : void 0 } }), k.extend({ valHooks: { option: { get: function (e) { var t = k.find.attr(e, "value"); return null != t ? t : mt(k.text(e)) } }, select: { get: function (e) { var t, n, r, i = e.options, o = e.selectedIndex, a = "select-one" === e.type, s = a ? null : [], u = a ? o + 1 : i.length; for (r = o < 0 ? u : a ? o : 0; r < u; r++)if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, "optgroup"))) { if (t = k(n).val(), a) return t; s.push(t) } return s }, set: function (e, t) { var n, r, i = e.options, o = k.makeArray(t), a = i.length; while (a--) ((r = i[a]).selected = -1 < k.inArray(k.valHooks.option.get(r), o)) && (n = !0); return n || (e.selectedIndex = -1), o } } } }), k.each(["radio", "checkbox"], function () { k.valHooks[this] = { set: function (e, t) { if (Array.isArray(t)) return e.checked = -1 < k.inArray(k(e).val(), t) } }, y.checkOn || (k.valHooks[this].get = function (e) { return null === e.getAttribute("value") ? "on" : e.value }) }), y.focusin = "onfocusin" in C; var Tt = /^(?:focusinfocus|focusoutblur)$/, Ct = function (e) { e.stopPropagation() }; k.extend(k.event, { trigger: function (e, t, n, r) { var i, o, a, s, u, l, c, f, p = [n || E], d = v.call(e, "type") ? e.type : e, h = v.call(e, "namespace") ? e.namespace.split(".") : []; if (o = f = a = n = n || E, 3 !== n.nodeType && 8 !== n.nodeType && !Tt.test(d + k.event.triggered) && (-1 < d.indexOf(".") && (d = (h = d.split(".")).shift(), h.sort()), u = d.indexOf(":") < 0 && "on" + d, (e = e[k.expando] ? e : new k.Event(d, "object" == typeof e && e)).isTrigger = r ? 2 : 3, e.namespace = h.join("."), e.rnamespace = e.namespace ? new RegExp("(^|\\.)" + h.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, e.result = void 0, e.target || (e.target = n), t = null == t ? [e] : k.makeArray(t, [e]), c = k.event.special[d] || {}, r || !c.trigger || !1 !== c.trigger.apply(n, t))) { if (!r && !c.noBubble && !x(n)) { for (s = c.delegateType || d, Tt.test(s + d) || (o = o.parentNode); o; o = o.parentNode)p.push(o), a = o; a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C) } i = 0; while ((o = p[i++]) && !e.isPropagationStopped()) f = o, e.type = 1 < i ? s : c.bindType || d, (l = (Q.get(o, "events") || {})[e.type] && Q.get(o, "handle")) && l.apply(o, t), (l = u && o[u]) && l.apply && G(o) && (e.result = l.apply(o, t), !1 === e.result && e.preventDefault()); return e.type = d, r || e.isDefaultPrevented() || c._default && !1 !== c._default.apply(p.pop(), t) || !G(n) || u && m(n[d]) && !x(n) && ((a = n[u]) && (n[u] = null), k.event.triggered = d, e.isPropagationStopped() && f.addEventListener(d, Ct), n[d](), e.isPropagationStopped() && f.removeEventListener(d, Ct), k.event.triggered = void 0, a && (n[u] = a)), e.result } }, simulate: function (e, t, n) { var r = k.extend(new k.Event, n, { type: e, isSimulated: !0 }); k.event.trigger(r, null, t) } }), k.fn.extend({ trigger: function (e, t) { return this.each(function () { k.event.trigger(e, t, this) }) }, triggerHandler: function (e, t) { var n = this[0]; if (n) return k.event.trigger(e, t, n, !0) } }), y.focusin || k.each({ focus: "focusin", blur: "focusout" }, function (n, r) { var i = function (e) { k.event.simulate(r, e.target, k.event.fix(e)) }; k.event.special[r] = { setup: function () { var e = this.ownerDocument || this, t = Q.access(e, r); t || e.addEventListener(n, i, !0), Q.access(e, r, (t || 0) + 1) }, teardown: function () { var e = this.ownerDocument || this, t = Q.access(e, r) - 1; t ? Q.access(e, r, t) : (e.removeEventListener(n, i, !0), Q.remove(e, r)) } } }); var Et = C.location, kt = Date.now(), St = /\?/; k.parseXML = function (e) { var t; if (!e || "string" != typeof e) return null; try { t = (new C.DOMParser).parseFromString(e, "text/xml") } catch (e) { t = void 0 } return t && !t.getElementsByTagName("parsererror").length || k.error("Invalid XML: " + e), t }; var Nt = /\[\]$/, At = /\r?\n/g, Dt = /^(?:submit|button|image|reset|file)$/i, jt = /^(?:input|select|textarea|keygen)/i; function qt(n, e, r, i) { var t; if (Array.isArray(e)) k.each(e, function (e, t) { r || Nt.test(n) ? i(n, t) : qt(n + "[" + ("object" == typeof t && null != t ? e : "") + "]", t, r, i) }); else if (r || "object" !== w(e)) i(n, e); else for (t in e) qt(n + "[" + t + "]", e[t], r, i) } k.param = function (e, t) { var n, r = [], i = function (e, t) { var n = m(t) ? t() : t; r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(null == n ? "" : n) }; if (null == e) return ""; if (Array.isArray(e) || e.jquery && !k.isPlainObject(e)) k.each(e, function () { i(this.name, this.value) }); else for (n in e) qt(n, e[n], t, i); return r.join("&") }, k.fn.extend({ serialize: function () { return k.param(this.serializeArray()) }, serializeArray: function () { return this.map(function () { var e = k.prop(this, "elements"); return e ? k.makeArray(e) : this }).filter(function () { var e = this.type; return this.name && !k(this).is(":disabled") && jt.test(this.nodeName) && !Dt.test(e) && (this.checked || !pe.test(e)) }).map(function (e, t) { var n = k(this).val(); return null == n ? null : Array.isArray(n) ? k.map(n, function (e) { return { name: t.name, value: e.replace(At, "\r\n") } }) : { name: t.name, value: n.replace(At, "\r\n") } }).get() } }); var Lt = /%20/g, Ht = /#.*$/, Ot = /([?&])_=[^&]*/, Pt = /^(.*?):[ \t]*([^\r\n]*)$/gm, Rt = /^(?:GET|HEAD)$/, Mt = /^\/\//, It = {}, Wt = {}, $t = "*/".concat("*"), Ft = E.createElement("a"); function Bt(o) { return function (e, t) { "string" != typeof e && (t = e, e = "*"); var n, r = 0, i = e.toLowerCase().match(R) || []; if (m(t)) while (n = i[r++]) "+" === n[0] ? (n = n.slice(1) || "*", (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t) } } function _t(t, i, o, a) { var s = {}, u = t === Wt; function l(e) { var r; return s[e] = !0, k.each(t[e] || [], function (e, t) { var n = t(i, o, a); return "string" != typeof n || u || s[n] ? u ? !(r = n) : void 0 : (i.dataTypes.unshift(n), l(n), !1) }), r } return l(i.dataTypes[0]) || !s["*"] && l("*") } function zt(e, t) { var n, r, i = k.ajaxSettings.flatOptions || {}; for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]); return r && k.extend(!0, e, r), e } Ft.href = Et.href, k.extend({ active: 0, lastModified: {}, etag: {}, ajaxSettings: { url: Et.href, type: "GET", isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol), global: !0, processData: !0, async: !0, contentType: "application/x-www-form-urlencoded; charset=UTF-8", accepts: { "*": $t, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, converters: { "* text": String, "text html": !0, "text json": JSON.parse, "text xml": k.parseXML }, flatOptions: { url: !0, context: !0 } }, ajaxSetup: function (e, t) { return t ? zt(zt(e, k.ajaxSettings), t) : zt(k.ajaxSettings, e) }, ajaxPrefilter: Bt(It), ajaxTransport: Bt(Wt), ajax: function (e, t) { "object" == typeof e && (t = e, e = void 0), t = t || {}; var c, f, p, n, d, r, h, g, i, o, v = k.ajaxSetup({}, t), y = v.context || v, m = v.context && (y.nodeType || y.jquery) ? k(y) : k.event, x = k.Deferred(), b = k.Callbacks("once memory"), w = v.statusCode || {}, a = {}, s = {}, u = "canceled", T = { readyState: 0, getResponseHeader: function (e) { var t; if (h) { if (!n) { n = {}; while (t = Pt.exec(p)) n[t[1].toLowerCase() + " "] = (n[t[1].toLowerCase() + " "] || []).concat(t[2]) } t = n[e.toLowerCase() + " "] } return null == t ? null : t.join(", ") }, getAllResponseHeaders: function () { return h ? p : null }, setRequestHeader: function (e, t) { return null == h && (e = s[e.toLowerCase()] = s[e.toLowerCase()] || e, a[e] = t), this }, overrideMimeType: function (e) { return null == h && (v.mimeType = e), this }, statusCode: function (e) { var t; if (e) if (h) T.always(e[T.status]); else for (t in e) w[t] = [w[t], e[t]]; return this }, abort: function (e) { var t = e || u; return c && c.abort(t), l(0, t), this } }; if (x.promise(T), v.url = ((e || v.url || Et.href) + "").replace(Mt, Et.protocol + "//"), v.type = t.method || t.type || v.method || v.type, v.dataTypes = (v.dataType || "*").toLowerCase().match(R) || [""], null == v.crossDomain) { r = E.createElement("a"); try { r.href = v.url, r.href = r.href, v.crossDomain = Ft.protocol + "//" + Ft.host != r.protocol + "//" + r.host } catch (e) { v.crossDomain = !0 } } if (v.data && v.processData && "string" != typeof v.data && (v.data = k.param(v.data, v.traditional)), _t(It, v, t, T), h) return T; for (i in (g = k.event && v.global) && 0 == k.active++ && k.event.trigger("ajaxStart"), v.type = v.type.toUpperCase(), v.hasContent = !Rt.test(v.type), f = v.url.replace(Ht, ""), v.hasContent ? v.data && v.processData && 0 === (v.contentType || "").indexOf("application/x-www-form-urlencoded") && (v.data = v.data.replace(Lt, "+")) : (o = v.url.slice(f.length), v.data && (v.processData || "string" == typeof v.data) && (f += (St.test(f) ? "&" : "?") + v.data, delete v.data), !1 === v.cache && (f = f.replace(Ot, "$1"), o = (St.test(f) ? "&" : "?") + "_=" + kt++ + o), v.url = f + o), v.ifModified && (k.lastModified[f] && T.setRequestHeader("If-Modified-Since", k.lastModified[f]), k.etag[f] && T.setRequestHeader("If-None-Match", k.etag[f])), (v.data && v.hasContent && !1 !== v.contentType || t.contentType) && T.setRequestHeader("Content-Type", v.contentType), T.setRequestHeader("Accept", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + ("*" !== v.dataTypes[0] ? ", " + $t + "; q=0.01" : "") : v.accepts["*"]), v.headers) T.setRequestHeader(i, v.headers[i]); if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort(); if (u = "abort", b.add(v.complete), T.done(v.success), T.fail(v.error), c = _t(Wt, v, t, T)) { if (T.readyState = 1, g && m.trigger("ajaxSend", [T, v]), h) return T; v.async && 0 < v.timeout && (d = C.setTimeout(function () { T.abort("timeout") }, v.timeout)); try { h = !1, c.send(a, l) } catch (e) { if (h) throw e; l(-1, e) } } else l(-1, "No Transport"); function l(e, t, n, r) { var i, o, a, s, u, l = t; h || (h = !0, d && C.clearTimeout(d), c = void 0, p = r || "", T.readyState = 0 < e ? 4 : 0, i = 200 <= e && e < 300 || 304 === e, n && (s = function (e, t, n) { var r, i, o, a, s = e.contents, u = e.dataTypes; while ("*" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader("Content-Type")); if (r) for (i in s) if (s[i] && s[i].test(r)) { u.unshift(i); break } if (u[0] in n) o = u[0]; else { for (i in n) { if (!u[0] || e.converters[i + " " + u[0]]) { o = i; break } a || (a = i) } o = o || a } if (o) return o !== u[0] && u.unshift(o), n[o] }(v, T, n)), s = function (e, t, n, r) { var i, o, a, s, u, l = {}, c = e.dataTypes.slice(); if (c[1]) for (a in e.converters) l[a.toLowerCase()] = e.converters[a]; o = c.shift(); while (o) if (e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), u = o, o = c.shift()) if ("*" === o) o = u; else if ("*" !== u && u !== o) { if (!(a = l[u + " " + o] || l["* " + o])) for (i in l) if ((s = i.split(" "))[1] === o && (a = l[u + " " + s[0]] || l["* " + s[0]])) { !0 === a ? a = l[i] : !0 !== l[i] && (o = s[0], c.unshift(s[1])); break } if (!0 !== a) if (a && e["throws"]) t = a(t); else try { t = a(t) } catch (e) { return { state: "parsererror", error: a ? e : "No conversion from " + u + " to " + o } } } return { state: "success", data: t } }(v, s, T, i), i ? (v.ifModified && ((u = T.getResponseHeader("Last-Modified")) && (k.lastModified[f] = u), (u = T.getResponseHeader("etag")) && (k.etag[f] = u)), 204 === e || "HEAD" === v.type ? l = "nocontent" : 304 === e ? l = "notmodified" : (l = s.state, o = s.data, i = !(a = s.error))) : (a = l, !e && l || (l = "error", e < 0 && (e = 0))), T.status = e, T.statusText = (t || l) + "", i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]), T.statusCode(w), w = void 0, g && m.trigger(i ? "ajaxSuccess" : "ajaxError", [T, v, i ? o : a]), b.fireWith(y, [T, l]), g && (m.trigger("ajaxComplete", [T, v]), --k.active || k.event.trigger("ajaxStop"))) } return T }, getJSON: function (e, t, n) { return k.get(e, t, n, "json") }, getScript: function (e, t) { return k.get(e, void 0, t, "script") } }), k.each(["get", "post"], function (e, i) { k[i] = function (e, t, n, r) { return m(t) && (r = r || n, n = t, t = void 0), k.ajax(k.extend({ url: e, type: i, dataType: r, data: t, success: n }, k.isPlainObject(e) && e)) } }), k._evalUrl = function (e, t) { return k.ajax({ url: e, type: "GET", dataType: "script", cache: !0, async: !1, global: !1, converters: { "text script": function () { } }, dataFilter: function (e) { k.globalEval(e, t) } }) }, k.fn.extend({ wrapAll: function (e) { var t; return this[0] && (m(e) && (e = e.call(this[0])), t = k(e, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && t.insertBefore(this[0]), t.map(function () { var e = this; while (e.firstElementChild) e = e.firstElementChild; return e }).append(this)), this }, wrapInner: function (n) { return m(n) ? this.each(function (e) { k(this).wrapInner(n.call(this, e)) }) : this.each(function () { var e = k(this), t = e.contents(); t.length ? t.wrapAll(n) : e.append(n) }) }, wrap: function (t) { var n = m(t); return this.each(function (e) { k(this).wrapAll(n ? t.call(this, e) : t) }) }, unwrap: function (e) { return this.parent(e).not("body").each(function () { k(this).replaceWith(this.childNodes) }), this } }), k.expr.pseudos.hidden = function (e) { return !k.expr.pseudos.visible(e) }, k.expr.pseudos.visible = function (e) { return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length) }, k.ajaxSettings.xhr = function () { try { return new C.XMLHttpRequest } catch (e) { } }; var Ut = { 0: 200, 1223: 204 }, Xt = k.ajaxSettings.xhr(); y.cors = !!Xt && "withCredentials" in Xt, y.ajax = Xt = !!Xt, k.ajaxTransport(function (i) { var o, a; if (y.cors || Xt && !i.crossDomain) return { send: function (e, t) { var n, r = i.xhr(); if (r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields) for (n in i.xhrFields) r[n] = i.xhrFields[n]; for (n in i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e["X-Requested-With"] || (e["X-Requested-With"] = "XMLHttpRequest"), e) r.setRequestHeader(n, e[n]); o = function (e) { return function () { o && (o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null, "abort" === e ? r.abort() : "error" === e ? "number" != typeof r.status ? t(0, "error") : t(r.status, r.statusText) : t(Ut[r.status] || r.status, r.statusText, "text" !== (r.responseType || "text") || "string" != typeof r.responseText ? { binary: r.response } : { text: r.responseText }, r.getAllResponseHeaders())) } }, r.onload = o(), a = r.onerror = r.ontimeout = o("error"), void 0 !== r.onabort ? r.onabort = a : r.onreadystatechange = function () { 4 === r.readyState && C.setTimeout(function () { o && a() }) }, o = o("abort"); try { r.send(i.hasContent && i.data || null) } catch (e) { if (o) throw e } }, abort: function () { o && o() } } }), k.ajaxPrefilter(function (e) { e.crossDomain && (e.contents.script = !1) }), k.ajaxSetup({ accepts: { script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function (e) { return k.globalEval(e), e } } }), k.ajaxPrefilter("script", function (e) { void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = "GET") }), k.ajaxTransport("script", function (n) { var r, i; if (n.crossDomain || n.scriptAttrs) return { send: function (e, t) { r = k("<script>").attr(n.scriptAttrs || {}).prop({ charset: n.scriptCharset, src: n.url }).on("load error", i = function (e) { r.remove(), i = null, e && t("error" === e.type ? 404 : 200, e.type) }), E.head.appendChild(r[0]) }, abort: function () { i && i() } } }); var Vt, Gt = [], Yt = /(=)\?(?=&|$)|\?\?/; k.ajaxSetup({ jsonp: "callback", jsonpCallback: function () { var e = Gt.pop() || k.expando + "_" + kt++; return this[e] = !0, e } }), k.ajaxPrefilter("json jsonp", function (e, t, n) { var r, i, o, a = !1 !== e.jsonp && (Yt.test(e.url) ? "url" : "string" == typeof e.data && 0 === (e.contentType || "").indexOf("application/x-www-form-urlencoded") && Yt.test(e.data) && "data"); if (a || "jsonp" === e.dataTypes[0]) return r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback, a ? e[a] = e[a].replace(Yt, "$1" + r) : !1 !== e.jsonp && (e.url += (St.test(e.url) ? "&" : "?") + e.jsonp + "=" + r), e.converters["script json"] = function () { return o || k.error(r + " was not called"), o[0] }, e.dataTypes[0] = "json", i = C[r], C[r] = function () { o = arguments }, n.always(function () { void 0 === i ? k(C).removeProp(r) : C[r] = i, e[r] && (e.jsonpCallback = t.jsonpCallback, Gt.push(r)), o && m(i) && i(o[0]), o = i = void 0 }), "script" }), y.createHTMLDocument = ((Vt = E.implementation.createHTMLDocument("").body).innerHTML = "<form></form><form></form>", 2 === Vt.childNodes.length), k.parseHTML = function (e, t, n) { return "string" != typeof e ? [] : ("boolean" == typeof t && (n = t, t = !1), t || (y.createHTMLDocument ? ((r = (t = E.implementation.createHTMLDocument("")).createElement("base")).href = E.location.href, t.head.appendChild(r)) : t = E), o = !n && [], (i = D.exec(e)) ? [t.createElement(i[1])] : (i = we([e], t, o), o && o.length && k(o).remove(), k.merge([], i.childNodes))); var r, i, o }, k.fn.load = function (e, t, n) { var r, i, o, a = this, s = e.indexOf(" "); return -1 < s && (r = mt(e.slice(s)), e = e.slice(0, s)), m(t) ? (n = t, t = void 0) : t && "object" == typeof t && (i = "POST"), 0 < a.length && k.ajax({ url: e, type: i || "GET", dataType: "html", data: t }).done(function (e) { o = arguments, a.html(r ? k("<div>").append(k.parseHTML(e)).find(r) : e) }).always(n && function (e, t) { a.each(function () { n.apply(this, o || [e.responseText, t, e]) }) }), this }, k.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (e, t) { k.fn[t] = function (e) { return this.on(t, e) } }), k.expr.pseudos.animated = function (t) { return k.grep(k.timers, function (e) { return t === e.elem }).length }, k.offset = { setOffset: function (e, t, n) { var r, i, o, a, s, u, l = k.css(e, "position"), c = k(e), f = {}; "static" === l && (e.style.position = "relative"), s = c.offset(), o = k.css(e, "top"), u = k.css(e, "left"), ("absolute" === l || "fixed" === l) && -1 < (o + u).indexOf("auto") ? (a = (r = c.position()).top, i = r.left) : (a = parseFloat(o) || 0, i = parseFloat(u) || 0), m(t) && (t = t.call(e, n, k.extend({}, s))), null != t.top && (f.top = t.top - s.top + a), null != t.left && (f.left = t.left - s.left + i), "using" in t ? t.using.call(e, f) : c.css(f) } }, k.fn.extend({ offset: function (t) { if (arguments.length) return void 0 === t ? this : this.each(function (e) { k.offset.setOffset(this, t, e) }); var e, n, r = this[0]; return r ? r.getClientRects().length ? (e = r.getBoundingClientRect(), n = r.ownerDocument.defaultView, { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset }) : { top: 0, left: 0 } : void 0 }, position: function () { if (this[0]) { var e, t, n, r = this[0], i = { top: 0, left: 0 }; if ("fixed" === k.css(r, "position")) t = r.getBoundingClientRect(); else { t = this.offset(), n = r.ownerDocument, e = r.offsetParent || n.documentElement; while (e && (e === n.body || e === n.documentElement) && "static" === k.css(e, "position")) e = e.parentNode; e && e !== r && 1 === e.nodeType && ((i = k(e).offset()).top += k.css(e, "borderTopWidth", !0), i.left += k.css(e, "borderLeftWidth", !0)) } return { top: t.top - i.top - k.css(r, "marginTop", !0), left: t.left - i.left - k.css(r, "marginLeft", !0) } } }, offsetParent: function () { return this.map(function () { var e = this.offsetParent; while (e && "static" === k.css(e, "position")) e = e.offsetParent; return e || ie }) } }), k.each({ scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function (t, i) { var o = "pageYOffset" === i; k.fn[t] = function (e) { return _(this, function (e, t, n) { var r; if (x(e) ? r = e : 9 === e.nodeType && (r = e.defaultView), void 0 === n) return r ? r[i] : e[t]; r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : e[t] = n }, t, e, arguments.length) } }), k.each(["top", "left"], function (e, n) { k.cssHooks[n] = ze(y.pixelPosition, function (e, t) { if (t) return t = _e(e, n), $e.test(t) ? k(e).position()[n] + "px" : t }) }), k.each({ Height: "height", Width: "width" }, function (a, s) { k.each({ padding: "inner" + a, content: s, "": "outer" + a }, function (r, o) { k.fn[o] = function (e, t) { var n = arguments.length && (r || "boolean" != typeof e), i = r || (!0 === e || !0 === t ? "margin" : "border"); return _(this, function (e, t, n) { var r; return x(e) ? 0 === o.indexOf("outer") ? e["inner" + a] : e.document.documentElement["client" + a] : 9 === e.nodeType ? (r = e.documentElement, Math.max(e.body["scroll" + a], r["scroll" + a], e.body["offset" + a], r["offset" + a], r["client" + a])) : void 0 === n ? k.css(e, t, i) : k.style(e, t, n, i) }, s, n ? e : void 0, n) } }) }), k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function (e, n) { k.fn[n] = function (e, t) { return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n) } }), k.fn.extend({ hover: function (e, t) { return this.mouseenter(e).mouseleave(t || e) } }), k.fn.extend({ bind: function (e, t, n) { return this.on(e, null, t, n) }, unbind: function (e, t) { return this.off(e, null, t) }, delegate: function (e, t, n, r) { return this.on(t, e, n, r) }, undelegate: function (e, t, n) { return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n) } }), k.proxy = function (e, t) { var n, r, i; if ("string" == typeof t && (n = e[t], t = e, e = n), m(e)) return r = s.call(arguments, 2), (i = function () { return e.apply(t || this, r.concat(s.call(arguments))) }).guid = e.guid = e.guid || k.guid++ , i }, k.holdReady = function (e) { e ? k.readyWait++ : k.ready(!0) }, k.isArray = Array.isArray, k.parseJSON = JSON.parse, k.nodeName = A, k.isFunction = m, k.isWindow = x, k.camelCase = V, k.type = w, k.now = Date.now, k.isNumeric = function (e) { var t = k.type(e); return ("number" === t || "string" === t) && !isNaN(e - parseFloat(e)) }, "function" == typeof define && define.amd && define("jquery", [], function () { return k }); var Qt = C.jQuery, Jt = C.$; return k.noConflict = function (e) { return C.$ === k && (C.$ = Jt), e && C.jQuery === k && (C.jQuery = Qt), k }, e || (C.jQuery = C.$ = k), k }); /* endinject */ /* inject:pageLoadTime.js */ "use strict"; function PageLoadTime() { } PageLoadTime.prototype.getPerformanceData = function () { var performance = window.performance || {}; var perfData = {}; if (performance.navigation) { perfData.navigation = _getPerformanceObjectData(performance.navigation); } if (performance.timing) { perfData.timing = _getPerformanceObjectData(performance.timing); } // report all entries if (performance.getEntries) { perfData.entries = _mapObject(performance.getEntries(), _getPerformanceObjectData); } // Chrome has a new experimental connection speed Api if (navigator.connection) { perfData.connection = _getPerformanceObjectData(navigator.connection); } return perfData; } function _isFunction(f) { return 'function' == (typeof (f)); } function _mapObject(array, mapping) { var result = []; var array = array || []; for (var i = 0, j = array.length; i < j; i++) { result.push(mapping(array[i], i)); } return result; } function _getPerformanceObjectData(object) { var result = {}; // In some browsers, some of the PerformanceTiming objects have a native toJSON method // that returns a JS object with all of the properties of the PerformanceTiming object. if (object.toJSON) { return object.toJSON(); } // PerformanceTiming objects are not regular JS objects. Calling Object.hasOwnProperty // on them does not work. for (var property in object) { if (!_isFunction(object[property])) { result[property] = object[property]; } } return result; } /* endinject */ /* inject:ief-diagnostics.js */ "use strict"; // Object for holding trace information // and timing var $trace = function(trace, time) { var _trace = trace; // Always log start time var _startTime = new Date().getTime(); var _time = time; var _timeElapsed = 0; return { // Outputs the trace as object, // ending the timer if one was started // when trace creates toJson: function () { // If the trace was a timed trace if (_time) { var elapsed = new Date() - _startTime; _timeElapsed = elapsed; } return { // action ac: _trace, // actionStartTime in milliseconds. acST: Math.floor(_startTime / 1000), // actionDuration in milliseconds. acD: _timeElapsed }; }, // Appends the specified trace // to the existing trace info append: function(trace){ _trace += trace; } } }; var $diags = (function ($trace, settings) { // Array to hold trace diagnostics var _trace = []; var _initializationSuccessful = false; // Start a timer that will fire after 10s // and check if the initializationSuccessful flag // is true. If the initializationSuccessful flag // is not true by the time the timer fires, we send // back a response to the service indicating that // a load failure has occurred. This function has a dependency // on the Settings JSON. setTimeout(function () { if (!window.$diags.initializationSuccessful) { // Configure the default trace var trace = new $trace("T000", false); var diagnosticsCode = "UX001" var failedScript = ""; if (!window.jQuery || typeof $element === "undefined") { trace = new $trace("T025", false); var scriptLookup = !window.jQuery ? "jQuery" : "element"; // Get the script source using the data-script attribute var scriptNode = document.querySelectorAll('[data-script="' + scriptLookup + '"]'); failedScript = scriptNode[0].src || scriptLookup; trace.append(" - " + failedScript); diagnosticsCode = "UX002"; } window.$diags.trace(trace); window.$diags.sendDiagnostics(diagnosticsCode, failedScript); } }, window.initializationTimeout || 7000); return { VERSION: "2.0.0", // Export the flag initializationSuccessful: _initializationSuccessful, // Sends the specified info as diagnostics // information on the service sendDiagnostics: function (code, description, stack) { window.location.replace(this.toDiagnosticsPath(code, description, stack)); }, // Sends the specified info as diagnostics // information on the service asynchronously sendQuietDiagnostics: function (code, description, stack) { $.ajax({ url: this.toDiagnosticsPath(code, description, stack) }); }, // Convert diagnostics to a request path. toDiagnosticsPath: function (code, description, stack) { // Wrap the diagnostics in the version wrapper var diagsJson = this.toJson(code, stack); var path = settings.hosts.tenant + "/api/" + settings.api + "/error?code=" + code + "&diags=" + encodeURIComponent(diagsJson) + "&csrf_token=" + settings.csrf + "&tx=" + settings.transId + "&p=" + settings.hosts.policy; // Add any information to the path if (description) { path += "&desc=" + encodeURIComponent(description); } return path; }, // Returns the diagnostics trace // as json toJson: function (code, stack) { // Check the length of the trace to ensure that it is below the max trace var jsonTrace = JSON.stringify(_trace); var truncated = false; while (_trace.length !== 0 && jsonTrace.length > window.maxTrace) { // Remove the first trace, since it is less likely to contain the actual error _trace.shift(); jsonTrace = JSON.stringify(_trace); truncated = true; } var baseDiagnostics = { "pageViewId": settings.pageViewId, "pageId": settings.api, "trace": _trace }; if (truncated) { baseDiagnostics.truncated = truncated; } // If an error add details to diagnostics if (code) { baseDiagnostics.code = code; } // Add any stack detail to the diagnostics // information if (stack) { baseDiagnostics.info = stack; } return JSON.stringify(baseDiagnostics); }, // Adds the trace information to the // trace stack trace: function (trace) { _trace.push(trace.toJson()); return; }, // Outputs the contents of the trace // to the console toConsole: function () { for (var i = 0, len = _trace.length; i < len; i++) { console.log(_trace[i]); } return; }, // Show the current stack trace traceStack: _trace } }($trace, SETTINGS)); // Listen to online and offline event and append it to the client side traces. (function () { var appendOnlineStatusToTrace = function() { var status = window.navigator !== undefined && window.navigator.onLine !== undefined ? (window.navigator.onLine ? "Online" : "Offline") : "NotSupported"; var trace = new $trace("T030", true); trace.append(status); $diags.trace(trace); } window.addEventListener('online', appendOnlineStatusToTrace); window.addEventListener('offline', appendOnlineStatusToTrace); }()); /* endinject */ /* inject:ief-sanitizer.js */ var $santizer = (function ($cors, settings) { // Processes the cross origin document, santizing // the content before setting as the document var _santize = function (input) { // If no sanitization needed, return input if (settings.pageMode === 1) { return input } return (function (trace) { try { return sanitizeHtml(input, SETTINGS.sanitizerPolicy); } catch (error) { trace.append(" - err:" + error.message); $diags.trace(trace); // Send diagnostics to the service $diags.sendDiagnostics("UX017", SETTINGS.remoteResource); } finally { $diags.trace(trace); } }(new $trace("T029", true))); }; // Export the santize function return { santize: _santize }; }($santizer, SETTINGS)); /* endinject */ /* inject:ief-initializer.js */ if (typeof navigator.cookieEnabled === "undefined") { document.cookie = "probe"; navigator.cookieEnabled = (document.cookie.indexOf("probe") !== -1) ? true : false; }; if (!navigator.cookieEnabled) document.getElementById('no_cookie').className = ''; if (typeof $diags !== 'undefined') $diags.initializationSuccessful = true; // Globals for indicating the various stages // of page readiness. // window.contentReady: indicates that the // cross origin document has been downloaded // and can be processed. // window.pageReady: indicates that the cross // origin content has been processed and DOM // updated, ready for initialization window.contentReady, window.pageReady = false; (function () { // Add the querySelectorAll polyfill for IE6 & IE7 if (!document.querySelectorAll) { console.log("Creating polyfill for querySelectorAll."); document.querySelectorAll = function (selector, maxCount) { var style = style = document.createStyleSheet() var all = document.all, l = all.length, i, resultSet = []; style.addRule(selector, "k:v"); for (i = 0; i < l; i += 1) { if (all[i].currentStyle.k === "v") { resultSet.push(all[i]); if (resultSet.length > Infinity) { break; } } } style.removeRule(0); return resultSet; } } // Add the trim polyfill for IE6 & IE7 if (!String.prototype.trim) { console.log("Creating polyfill for String.prototype.trim."); (function () { // Make sure we trim BOM and NBSP var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; String.prototype.trim = function () { return this.replace(rtrim, ''); }; })(); } }()); // Only kick off sript downloads and page // processing if the user agent supports // cookies and javascript if (navigator.cookieEnabled) { var preloadCssLink = []; // Convert any undefined console functions to a noop. (function () { var method; var noop = function () { }; var methods = [ 'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 'timeStamp', 'trace', 'warn' ]; var length = methods.length; var console = (window.console = window.console || {}); while (length--) { method = methods[length]; if (!console[method]) { console[method] = noop; } } }()); if (!String.prototype.endsWith) { String.prototype.endsWith = function (pattern) { var d = this.length - pattern.length; return d >= 0 && this.lastIndexOf(pattern) === d; }; } var checkCssPreloaded = function () { preloadCssLink = preloadCssLink.filter(function (cssLink) { for (var i = 0; i < document.styleSheets.length; i++) { try { // cssRules is a common property that can be used to check if css link is loaded. // It has full support on all major browsers. https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet if (document.styleSheets[i].href != null && document.styleSheets[i].href.endsWith(cssLink) && document.styleSheets[i].cssRules) { return false; } } catch (e) { // Initially, on Firefox, cssRules won't be accessible, thus it could throw errors. if (e.code !== DOMException.INVALID_ACCESS_ERR && e.name !== "Error") { throw e; } else { return true; } } } return true; }); if (preloadCssLink.length === 0) { $("body").show(); } else { setTimeout(function () { checkCssPreloaded(); }, 0); } }; var preloadJavaScript = function (scriptTags) { var injectScriptInline = function (index) { var scriptTag = $(scriptTags[index]); var url = scriptTag.attr("src"); if (url) { return $.ajax({ method: "GET", url: url, dataType: "text" }).done(function (data) { scriptTag.text(data); scriptTag.removeAttr("src"); console.log("Finish pre-loading JavaScript: " + url); }).fail(function (XMLHttpRequest, textStatus, errorThrown) { console.log("Loading JavaScript failed: " + url + " " + textStatus + " " + errorThrown); }); } }; var ajaxCalls = []; if (scriptTags) { for (var i = 0; i < scriptTags.length; i++) { ajaxCalls.push(injectScriptInline(i)); } } return $.when.apply($, ajaxCalls); }; var $cors = (function ($cors, settings) { var _crossOriginDocument; // Processes the cross origin document, santizing // the content before setting as the document var _process = function (callback) { (function (trace) { try { var html = document.createElement('html'); html.innerHTML = $santizer.santize(_crossOriginDocument); var sanitizedHead = $(html).find('head:first'); var sanitizedBody = $(html).find('body:first'); // Get script tags with data-preload var scriptTags = sanitizedHead.find("script"); var preloadScripts = []; for (var i = 0; i < scriptTags.length; i++) { var script = scriptTags[i]; if (script.getAttribute('src') && script.getAttribute('data-preload') && script.getAttribute('data-preload').toLowerCase() === 'true') { preloadScripts.push(script); } } preloadJavaScript(preloadScripts).then(function () { // Replace the title if (sanitizedHead.find("title").length > 0) { $("title").remove(); } // If the favicon contains an empty href, set // href a base64 image of an empty png. This avoid the // favicon request coming back to I2E resulting in the 404s var faviconLink = "link[rel$='icon']", favicon = sanitizedHead.find(faviconLink), defaultIcon = "data:;base64,iVBORw0KGgo="; if (favicon && favicon[0]) { if (favicon[0].getAttribute("href") === undefined) { favicon[0].setAttribute("href", defaultIcon); } // Remove default favicon $("head").find(faviconLink).remove(); } // Check if any stylesheet links need to be pre-loaded before showing the page var links = sanitizedHead.find("link"); for (var i = 0; i < links.length; i++) { var link = links[i]; if (link.getAttribute('rel') === 'stylesheet' && link.getAttribute('href') && link.getAttribute('data-preload') && link.getAttribute('data-preload').toLowerCase() === 'true') { // Without this setup, SecurityError could appear when accessing styleSheets.cssRules. link.setAttribute('crossorigin', 'anonymous'); $("body").hide(); preloadCssLink.push(link.getAttribute('href')); } } // Add custom template head section into current html head section $("head").prepend(sanitizedHead.html()); // Apply tenant/company branding settings to the theme // this will customize the theme to look closer to the customer's brand applyTenantBranding(sanitizedBody); // Merge the element content into the customer // content (function (subTrace) { var api = sanitizedBody.find("#api"); var elementContent = $($element.getElementContent()).html(); // Get all existing attributes, before replacing var existingAttributes = api[0].attributes; api.replaceWith($(elementContent)); // Now add back the existing attributes // excluding the id attribute back onto // the api node. Grab the updated #api first. api = sanitizedBody.find("#api"); $.each(existingAttributes, function () { if (this.name !== "id") { api.attr(this.name, this.value); } }); sanitizedBody = $(sanitizedBody.html()); $diags.trace(subTrace); }(new $trace("T004", true))); setTimeout(function () { // Add custom template body section into current html body section $("body").append(sanitizedBody); if ($.isFunction(callback)) { callback(); } }, 0); // Make sure screen reader to announce the page name, also prevent reading "table". $("table[class=panel_layout]").attr({ "aria-label": document.title }); }); } catch (error) { trace.append(" - err:" + error.message); } finally { $diags.trace(trace); } }(new $trace("T019", true))); }; // So as the this script has loaded, attempt // to get the cross origin document (function getCrossOriginDocument() { (function (trace) { var usingXhr = !window.XDomainRequest; var requestor = usingXhr ? new XMLHttpRequest() : new XDomainRequest(); var remoteResource = SETTINGS.remoteResource; // If the resource being fetched is from the I2E static service, // add the slice/dc query string if (remoteResource.indexOf(window.staticHost) === 0) { var initialPrepend = remoteResource.indexOf("?") === -1 ? "?" : "&"; remoteResource += initialPrepend + "slice=" + window.targetSlice; remoteResource += "&dc=" + window.targetDc; } requestor.open("GET", remoteResource); // Wire up the event handlers requestor.onload = function () { if (!usingXhr || usingXhr && requestor.status === 200) { _crossOriginDocument = requestor.responseText; // Update the global flag to indicate that the cross // origin content has been now been downloaded window.contentReady = true; // Add remote resource URL to indicate if UI is customized on client side. trace.append(' - URL:' + remoteResource); $diags.trace(trace); return; } // If the resource hasn't been found if (requestor.status === 404) { var errorTrace = new $trace("T028", false); $diags.trace(errorTrace); $diags.trace(trace); // Send diagnostics to the service $diags.sendDiagnostics("UX005", SETTINGS.remoteResource); } return; } // On error gets fired when there is not network or an issue connecting to // the host requestor.onerror = function () { // We don't get a status back from XDomainRequest, either get // sent to onload or onerror as is the case here var status = 0; if (usingXhr) { status = requestor.status; } var errorTrace = new $trace("T027", false); $diags.trace(errorTrace); $diags.trace(trace); // Send diagnostics to the service $diags.sendDiagnostics("UX004", SETTINGS.remoteResource); return; } // Handle timeout fetching the cross-origin resource requestor.timeout = function () { // On timeout we retry this.tryCount++; if (this.tryCount <= this.retryLimit) { // Try again getCrossOriginDocument(); return; } var timeoutTrace = new $trace("T026", false); $diags.trace(timeoutTrace); $diags.trace(trace); // Send diagnostics to the service $diags.sendDiagnostics("UX003", SETTINGS.remoteResource); return; } // Required by XDomainRequest, but don't do anthing with this requestor.onprogress = function () { } // Set the request timeout to match the initializtion timeout -0.2s, // so that we explicitly catch timeout issues with remote resources requestor.timeout = (window.initializationTimeout || 7000) - 200; // Send the request requestor.send(); }(new $trace("T021", true))); }()); // Export the process function return { process: _process }; }($cors, SETTINGS)); var applyTenantBranding = function (templateBody) { // If tenant branding is not set return var tenantBrandingKey = "tenantBranding"; if (!SETTINGS[tenantBrandingKey]) { return; } var brandingData = SETTINGS[tenantBrandingKey]; var backgroundColorKey = "backgroundColor"; var backgroundImageUrlKey = "backgroundImageUrl"; var bannerLogoUrlKey = "bannerLogoUrl"; var $backgroundContainer = templateBody.find("div[data-tenant-branding-background-color=true]"); if (brandingData[backgroundColorKey] && $backgroundContainer.length > 0) { var styleEl = document.createElement("style"); styleEl.innerHTML = "div[data-tenant-branding-background-color=true]#background_branding_container {background:" + brandingData[backgroundColorKey] + "}"; $("head").append(styleEl); } var $backgroundImage = templateBody.find("img[data-tenant-branding-background=true]"); if (brandingData[backgroundImageUrlKey] && $backgroundImage.length > 0) { $backgroundImage.attr("src", brandingData[backgroundImageUrlKey]); } var $companyLogo = templateBody.find("img[data-tenant-branding-logo=true]"); if (brandingData[bannerLogoUrlKey] && $companyLogo.length > 0) { $companyLogo.attr("src", brandingData[bannerLogoUrlKey]) .show(); } }; var sendPageLoadTime = function () { var pageLoadTime = new PageLoadTime(); var pltData = JSON.stringify(pageLoadTime.getPerformanceData()); var localSettings = jQuery.extend(true, {}, window.SETTINGS); // Deep copy of original settings object localSettings.contentType = 'application/json; charset=utf-8'; localSettings.api = "client"; $i2e.sendDataWithRetry( pltData, function (response) { }, function (xmlHttpRequest, textStatus, errorThrown) { $diags.trace(new $trace("T035", false)); }, function () { }, "perftrace", localSettings ); }; // Wait for jQuery to load (function defer() { if (window.jQuery && typeof $element !== "undefined") { // We need to wait on the remote // content before we can update the DOM. // Script is ready when the script // download is complete, not execution // of the script. (function waitOnContentReady() { if (window.contentReady) { // Cross origin content can // now be processed, which if successful // sets the window.pageReady flag $cors.process(function () { // Now wait for body and page are ready. // This ensures that any initialization // that requires visible elements such as focus work // as intended $element.initialize(); // Update the initialization flag to prevent diganostics // phoning home $diags.initializationSuccessful = true; // Update the global flag indicating that the cross origin // document has now been set window.pageReady = true; // Calling asynchronously to avoid potentials issue to block page from rendering. setTimeout(sendPageLoadTime, 0); checkCssPreloaded(); }); } else { setTimeout(waitOnContentReady, 0); } }()); } else { setTimeout(function () { defer(); }, 50); } })(); } /* endinject */ /* inject:handlebars.runtime-4.0.12.min.js */ /**! @license handlebars v4.0.12 Copyright (C) 2011-2017 by Yehuda Katz Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ !function (a, b) { "object" == typeof exports && "object" == typeof module ? module.exports = b() : "function" == typeof define && define.amd ? define([], b) : "object" == typeof exports ? exports.Handlebars = b() : a.Handlebars = b() }(this, function () { return function (a) { function b(d) { if (c[d]) return c[d].exports; var e = c[d] = { exports: {}, id: d, loaded: !1 }; return a[d].call(e.exports, e, e.exports, b), e.loaded = !0, e.exports } var c = {}; return b.m = a, b.c = c, b.p = "", b(0) }([function (a, b, c) { "use strict"; function d() { var a = new h.HandlebarsEnvironment; return n.extend(a, h), a.SafeString = j["default"], a.Exception = l["default"], a.Utils = n, a.escapeExpression = n.escapeExpression, a.VM = p, a.template = function (b) { return p.template(b, a) }, a } var e = c(1)["default"], f = c(2)["default"]; b.__esModule = !0; var g = c(3), h = e(g), i = c(20), j = f(i), k = c(5), l = f(k), m = c(4), n = e(m), o = c(21), p = e(o), q = c(33), r = f(q), s = d(); s.create = d, r["default"](s), s["default"] = s, b["default"] = s, a.exports = b["default"] }, function (a, b) { "use strict"; b["default"] = function (a) { if (a && a.__esModule) return a; var b = {}; if (null != a) for (var c in a) Object.prototype.hasOwnProperty.call(a, c) && (b[c] = a[c]); return b["default"] = a, b }, b.__esModule = !0 }, function (a, b) { "use strict"; b["default"] = function (a) { return a && a.__esModule ? a : { "default": a } }, b.__esModule = !0 }, function (a, b, c) { "use strict"; function d(a, b, c) { this.helpers = a || {}, this.partials = b || {}, this.decorators = c || {}, i.registerDefaultHelpers(this), j.registerDefaultDecorators(this) } var e = c(2)["default"]; b.__esModule = !0, b.HandlebarsEnvironment = d; var f = c(4), g = c(5), h = e(g), i = c(9), j = c(17), k = c(19), l = e(k), m = "4.0.12"; b.VERSION = m; var n = 7; b.COMPILER_REVISION = n; var o = { 1: "<= 1.0.rc.2", 2: "== 1.0.0-rc.3", 3: "== 1.0.0-rc.4", 4: "== 1.x.x", 5: "== 2.0.0-alpha.x", 6: ">= 2.0.0-beta.1", 7: ">= 4.0.0" }; b.REVISION_CHANGES = o; var p = "[object Object]"; d.prototype = { constructor: d, logger: l["default"], log: l["default"].log, registerHelper: function (a, b) { if (f.toString.call(a) === p) { if (b) throw new h["default"]("Arg not supported with multiple helpers"); f.extend(this.helpers, a) } else this.helpers[a] = b }, unregisterHelper: function (a) { delete this.helpers[a] }, registerPartial: function (a, b) { if (f.toString.call(a) === p) f.extend(this.partials, a); else { if ("undefined" == typeof b) throw new h["default"]('Attempting to register a partial called "' + a + '" as undefined'); this.partials[a] = b } }, unregisterPartial: function (a) { delete this.partials[a] }, registerDecorator: function (a, b) { if (f.toString.call(a) === p) { if (b) throw new h["default"]("Arg not supported with multiple decorators"); f.extend(this.decorators, a) } else this.decorators[a] = b }, unregisterDecorator: function (a) { delete this.decorators[a] } }; var q = l["default"].log; b.log = q, b.createFrame = f.createFrame, b.logger = l["default"] }, function (a, b) { "use strict"; function c(a) { return k[a] } function d(a) { for (var b = 1; b < arguments.length; b++)for (var c in arguments[b]) Object.prototype.hasOwnProperty.call(arguments[b], c) && (a[c] = arguments[b][c]); return a } function e(a, b) { for (var c = 0, d = a.length; c < d; c++)if (a[c] === b) return c; return -1 } function f(a) { if ("string" != typeof a) { if (a && a.toHTML) return a.toHTML(); if (null == a) return ""; if (!a) return a + ""; a = "" + a } return m.test(a) ? a.replace(l, c) : a } function g(a) { return !a && 0 !== a || !(!p(a) || 0 !== a.length) } function h(a) { var b = d({}, a); return b._parent = a, b } function i(a, b) { return a.path = b, a } function j(a, b) { return (a ? a + "." : "") + b } b.__esModule = !0, b.extend = d, b.indexOf = e, b.escapeExpression = f, b.isEmpty = g, b.createFrame = h, b.blockParams = i, b.appendContextPath = j; var k = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#x27;", "`": "&#x60;", "=": "&#x3D;" }, l = /[&<>"'`=]/g, m = /[&<>"'`=]/, n = Object.prototype.toString; b.toString = n; var o = function (a) { return "function" == typeof a }; o(/x/) && (b.isFunction = o = function (a) { return "function" == typeof a && "[object Function]" === n.call(a) }), b.isFunction = o; var p = Array.isArray || function (a) { return !(!a || "object" != typeof a) && "[object Array]" === n.call(a) }; b.isArray = p }, function (a, b, c) { "use strict"; function d(a, b) { var c = b && b.loc, g = void 0, h = void 0; c && (g = c.start.line, h = c.start.column, a += " - " + g + ":" + h); for (var i = Error.prototype.constructor.call(this, a), j = 0; j < f.length; j++)this[f[j]] = i[f[j]]; Error.captureStackTrace && Error.captureStackTrace(this, d); try { c && (this.lineNumber = g, e ? Object.defineProperty(this, "column", { value: h, enumerable: !0 }) : this.column = h) } catch (k) { } } var e = c(6)["default"]; b.__esModule = !0; var f = ["description", "fileName", "lineNumber", "message", "name", "number", "stack"]; d.prototype = new Error, b["default"] = d, a.exports = b["default"] }, function (a, b, c) { a.exports = { "default": c(7), __esModule: !0 } }, function (a, b, c) { var d = c(8); a.exports = function (a, b, c) { return d.setDesc(a, b, c) } }, function (a, b) { var c = Object; a.exports = { create: c.create, getProto: c.getPrototypeOf, isEnum: {}.propertyIsEnumerable, getDesc: c.getOwnPropertyDescriptor, setDesc: c.defineProperty, setDescs: c.defineProperties, getKeys: c.keys, getNames: c.getOwnPropertyNames, getSymbols: c.getOwnPropertySymbols, each: [].forEach } }, function (a, b, c) { "use strict"; function d(a) { g["default"](a), i["default"](a), k["default"](a), m["default"](a), o["default"](a), q["default"](a), s["default"](a) } var e = c(2)["default"]; b.__esModule = !0, b.registerDefaultHelpers = d; var f = c(10), g = e(f), h = c(11), i = e(h), j = c(12), k = e(j), l = c(13), m = e(l), n = c(14), o = e(n), p = c(15), q = e(p), r = c(16), s = e(r) }, function (a, b, c) { "use strict"; b.__esModule = !0; var d = c(4); b["default"] = function (a) { a.registerHelper("blockHelperMissing", function (b, c) { var e = c.inverse, f = c.fn; if (b === !0) return f(this); if (b === !1 || null == b) return e(this); if (d.isArray(b)) return b.length > 0 ? (c.ids && (c.ids = [c.name]), a.helpers.each(b, c)) : e(this); if (c.data && c.ids) { var g = d.createFrame(c.data); g.contextPath = d.appendContextPath(c.data.contextPath, c.name), c = { data: g } } return f(b, c) }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; var d = c(2)["default"]; b.__esModule = !0; var e = c(4), f = c(5), g = d(f); b["default"] = function (a) { a.registerHelper("each", function (a, b) { function c(b, c, f) { j && (j.key = b, j.index = c, j.first = 0 === c, j.last = !!f, k && (j.contextPath = k + b)), i += d(a[b], { data: j, blockParams: e.blockParams([a[b], b], [k + b, null]) }) } if (!b) throw new g["default"]("Must pass iterator to #each"); var d = b.fn, f = b.inverse, h = 0, i = "", j = void 0, k = void 0; if (b.data && b.ids && (k = e.appendContextPath(b.data.contextPath, b.ids[0]) + "."), e.isFunction(a) && (a = a.call(this)), b.data && (j = e.createFrame(b.data)), a && "object" == typeof a) if (e.isArray(a)) for (var l = a.length; h < l; h++)h in a && c(h, h, h === a.length - 1); else { var m = void 0; for (var n in a) a.hasOwnProperty(n) && (void 0 !== m && c(m, h - 1), m = n, h++); void 0 !== m && c(m, h - 1, !0) } return 0 === h && (i = f(this)), i }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; var d = c(2)["default"]; b.__esModule = !0; var e = c(5), f = d(e); b["default"] = function (a) { a.registerHelper("helperMissing", function () { if (1 !== arguments.length) throw new f["default"]('Missing helper: "' + arguments[arguments.length - 1].name + '"') }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; b.__esModule = !0; var d = c(4); b["default"] = function (a) { a.registerHelper("if", function (a, b) { return d.isFunction(a) && (a = a.call(this)), !b.hash.includeZero && !a || d.isEmpty(a) ? b.inverse(this) : b.fn(this) }), a.registerHelper("unless", function (b, c) { return a.helpers["if"].call(this, b, { fn: c.inverse, inverse: c.fn, hash: c.hash }) }) }, a.exports = b["default"] }, function (a, b) { "use strict"; b.__esModule = !0, b["default"] = function (a) { a.registerHelper("log", function () { for (var b = [void 0], c = arguments[arguments.length - 1], d = 0; d < arguments.length - 1; d++)b.push(arguments[d]); var e = 1; null != c.hash.level ? e = c.hash.level : c.data && null != c.data.level && (e = c.data.level), b[0] = e, a.log.apply(a, b) }) }, a.exports = b["default"] }, function (a, b) { "use strict"; b.__esModule = !0, b["default"] = function (a) { a.registerHelper("lookup", function (a, b) { return a && a[b] }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; b.__esModule = !0; var d = c(4); b["default"] = function (a) { a.registerHelper("with", function (a, b) { d.isFunction(a) && (a = a.call(this)); var c = b.fn; if (d.isEmpty(a)) return b.inverse(this); var e = b.data; return b.data && b.ids && (e = d.createFrame(b.data), e.contextPath = d.appendContextPath(b.data.contextPath, b.ids[0])), c(a, { data: e, blockParams: d.blockParams([a], [e && e.contextPath]) }) }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; function d(a) { g["default"](a) } var e = c(2)["default"]; b.__esModule = !0, b.registerDefaultDecorators = d; var f = c(18), g = e(f) }, function (a, b, c) { "use strict"; b.__esModule = !0; var d = c(4); b["default"] = function (a) { a.registerDecorator("inline", function (a, b, c, e) { var f = a; return b.partials || (b.partials = {}, f = function (e, f) { var g = c.partials; c.partials = d.extend({}, g, b.partials); var h = a(e, f); return c.partials = g, h }), b.partials[e.args[0]] = e.fn, f }) }, a.exports = b["default"] }, function (a, b, c) { "use strict"; b.__esModule = !0; var d = c(4), e = { methodMap: ["debug", "info", "warn", "error"], level: "info", lookupLevel: function (a) { if ("string" == typeof a) { var b = d.indexOf(e.methodMap, a.toLowerCase()); a = b >= 0 ? b : parseInt(a, 10) } return a }, log: function (a) { if (a = e.lookupLevel(a), "undefined" != typeof console && e.lookupLevel(e.level) <= a) { var b = e.methodMap[a]; console[b] || (b = "log"); for (var c = arguments.length, d = Array(c > 1 ? c - 1 : 0), f = 1; f < c; f++)d[f - 1] = arguments[f]; console[b].apply(console, d) } } }; b["default"] = e, a.exports = b["default"] }, function (a, b) { "use strict"; function c(a) { this.string = a } b.__esModule = !0, c.prototype.toString = c.prototype.toHTML = function () { return "" + this.string }, b["default"] = c, a.exports = b["default"] }, function (a, b, c) { "use strict"; function d(a) { var b = a && a[0] || 1, c = s.COMPILER_REVISION; if (b !== c) { if (b < c) { var d = s.REVISION_CHANGES[c], e = s.REVISION_CHANGES[b]; throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version (" + d + ") or downgrade your runtime to an older version (" + e + ").") } throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version (" + a[1] + ").") } } function e(a, b) { function c(c, d, e) { e.hash && (d = p.extend({}, d, e.hash), e.ids && (e.ids[0] = !0)), c = b.VM.resolvePartial.call(this, c, d, e); var f = b.VM.invokePartial.call(this, c, d, e); if (null == f && b.compile && (e.partials[e.name] = b.compile(c, a.compilerOptions, b), f = e.partials[e.name](d, e)), null != f) { if (e.indent) { for (var g = f.split("\n"), h = 0, i = g.length; h < i && (g[h] || h + 1 !== i); h++)g[h] = e.indent + g[h]; f = g.join("\n") } return f } throw new r["default"]("The partial " + e.name + " could not be compiled when running in runtime-only mode") } function d(b) { function c(b) { return "" + a.main(e, b, e.helpers, e.partials, g, i, h) } var f = arguments.length <= 1 || void 0 === arguments[1] ? {} : arguments[1], g = f.data; d._setup(f), !f.partial && a.useData && (g = j(b, g)); var h = void 0, i = a.useBlockParams ? [] : void 0; return a.useDepths && (h = f.depths ? b != f.depths[0] ? [b].concat(f.depths) : f.depths : [b]), (c = k(a.main, c, e, f.depths || [], g, i))(b, f) } if (!b) throw new r["default"]("No environment passed to template"); if (!a || !a.main) throw new r["default"]("Unknown template object: " + typeof a); a.main.decorator = a.main_d, b.VM.checkRevision(a.compiler); var e = { strict: function (a, b) { if (!(b in a)) throw new r["default"]('"' + b + '" not defined in ' + a); return a[b] }, lookup: function (a, b) { for (var c = a.length, d = 0; d < c; d++)if (a[d] && null != a[d][b]) return a[d][b] }, lambda: function (a, b) { return "function" == typeof a ? a.call(b) : a }, escapeExpression: p.escapeExpression, invokePartial: c, fn: function (b) { var c = a[b]; return c.decorator = a[b + "_d"], c }, programs: [], program: function (a, b, c, d, e) { var g = this.programs[a], h = this.fn(a); return b || e || d || c ? g = f(this, a, h, b, c, d, e) : g || (g = this.programs[a] = f(this, a, h)), g }, data: function (a, b) { for (; a && b--;)a = a._parent; return a }, merge: function (a, b) { var c = a || b; return a && b && a !== b && (c = p.extend({}, b, a)), c }, nullContext: l({}), noop: b.VM.noop, compilerInfo: a.compiler }; return d.isTop = !0, d._setup = function (c) { c.partial ? (e.helpers = c.helpers, e.partials = c.partials, e.decorators = c.decorators) : (e.helpers = e.merge(c.helpers, b.helpers), a.usePartial && (e.partials = e.merge(c.partials, b.partials)), (a.usePartial || a.useDecorators) && (e.decorators = e.merge(c.decorators, b.decorators))) }, d._child = function (b, c, d, g) { if (a.useBlockParams && !d) throw new r["default"]("must pass block params"); if (a.useDepths && !g) throw new r["default"]("must pass parent depths"); return f(e, b, a[b], c, 0, d, g) }, d } function f(a, b, c, d, e, f, g) { function h(b) { var e = arguments.length <= 1 || void 0 === arguments[1] ? {} : arguments[1], h = g; return !g || b == g[0] || b === a.nullContext && null === g[0] || (h = [b].concat(g)), c(a, b, a.helpers, a.partials, e.data || d, f && [e.blockParams].concat(f), h) } return h = k(c, h, a, g, d, f), h.program = b, h.depth = g ? g.length : 0, h.blockParams = e || 0, h } function g(a, b, c) { return a ? a.call || c.name || (c.name = a, a = c.partials[a]) : a = "@partial-block" === c.name ? c.data["partial-block"] : c.partials[c.name], a } function h(a, b, c) { var d = c.data && c.data["partial-block"]; c.partial = !0, c.ids && (c.data.contextPath = c.ids[0] || c.data.contextPath); var e = void 0; if (c.fn && c.fn !== i && !function () { c.data = s.createFrame(c.data); var a = c.fn; e = c.data["partial-block"] = function (b) { var c = arguments.length <= 1 || void 0 === arguments[1] ? {} : arguments[1]; return c.data = s.createFrame(c.data), c.data["partial-block"] = d, a(b, c) }, a.partials && (c.partials = p.extend({}, c.partials, a.partials)) }(), void 0 === a && e && (a = e), void 0 === a) throw new r["default"]("The partial " + c.name + " could not be found"); if (a instanceof Function) return a(b, c) } function i() { return "" } function j(a, b) { return b && "root" in b || (b = b ? s.createFrame(b) : {}, b.root = a), b } function k(a, b, c, d, e, f) { if (a.decorator) { var g = {}; b = a.decorator(b, g, c, d && d[0], e, f, d), p.extend(b, g) } return b } var l = c(22)["default"], m = c(1)["default"], n = c(2)["default"]; b.__esModule = !0, b.checkRevision = d, b.template = e, b.wrapProgram = f, b.resolvePartial = g, b.invokePartial = h, b.noop = i; var o = c(4), p = m(o), q = c(5), r = n(q), s = c(3) }, function (a, b, c) { a.exports = { "default": c(23), __esModule: !0 } }, function (a, b, c) { c(24), a.exports = c(29).Object.seal }, function (a, b, c) { var d = c(25); c(26)("seal", function (a) { return function (b) { return a && d(b) ? a(b) : b } }) }, function (a, b) { a.exports = function (a) { return "object" == typeof a ? null !== a : "function" == typeof a } }, function (a, b, c) { var d = c(27), e = c(29), f = c(32); a.exports = function (a, b) { var c = (e.Object || {})[a] || Object[a], g = {}; g[a] = b(c), d(d.S + d.F * f(function () { c(1) }), "Object", g) } }, function (a, b, c) { var d = c(28), e = c(29), f = c(30), g = "prototype", h = function (a, b, c) { var i, j, k, l = a & h.F, m = a & h.G, n = a & h.S, o = a & h.P, p = a & h.B, q = a & h.W, r = m ? e : e[b] || (e[b] = {}), s = m ? d : n ? d[b] : (d[b] || {})[g]; m && (c = b); for (i in c) j = !l && s && i in s, j && i in r || (k = j ? s[i] : c[i], r[i] = m && "function" != typeof s[i] ? c[i] : p && j ? f(k, d) : q && s[i] == k ? function (a) { var b = function (b) { return this instanceof a ? new a(b) : a(b) }; return b[g] = a[g], b }(k) : o && "function" == typeof k ? f(Function.call, k) : k, o && ((r[g] || (r[g] = {}))[i] = k)) }; h.F = 1, h.G = 2, h.S = 4, h.P = 8, h.B = 16, h.W = 32, a.exports = h }, function (a, b) { var c = a.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); "number" == typeof __g && (__g = c) }, function (a, b) { var c = a.exports = { version: "1.2.6" }; "number" == typeof __e && (__e = c) }, function (a, b, c) { var d = c(31); a.exports = function (a, b, c) { if (d(a), void 0 === b) return a; switch (c) { case 1: return function (c) { return a.call(b, c) }; case 2: return function (c, d) { return a.call(b, c, d) }; case 3: return function (c, d, e) { return a.call(b, c, d, e) } }return function () { return a.apply(b, arguments) } } }, function (a, b) { a.exports = function (a) { if ("function" != typeof a) throw TypeError(a + " is not a function!"); return a } }, function (a, b) { a.exports = function (a) { try { return !!a() } catch (b) { return !0 } } }, function (a, b) { (function (c) { "use strict"; b.__esModule = !0, b["default"] = function (a) { var b = "undefined" != typeof c ? c : window, d = b.Handlebars; a.noConflict = function () { return b.Handlebars === a && (b.Handlebars = d), a } }, a.exports = b["default"] }).call(b, function () { return this }()) }]) }); /* endinject */ /* inject:ief-core.js */ "use strict"; var $i2e = (function (content, settings) { return { VERSION: "2.0.0", APPLE_IDP_PATH_REGEX: new RegExp(/\?claimsexchange=.*apple.*/i), // Sends a request to the server using window.location.replace or window.location.assign // Note: Can only be executed once per page // @parameter path {string} the URL to redirect to // @parameter preserveSessionHistory {boolean} whether to keep the current URL in the browser's session history so that the user can navigate to it with the back button redirectToServer: function (path, preserveSessionHistory) { // Prevent this method from being executed again. This is done to help prevent additional redirects while the first // redirect is in progress (such as what would happen if a button was pressed twice quickly) // Applies it on non Apple IDP cases only. Since apple idp on Safari allows user to stay on the screen with a native pop up. if (!this.isSafari() || !this.APPLE_IDP_PATH_REGEX.test(path)) { this.redirectToServer = function () { }; } $diags.trace(new $trace("T002", false)); var link = this.getRedirectLink(path); $(document).ready(function () { // Check if diagnostics are being returned on success if (window.diagsAlways) { link += "&diags=" + encodeURIComponent($diags.toJson()); } preserveSessionHistory ? window.location.assign(link) : window.location.replace(link); }); }, // Returns a path that can be used in an href or by the redirectToServer function // @parameter {string} the URL to redirect to getRedirectLink: function (path) { path = path + ((path.indexOf("?") === -1) ? "?" : "&") + "csrf_token=" + settings.csrf + "&tx=" + settings.transId; // Check if we have metrics if (window.Metrics !== undefined) { path += "&metrics=" + encodeURIComponent(window.Metrics.serialize()); } return settings.hosts.tenant + "/api/" + settings.api + "/" + path + "&p=" + settings.hosts.policy; }, // Sends the data to the CPIM service for verification and storage // @parameter {string} the URL encoded form data entered by the user // @parameter {string} the path to include after the API definition in the URL // @parameter {object} an optional local settings object to build the request from sendData: function (data, path, localSettings) { // Use global settings if localSettings was not provided localSettings = localSettings !== undefined ? localSettings : settings; var url = localSettings.hosts.tenant + "/" + localSettings.api + (path !== undefined ? "/" + path : "") + "?tx=" + localSettings.transId + "&p=" + localSettings.hosts.policy; var headers = { "X-CSRF-TOKEN": settings.csrf }; if (settings.isPageViewIdSentWithHeader) { headers["x-ms-cpim-pageviewid"] = settings.pageViewId; } return $.ajax({ type: "POST", dataType: "json", headers: headers, timeout: localSettings.config.timeout || 90000, url: url, cache: false, data: data }); }, // Sends the data to the CPIM service for verification and storage // @parameter {string} the URL encoded form data entered by the user // @parameter {function} the function to call on success // @parameter {function} the function to call on error // @parameter {function} the function to call when request complete // @parameter {string} the path to include after the API definition in the URL // @parameter {object} an optional local settings object to build the request from sendDataWithRetry: function (data, onSuccess, onError, onComplete, path, localSettings) { // Use global settings if localSettings was not provided localSettings = localSettings !== undefined ? localSettings : settings; var url = localSettings.hosts.tenant + "/" + localSettings.api + (path !== undefined ? "/" + path : "") + "?tx=" + localSettings.transId + "&p=" + localSettings.hosts.policy; var headers = { "X-CSRF-TOKEN": settings.csrf }; if (settings.isPageViewIdSentWithHeader) { headers["x-ms-cpim-pageviewid"] = settings.pageViewId; } var localXhrSettings = localSettings.xhrSettings; return $.ajax({ type: "POST", dataType: "json", headers: headers, retryMaxAttempts: localXhrSettings && localXhrSettings.hasOwnProperty("retryMaxAttempts") ? localXhrSettings.retryMaxAttempts : 3, retryDelay: localXhrSettings && localXhrSettings.hasOwnProperty("retryDelay") ? localXhrSettings.retryDelay : 200, retryExponent: localXhrSettings && localXhrSettings.hasOwnProperty("retryExponent") ? localXhrSettings.retryExponent : 2, retryEnabled: localXhrSettings && localXhrSettings.hasOwnProperty("retryEnabled") ? localXhrSettings.retryEnabled : false, retryOn: localXhrSettings && localXhrSettings.hasOwnProperty("retryOn") ? localXhrSettings.retryOn : [], retryAttempt: 0, timeout: localSettings.config.timeout || 90000, url: url, cache: false, contentType: localSettings.contentType !== undefined ? localSettings.contentType : 'application/x-www-form-urlencoded; charset=UTF-8', data: data, success: onSuccess, error: function (xhr, textStatus, errorThrown) { // Check if retry is enabled and if the error is a re-tryable error, // if not call the onError if (this.retryEnabled === false || this.retryOn.indexOf(textStatus) === -1) onError(xhr, textStatus, errorThrown); // Check if the agent is online, and if not // setup the retry var isOnline = (window.navigator !== undefined && window.navigator.onLine !== undefined) ? window.navigator.onLine : true; // Trace the online status attempt var onlineTrace = new $trace("T030", false); onlineTrace.append(isOnline ? "Online" : "Offline"); $diags.trace(onlineTrace); if (isOnline === false) { // If there are still attempts left if (this.retryAttempt < this.retryMaxAttempts) { // Prepare the settings for subsequent // attempts; this.retryAttempt++; // bump the attempt count this.retryDelay = this.retryAttempt === 1 ? this.retryDelay : this.retryDelay * this.retryExponent; // Trace the retry attempt var retryTrace = new $trace("T031", false); retryTrace.append(" '" + textStatus + ": ' - retryAttempt: " + this.retryAttempt + " - retryDelay: " + this.retryDelay + " - retryExponent:" + this.retryExponent); $diags.trace(retryTrace); // Now set up the delay before retrying setTimeout(function (ajaxContext) { return $.ajax(ajaxContext); }, this.retryDelay, this); } else { // Run out of attempts, handover to the onError $diags.trace(new $trace("T032", false)); onError(xhr, textStatus, errorThrown); } } }, complete: onComplete }); }, // Complies the template and binds to the specified // data, returning the bound template generateServiceContent: function (templateName, data) { //var compiled = Handlebars.compile(template); var template = Handlebars.templates[templateName]; return template(data); }, // Inserts the service content to the page // using the api div as the anchor point insertServiceContent: function (serviceContent){ var $serviceContent = $(serviceContent); var api = $("#api"); // Get all existing attributes var existingAttributes = api[0].attributes; api.replaceWith($serviceContent.html()); // Now add back the existing attributes // excluding the id attribute $.each(existingAttributes, function () { if (this.name !== "id") { $("#api").attr(this.name, this.value); } }); }, // Returns the text from page CONTENT using the specified key lookupLanguage: function (key) { return content[key]; }, // Uses the static content url from settings to // bind the host to the provided path bindHost: function (path) { return settings.hosts.static + path; }, isSafari: function () { var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf('safari') !== -1) { if (ua.indexOf('chrome') > -1) { return false; // Chrome } else { return true; // Safari } } } } }(CONTENT, SETTINGS)); /* endinject */ /* inject:ief-handlebar-helpers.js */ "use strict"; (function (content, settings) { // Register handlebars helpers // Langauge helper Handlebars.registerHelper('getContent', function (contentName) { return new Handlebars.SafeString(content[contentName]); }); // Returns content without converting to a SafeString Handlebars.registerHelper('getRawContent', function (contentName) { return content[contentName]; }); Handlebars.registerHelper('getSettingAsBoolean', function (settingName) { var value = settings.config[settingName]; return value && value.toLowerCase() === 'true'; }); // Url helper Handlebars.registerHelper('getHostQualfiedUrl', function (path) { return settings.hosts.static + path; }); // Block helper for outputing a template block if the specified setting is true Handlebars.registerHelper('isSettingTrue', function (settingName, options) { var value = settings.config[settingName]; if (value && value.toLowerCase() === 'true') { return options.fn(this); } return null; }); // Block helper for outputing a template block if the specified setting is equal to the specified // value of if not present the default Handlebars.registerHelper('isSettingEqual', function (settingName, equals, defaultValue, options) { var value = settings.config[settingName] || defaultValue; var eqArray = equals.split(','); var arrayLength = eqArray.length; for (var i = 0; i < arrayLength; i++) { if (eqArray[i] && eqArray[i].toLowerCase() === value.toLowerCase()) { return options.fn(this); } } return null; }); // Block helper for outputing a template block if the specified setting exists Handlebars.registerHelper('doesSettingExist', function (settingName, options) { var value = settings.config[settingName]; if (value) { return options.fn(this); } else { return options.inverse(this); } }); // Block helper for outputing a template block if the specified setting contains the specified // value Handlebars.registerHelper('doesSettingContain', function (settingName, contains, defaultValue, options) { var value = settings.config[settingName] || defaultValue; var valueArray = value.split(','); var arrayLength = valueArray.length; for (var i = 0; i < arrayLength; i++) { if (valueArray[i] && valueArray[i].toLowerCase() === contains.toLowerCase()) { return options.fn(this); } } return options.inverse(this); }); // Block helper for outputing a template block if the collection only contains a single item Handlebars.registerHelper('isSingle', function (collection, options) { if (collection.length === 1) { return options.fn(this); } return null; }); // Block helper for outputing a template block if the collection only contains a single item Handlebars.registerHelper('isMultiple', function (collection, options) { if (collection.length > 1) { return options.fn(this); } return null; }); // Block helper for outputing an array Handlebars.registerHelper('getCountryDialingCodeOptionList', function () { var optionList = ""; var localeCountry = settings.locale.country; var elem = document.createElement('textarea'); elem.innerHTML = $i2e.lookupLanguage("countryList"); var processingList = JSON.parse(elem.value); // Iterate through the isolocalized.countryByLang as this ensures that // countries appear in the correct alphabetical order. for (var entry in processingList) { // Get the dialing code from the data var dialingCode = $isoData.countryByIso[entry]["dc"]; optionList += "<option value='+" + dialingCode + (localeCountry === entry ? "' selected>" : "'>") + processingList[entry] + (dialingCode ? " (+" + dialingCode + ")" : "") + "</option>"; } return optionList; }); }(CONTENT, SETTINGS)); /* endinject */ /* inject:ief-modal.js */ /* endinject */ /* inject:predicateValidation.js */ "use strict"; var $predicateValidation = function ($diags, content, settings) { /** * UNKNOWN - the method passed was not defined in the xml * INCLUDES_CHARACTERS - validates that a character set exists in the claim value * MATCHES_REGEX - check the claim value against a regular expression * IS_LENGTH_RANGE - check if claim value has length in a specific range */ var PREDICATE_METHODS = { UNKNOWN: 0, INCLUDES_CHARACTERS: 1, MATCHES_REGEX: 2, IS_LENGTH_RANGE: 3, IS_DATE_RANGE: 4 }; /** * MINIMUM - the minimum length * MAXIMUM - the maximum length * CHARACTER_SET - the character set to validate against * REGULAR_EXPRESSION - the regular expression to check against */ var PREDICATE_PARAMETERS = { MINIMUM: 1, MAXIMUM: 2, CHARACTER_SET: 3, REGULAR_EXPRESSION: 4 }; // Returns the first object in the Attribute fields who has the same claimID, including those inside display control var _findAttributeFieldByClaimId = function(claimId) { if (!Array.isArray(SA_FIELDS.AttributeFields)) return null; for (var i = 0; i < SA_FIELDS.AttributeFields.length; i++) { if (SA_FIELDS.AttributeFields[i].ID === claimId) { return SA_FIELDS.AttributeFields[i]; } if (SA_FIELDS.AttributeFields[i].USER_INPUT_TYPE === "DisplayControl") { if (!Array.isArray(SA_FIELDS.AttributeFields[i].DISPLAY_FIELDS)) return null; for (var j = 0; j < SA_FIELDS.AttributeFields[i].DISPLAY_FIELDS.length; j++) { if (SA_FIELDS.AttributeFields[i].DISPLAY_FIELDS[j].ID === claimId) { return SA_FIELDS.AttributeFields[i].DISPLAY_FIELDS[j]; } } } } return null; } // Returns the first object in an array that has a key with a specific value // @parameter arr is an array of objects // @parameter key is the key we will be looking at // @parameter value is the value that the key must have var _findBy = function (arr, key, value) { if (!Array.isArray(arr)) return null; for (var i = 0; i < arr.length; i++) { var item = arr[i]; if (item[key] != null && item[key] == value) { return item; } } return null; } // Unescape html charaters to use in regex // Note: this is for fullproffing the client side (the server side should always send characters unescaped) var _unescapeHtml = function (unsafe) { return unsafe .replace(/&amp;/g, "&") .replace(/&lt;/g, "<") .replace(/&gt;/g, ">") .replace(/&quot;/g, "\"") .replace(/&#039;/g, "'") .replace(/&#39;/g, "'"); } // Escape characters used in regex as character set var _escapeRegExpCharaterSet = function (str) { return str.replace(/([\/^$*+?.()|[\]{}])/g, "\\$1") } // Returns a list of validation methods // The same methods are implemented on the server side for security reasons var _validationMethods = function () { var self = this; var validationMethods = []; // Do nothing in case the method is unknown validationMethods[PREDICATE_METHODS.UNKNOWN] = function (claimValue, params) { return true; }; validationMethods[PREDICATE_METHODS.INCLUDES_CHARACTERS] = function (claimValue, params) { // Escape regular expression characters, so that we only allow character sets var chars = _unescapeHtml(params[0].VALUE); var regexValid = new RegExp("[" + _escapeRegExpCharaterSet(chars) + "]+"); return regexValid.test(claimValue); }; validationMethods[PREDICATE_METHODS.IS_LENGTH_RANGE] = function (claimValue, params) { var minimum = parseInt($predicateValidation.findBy(params, "NAME", PREDICATE_PARAMETERS.MINIMUM).VALUE); var maximum = parseInt($predicateValidation.findBy(params, "NAME", PREDICATE_PARAMETERS.MAXIMUM).VALUE); return minimum <= claimValue.length && claimValue.length <= maximum; }; validationMethods[PREDICATE_METHODS.IS_DATE_RANGE] = function (claimValue, params) { var minimum = new Date($predicateValidation.findBy(params, "NAME", PREDICATE_PARAMETERS.MINIMUM).VALUE); var maximum = new Date($predicateValidation.findBy(params, "NAME", PREDICATE_PARAMETERS.MAXIMUM).VALUE); var minimumDate = new Date(minimum.getUTCFullYear(), minimum.getUTCMonth(), minimum.getUTCDate()); var maximumDate = new Date(maximum.getUTCFullYear(), maximum.getUTCMonth(), maximum.getUTCDate()); return minimumDate <= claimValue && claimValue <= maximumDate; }; validationMethods[PREDICATE_METHODS.MATCHES_REGEX] = function (claimValue, params) { var regex = _unescapeHtml($predicateValidation.findBy(params, "NAME", PREDICATE_PARAMETERS.REGULAR_EXPRESSION).VALUE); var regexValid = new RegExp(regex); return regexValid.test(claimValue); }; return validationMethods; } var _computeClaimValueError = function (mainHelpText, invalidPredicates, errorPrefix) { var hasMain = (mainHelpText != "" && mainHelpText != null); // Add a new line, spaces and dash for list of errors var dashPrefix = hasMain ? errorPrefix : ""; var errorMessage = hasMain ? mainHelpText : ""; for (var i = 0; i < invalidPredicates.length; i++) { errorMessage += dashPrefix + invalidPredicates[i].HELP_TEXT; } return errorMessage; } var _generateValidationDict = function (claimID, claimValue, errorPrefix) { var errorMsgs = []; var passwordValidationDict = { isValid: true, errorMsgs: errorMsgs }; var claimById = $predicateValidation.findAttributeFieldByClaimId(claimID); if (null == claimById) return passwordValidationDict; var claimValidation = claimById.INPUT_VALIDATION; if (null == claimValidation) return passwordValidationDict; var validationMethods = _validationMethods(); // Validate predicates var isValid = true; if (claimValidation.PREDICATES != null) { for (var i = 0; i < claimValidation.PREDICATES.length; i++) { var predicate = claimValidation.PREDICATES[i]; if (!validationMethods[predicate.METHOD](claimValue, predicate.PARAMS)) { errorMsgs.push(_computeClaimValueError("", [predicate], errorPrefix)); isValid = false; } } } // Validate predicate groups if (claimValidation.PREDICATE_GROUPS != null) { for (var i = 0; i < claimValidation.PREDICATE_GROUPS.length; i++) { var predicateGroup = claimValidation.PREDICATE_GROUPS[i]; var countValid = 0; for (var j = 0; j < predicateGroup.PREDICATES.length; j++) { var predicate = predicateGroup.PREDICATES[j]; var localValid = validationMethods[predicate.METHOD](claimValue, predicate.PARAMS); if (localValid) { countValid++; } } // If there where errors in the predicate group var matchesMinimum = (countValid >= predicateGroup.MATCH_AT_LEAST); if ((matchesMinimum && predicateGroup.REJECT === true) || (!matchesMinimum && predicateGroup.REJECT !== true)) { errorMsgs.push(_computeClaimValueError(predicateGroup.HELP_TEXT, predicateGroup.PREDICATES, errorPrefix)); isValid = false; } } } passwordValidationDict.isValid = isValid; passwordValidationDict.errorMsgs = errorMsgs; return passwordValidationDict; } // Export the public methods return { findAttributeFieldByClaimId: _findAttributeFieldByClaimId, findBy: _findBy, generateValidationDict: _generateValidationDict, validationMethods: _validationMethods, unescapeHtml: _unescapeHtml, PREDICATE_METHODS: PREDICATE_METHODS, PREDICATE_PARAMETERS: PREDICATE_PARAMETERS }; }($diags, CONTENT, SETTINGS); /* endinject */ /* inject:element */ // Note: This is the SSP with KMSI. "use strict"; /* inject:handlebar */ this.Handlebars=this.Handlebars||{},this.Handlebars.templates=this.Handlebars.templates||{},this.Handlebars.templates.unifiedssp=Handlebars.template({1:function(n,t,l,e,a){var i;return' <div class="heading">\r\n <h1 role="heading">'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"heading",{name:"getContent",hash:{},data:a}))?i:"")+"</h1>\r\n </div>\r\n"},3:function(n,t,l,e,a){var i;return null!=(i=l.if.call(null!=t?t:n.nullContext||{},null!=t?t.buttonList:t,{name:"if",hash:{},fn:n.program(4,a,0),inverse:n.noop,data:a}))?i:""},4:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing;return' <div class="claims-provider-list-buttons social" aria-label="'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"social_intro",{name:"getContent",hash:{},data:a}))?i:"")+'" role="form">\r\n <div class="intro">\r\n <h2 aria-level="1">'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"social_intro",{name:"getContent",hash:{},data:a}))?i:"")+'</h2>\r\n </div>\r\n <div class="options">\r\n'+(null!=(i=l.each.call(r,null!=t?t.buttonList:t,{name:"each",hash:{},fn:n.program(5,a,0),inverse:n.noop,data:a}))?i:"")+" </div>\r\n </div>\r\n\r\n"+(null!=(i=l.if.call(r,null!=t?t.AttributeFields:t,{name:"if",hash:{},fn:n.program(15,a,0),inverse:n.noop,data:a}))?i:"")},5:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotPasswordLinkOverride",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(6,a,0),inverse:n.program(8,a,0),data:a}))?i:""},6:function(n,t,l,e,a){return""},8:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomClaimsProviderSelections",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(6,a,0),inverse:n.program(9,a,0),data:a}))?i:""},9:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomUnderFormClaimsProviderSelections",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(6,a,0),inverse:n.program(10,a,0),data:a}))?i:""},10:function(n,t,l,e,a){var i;return" <div>\r\n"+(null!=(i=l.if.call(null!=t?t:n.nullContext||{},a&&a.first,{name:"if",hash:{},fn:n.program(11,a,0),inverse:n.program(13,a,0),data:a}))?i:"")+" </div>\r\n "},11:function(n,t,l,e,a){var i,r=n.lambda;return' <button class="accountButton firstButton claims-provider-selection" id="'+(null!=(i=r(null!=t?t.id:t,t))?i:"")+'" role="link" autofocus>'+(null!=(i=r(null!=t?t.description:t,t))?i:"")+"</button>\r\n"},13:function(n,t,l,e,a){var i,r=n.lambda;return' <button class="accountButton claims-provider-selection" id="'+(null!=(i=r(null!=t?t.id:t,t))?i:"")+'" role="link">'+(null!=(i=r(null!=t?t.description:t,t))?i:"")+"</button>\r\n"},15:function(n,t,l,e,a){var i;return' <div class="divider">\r\n <h2>'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"divider_title",{name:"getContent",hash:{},data:a}))?i:"")+"</h2>\r\n </div>\r\n"},17:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing;return' <form id="localAccountForm" action="JavaScript:void(0);" class="localAccount" aria-label="'+(null!=(i=(l.buildIntroString||t&&t.buildIntroString||o).call(r,null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[0]:i)?i.DN:i,{name:"buildIntroString",hash:{},data:a}))?i:"")+'">\r\n <div class="intro">\r\n <h2 aria-level="1">\r\n '+(null!=(i=(l.buildIntroString||t&&t.buildIntroString||o).call(r,null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[0]:i)?i.DN:i,{name:"buildIntroString",hash:{},data:a}))?i:"")+'\r\n </h2>\r\n </div>\r\n <div class="error pageLevel" aria-hidden="true" role="alert">\r\n <p></p>\r\n </div>\r\n <div class="entry">\r\n <div class="entry-item">\r\n'+(null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||o).call(r,"pageFlavor","classic","None",{name:"isSettingEqual",hash:{},fn:n.program(18,a,0),inverse:n.noop,data:a}))?i:"")+' <div class="error itemLevel" aria-hidden="true" role="alert">\r\n <p ></p>\r\n </div>\r\n '+n.escapeExpression((l.buildInput||t&&t.buildInput||o).call(r,null!=(i=null!=t?t.AttributeFields:t)?i[0]:i,null!=t?t.buttonList:t,{name:"buildInput",hash:{},data:a}))+"\r\n </div>\r\n"+(null!=(i=l.if.call(r,null!=(i=null!=t?t.AttributeFields:t)?i[1]:i,{name:"if",hash:{},fn:n.program(20,a,0),inverse:n.noop,data:a}))?i:"")+' <div class="working"></div>\r\n'+(null!=(i=(l.isSettingTrue||t&&t.isSettingTrue||o).call(r,"enableRememberMe",{name:"isSettingTrue",hash:{},fn:n.program(36,a,0),inverse:n.noop,data:a}))?i:"")+"\r\n"+(null!=(i=l.if.call(r,null!=t?t.textLinkList:t,{name:"if",hash:{},fn:n.program(38,a,0),inverse:n.noop,data:a}))?i:"")+'\r\n <div class="buttons">\r\n <button id="next" type="submit" form="localAccountForm" >'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"button_signin",{name:"getContent",hash:{},data:a}))?i:"")+"</button>\r\n </div>\r\n"+(null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||o).call(r,"forgotPasswordLinkLocation",{name:"doesSettingExist",hash:{},fn:n.program(43,a,0),inverse:n.noop,data:a}))?i:"")+" </div>\r\n"+(null!=(i=(l.ifSignUpLink||t&&t.ifSignUpLink||o).call(r,null!=t?t.textLinkList:t,{name:"ifSignUpLink",hash:{},fn:n.program(46,a,0),inverse:n.program(48,a,0),data:a}))?i:"")+" </form>\r\n"},18:function(n,t,l,e,a){var i,r=n.lambda;return' <label for="'+(null!=(i=r(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[0]:i)?i.ID:i,t))?i:"")+'">\r\n '+(null!=(i=r(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[0]:i)?i.DN:i,t))?i:"")+"\r\n </label>\r\n"},20:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing,s=n.lambda;return' <div class="entry-item">\r\n <div class="password-label">\r\n'+(null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||o).call(r,"pageFlavor","classic","None",{name:"isSettingEqual",hash:{},fn:n.program(21,a,0),inverse:n.noop,data:a}))?i:"")+(null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||o).call(r,"forgotPasswordLinkLocation",{name:"doesSettingExist",hash:{},fn:n.program(23,a,0),inverse:n.program(26,a,0),data:a}))?i:"")+' </div>\r\n <div class="error itemLevel" aria-hidden="true">\r\n <p role="alert"></p>\r\n </div>\r\n <input type="password" id="'+(null!=(i=s(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.ID:i,t))?i:"")+'" name="'+(null!=(i=s(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.DN:i,t))?i:"")+'" placeholder="'+(null!=(i=s(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.DN:i,t))?i:"")+'" aria-label="'+(null!=(i=s(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.DN:i,t))?i:"")+'" autocomplete="current-password" aria-required="true"/>\r\n'+(null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||o).call(r,"forgotPasswordLinkLocation",{name:"doesSettingExist",hash:{},fn:n.program(29,a,0),inverse:n.program(32,a,0),data:a}))?i:"")+" </div>\r\n"},21:function(n,t,l,e,a){var i,r=n.lambda;return' <label for="'+(null!=(i=r(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.ID:i,t))?i:"")+'">'+(null!=(i=r(null!=(i=null!=(i=null!=t?t.AttributeFields:t)?i[1]:i)?i.DN:i,t))?i:"")+"</label>\r\n"},23:function(n,t,l,e,a){var i;return null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotPasswordLinkLocation","AfterLabel","None",{name:"isSettingEqual",hash:{},fn:n.program(24,a,0),inverse:n.noop,data:a}))?i:""},24:function(n,t,l,e,a){var i;return' <a id="forgotPassword" >'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotpassword_link",{name:"getContent",hash:{},data:a}))?i:"")+"</a>\r\n"},26:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||l.helperMissing).call(null!=t?t:n.nullContext||{},"pageFlavor",{name:"doesSettingExist",hash:{},fn:n.program(27,a,0),inverse:n.noop,data:a}))?i:""},27:function(n,t,l,e,a){var i;return(null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||l.helperMissing).call(null!=t?t:n.nullContext||{},"pageFlavor","classic","None",{name:"isSettingEqual",hash:{},fn:n.program(24,a,0),inverse:n.noop,data:a}))?i:"")+" "},29:function(n,t,l,e,a){var i;return null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotPasswordLinkLocation","AfterInput","None",{name:"isSettingEqual",hash:{},fn:n.program(30,a,0),inverse:n.noop,data:a}))?i:""},30:function(n,t,l,e,a){var i;return' <a id="forgotPassword" >'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotpassword_link",{name:"getContent",hash:{},data:a}))?i:"")+"</a>\r\n"},32:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||l.helperMissing).call(null!=t?t:n.nullContext||{},"pageFlavor",{name:"doesSettingExist",hash:{},fn:n.program(33,a,0),inverse:n.noop,data:a}))?i:""},33:function(n,t,l,e,a){var i;return(null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||l.helperMissing).call(null!=t?t:n.nullContext||{},"pageFlavor","oceanBlue,slateGray","None",{name:"isSettingEqual",hash:{},fn:n.program(34,a,0),inverse:n.noop,data:a}))?i:"")+" "},34:function(n,t,l,e,a){var i;return' <div class="forgot-password center-height">\r\n <a id="forgotPassword" >'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotpassword_link",{name:"getContent",hash:{},data:a}))?i:"")+"</a>\r\n </div>\r\n"},36:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing;return' <div class="'+(null!=(i=(l.getRememberMeClass||t&&t.getRememberMeClass||o).call(r,null!=t?t.AttributeFields:t,{name:"getRememberMeClass",hash:{},data:a}))?i:"")+'">\r\n <input id="rememberMe" type="checkbox" name="rememberMe" />\r\n <label for="rememberMe">'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"remember_me",{name:"getContent",hash:{},data:a}))?i:"")+"</label>\r\n </div>\r\n"},38:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomClaimsProviderSelections",{name:"doesSettingExist",hash:{},fn:n.program(39,a,0),inverse:n.noop,data:a}))?i:""},39:function(n,t,l,e,a){var i;return' <div class="claims-provider-list-text-links-bottom">\r\n'+(null!=(i=l.each.call(null!=t?t:n.nullContext||{},null!=t?t.textLinkList:t,{name:"each",hash:{},fn:n.program(40,a,0),inverse:n.noop,data:a}))?i:"")+" </div>\r\n"},40:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomClaimsProviderSelections",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(41,a,0),inverse:n.noop,data:a}))?i:""},41:function(n,t,l,e,a){var i,r=n.lambda;return' <div>\r\n <a id="'+(null!=(i=r(null!=t?t.id:t,t))?i:"")+'" class="text-link">'+(null!=(i=r(null!=t?t.description:t,t))?i:"")+"</a>\r\n </div>\r\n"},43:function(n,t,l,e,a){var i;return null!=(i=(l.isSettingEqual||t&&t.isSettingEqual||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotPasswordLinkLocation","AfterButtons","None",{name:"isSettingEqual",hash:{},fn:n.program(44,a,0),inverse:n.noop,data:a}))?i:""},44:function(n,t,l,e,a){var i;return' <a id="forgotPassword" >'+(null!=(i=(l.getContent||t&&t.getContent||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotpassword_link",{name:"getContent",hash:{},data:a}))?i:"")+"</a>\r\n"},46:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing;return' <div class="claims-provider-list-text-links">\r\n <p>\r\n '+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"createaccount_intro",{name:"getContent",hash:{},data:a}))?i:"")+"&nbsp;"+(null!=(i=(l.buildTextLinks||t&&t.buildTextLinks||o).call(r,null!=t?t.textLinkList:t,{name:"buildTextLinks",hash:{},data:a}))?i:"")+"\r\n </p>\r\n </div>\r\n"},48:function(n,t,l,e,a){var i;return null!=(i=l.if.call(null!=t?t:n.nullContext||{},null!=t?t.AttributeFields:t,{name:"if",hash:{},fn:n.program(49,a,0),inverse:n.noop,data:a}))?i:""},49:function(n,t,l,e,a){var i;return null!=(i=(l.isSettingTrue||t&&t.isSettingTrue||l.helperMissing).call(null!=t?t:n.nullContext||{},"showSignupLink",{name:"isSettingTrue",hash:{},fn:n.program(50,a,0),inverse:n.noop,data:a}))?i:""},50:function(n,t,l,e,a){var i,r=null!=t?t:n.nullContext||{},o=l.helperMissing;return' <div class="divider">\r\n <h2>'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"divider_title",{name:"getContent",hash:{},data:a}))?i:"")+'</h2>\r\n </div>\r\n <div class="create">\r\n <p>\r\n '+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"createaccount_intro",{name:"getContent",hash:{},data:a}))?i:"")+'<a id="createAccount" >'+(null!=(i=(l.getContent||t&&t.getContent||o).call(r,"createaccount_one_link",{name:"getContent",hash:{},data:a}))?i:"")+"</a>\r\n </p>\r\n </div>\r\n"},52:function(n,t,l,e,a,i,r){var o,s=null!=t?t:n.nullContext||{};return(null!=(o=l.if.call(s,null!=t?t.AttributeFields:t,{name:"if",hash:{},fn:n.program(15,a,0,i,r),inverse:n.noop,data:a}))?o:"")+(null!=(o=l.if.call(s,null!=t?t.buttonList:t,{name:"if",hash:{},fn:n.program(53,a,0,i,r),inverse:n.noop,data:a}))?o:"")},53:function(n,t,l,e,a,i,r){var o,s=null!=t?t:n.nullContext||{},u=l.helperMissing;return' <div class="claims-provider-list-buttons social" aria-label="'+(null!=(o=(l.getContent||t&&t.getContent||u).call(s,"social_intro",{name:"getContent",hash:{},data:a}))?o:"")+'" role="form">\r\n <div class="intro">\r\n <h2 aria-level="1">'+(null!=(o=(l.getContent||t&&t.getContent||u).call(s,"social_intro",{name:"getContent",hash:{},data:a}))?o:"")+'</h2>\r\n </div>\r\n <div class="options">\r\n'+(null!=(o=l.each.call(s,null!=t?t.buttonList:t,{name:"each",hash:{},fn:n.program(54,a,0,i,r),inverse:n.noop,data:a}))?o:"")+" </div>\r\n </div>\r\n"},54:function(n,t,l,e,a,i,r){var o;return null!=(o=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"forgotPasswordLinkOverride",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(6,a,0,i,r),inverse:n.program(55,a,0,i,r),data:a}))?o:""},55:function(n,t,l,e,a,i,r){var o;return null!=(o=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomClaimsProviderSelections",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(6,a,0,i,r),inverse:n.program(56,a,0,i,r),data:a}))?o:""},56:function(n,t,l,e,a,i,r){var o;return" <div>\r\n"+(null!=(o=l.if.call(null!=t?t:n.nullContext||{},a&&a.first,{name:"if",hash:{},fn:n.program(57,a,0,i,r),inverse:n.program(60,a,0,i,r),data:a}))?o:"")+" </div>\r\n "},57:function(n,t,l,e,a,i,r){var o,s=n.lambda;return' <button class="accountButton firstButton claims-provider-selection" id="'+(null!=(o=s(null!=t?t.id:t,t))?o:"")+'" role="link" '+(null!=(o=l.if.call(null!=t?t:n.nullContext||{},null!=r[1]?r[1].AttributeFields:r[1],{name:"if",hash:{},fn:n.program(6,a,0,i,r),inverse:n.program(58,a,0,i,r),data:a}))?o:"")+" >"+(null!=(o=s(null!=t?t.description:t,t))?o:"")+"</button>\r\n"},58:function(n,t,l,e,a){return"autofocus"},60:function(n,t,l,e,a){var i,r=n.lambda;return' <button class="accountButton claims-provider-selection" id="'+(null!=(i=r(null!=t?t.id:t,t))?i:"")+'" role="link">'+(null!=(i=r(null!=t?t.description:t,t))?i:"")+"</button>\r\n"},62:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingExist||t&&t.doesSettingExist||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomUnderFormClaimsProviderSelections",{name:"doesSettingExist",hash:{},fn:n.program(63,a,0),inverse:n.noop,data:a}))?i:""},63:function(n,t,l,e,a){var i;return' <div class="claims-provider-list-text-links-bottom-under-form">\r\n'+(null!=(i=l.each.call(null!=t?t:n.nullContext||{},null!=t?t.textLinkList:t,{name:"each",hash:{},fn:n.program(64,a,0),inverse:n.noop,data:a}))?i:"")+" </div>\r\n"},64:function(n,t,l,e,a){var i;return null!=(i=(l.doesSettingContain||t&&t.doesSettingContain||l.helperMissing).call(null!=t?t:n.nullContext||{},"bottomUnderFormClaimsProviderSelections",null!=t?t.id:t,"",{name:"doesSettingContain",hash:{},fn:n.program(65,a,0),inverse:n.noop,data:a}))?i:""},65:function(n,t,l,e,a){var i,r=n.lambda;return' <div>\r\n <a id="'+(null!=(i=r(null!=t?t.id:t,t))?i:"")+'" class="text-link">'+(null!=(i=r(null!=t?t.description:t,t))?i:"")+"</a>\r\n </div>\r\n"},compiler:[7,">= 4.0.0"],main:function(n,t,l,e,a,i,r){var o,s=null!=t?t:n.nullContext||{},u=l.helperMissing;return'<script id="Unified" type="text/x-handlebars-template">\r\n <div id="api" data-name="Unified">\r\n'+(null!=(o=(l.isSettingTrue||t&&t.isSettingTrue||u).call(s,"showHeading",{name:"isSettingTrue",hash:{},fn:n.program(1,a,0,i,r),inverse:n.noop,data:a}))?o:"")+(null!=(o=(l.isSettingEqual||t&&t.isSettingEqual||u).call(s,"pageFlavor","classic","None",{name:"isSettingEqual",hash:{},fn:n.program(3,a,0,i,r),inverse:n.noop,data:a}))?o:"")+(null!=(o=l.if.call(s,null!=t?t.AttributeFields:t,{name:"if",hash:{},fn:n.program(17,a,0,i,r),inverse:n.noop,data:a}))?o:"")+(null!=(o=(l.isSettingEqual||t&&t.isSettingEqual||u).call(s,"pageFlavor","oceanBlue,slateGray","None",{name:"isSettingEqual",hash:{},fn:n.program(52,a,0,i,r),inverse:n.noop,data:a}))?o:"")+(null!=(o=l.if.call(s,null!=t?t.textLinkList:t,{name:"if",hash:{},fn:n.program(62,a,0,i,r),inverse:n.noop,data:a}))?o:"")+" </div>\r\n<\/script>"},useData:!0,useDepths:!0}); /* endinject */ /* inject:element-handlebar-helpers.js */ (function (content, settings) { // Takes array of text links and uses a string template from the window content to build text and links Handlebars.registerHelper('buildTextLinks', function (textLinksList) { var signupLinks = getSignUpLinks(textLinksList); if (signupLinks.length === 1) { // The text for one link can have a {0}, but it is not required as with 2/3 links. var displayText = content.createaccount_one_link.replace('{0}', signupLinks[0].description); return new Handlebars.SafeString(getTextLink(displayText, signupLinks[0].id)); } var textLinksContent = ''; if (signupLinks.length === 2) { textLinksContent = content.createaccount_two_links; } else if (signupLinks.length === 3) { textLinksContent = content.createaccount_three_links; } signupLinks.forEach(function (linkData, idx) { var linkEl = getTextLink(linkData.description, linkData.id); textLinksContent = textLinksContent.replace('{' + idx + '}', linkEl); }); return new Handlebars.SafeString(textLinksContent); function getTextLink(displayText, id) { displayText = Handlebars.Utils.escapeExpression(displayText); id = Handlebars.Utils.escapeExpression(id); var linkEl = '<a class="text-link" id="' + id + '">' + displayText + '</a>'; return linkEl; } }); // returns boolean indicating whether the list of text links includes a sign up link Handlebars.registerHelper('ifSignUpLink', function (textLinksList, options) { return getSignUpLinks(textLinksList).length ? options.fn(this) : options.inverse(this); }); Handlebars.registerHelper('buildIntroString', function (attributeId) { var introString = content.local_intro_generic.replace('{0}', attributeId.toLowerCase()); return new Handlebars.SafeString(introString); }); function getControlType (type) { var controlType = null; switch (type) { case "TextBox": controlType = "text"; break; case "EmailBox": controlType = "email"; break; default: controlType = "text"; } return new Handlebars.SafeString(controlType); } Handlebars.registerHelper('getControlType', getControlType); Handlebars.registerHelper('buildInput', function (attributeFields, buttonList) { var type = getControlType(attributeFields.UX_INPUT_TYPE); var id = attributeFields.ID; var name = attributeFields.DN; var pattern = attributeFields.PAT; var value = attributeFields.PRE; var inputElement = '<input'; inputElement += ' type="' + type + '"'; inputElement += ' id="' + id + '"'; inputElement += ' name="' + name + '"'; inputElement += ' title="' + CONTENT.invalid_generic.replace("{0}", name) + '"'; if (attributeFields.PAT) { inputElement += ' pattern="' + pattern + '"'; } if (buttonList && (SETTINGS.config.pageFlavor === "oceanBlue" || SETTINGS.config.pageFlavor === "slateGray")) { inputElement += 'autofocus'; } else if (SETTINGS.config.pageFlavor === "classic") { inputElement += 'autofocus'; } inputElement += ' placeholder="' + name + '"'; if (value) { inputElement += ' value="' + value + '"'; } inputElement += ' aria-label="' + name + '"'; inputElement += ' />'; return new Handlebars.SafeString(inputElement); }); // helper to extract the text links that should be rendered as sign up links function getSignUpLinks (textLinksList) { var config = settings.config; var bottomClaimsProviderSelectionsSetting = config.bottomClaimsProviderSelections || ''; var bottomClaimsProviderSelections = bottomClaimsProviderSelectionsSetting.split(','); var bottomUnderFormClaimsProviderSelectionsSetting = config.bottomUnderFormClaimsProviderSelections || ''; var bottomUnderFormClaimsProviderSelections = bottomUnderFormClaimsProviderSelectionsSetting.split(','); return textLinksList.filter(function(link) { return bottomClaimsProviderSelections.indexOf(link.id) < 0 && bottomUnderFormClaimsProviderSelections.indexOf(link.id) < 0; }); } // helper to choose which rememberMe styling to use function getRememberMeClass (attributeFields) { var attributeID = attributeFields && attributeFields[0].ID; var leftAlign = "align-to-left"; var rememberMe = "rememberMe"; if (attributeID == 'phoneNumber' || attributeID == 'signInNamePhoneEmail') { return rememberMe + " " + leftAlign; } else { return rememberMe; } } Handlebars.registerHelper('getRememberMeClass', getRememberMeClass); }(CONTENT, SETTINGS)); /* endinject */ var $element = function ($diags, content, settings) { var _loginIdentifier, _loginPwd; var _serviceContentSet = false; var _serviceContent; // Javascript is single-threaded, and works on a message queue system, where each message is processed // completely before any other message is processed. For example, the callbacks for AJAX calls are added as // messages to the queue, allowing them to be processed later. // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop // This page may involve multiple roundtrips to the service in different scenarios, each of which may // change the state of the cookies. The intermediate states of some scenarios on this page are not // compatible with others (for example, waiting for the service to verify the user's username and password // may not play well with informing the service to redirect to a social IdP, as both write over cookie // state). On this page, we invoke a simple state mechanism, to cause buttons that trigger new calls to the // service to be considered no-ops while we wait for the last call to the service to complete. Given the // single-threaded nature of JavaScript, quickly setting the state to disable these buttons works so long as // the setting occurs within the context of a single message in the queue. // Note that this approach of setting up the event handlers exactly once during page initialization, and // having each handler check state in this manner allows for RPs with custom javascript to still attach to // the button click events without our code disabling such events as we change state. This also prevents // us from setting certain attributes after page inititalization, which would otherwise impact screen // readers and accessibility programs. If a service call is in progress, the click event should be handled // in such a manner that the event does not propagate (trigger the RPs events). This is done in javascript // by either calling event.stopImmediatePropagation(), and returning "false" from the event handler function. var _serviceCallInProgress = false; var _isRememberMeChecked = function () { var rememberMe = false; var rememberMeElement = document.getElementById('rememberMe'); if (rememberMeElement) { rememberMe = rememberMeElement.checked; } return rememberMe; }; // Makes a call to the service to see if the hint // is known to the tenant. var _signIn = function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } _serviceCallInProgress = true; // Show the working div var working = document.querySelectorAll("div .working"); $(working).css("display", "block"); // We need to switch to using the selfasserted api for validating the hint var localSettings = jQuery.extend(true, {}, settings); // Deep copy of original settings object localSettings.api = "SelfAsserted"; var requestData = buildRequestUri(); (function (trace) { $i2e.sendDataWithRetry( requestData, function (response) { // 200 means the user exists so send the // response forwarding the user to signin if (response.status == 200) { trace.append("T010"); var rememberMe = _isRememberMeChecked(); $i2e.redirectToServer("confirmed?rememberMe=" + rememberMe, true); return false; } // Toggles error unknown for all non-200 responses trace.append(response.message); _showGeneralError(response.message); }, function (error) { trace.append(error.text); _showGeneralError(error.text); }, function () { _serviceCallInProgress = false; // Hide the working div $(working).css("display", "none"); $diags.trace(trace); }, undefined, localSettings); }(new $trace("T018", true))); }; // Builds AJAX request based on user inputs var buildRequestUri = function () { var requestData = "request_type=RESPONSE&" + _loginIdentifier.id + "=" + encodeURIComponent(_loginIdentifier.value); if (_loginPwd) { requestData += "&" + _loginPwd.id + "=" + encodeURIComponent(_loginPwd.value); } return requestData; } // Shows the general error using the errorText // as the content var _showGeneralError = function (errorText) { var errorDiv = $("#api .localAccount").children(".error.pageLevel"); // Set the error text if (errorText) { errorDiv.children("p:first").text(errorText); } else { errorDiv.children("p:first").html(content.unknown_error); } // Set the aria-hidden and then show the error errorDiv.attr("aria-hidden", "false"); errorDiv.css("display", "block"); }; // Shows the input error div using the error text // as the content var _showError = function (parent, errorText) { var errorDiv = $(parent).children(".error.itemLevel"); // Set the error text errorDiv.children("p:first").html(errorText); // Set the aria-hidden and then show the error errorDiv.attr("aria-hidden", "false"); errorDiv.css("display", "block"); // Now highlight the input $(parent).children("input").addClass("highlightError"); }; // Resets all visible errors var _resetErrors = function () { $("#api .error").css("display", "none"); $("#api .error").attr("aria-hidden", "true"); // Remove any input highlights $("#api .highlightError").removeClass("highlightError"); }; // Resets the specific input var _resetError = function (parent) { // Reset the input var errorDiv = $(parent).children(".error.itemLevel"); // Set the aria-hidden and then show the error errorDiv.attr("aria-hidden", "true"); errorDiv.css("display", "none"); // Now highlight the input $(parent).children("input").removeClass("highlightError"); }; // Validate the loginIdentifier has been correctly populated var _validateLoginIdentifier = function () { // Reset the input _resetError(_loginIdentifier.parentElement); // Check if loginIdentifier has been populated if (!_loginIdentifier.value) { // Note: Do not reference displayName from html as it is unsafe. var errorText = content.requiredField_generic.replace('{0}', SA_FIELDS.AttributeFields[0].DN); _showError(_loginIdentifier.parentElement, errorText); return false; } // Predicate validation. var htmlErrorPrefix = "<br />&nbsp;&nbsp;- "; var validationDict = $predicateValidation.generateValidationDict(_loginIdentifier.id, _loginIdentifier.value, htmlErrorPrefix); var msg = validationDict.errorMsgs.join(","); if (!validationDict.isValid) { _showError(_loginIdentifier.parentElement, msg); return false; } else { // Check if loginIdentifier has valid text if (_loginIdentifier.pattern) { var valid = new RegExp(_loginIdentifier.pattern).exec(_loginIdentifier.value); if (!valid) { // Show the invalid error var claimById = $predicateValidation.findAttributeFieldByClaimId(_loginIdentifier.id); _showError(_loginIdentifier.parentElement, claimById.PAT_DESC); return false; } } } return true; }; // Validate the loginPwd has been correctly populated if the password field is shown var _validatePasswordIfFieldExists = function () { if (_loginPwd) { // Reset the input _resetError(_loginPwd.parentElement); // Check if loginPwd has been populated if (!_loginPwd.value) { _showError(_loginPwd.parentElement, content.requiredField_password); return false; } } return true; }; // Returns whether the left mouse key or enter button has been pressed // and specifically for buttons if the space bar has been pressed var _isEnter = function (event) { var key = event.keyCode || event.which; return (key === 0) || (key === 1 || key === 13) || ($(event.target).is("button") && key === 32); }; // Checks to see if the form is ready for // submission. Uses input validation to determine // if form is ok to submit var _doSubmit = function (event) { // Handle the left click of the mouse, the press of the enter button if (_isEnter(event)) { // Reset all errors _resetErrors(); var identifierResult = _validateLoginIdentifier(); var pswResult = _validatePasswordIfFieldExists(); if (!identifierResult) { _loginIdentifier.focus(); } else if(!pswResult) { _loginPwd.focus(); } else { // Try sign the user in _signIn(event); } } }; // If one of the social provider or local account signup buttons is selected, // redirect back using the alternative flow and the id of the // selected provider var _initializeClaimsProviderLinksAndButtons = function () { $("#api .accountButton").click(function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } var id = $(this).attr("id"); if (!$i2e.isSafari() || id.toLowerCase().indexOf("apple") < 0) { _serviceCallInProgress = true; } var url = "unified?claimsexchange=" + $(this).attr("id"); $i2e.redirectToServer(url, true); return; }); $("#api .text-link") .attr("href", function () { return $i2e.getRedirectLink("unified?claimsexchange=" + $(this).attr("id")); }) .click(function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } _serviceCallInProgress = true; }); } // Initializes the api, merging the api template and // the data followed by injection into the resource. On // successful injection, the eventhandlers are wired up var _initialize = function () { (function (trace) { _initializeClaimsProviderLinksAndButtons(); var forgotPasswordLinkOverride = SETTINGS.config["forgotPasswordLinkOverride"]; var forgotPasswordClick = function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } _serviceCallInProgress = true; if (_loginIdentifier.value) { // If the user has entered a logon identifier, include // in the redirect var current = $("#forgotPassword").attr("href"); $("#forgotPassword").attr("href", current + "&hint=" + encodeURI(_loginIdentifier.value)); } }; // If forgotPasswordLinkOverride is set in the policy, link the forgot password link to that claims exchange if (forgotPasswordLinkOverride) { $("#forgotPassword") .attr("href", $i2e.getRedirectLink("unified?claimsexchange=" + forgotPasswordLinkOverride)) .click(forgotPasswordClick); } // If forgotPasswordLinkOverride is not set in the policy, send the error to relying party when clicked else { // Pregenerate the href and add to the link. When clicked // check if we need to append the hint $("#forgotPassword") .attr("href", $i2e.getRedirectLink("forgotPassword")) .click(forgotPasswordClick); } if (SA_FIELDS.AttributeFields) { // Set the loginIdentifier and password fields _loginIdentifier = document.querySelectorAll("#" + SA_FIELDS.AttributeFields[0].ID)[0]; _loginIdentifier.value = $.trim(_loginIdentifier.value); if (SA_FIELDS.AttributeFields[1]) { _loginPwd = document.querySelectorAll("#" + SA_FIELDS.AttributeFields[1].ID)[0]; } // Reset all errors _resetErrors(); // Handle the enter event loginPwd _loginPwd && $(_loginPwd).on("keypress", function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } // Setting _serviceCallInProgress to true is handled in this method if the proper user inputs // have been entered _doSubmit(event); }); // Continue (next) button has been click $("#next").click(function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } // Setting _serviceCallInProgress to true is handled in this method if the proper user inputs // have been entered _doSubmit(event); }); // Pregenerate the href and add to the link. When clicked // check if we need to append the hint $("#createAccount") .attr("href", $i2e.getRedirectLink("unified?local=signup")) .click(function (event) { if (_serviceCallInProgress) { event.stopImmediatePropagation(); return false; } _serviceCallInProgress = true; if (settings.config.sendHintOnSignup === "true" && _loginIdentifier.value) { var current = $("#createAccount").attr("href"); $("#createAccount").attr("href", current + "&hint=" + encodeURI(_loginIdentifier.value)); } }); } $diags.trace(trace); }(new $trace("T003", true))); }; // Gets the generated service content var _getElementContent = function () { return _serviceContent; }; // Binds the template to the data and then // injects into the page var _generateServiceContent = function (handlebars) { (function (trace) { var list = CP.list || []; var buttonList = list.filter(function (provider) { return !provider.displayType || provider.displayType === "Button"; }); var textLinkList = list.filter(function(provider) { return provider.displayType === "SignUpLink" || provider.displayType === "TextLink"; }); // Checking pageFlavor is set in policy. var pageFlavor = SETTINGS.config["pageFlavor"]; if (!pageFlavor) { // See if it is set in query string parameter. var remoteResource = SETTINGS.remoteResource.toLowerCase(); pageFlavor = remoteResource.match(/pageFlavor=(\w+)/i); if (pageFlavor) { SETTINGS.config["pageFlavor"] = pageFlavor[1]; } } if (!pageFlavor) { SETTINGS.config["pageFlavor"] = "classic"; if (SETTINGS.remoteResource.toLowerCase().lastIndexOf("tenant/templates/azureblue/unified.cshtml") > 0) { SETTINGS.config["pageFlavor"] = "oceanBlue"; } else if (SETTINGS.remoteResource.toLowerCase().lastIndexOf("tenant/templates/msa/unified.cshtml") > 0) { SETTINGS.config["pageFlavor"] = "slateGray"; } } _serviceContent = $i2e.generateServiceContent( "unifiedssp", { buttonList: buttonList, AttributeFields: SA_FIELDS.AttributeFields, textLinkList: textLinkList }); $diags.trace(trace); }(new $trace("T005", true))); }; // Export the public methods return { initialize: _initialize, generateServiceContent: _generateServiceContent, getElementContent: _getElementContent, version: "unifiedssp-2.1.2" }; }($diags, CONTENT, SETTINGS); /* endinject */ // This files gets bundled with the element module. Once the element module has // loaded this script calls the generateServiceContent method on the element // in preparartion for initialization post CORS request. $element.generateServiceContent(); /* inject:jquery.simplemodal-1.4.5.min.js */ /* endinject */ /* inject:b2b-extension */ /* endinject */</script><title>Loading...</title><style>.no_display{display:none}.error_container h1{color:#333;font-size:1.2em;font-family:'Segoe UI Light',Segoe,'Segoe UI',SegoeUI-Light-final,Tahoma,Helvetica,Arial,sans-serif;font-weight:lighter}.error_container p{color:#333;font-size:.8em;font-family:'Segoe UI',Segoe,SegoeUI-Regular-final,Tahoma,Helvetica,Arial,sans-serif;margin:14px 0}</style></head><body><noscript><div id="no_js" ><div class="error_container"><div><h1>We can't sign you in</h1><p>Your browser is currently set to block JavaScript. You need to allow JavaScript to use this service.</p><p>To learn how to allow JavaScript or to find out whether your browser supports JavaScript, check the online help in your web browser.</p></div></div></div></noscript><div id="no_cookie" class="no_display"><div class="error_container"><div><h1>We can't sign you in</h1><p>Your browser is currently set to block cookies. You need to allow cookies to use this service.</p><p>Cookies are small text files stored on your computer that tell us when you're signed in. To learn how to allow cookies, check the online help in your web browser.</p><script nonce="KKzWz9U7NgjdEUvRU1AFbA==">if (!navigator.cookieEnabled) document.getElementById('no_cookie').className = ''; if (typeof $diags !== 'undefined') $diags.initializationSuccessful = true;</script></div></div></div></body></html>