!(function () { if ('ontouchstart' in window) { var t, e, n, r, i, a, o = {}; t = function (t, e) { return Math.abs(t[0] - e[0]) > 5 || Math.abs(t[1] - e[1]) > 5 }, e = function (t) { this.startXY = [t.touches[0].clientX, t.touches[0].clientY], this.threshold = !1 }, n = function (e) { return this.threshold ? !1 : void (this.threshold = t(this.startXY, [e.touches[0].clientX, e.touches[0].clientY])) }, r = function (e) { if (!this.threshold && !t(this.startXY, [e.changedTouches[0].clientX, e.changedTouches[0].clientY])) { var n = e.changedTouches[0], r = document.createEvent('MouseEvents'); r.initMouseEvent('click', !0, !0, window, 0, n.screenX, n.screenY, n.clientX, n.clientY, !1, !1, !1, !1, 0, null), r.simulated = !0, e.target.dispatchEvent(r) } }, i = function (t) { var e = Date.now(), n = e - o.time, r = t.clientX, i = t.clientY, u = [Math.abs(o.x - r), Math.abs(o.y - i)], s = a(t.target, 'A') || t.target, c = s.nodeName, l = c === 'A', h = window.navigator.standalone && l && t.target.getAttribute('href'); return o.time = e, o.x = r, o.y = i, (!t.simulated && (n < 500 || n < 1500 && u[0] < 50 && u[1] < 50) || h) && (t.preventDefault(), t.stopPropagation(), !h) ? !1 : (h && (window.location = s.getAttribute('href')), void (s && s.classList && (s.classList.add('energize-focus'), window.setTimeout(function () { s.classList.remove('energize-focus') }, 150)))) }, a = function (t, e) { for (var n = t; n !== document.body;) { if (!n || n.nodeName === e) return n; n = n.parentNode } return null }, document.addEventListener('touchstart', e, !1), document.addEventListener('touchmove', n, !1), document.addEventListener('touchend', r, !1), document.addEventListener('click', i, !0) } }()), /* Copyright 2008-2013 Concur Technologies, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ (function (t) { 'use strict'; function e (e) { if (e && e !== '') { $('.lang-selector a').removeClass('active'), $(".lang-selector a[data-language-name='" + e + "']").addClass('active'); for (var n = 0; n < s.length; n++)$('.highlight.' + s[n]).hide(); $('.highlight.' + e).show(), t.toc.calculateHeights(), $(window.location.hash).get(0) && $(window.location.hash).get(0).scrollIntoView(!0) } } function n (t) { return typeof t !== 'string' ? {} : (t = t.trim().replace(/^(\?|#|&)/, ''), t ? t.split('&').reduce(function (t, e) { var n = e.replace(/\+/g, ' ').split('='), r = n[0], i = n[1]; return r = decodeURIComponent(r), i = void 0 === i ? null : decodeURIComponent(i), t.hasOwnProperty(r) ? Array.isArray(t[r]) ? t[r].push(i) : t[r] = [t[r], i] : t[r] = i, t }, {}) : {}) } function r (t) { return t ? Object.keys(t).sort().map(function (e) { var n = t[e]; return Array.isArray(n) ? n.sort().map(function (t) { return encodeURIComponent(e) + '=' + encodeURIComponent(t) }).join('&') : encodeURIComponent(e) + '=' + encodeURIComponent(n) }).join('&') : '' } function i () { if (location.search.length >= 1) { var t = n(location.search).language; if (t) return t; if (jQuery.inArray(location.search.substr(1), s) != -1) return location.search.substr(1) } return !1 } function a (t) { var e = n(location.search); return e.language ? (e.language = t, r(e)) : t } function o (t) { if (history) { var e = window.location.hash; e && (e = e.replace(/^#+/, '')), history.pushState({}, '', '?' + a(t) + '#' + e), localStorage.setItem('language', t) } } function u (t) { var n = localStorage.getItem('language'); s = t; var r = i(); r ? (e(r), localStorage.setItem('language', r)) : e(n !== null && jQuery.inArray(n, s) != -1 ? n : s[0]) } var s = []; t.setupLanguages = u, t.activateLanguage = e, $(function () { $('.lang-selector a').on('click', function () { var t = $(this).data('language-name'); return o(t), e(t), !1 }), window.onpopstate = function () { e(i()) } }) }(window)), /*! jQuery UI - v1.11.3 - 2015-02-12 * http://jqueryui.com * Includes: widget.js * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ (function (t) { typeof define === 'function' && define.amd ? define(['jquery'], t) : t(jQuery) }(function (t) { /*! * jQuery UI Widget 1.11.3 * http://jqueryui.com * * Copyright jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/jQuery.widget/ */ var e = 0, n = Array.prototype.slice; t.cleanData = (function (e) { return function (n) { var r, i, a; for (a = 0; (i = n[a]) != null; a++) try { r = t._data(i, 'events'), r && r.remove && t(i).triggerHandler('remove') } catch (o) {}e(n) } }(t.cleanData)), t.widget = function (e, n, r) { var i, a, o, u, s = {}, c = e.split('.')[0]; return e = e.split('.')[1], i = c + '-' + e, r || (r = n, n = t.Widget), t.expr[':'][i.toLowerCase()] = function (e) { return !!t.data(e, i) }, t[c] = t[c] || {}, a = t[c][e], o = t[c][e] = function (t, e) { return this._createWidget ? void (arguments.length && this._createWidget(t, e)) : new o(t, e) }, t.extend(o, a, {version: r.version, _proto: t.extend({}, r), _childConstructors: []}), u = new n(), u.options = t.widget.extend({}, u.options), t.each(r, function (e, r) { return t.isFunction(r) ? void (s[e] = (function () { var t = function () { return n.prototype[e].apply(this, arguments) }, i = function (t) { return n.prototype[e].apply(this, t) }; return function () { var e, n = this._super, a = this._superApply; return this._super = t, this._superApply = i, e = r.apply(this, arguments), this._super = n, this._superApply = a, e } }())) : void (s[e] = r) }), o.prototype = t.widget.extend(u, {widgetEventPrefix: a ? u.widgetEventPrefix || e : e}, s, {constructor: o, namespace: c, widgetName: e, widgetFullName: i}), a ? (t.each(a._childConstructors, function (e, n) { var r = n.prototype; t.widget(r.namespace + '.' + r.widgetName, o, n._proto) }), delete a._childConstructors) : n._childConstructors.push(o), t.widget.bridge(e, o), o }, t.widget.extend = function (e) { for (var r, i, a = n.call(arguments, 1), o = 0, u = a.length; u > o; o++) for (r in a[o])i = a[o][r], a[o].hasOwnProperty(r) && void 0 !== i && (e[r] = t.isPlainObject(i) ? t.isPlainObject(e[r]) ? t.widget.extend({}, e[r], i) : t.widget.extend({}, i) : i); return e }, t.widget.bridge = function (e, r) { var i = r.prototype.widgetFullName || e; t.fn[e] = function (a) { var o = typeof a === 'string', u = n.call(arguments, 1), s = this; return o ? this.each(function () { var n, r = t.data(this, i); return a === 'instance' ? (s = r, !1) : r ? t.isFunction(r[a]) && a.charAt(0) !== '_' ? (n = r[a].apply(r, u), n !== r && void 0 !== n ? (s = n && n.jquery ? s.pushStack(n.get()) : n, !1) : void 0) : t.error("no such method '" + a + "' for " + e + ' widget instance') : t.error('cannot call methods on ' + e + " prior to initialization; attempted to call method '" + a + "'") }) : (u.length && (a = t.widget.extend.apply(null, [a].concat(u))), this.each(function () { var e = t.data(this, i); e ? (e.option(a || {}), e._init && e._init()) : t.data(this, i, new r(a, this)) })), s } }, t.Widget = function () {}, t.Widget._childConstructors = [], t.Widget.prototype = {widgetName: 'widget', widgetEventPrefix: '', defaultElement: '
', options: {disabled: !1, create: null}, _createWidget: function (n, r) { r = t(r || this.defaultElement || this)[0], this.element = t(r), this.uuid = e++, this.eventNamespace = '.' + this.widgetName + this.uuid, this.bindings = t(), this.hoverable = t(), this.focusable = t(), r !== this && (t.data(r, this.widgetFullName, this), this._on(!0, this.element, {remove: function (t) { t.target === r && this.destroy() }}), this.document = t(r.style ? r.ownerDocument : r.document || r), this.window = t(this.document[0].defaultView || this.document[0].parentWindow)), this.options = t.widget.extend({}, this.options, this._getCreateOptions(), n), this._create(), this._trigger('create', null, this._getCreateEventData()), this._init() }, _getCreateOptions: t.noop, _getCreateEventData: t.noop, _create: t.noop, _init: t.noop, destroy: function () { this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr('aria-disabled').removeClass(this.widgetFullName + '-disabled ui-state-disabled'), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass('ui-state-hover'), this.focusable.removeClass('ui-state-focus') }, _destroy: t.noop, widget: function () { return this.element }, option: function (e, n) { var r, i, a, o = e; if (arguments.length === 0) return t.widget.extend({}, this.options); if (typeof e === 'string') if (o = {}, r = e.split('.'), e = r.shift(), r.length) { for (i = o[e] = t.widget.extend({}, this.options[e]), a = 0; a < r.length - 1; a++)i[r[a]] = i[r[a]] || {}, i = i[r[a]]; if (e = r.pop(), arguments.length === 1) return void 0 === i[e] ? null : i[e]; i[e] = n } else { if (arguments.length === 1) return void 0 === this.options[e] ? null : this.options[e]; o[e] = n } return this._setOptions(o), this }, _setOptions: function (t) { var e; for (e in t) this._setOption(e, t[e]); return this }, _setOption: function (t, e) { return this.options[t] = e, t === 'disabled' && (this.widget().toggleClass(this.widgetFullName + '-disabled', !!e), e && (this.hoverable.removeClass('ui-state-hover'), this.focusable.removeClass('ui-state-focus'))), this }, enable: function () { return this._setOptions({disabled: !1}) }, disable: function () { return this._setOptions({disabled: !0}) }, _on: function (e, n, r) { var i, a = this; typeof e !== 'boolean' && (r = n, n = e, e = !1), r ? (n = i = t(n), this.bindings = this.bindings.add(n)) : (r = n, n = this.element, i = this.widget()), t.each(r, function (r, o) { function u () { return e || a.options.disabled !== !0 && !t(this).hasClass('ui-state-disabled') ? (typeof o === 'string' ? a[o] : o).apply(a, arguments) : void 0 } typeof o !== 'string' && (u.guid = o.guid = o.guid || u.guid || t.guid++); var s = r.match(/^([\w:-]*)\s*(.*)$/), c = s[1] + a.eventNamespace, l = s[2]; l ? i.delegate(l, c, u) : n.bind(c, u) }) }, _off: function (e, n) { n = (n || '').split(' ').join(this.eventNamespace + ' ') + this.eventNamespace, e.unbind(n).undelegate(n), this.bindings = t(this.bindings.not(e).get()), this.focusable = t(this.focusable.not(e).get()), this.hoverable = t(this.hoverable.not(e).get()) }, _delay: function (t, e) { function n () { return (typeof t === 'string' ? r[t] : t).apply(r, arguments) } var r = this; return setTimeout(n, e || 0) }, _hoverable: function (e) { this.hoverable = this.hoverable.add(e), this._on(e, {mouseenter: function (e) { t(e.currentTarget).addClass('ui-state-hover') }, mouseleave: function (e) { t(e.currentTarget).removeClass('ui-state-hover') }}) }, _focusable: function (e) { this.focusable = this.focusable.add(e), this._on(e, {focusin: function (e) { t(e.currentTarget).addClass('ui-state-focus') }, focusout: function (e) { t(e.currentTarget).removeClass('ui-state-focus') }}) }, _trigger: function (e, n, r) { var i, a, o = this.options[e]; if (r = r || {}, n = t.Event(n), n.type = (e === this.widgetEventPrefix ? e : this.widgetEventPrefix + e).toLowerCase(), n.target = this.element[0], a = n.originalEvent) for (i in a)i in n || (n[i] = a[i]); return this.element.trigger(n, r), !(t.isFunction(o) && o.apply(this.element[0], [n].concat(r)) === !1 || n.isDefaultPrevented()) }}, t.each({show: 'fadeIn', hide: 'fadeOut'}, function (e, n) { t.Widget.prototype['_' + e] = function (r, i, a) { typeof i === 'string' && (i = {effect: i}); var o, u = i ? i === !0 || typeof i === 'number' ? n : i.effect || n : e; i = i || {}, typeof i === 'number' && (i = {duration: i}), o = !t.isEmptyObject(i), i.complete = a, i.delay && r.delay(i.delay), o && t.effects && t.effects.effect[u] ? r[e](i) : u !== e && r[u] ? r[u](i.duration, i.easing, a) : r.queue(function (n) { t(this)[e](), a && a.call(r[0]), n() }) } }); t.widget })), /* jquery Tocify - v1.8.0 - 2013-09-16 * http://www.gregfranko.com/jquery.tocify.js/ * Copyright (c) 2013 Greg Franko; Licensed MIT * Modified lightly by Robert Lord to fix a bug I found, * and also so it adds ids to headers * also because I want height caching, since the * height lookup for h1s and h2s was causing serious * lag spikes below 30 fps */ (function (t) { 'use strict'; t(window.jQuery, window, document) }(function (t, e, n, r) { 'use strict'; var i = 'tocify', a = 'tocify-focus', o = 'tocify-hover', u = 'tocify-hide', s = 'tocify-header', c = '.' + s, l = 'tocify-subheader', h = '.' + l, f = 'tocify-item', d = '.' + f, p = 'tocify-extend-page', g = '.' + p; t.widget('toc.tocify', {version: '1.8.0', options: {context: 'body', ignoreSelector: null, selectors: 'h1, h2, h3', showAndHide: !0, showEffect: 'slideDown', showEffectSpeed: 'medium', hideEffect: 'slideUp', hideEffectSpeed: 'medium', smoothScroll: !0, smoothScrollSpeed: 'medium', scrollTo: 0, showAndHideOnScroll: !0, highlightOnScroll: !0, highlightOffset: 40, theme: 'bootstrap', extendPage: !0, extendPageOffset: 100, history: !0, scrollHistory: !1, hashGenerator: 'compact', highlightDefault: !0}, _create: function () { var n = this; n.tocifyWrapper = t('.tocify-wrapper'), n.extendPageScroll = !0, n.items = [], n._generateToc(), n.cachedHeights = [], n.cachedAnchors = [], n._addCSSClasses(), n.webkit = (function () { for (var t in e) if (t && t.toLowerCase().indexOf('webkit') !== -1) return !0; return !1 }()), n._setEventHandlers(), t(e).load(function () { n._setActiveElement(!0), t('html, body').promise().done(function () { setTimeout(function () { n.extendPageScroll = !1 }, 0) }) }) }, _generateToc: function () { var e, n, r = this, a = r.options.ignoreSelector; return e = t(this.options.context).find(this.options.selectors.indexOf(',') !== -1 ? this.options.selectors.replace(/ /g, '').substr(0, this.options.selectors.indexOf(',')) : this.options.selectors.replace(/ /g, '')), e.length ? (r.element.addClass(i), void e.each(function (e) { t(this).is(a) || (n = t('