mirror of https://codeberg.org/Sonoj/osamc.de
1 line
589 KiB
Plaintext
1 line
589 KiB
Plaintext
{"version":3,"file":"reveal.js","sources":["../node_modules/core-js/internals/global.js","../node_modules/core-js/internals/fails.js","../node_modules/core-js/internals/descriptors.js","../node_modules/core-js/internals/object-property-is-enumerable.js","../node_modules/core-js/internals/create-property-descriptor.js","../node_modules/core-js/internals/classof-raw.js","../node_modules/core-js/internals/indexed-object.js","../node_modules/core-js/internals/require-object-coercible.js","../node_modules/core-js/internals/to-indexed-object.js","../node_modules/core-js/internals/is-object.js","../node_modules/core-js/internals/to-primitive.js","../node_modules/core-js/internals/to-object.js","../node_modules/core-js/internals/has.js","../node_modules/core-js/internals/document-create-element.js","../node_modules/core-js/internals/ie8-dom-define.js","../node_modules/core-js/internals/object-get-own-property-descriptor.js","../node_modules/core-js/internals/an-object.js","../node_modules/core-js/internals/object-define-property.js","../node_modules/core-js/internals/create-non-enumerable-property.js","../node_modules/core-js/internals/set-global.js","../node_modules/core-js/internals/shared-store.js","../node_modules/core-js/internals/inspect-source.js","../node_modules/core-js/internals/native-weak-map.js","../node_modules/core-js/internals/shared.js","../node_modules/core-js/internals/uid.js","../node_modules/core-js/internals/internal-state.js","../node_modules/core-js/internals/shared-key.js","../node_modules/core-js/internals/hidden-keys.js","../node_modules/core-js/internals/redefine.js","../node_modules/core-js/internals/path.js","../node_modules/core-js/internals/get-built-in.js","../node_modules/core-js/internals/to-integer.js","../node_modules/core-js/internals/to-length.js","../node_modules/core-js/internals/to-absolute-index.js","../node_modules/core-js/internals/array-includes.js","../node_modules/core-js/internals/object-keys-internal.js","../node_modules/core-js/internals/enum-bug-keys.js","../node_modules/core-js/internals/object-get-own-property-names.js","../node_modules/core-js/internals/object-get-own-property-symbols.js","../node_modules/core-js/internals/own-keys.js","../node_modules/core-js/internals/copy-constructor-properties.js","../node_modules/core-js/internals/is-forced.js","../node_modules/core-js/internals/export.js","../node_modules/core-js/internals/object-keys.js","../node_modules/core-js/internals/object-assign.js","../node_modules/core-js/modules/es.object.assign.js","../node_modules/core-js/internals/engine-v8-version.js","../node_modules/core-js/internals/a-function.js","../node_modules/core-js/internals/function-bind-context.js","../node_modules/core-js/internals/is-array.js","../node_modules/core-js/internals/engine-user-agent.js","../node_modules/core-js/internals/native-symbol.js","../node_modules/core-js/internals/use-symbol-as-uid.js","../node_modules/core-js/internals/well-known-symbol.js","../node_modules/core-js/internals/array-species-create.js","../node_modules/core-js/internals/array-iteration.js","../node_modules/core-js/internals/array-method-has-species-support.js","../node_modules/core-js/modules/es.array.map.js","../node_modules/core-js/internals/create-property.js","../node_modules/core-js/modules/es.array.concat.js","../node_modules/core-js/internals/to-string-tag-support.js","../node_modules/core-js/internals/classof.js","../node_modules/core-js/internals/object-to-string.js","../node_modules/core-js/modules/es.object.to-string.js","../node_modules/core-js/internals/native-promise-constructor.js","../node_modules/core-js/internals/redefine-all.js","../node_modules/core-js/internals/a-possible-prototype.js","../node_modules/core-js/internals/object-set-prototype-of.js","../node_modules/core-js/internals/set-to-string-tag.js","../node_modules/core-js/internals/set-species.js","../node_modules/core-js/internals/iterators.js","../node_modules/core-js/internals/is-array-iterator-method.js","../node_modules/core-js/internals/get-iterator-method.js","../node_modules/core-js/internals/iterator-close.js","../node_modules/core-js/internals/iterate.js","../node_modules/core-js/internals/check-correctness-of-iteration.js","../node_modules/core-js/internals/task.js","../node_modules/core-js/internals/species-constructor.js","../node_modules/core-js/internals/html.js","../node_modules/core-js/internals/engine-is-ios.js","../node_modules/core-js/internals/engine-is-node.js","../node_modules/core-js/internals/microtask.js","../node_modules/core-js/internals/engine-is-webos-webkit.js","../node_modules/core-js/internals/new-promise-capability.js","../node_modules/core-js/internals/promise-resolve.js","../node_modules/core-js/modules/es.promise.js","../node_modules/core-js/internals/host-report-errors.js","../node_modules/core-js/internals/engine-is-browser.js","../node_modules/core-js/internals/an-instance.js","../node_modules/core-js/internals/perform.js","../node_modules/core-js/internals/array-method-is-strict.js","../node_modules/core-js/internals/array-for-each.js","../node_modules/core-js/modules/web.dom-collections.for-each.js","../node_modules/core-js/internals/dom-iterables.js","../node_modules/core-js/internals/call-with-safe-iteration-closing.js","../node_modules/core-js/internals/array-from.js","../node_modules/core-js/modules/es.array.from.js","../node_modules/core-js/internals/string-multibyte.js","../node_modules/core-js/internals/iterators-core.js","../node_modules/core-js/internals/correct-prototype-getter.js","../node_modules/core-js/internals/object-get-prototype-of.js","../node_modules/core-js/internals/object-create.js","../node_modules/core-js/internals/object-define-properties.js","../node_modules/core-js/internals/create-iterator-constructor.js","../node_modules/core-js/internals/define-iterator.js","../node_modules/core-js/modules/es.string.iterator.js","../node_modules/core-js/internals/whitespaces.js","../node_modules/core-js/internals/string-trim.js","../node_modules/core-js/internals/string-trim-forced.js","../node_modules/core-js/modules/es.string.trim.js","../node_modules/core-js/internals/object-get-own-property-names-external.js","../node_modules/core-js/internals/well-known-symbol-wrapped.js","../node_modules/core-js/internals/define-well-known-symbol.js","../node_modules/core-js/modules/es.symbol.js","../node_modules/core-js/modules/es.symbol.description.js","../node_modules/core-js/internals/regexp-flags.js","../node_modules/core-js/internals/regexp-sticky-helpers.js","../node_modules/core-js/internals/regexp-exec.js","../node_modules/core-js/modules/es.regexp.exec.js","../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../node_modules/core-js/internals/advance-string-index.js","../node_modules/core-js/internals/regexp-exec-abstract.js","../node_modules/core-js/modules/es.string.match.js","../node_modules/core-js/modules/es.array.splice.js","../node_modules/core-js/internals/is-regexp.js","../node_modules/core-js/modules/es.string.split.js","../node_modules/core-js/internals/inherit-if-required.js","../node_modules/core-js/modules/es.number.constructor.js","../node_modules/core-js/modules/es.function.name.js","../node_modules/core-js/modules/es.array.join.js","../js/utils/constants.js","../node_modules/core-js/internals/get-substitution.js","../node_modules/core-js/modules/es.string.replace.js","../node_modules/core-js/internals/same-value.js","../node_modules/core-js/modules/es.string.search.js","../js/utils/util.js","../js/utils/device.js","../node_modules/fitty/dist/fitty.module.js","../js/controllers/slidecontent.js","../js/controllers/slidenumber.js","../js/utils/color.js","../js/controllers/backgrounds.js","../node_modules/core-js/modules/es.object.keys.js","../node_modules/core-js/modules/es.array.filter.js","../node_modules/core-js/modules/es.array.slice.js","../js/controllers/autoanimate.js","../js/controllers/fragments.js","../js/controllers/overview.js","../js/controllers/keyboard.js","../js/controllers/location.js","../js/controllers/controls.js","../js/controllers/progress.js","../js/controllers/pointer.js","../node_modules/core-js/internals/object-to-array.js","../node_modules/core-js/modules/es.object.values.js","../js/utils/loader.js","../js/controllers/plugins.js","../node_modules/regenerator-runtime/runtime.js","../js/controllers/print.js","../js/controllers/touch.js","../js/controllers/focus.js","../js/controllers/notes.js","../node_modules/core-js/internals/array-fill.js","../node_modules/core-js/internals/add-to-unscopables.js","../node_modules/core-js/modules/es.array.fill.js","../js/components/playback.js","../js/config.js","../js/reveal.js","../js/index.js"],"sourcesContent":["var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var toObject = require('../internals/to-object');\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function hasOwn(it, key) {\n return hasOwnProperty.call(toObject(it), key);\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.12.1',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n if (wmhas.call(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (objectHas(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","module.exports = {};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] < 4 ? 1 : match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n return !String(Symbol()) ||\n // Chrome 38 Symbol has incorrect toString conversion\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n if (NATIVE_SYMBOL && has(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n }\n } return WellKnownSymbolsStore[name];\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_OUT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push.call(target, value); // filterOut\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterOut` method\n // https://github.com/tc39/proposal-array-filtering\n filterOut: createMethod(7)\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = toLength(E.length);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","/* eslint-disable no-proto -- safe */\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","module.exports = {};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var anObject = require('../internals/an-object');\n\nmodule.exports = function (iterator) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) {\n return anObject(returnMethod.call(iterator)).value;\n }\n};\n","var anObject = require('../internals/an-object');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar bind = require('../internals/function-bind-context');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (typeof iterFn != 'function') throw TypeError('Target is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = toLength(iterable.length); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && result instanceof Result) return result;\n } return new Result(false);\n }\n iterator = iterFn.call(iterable);\n }\n\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n if (typeof result == 'object' && result && result instanceof Result) return result;\n } return new Result(false);\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar bind = require('../internals/function-bind-context');\nvar html = require('../internals/html');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar location = global.location;\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\n\nvar run = function (id) {\n // eslint-disable-next-line no-prototype-builtins -- safe\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(id + '', location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func -- spec requirement\n (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n typeof postMessage == 'function' &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:iphone|ipod|ipad).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = promise.then;\n notify = function () {\n then.call(promise, flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar isObject = require('../internals/is-object');\nvar aFunction = require('../internals/a-function');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromiseConstructorPrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = typeof PromiseRejectionEvent == 'function';\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromiseConstructorPrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PromiseConstructor)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n task.call(global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n then.call(value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromiseConstructor, PROMISE);\n aFunction(executor);\n Internal.call(this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromiseConstructorPrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromiseConstructorPrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n state.reactions.push(reaction);\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && typeof NativePromise == 'function' && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n nativeThen.call(that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromiseConstructorPrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n capability.reject.call(undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n $promiseResolve.call(C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aFunction(C.resolve);\n iterate(iterable, function (promise) {\n $promiseResolve.call(C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length === 1 ? console.error(a) : console.error(a, b);\n }\n};\n","module.exports = typeof window == 'object';\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n}\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n iteratorClose(iterator);\n throw error;\n }\n};\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif ((!IS_PURE || NEW_ITERATOR_PROTOTYPE) && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject -- old IE */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\n\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return windowNames.slice();\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar isSymbol = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPrimitive(P, true);\n anObject(Attributes);\n if (has(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!has(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPrimitive(V, true);\n var enumerable = nativePropertyIsEnumerable.call(this, P);\n if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPrimitive(P, true);\n if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {\n result.push(AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = String(key);\n if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = [it];\n var index = 1;\n var $replacer;\n while (arguments.length > index) args.push(arguments[index++]);\n $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return $stringify.apply(null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) {\n createNonEnumerableProperty($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n var result = this instanceof SymbolWrapper\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n symbolPrototype.constructor = SymbolWrapper;\n\n var symbolToString = symbolPrototype.toString;\n var native = String(NativeSymbol('test')) == 'Symbol(test)';\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n defineProperty(symbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = isObject(this) ? this.valueOf() : this;\n var string = symbolToString.call(symbol);\n if (has(EmptyStringDescriptionStore, symbol)) return '';\n var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","'use strict';\n/* eslint-disable regexp/no-assertion-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\nvar shared = require('./shared');\n\nvar nativeExec = RegExp.prototype.exec;\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExpPrototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : regexp[MATCH];\n return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative(nativeMatch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toInteger(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar arrayPush = [].push;\nvar min = Math.min;\nvar MAX_UINT32 = 0xFFFFFFFF;\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return nativeSplit.call(string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output.length > lim ? output.slice(0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n}, UNSUPPORTED_Y);\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar FunctionPrototypeToString = FunctionPrototype.toString;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !(NAME in FunctionPrototype)) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return FunctionPrototypeToString.call(this).match(nameRE)[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar nativeJoin = [].join;\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","\nexport const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';\n\n// Methods that may not be invoked via the postMessage API\nexport const POST_MESSAGE_METHOD_BLACKLIST = /registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener/;\n\n// Regex for retrieving the fragment style from a class attribute\nexport const FRAGMENT_STYLE_REGEX = /fade-(down|up|right|left|out|in-then-out|in-then-semi-out)|semi-fade-out|current-visible|shrink|grow/;","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n});\n","// `SameValue` abstract operation\n// https://tc39.es/ecma262/#sec-samevalue\n// eslint-disable-next-line es/no-object-is -- safe\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar sameValue = require('../internals/same-value');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@search logic\nfixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.es/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = requireObjectCoercible(this);\n var searcher = regexp == undefined ? undefined : regexp[SEARCH];\n return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative(nativeSearch, regexp, this);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @param {object} a\n * @param {object} b\n */\nexport const extend = ( a, b ) => {\n\n\tfor( let i in b ) {\n\t\ta[ i ] = b[ i ];\n\t}\n\n\treturn a;\n\n}\n\n/**\n * querySelectorAll but returns an Array.\n */\nexport const queryAll = ( el, selector ) => {\n\n\treturn Array.from( el.querySelectorAll( selector ) );\n\n}\n\n/**\n * classList.toggle() with cross browser support\n */\nexport const toggleClass = ( el, className, value ) => {\n\tif( value ) {\n\t\tel.classList.add( className );\n\t}\n\telse {\n\t\tel.classList.remove( className );\n\t}\n}\n\n/**\n * Utility for deserializing a value.\n *\n * @param {*} value\n * @return {*}\n */\nexport const deserialize = ( value ) => {\n\n\tif( typeof value === 'string' ) {\n\t\tif( value === 'null' ) return null;\n\t\telse if( value === 'true' ) return true;\n\t\telse if( value === 'false' ) return false;\n\t\telse if( value.match( /^-?[\\d\\.]+$/ ) ) return parseFloat( value );\n\t}\n\n\treturn value;\n\n}\n\n/**\n * Measures the distance in pixels between point a\n * and point b.\n *\n * @param {object} a point with x/y properties\n * @param {object} b point with x/y properties\n *\n * @return {number}\n */\nexport const distanceBetween = ( a, b ) => {\n\n\tlet dx = a.x - b.x,\n\t\tdy = a.y - b.y;\n\n\treturn Math.sqrt( dx*dx + dy*dy );\n\n}\n\n/**\n * Applies a CSS transform to the target element.\n *\n * @param {HTMLElement} element\n * @param {string} transform\n */\nexport const transformElement = ( element, transform ) => {\n\n\telement.style.transform = transform;\n\n}\n\n/**\n * Element.matches with IE support.\n *\n * @param {HTMLElement} target The element to match\n * @param {String} selector The CSS selector to match\n * the element against\n *\n * @return {Boolean}\n */\nexport const matches = ( target, selector ) => {\n\n\tlet matchesMethod = target.matches || target.matchesSelector || target.msMatchesSelector;\n\n\treturn !!( matchesMethod && matchesMethod.call( target, selector ) );\n\n}\n\n/**\n * Find the closest parent that matches the given\n * selector.\n *\n * @param {HTMLElement} target The child element\n * @param {String} selector The CSS selector to match\n * the parents against\n *\n * @return {HTMLElement} The matched parent or null\n * if no matching parent was found\n */\nexport const closest = ( target, selector ) => {\n\n\t// Native Element.closest\n\tif( typeof target.closest === 'function' ) {\n\t\treturn target.closest( selector );\n\t}\n\n\t// Polyfill\n\twhile( target ) {\n\t\tif( matches( target, selector ) ) {\n\t\t\treturn target;\n\t\t}\n\n\t\t// Keep searching\n\t\ttarget = target.parentNode;\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Handling the fullscreen functionality via the fullscreen API\n *\n * @see http://fullscreen.spec.whatwg.org/\n * @see https://developer.mozilla.org/en-US/docs/DOM/Using_fullscreen_mode\n */\nexport const enterFullscreen = element => {\n\n\telement = element || document.documentElement;\n\n\t// Check which implementation is available\n\tlet requestMethod = element.requestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullscreen ||\n\t\t\t\t\t\telement.webkitRequestFullScreen ||\n\t\t\t\t\t\telement.mozRequestFullScreen ||\n\t\t\t\t\t\telement.msRequestFullscreen;\n\n\tif( requestMethod ) {\n\t\trequestMethod.apply( element );\n\t}\n\n}\n\n/**\n * Creates an HTML element and returns a reference to it.\n * If the element already exists the existing instance will\n * be returned.\n *\n * @param {HTMLElement} container\n * @param {string} tagname\n * @param {string} classname\n * @param {string} innerHTML\n *\n * @return {HTMLElement}\n */\nexport const createSingletonNode = ( container, tagname, classname, innerHTML='' ) => {\n\n\t// Find all nodes matching the description\n\tlet nodes = container.querySelectorAll( '.' + classname );\n\n\t// Check all matches to find one which is a direct child of\n\t// the specified container\n\tfor( let i = 0; i < nodes.length; i++ ) {\n\t\tlet testNode = nodes[i];\n\t\tif( testNode.parentNode === container ) {\n\t\t\treturn testNode;\n\t\t}\n\t}\n\n\t// If no node was found, create it now\n\tlet node = document.createElement( tagname );\n\tnode.className = classname;\n\tnode.innerHTML = innerHTML;\n\tcontainer.appendChild( node );\n\n\treturn node;\n\n}\n\n/**\n * Injects the given CSS styles into the DOM.\n *\n * @param {string} value\n */\nexport const createStyleSheet = ( value ) => {\n\n\tlet tag = document.createElement( 'style' );\n\ttag.type = 'text/css';\n\n\tif( value && value.length > 0 ) {\n\t\tif( tag.styleSheet ) {\n\t\t\ttag.styleSheet.cssText = value;\n\t\t}\n\t\telse {\n\t\t\ttag.appendChild( document.createTextNode( value ) );\n\t\t}\n\t}\n\n\tdocument.head.appendChild( tag );\n\n\treturn tag;\n\n}\n\n/**\n * Returns a key:value hash of all query params.\n */\nexport const getQueryHash = () => {\n\n\tlet query = {};\n\n\tlocation.search.replace( /[A-Z0-9]+?=([\\w\\.%-]*)/gi, a => {\n\t\tquery[ a.split( '=' ).shift() ] = a.split( '=' ).pop();\n\t} );\n\n\t// Basic deserialization\n\tfor( let i in query ) {\n\t\tlet value = query[ i ];\n\n\t\tquery[ i ] = deserialize( unescape( value ) );\n\t}\n\n\t// Do not accept new dependencies via query config to avoid\n\t// the potential of malicious script injection\n\tif( typeof query['dependencies'] !== 'undefined' ) delete query['dependencies'];\n\n\treturn query;\n\n}\n\n/**\n * Returns the remaining height within the parent of the\n * target element.\n *\n * remaining height = [ configured parent height ] - [ current parent height ]\n *\n * @param {HTMLElement} element\n * @param {number} [height]\n */\nexport const getRemainingHeight = ( element, height = 0 ) => {\n\n\tif( element ) {\n\t\tlet newHeight, oldHeight = element.style.height;\n\n\t\t// Change the .stretch element height to 0 in order find the height of all\n\t\t// the other elements\n\t\telement.style.height = '0px';\n\n\t\t// In Overview mode, the parent (.slide) height is set of 700px.\n\t\t// Restore it temporarily to its natural height.\n\t\telement.parentNode.style.height = 'auto';\n\n\t\tnewHeight = height - element.parentNode.offsetHeight;\n\n\t\t// Restore the old height, just in case\n\t\telement.style.height = oldHeight + 'px';\n\n\t\t// Clear the parent (.slide) height. .removeProperty works in IE9+\n\t\telement.parentNode.style.removeProperty('height');\n\n\t\treturn newHeight;\n\t}\n\n\treturn height;\n\n}","const UA = navigator.userAgent;\nconst testElement = document.createElement( 'div' );\n\nexport const isMobile = /(iphone|ipod|ipad|android)/gi.test( UA ) ||\n\t\t\t\t\t\t( navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 ); // iPadOS\n\nexport const isChrome = /chrome/i.test( UA ) && !/edge/i.test( UA );\n\nexport const isAndroid = /android/gi.test( UA );\n\n// Flags if we should use zoom instead of transform to scale\n// up slides. Zoom produces crisper results but has a lot of\n// xbrowser quirks so we only use it in whitelisted browsers.\nexport const supportsZoom = 'zoom' in testElement.style && !isMobile &&\n\t\t\t\t( isChrome || /Version\\/[\\d\\.]+.*Safari/.test( UA ) );","/*\n * fitty v2.3.3 - Snugly resizes text to fit its parent container\n * Copyright (c) 2020 Rik Schennink <rik@pqina.nl> (https://pqina.nl/)\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nexports.default = function (w) {\n\n // no window, early exit\n if (!w) return;\n\n // node list to array helper method\n var toArray = function toArray(nl) {\n return [].slice.call(nl);\n };\n\n // states\n var DrawState = {\n IDLE: 0,\n DIRTY_CONTENT: 1,\n DIRTY_LAYOUT: 2,\n DIRTY: 3\n };\n\n // all active fitty elements\n var fitties = [];\n\n // group all redraw calls till next frame, we cancel each frame request when a new one comes in. If no support for request animation frame, this is an empty function and supports for fitty stops.\n var redrawFrame = null;\n var requestRedraw = 'requestAnimationFrame' in w ? function () {\n w.cancelAnimationFrame(redrawFrame);\n redrawFrame = w.requestAnimationFrame(function () {\n return redraw(fitties.filter(function (f) {\n return f.dirty && f.active;\n }));\n });\n } : function () {};\n\n // sets all fitties to dirty so they are redrawn on the next redraw loop, then calls redraw\n var redrawAll = function redrawAll(type) {\n return function () {\n fitties.forEach(function (f) {\n return f.dirty = type;\n });\n requestRedraw();\n };\n };\n\n // redraws fitties so they nicely fit their parent container\n var redraw = function redraw(fitties) {\n\n // getting info from the DOM at this point should not trigger a reflow, let's gather as much intel as possible before triggering a reflow\n\n // check if styles of all fitties have been computed\n fitties.filter(function (f) {\n return !f.styleComputed;\n }).forEach(function (f) {\n f.styleComputed = computeStyle(f);\n });\n\n // restyle elements that require pre-styling, this triggers a reflow, please try to prevent by adding CSS rules (see docs)\n fitties.filter(shouldPreStyle).forEach(applyStyle);\n\n // we now determine which fitties should be redrawn\n var fittiesToRedraw = fitties.filter(shouldRedraw);\n\n // we calculate final styles for these fitties\n fittiesToRedraw.forEach(calculateStyles);\n\n // now we apply the calculated styles from our previous loop\n fittiesToRedraw.forEach(function (f) {\n applyStyle(f);\n markAsClean(f);\n });\n\n // now we dispatch events for all restyled fitties\n fittiesToRedraw.forEach(dispatchFitEvent);\n };\n\n var markAsClean = function markAsClean(f) {\n return f.dirty = DrawState.IDLE;\n };\n\n var calculateStyles = function calculateStyles(f) {\n\n // get available width from parent node\n f.availableWidth = f.element.parentNode.clientWidth;\n\n // the space our target element uses\n f.currentWidth = f.element.scrollWidth;\n\n // remember current font size\n f.previousFontSize = f.currentFontSize;\n\n // let's calculate the new font size\n f.currentFontSize = Math.min(Math.max(f.minSize, f.availableWidth / f.currentWidth * f.previousFontSize), f.maxSize);\n\n // if allows wrapping, only wrap when at minimum font size (otherwise would break container)\n f.whiteSpace = f.multiLine && f.currentFontSize === f.minSize ? 'normal' : 'nowrap';\n };\n\n // should always redraw if is not dirty layout, if is dirty layout, only redraw if size has changed\n var shouldRedraw = function shouldRedraw(f) {\n return f.dirty !== DrawState.DIRTY_LAYOUT || f.dirty === DrawState.DIRTY_LAYOUT && f.element.parentNode.clientWidth !== f.availableWidth;\n };\n\n // every fitty element is tested for invalid styles\n var computeStyle = function computeStyle(f) {\n\n // get style properties\n var style = w.getComputedStyle(f.element, null);\n\n // get current font size in pixels (if we already calculated it, use the calculated version)\n f.currentFontSize = parseFloat(style.getPropertyValue('font-size'));\n\n // get display type and wrap mode\n f.display = style.getPropertyValue('display');\n f.whiteSpace = style.getPropertyValue('white-space');\n };\n\n // determines if this fitty requires initial styling, can be prevented by applying correct styles through CSS\n var shouldPreStyle = function shouldPreStyle(f) {\n\n var preStyle = false;\n\n // if we already tested for prestyling we don't have to do it again\n if (f.preStyleTestCompleted) return false;\n\n // should have an inline style, if not, apply\n if (!/inline-/.test(f.display)) {\n preStyle = true;\n f.display = 'inline-block';\n }\n\n // to correctly calculate dimensions the element should have whiteSpace set to nowrap\n if (f.whiteSpace !== 'nowrap') {\n preStyle = true;\n f.whiteSpace = 'nowrap';\n }\n\n // we don't have to do this twice\n f.preStyleTestCompleted = true;\n\n return preStyle;\n };\n\n // apply styles to single fitty\n var applyStyle = function applyStyle(f) {\n f.element.style.whiteSpace = f.whiteSpace;\n f.element.style.display = f.display;\n f.element.style.fontSize = f.currentFontSize + 'px';\n };\n\n // dispatch a fit event on a fitty\n var dispatchFitEvent = function dispatchFitEvent(f) {\n f.element.dispatchEvent(new CustomEvent('fit', {\n detail: {\n oldValue: f.previousFontSize,\n newValue: f.currentFontSize,\n scaleFactor: f.currentFontSize / f.previousFontSize\n }\n }));\n };\n\n // fit method, marks the fitty as dirty and requests a redraw (this will also redraw any other fitty marked as dirty)\n var fit = function fit(f, type) {\n return function () {\n f.dirty = type;\n if (!f.active) return;\n requestRedraw();\n };\n };\n\n var init = function init(f) {\n\n // save some of the original CSS properties before we change them\n f.originalStyle = {\n whiteSpace: f.element.style.whiteSpace,\n display: f.element.style.display,\n fontSize: f.element.style.fontSize\n };\n\n // should we observe DOM mutations\n observeMutations(f);\n\n // this is a new fitty so we need to validate if it's styles are in order\n f.newbie = true;\n\n // because it's a new fitty it should also be dirty, we want it to redraw on the first loop\n f.dirty = true;\n\n // we want to be able to update this fitty\n fitties.push(f);\n };\n\n var destroy = function destroy(f) {\n return function () {\n\n // remove from fitties array\n fitties = fitties.filter(function (_) {\n return _.element !== f.element;\n });\n\n // stop observing DOM\n if (f.observeMutations) f.observer.disconnect();\n\n // reset the CSS properties we changes\n f.element.style.whiteSpace = f.originalStyle.whiteSpace;\n f.element.style.display = f.originalStyle.display;\n f.element.style.fontSize = f.originalStyle.fontSize;\n };\n };\n\n // add a new fitty, does not redraw said fitty\n var subscribe = function subscribe(f) {\n return function () {\n if (f.active) return;\n f.active = true;\n requestRedraw();\n };\n };\n\n // remove an existing fitty\n var unsubscribe = function unsubscribe(f) {\n return function () {\n return f.active = false;\n };\n };\n\n var observeMutations = function observeMutations(f) {\n\n // no observing?\n if (!f.observeMutations) return;\n\n // start observing mutations\n f.observer = new MutationObserver(fit(f, DrawState.DIRTY_CONTENT));\n\n // start observing\n f.observer.observe(f.element, f.observeMutations);\n };\n\n // default mutation observer settings\n var mutationObserverDefaultSetting = {\n subtree: true,\n childList: true,\n characterData: true\n };\n\n // default fitty options\n var defaultOptions = {\n minSize: 16,\n maxSize: 512,\n multiLine: true,\n observeMutations: 'MutationObserver' in w ? mutationObserverDefaultSetting : false\n };\n\n // array of elements in, fitty instances out\n function fittyCreate(elements, options) {\n\n // set options object\n var fittyOptions = _extends({}, defaultOptions, options);\n\n // create fitties\n var publicFitties = elements.map(function (element) {\n\n // create fitty instance\n var f = _extends({}, fittyOptions, {\n\n // internal options for this fitty\n element: element,\n active: true\n });\n\n // initialise this fitty\n init(f);\n\n // expose API\n return {\n element: element,\n fit: fit(f, DrawState.DIRTY),\n unfreeze: subscribe(f),\n freeze: unsubscribe(f),\n unsubscribe: destroy(f)\n };\n });\n\n // call redraw on newly initiated fitties\n requestRedraw();\n\n // expose fitties\n return publicFitties;\n }\n\n // fitty creation function\n function fitty(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n // if target is a string\n return typeof target === 'string' ?\n\n // treat it as a querySelector\n fittyCreate(toArray(document.querySelectorAll(target)), options) :\n\n // create single fitty\n fittyCreate([target], options)[0];\n }\n\n // handles viewport changes, redraws all fitties, but only does so after a timeout\n var resizeDebounce = null;\n var onWindowResized = function onWindowResized() {\n w.clearTimeout(resizeDebounce);\n resizeDebounce = w.setTimeout(redrawAll(DrawState.DIRTY_LAYOUT), fitty.observeWindowDelay);\n };\n\n // define observe window property, so when we set it to true or false events are automatically added and removed\n var events = ['resize', 'orientationchange'];\n Object.defineProperty(fitty, 'observeWindow', {\n set: function set(enabled) {\n var method = (enabled ? 'add' : 'remove') + 'EventListener';\n events.forEach(function (e) {\n w[method](e, onWindowResized);\n });\n }\n });\n\n // fitty global properties (by setting observeWindow to true the events above get added)\n fitty.observeWindow = true;\n fitty.observeWindowDelay = 100;\n\n // public fit all method, will force redraw no matter what\n fitty.fitAll = redrawAll(DrawState.DIRTY);\n\n // export our fitty function, we don't want to keep it to our selves\n return fitty;\n}(typeof window === 'undefined' ? null : window);","import { HORIZONTAL_SLIDES_SELECTOR, VERTICAL_SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, closest } from '../utils/util.js'\nimport { isMobile } from '../utils/device.js'\n\nimport fitty from 'fitty';\n\n/**\n * Handles loading, unloading and playback of slide\n * content such as images, videos and iframes.\n */\nexport default class SlideContent {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.startEmbeddedIframe = this.startEmbeddedIframe.bind( this );\n\n\t}\n\n\t/**\n\t * Should the given element be preloaded?\n\t * Decides based on local element attributes and global config.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tshouldPreload( element ) {\n\n\t\t// Prefer an explicit global preload setting\n\t\tlet preload = this.Reveal.getConfig().preloadIframes;\n\n\t\t// If no global setting is available, fall back on the element's\n\t\t// own preload setting\n\t\tif( typeof preload !== 'boolean' ) {\n\t\t\tpreload = element.hasAttribute( 'data-preload' );\n\t\t}\n\n\t\treturn preload;\n\t}\n\n\t/**\n\t * Called when the given slide is within the configured view\n\t * distance. Shows the slide element and loads any content\n\t * that is set to load lazily (data-src).\n\t *\n\t * @param {HTMLElement} slide Slide to show\n\t */\n\tload( slide, options = {} ) {\n\n\t\t// Show the slide element\n\t\tslide.style.display = this.Reveal.getConfig().display;\n\n\t\t// Media elements with data-src attributes\n\t\tqueryAll( slide, 'img[data-src], video[data-src], audio[data-src], iframe[data-src]' ).forEach( element => {\n\t\t\tif( element.tagName !== 'IFRAME' || this.shouldPreload( element ) ) {\n\t\t\t\telement.setAttribute( 'src', element.getAttribute( 'data-src' ) );\n\t\t\t\telement.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\telement.removeAttribute( 'data-src' );\n\t\t\t}\n\t\t} );\n\n\t\t// Media elements with <source> children\n\t\tqueryAll( slide, 'video, audio' ).forEach( media => {\n\t\t\tlet sources = 0;\n\n\t\t\tqueryAll( media, 'source[data-src]' ).forEach( source => {\n\t\t\t\tsource.setAttribute( 'src', source.getAttribute( 'data-src' ) );\n\t\t\t\tsource.removeAttribute( 'data-src' );\n\t\t\t\tsource.setAttribute( 'data-lazy-loaded', '' );\n\t\t\t\tsources += 1;\n\t\t\t} );\n\n\t\t\t// Enable inline video playback in mobile Safari\n\t\t\tif( isMobile && media.tagName === 'VIDEO' ) {\n\t\t\t\tmedia.setAttribute( 'playsinline', '' );\n\t\t\t}\n\n\t\t\t// If we rewrote sources for this video/audio element, we need\n\t\t\t// to manually tell it to load from its new origin\n\t\t\tif( sources > 0 ) {\n\t\t\t\tmedia.load();\n\t\t\t}\n\t\t} );\n\n\n\t\t// Show the corresponding background element\n\t\tlet background = slide.slideBackgroundElement;\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'block';\n\n\t\t\tlet backgroundContent = slide.slideBackgroundContentElement;\n\t\t\tlet backgroundIframe = slide.getAttribute( 'data-background-iframe' );\n\n\t\t\t// If the background contains media, load it\n\t\t\tif( background.hasAttribute( 'data-loaded' ) === false ) {\n\t\t\t\tbackground.setAttribute( 'data-loaded', 'true' );\n\n\t\t\t\tlet backgroundImage = slide.getAttribute( 'data-background-image' ),\n\t\t\t\t\tbackgroundVideo = slide.getAttribute( 'data-background-video' ),\n\t\t\t\t\tbackgroundVideoLoop = slide.hasAttribute( 'data-background-video-loop' ),\n\t\t\t\t\tbackgroundVideoMuted = slide.hasAttribute( 'data-background-video-muted' );\n\n\t\t\t\t// Images\n\t\t\t\tif( backgroundImage ) {\n\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t}).join( ',' );\n\t\t\t\t}\n\t\t\t\t// Videos\n\t\t\t\telse if ( backgroundVideo && !this.Reveal.isSpeakerNotes() ) {\n\t\t\t\t\tlet video = document.createElement( 'video' );\n\n\t\t\t\t\tif( backgroundVideoLoop ) {\n\t\t\t\t\t\tvideo.setAttribute( 'loop', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif( backgroundVideoMuted ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Enable inline playback in mobile Safari\n\t\t\t\t\t//\n\t\t\t\t\t// Mute is required for video to play when using\n\t\t\t\t\t// swipe gestures to navigate since they don't\n\t\t\t\t\t// count as direct user actions :'(\n\t\t\t\t\tif( isMobile ) {\n\t\t\t\t\t\tvideo.muted = true;\n\t\t\t\t\t\tvideo.setAttribute( 'playsinline', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support comma separated lists of video sources\n\t\t\t\t\tbackgroundVideo.split( ',' ).forEach( source => {\n\t\t\t\t\t\tvideo.innerHTML += '<source src=\"'+ source +'\">';\n\t\t\t\t\t} );\n\n\t\t\t\t\tbackgroundContent.appendChild( video );\n\t\t\t\t}\n\t\t\t\t// Iframes\n\t\t\t\telse if( backgroundIframe && options.excludeIframes !== true ) {\n\t\t\t\t\tlet iframe = document.createElement( 'iframe' );\n\t\t\t\t\tiframe.setAttribute( 'allowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'mozallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'webkitallowfullscreen', '' );\n\t\t\t\t\tiframe.setAttribute( 'allow', 'autoplay' );\n\n\t\t\t\t\tiframe.setAttribute( 'data-src', backgroundIframe );\n\n\t\t\t\t\tiframe.style.width = '100%';\n\t\t\t\t\tiframe.style.height = '100%';\n\t\t\t\t\tiframe.style.maxHeight = '100%';\n\t\t\t\t\tiframe.style.maxWidth = '100%';\n\n\t\t\t\t\tbackgroundContent.appendChild( iframe );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start loading preloadable iframes\n\t\t\tlet backgroundIframeElement = backgroundContent.querySelector( 'iframe[data-src]' );\n\t\t\tif( backgroundIframeElement ) {\n\n\t\t\t\t// Check if this iframe is eligible to be preloaded\n\t\t\t\tif( this.shouldPreload( background ) && !/autoplay=(1|true|yes)/gi.test( backgroundIframe ) ) {\n\t\t\t\t\tif( backgroundIframeElement.getAttribute( 'src' ) !== backgroundIframe ) {\n\t\t\t\t\t\tbackgroundIframeElement.setAttribute( 'src', backgroundIframe );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.layout( slide );\n\n\t}\n\n\t/**\n\t * Applies JS-dependent layout helpers for the given slide,\n\t * if there are any.\n\t */\n\tlayout( slide ) {\n\n\t\t// Autosize text with the r-fit-text class based on the\n\t\t// size of its container. This needs to happen after the\n\t\t// slide is visible in order to measure the text.\n\t\tArray.from( slide.querySelectorAll( '.r-fit-text' ) ).forEach( element => {\n\t\t\tfitty( element, {\n\t\t\t\tminSize: 24,\n\t\t\t\tmaxSize: this.Reveal.getConfig().height * 0.8,\n\t\t\t\tobserveMutations: false,\n\t\t\t\tobserveWindow: false\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unloads and hides the given slide. This is called when the\n\t * slide is moved outside of the configured view distance.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tunload( slide ) {\n\n\t\t// Hide the slide element\n\t\tslide.style.display = 'none';\n\n\t\t// Hide the corresponding background element\n\t\tlet background = this.Reveal.getSlideBackground( slide );\n\t\tif( background ) {\n\t\t\tbackground.style.display = 'none';\n\n\t\t\t// Unload any background iframes\n\t\t\tqueryAll( background, 'iframe[src]' ).forEach( element => {\n\t\t\t\telement.removeAttribute( 'src' );\n\t\t\t} );\n\t\t}\n\n\t\t// Reset lazy-loaded media elements with src attributes\n\t\tqueryAll( slide, 'video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]' ).forEach( element => {\n\t\t\telement.setAttribute( 'data-src', element.getAttribute( 'src' ) );\n\t\t\telement.removeAttribute( 'src' );\n\t\t} );\n\n\t\t// Reset lazy-loaded media elements with <source> children\n\t\tqueryAll( slide, 'video[data-lazy-loaded] source[src], audio source[src]' ).forEach( source => {\n\t\t\tsource.setAttribute( 'data-src', source.getAttribute( 'src' ) );\n\t\t\tsource.removeAttribute( 'src' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Enforces origin-specific format rules for embedded media.\n\t */\n\tformatEmbeddedContent() {\n\n\t\tlet _appendParamToIframeSource = ( sourceAttribute, sourceURL, param ) => {\n\t\t\tqueryAll( this.Reveal.getSlidesElement(), 'iframe['+ sourceAttribute +'*=\"'+ sourceURL +'\"]' ).forEach( el => {\n\t\t\t\tlet src = el.getAttribute( sourceAttribute );\n\t\t\t\tif( src && src.indexOf( param ) === -1 ) {\n\t\t\t\t\tel.setAttribute( sourceAttribute, src + ( !/\\?/.test( src ) ? '?' : '&' ) + param );\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\t// YouTube frames must include \"?enablejsapi=1\"\n\t\t_appendParamToIframeSource( 'src', 'youtube.com/embed/', 'enablejsapi=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'youtube.com/embed/', 'enablejsapi=1' );\n\n\t\t// Vimeo frames must include \"?api=1\"\n\t\t_appendParamToIframeSource( 'src', 'player.vimeo.com/', 'api=1' );\n\t\t_appendParamToIframeSource( 'data-src', 'player.vimeo.com/', 'api=1' );\n\n\t}\n\n\t/**\n\t * Start playback of any embedded content inside of\n\t * the given element.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstartEmbeddedContent( element ) {\n\n\t\tif( element && !this.Reveal.isSpeakerNotes() ) {\n\n\t\t\t// Restart GIFs\n\t\t\tqueryAll( element, 'img[src$=\".gif\"]' ).forEach( el => {\n\t\t\t\t// Setting the same unchanged source like this was confirmed\n\t\t\t\t// to work in Chrome, FF & Safari\n\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'src' ) );\n\t\t\t} );\n\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = el.hasAttribute( 'data-autoplay' ) || !!closest( el, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\tif( autoplay && typeof el.play === 'function' ) {\n\n\t\t\t\t\t// If the media is ready, start playback\n\t\t\t\t\tif( el.readyState > 1 ) {\n\t\t\t\t\t\tthis.startEmbeddedMedia( { target: el } );\n\t\t\t\t\t}\n\t\t\t\t\t// Mobile devices never fire a loaded event so instead\n\t\t\t\t\t// of waiting, we initiate playback\n\t\t\t\t\telse if( isMobile ) {\n\t\t\t\t\t\tlet promise = el.play();\n\n\t\t\t\t\t\t// If autoplay does not work, ensure that the controls are visible so\n\t\t\t\t\t\t// that the viewer can start the media on their own\n\t\t\t\t\t\tif( promise && typeof promise.catch === 'function' && el.controls === false ) {\n\t\t\t\t\t\t\tpromise.catch( () => {\n\t\t\t\t\t\t\t\tel.controls = true;\n\n\t\t\t\t\t\t\t\t// Once the video does start playing, hide the controls again\n\t\t\t\t\t\t\t\tel.addEventListener( 'play', () => {\n\t\t\t\t\t\t\t\t\tel.controls = false;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If the media isn't loaded, wait before playing\n\t\t\t\t\telse {\n\t\t\t\t\t\tel.removeEventListener( 'loadeddata', this.startEmbeddedMedia ); // remove first to avoid dupes\n\t\t\t\t\t\tel.addEventListener( 'loadeddata', this.startEmbeddedMedia );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Normal iframes\n\t\t\tqueryAll( element, 'iframe[src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.startEmbeddedIframe( { target: el } );\n\t\t\t} );\n\n\t\t\t// Lazy loading iframes\n\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\tif( closest( el, '.fragment' ) && !closest( el, '.fragment.visible' ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif( el.getAttribute( 'src' ) !== el.getAttribute( 'data-src' ) ) {\n\t\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe ); // remove first to avoid dupes\n\t\t\t\t\tel.addEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t\t\tel.setAttribute( 'src', el.getAttribute( 'data-src' ) );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Starts playing an embedded video/audio element after\n\t * it has finished loading.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedMedia( event ) {\n\n\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\tif( isAttachedToDOM && isVisible ) {\n\t\t\tevent.target.currentTime = 0;\n\t\t\tevent.target.play();\n\t\t}\n\n\t\tevent.target.removeEventListener( 'loadeddata', this.startEmbeddedMedia );\n\n\t}\n\n\t/**\n\t * \"Starts\" the content of an embedded iframe using the\n\t * postMessage API.\n\t *\n\t * @param {object} event\n\t */\n\tstartEmbeddedIframe( event ) {\n\n\t\tlet iframe = event.target;\n\n\t\tif( iframe && iframe.contentWindow ) {\n\n\t\t\tlet isAttachedToDOM = !!closest( event.target, 'html' ),\n\t\t\t\tisVisible \t\t= !!closest( event.target, '.present' );\n\n\t\t\tif( isAttachedToDOM && isVisible ) {\n\n\t\t\t\t// Prefer an explicit global autoplay setting\n\t\t\t\tlet autoplay = this.Reveal.getConfig().autoPlayMedia;\n\n\t\t\t\t// If no global setting is available, fall back on the element's\n\t\t\t\t// own autoplay setting\n\t\t\t\tif( typeof autoplay !== 'boolean' ) {\n\t\t\t\t\tautoplay = iframe.hasAttribute( 'data-autoplay' ) || !!closest( iframe, '.slide-background' );\n\t\t\t\t}\n\n\t\t\t\t// YouTube postMessage API\n\t\t\t\tif( /youtube\\.com\\/embed\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Vimeo postMessage API\n\t\t\t\telse if( /player\\.vimeo\\.com\\//.test( iframe.getAttribute( 'src' ) ) && autoplay ) {\n\t\t\t\t\tiframe.contentWindow.postMessage( '{\"method\":\"play\"}', '*' );\n\t\t\t\t}\n\t\t\t\t// Generic postMessage API\n\t\t\t\telse {\n\t\t\t\t\tiframe.contentWindow.postMessage( 'slide:start', '*' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Stop playback of any embedded content inside of\n\t * the targeted slide.\n\t *\n\t * @param {HTMLElement} element\n\t */\n\tstopEmbeddedContent( element, options = {} ) {\n\n\t\toptions = extend( {\n\t\t\t// Defaults\n\t\t\tunloadIframes: true\n\t\t}, options );\n\n\t\tif( element && element.parentNode ) {\n\t\t\t// HTML5 media elements\n\t\t\tqueryAll( element, 'video, audio' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && typeof el.pause === 'function' ) {\n\t\t\t\t\tel.setAttribute('data-paused-by-reveal', '');\n\t\t\t\t\tel.pause();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Generic postMessage API for non-lazy loaded iframes\n\t\t\tqueryAll( element, 'iframe' ).forEach( el => {\n\t\t\t\tif( el.contentWindow ) el.contentWindow.postMessage( 'slide:stop', '*' );\n\t\t\t\tel.removeEventListener( 'load', this.startEmbeddedIframe );\n\t\t\t});\n\n\t\t\t// YouTube postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"youtube.com/embed/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Vimeo postMessage API\n\t\t\tqueryAll( element, 'iframe[src*=\"player.vimeo.com/\"]' ).forEach( el => {\n\t\t\t\tif( !el.hasAttribute( 'data-ignore' ) && el.contentWindow && typeof el.contentWindow.postMessage === 'function' ) {\n\t\t\t\t\tel.contentWindow.postMessage( '{\"method\":\"pause\"}', '*' );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif( options.unloadIframes === true ) {\n\t\t\t\t// Unload lazy-loaded iframes\n\t\t\t\tqueryAll( element, 'iframe[data-src]' ).forEach( el => {\n\t\t\t\t\t// Only removing the src doesn't actually unload the frame\n\t\t\t\t\t// in all browsers (Firefox) so we set it to blank first\n\t\t\t\t\tel.setAttribute( 'src', 'about:blank' );\n\t\t\t\t\tel.removeAttribute( 'src' );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n}","/**\n * Handles the display of reveal.js' optional slide number.\n */\nexport default class SlideNumber {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'slide-number';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tlet slideNumberDisplay = 'none';\n\t\tif( config.slideNumber && !this.Reveal.isPrintingPDF() ) {\n\t\t\tif( config.showSlideNumber === 'all' ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t\telse if( config.showSlideNumber === 'speaker' && this.Reveal.isSpeakerNotes() ) {\n\t\t\t\tslideNumberDisplay = 'block';\n\t\t\t}\n\t\t}\n\n\t\tthis.element.style.display = slideNumberDisplay;\n\n\t}\n\n\t/**\n\t * Updates the slide number to match the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update slide number if enabled\n\t\tif( this.Reveal.getConfig().slideNumber && this.element ) {\n\t\t\tthis.element.innerHTML = this.getSlideNumber();\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns the HTML string corresponding to the current slide\n\t * number, including formatting.\n\t */\n\tgetSlideNumber( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet value;\n\t\tlet format = 'h.v';\n\n\t\tif ( typeof config.slideNumber === 'function' ) {\n\t\t\tvalue = config.slideNumber( slide );\n\t\t} else {\n\t\t\t// Check if a custom number format is available\n\t\t\tif( typeof config.slideNumber === 'string' ) {\n\t\t\t\tformat = config.slideNumber;\n\t\t\t}\n\n\t\t\t// If there are ONLY vertical slides in this deck, always use\n\t\t\t// a flattened slide number\n\t\t\tif( !/c/.test( format ) && this.Reveal.getHorizontalSlides().length === 1 ) {\n\t\t\t\tformat = 'c';\n\t\t\t}\n\n\t\t\t// Offset the current slide number by 1 to make it 1-indexed\n\t\t\tlet horizontalOffset = slide && slide.dataset.visibility === 'uncounted' ? 0 : 1;\n\n\t\t\tvalue = [];\n\t\t\tswitch( format ) {\n\t\t\t\tcase 'c':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'c/t':\n\t\t\t\t\tvalue.push( this.Reveal.getSlidePastCount( slide ) + horizontalOffset, '/', this.Reveal.getTotalSlides() );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tlet indices = this.Reveal.getIndices( slide );\n\t\t\t\t\tvalue.push( indices.h + horizontalOffset );\n\t\t\t\t\tlet sep = format === 'h/v' ? '/' : '.';\n\t\t\t\t\tif( this.Reveal.isVerticalSlide( slide ) ) value.push( sep, indices.v + 1 );\n\t\t\t}\n\t\t}\n\n\t\tlet url = '#' + this.Reveal.location.getHash( slide );\n\t\treturn this.formatNumber( value[0], value[1], value[2], url );\n\n\t}\n\n\t/**\n\t * Applies HTML formatting to a slide number before it's\n\t * written to the DOM.\n\t *\n\t * @param {number} a Current slide\n\t * @param {string} delimiter Character to separate slide numbers\n\t * @param {(number|*)} b Total slides\n\t * @param {HTMLElement} [url='#'+locationHash()] The url to link to\n\t * @return {string} HTML string fragment\n\t */\n\tformatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHash() ) {\n\n\t\tif( typeof b === 'number' && !isNaN( b ) ) {\n\t\t\treturn `<a href=\"${url}\">\n\t\t\t\t\t<span class=\"slide-number-a\">${a}</span>\n\t\t\t\t\t<span class=\"slide-number-delimiter\">${delimiter}</span>\n\t\t\t\t\t<span class=\"slide-number-b\">${b}</span>\n\t\t\t\t\t</a>`;\n\t\t}\n\t\telse {\n\t\t\treturn `<a href=\"${url}\">\n\t\t\t\t\t<span class=\"slide-number-a\">${a}</span>\n\t\t\t\t\t</a>`;\n\t\t}\n\n\t}\n\n}","/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string representation of a color\n * @example\n * colorToRgb('#000');\n * @example\n * colorToRgb('#000000');\n * @example\n * colorToRgb('rgb(0,0,0)');\n * @example\n * colorToRgb('rgba(0,0,0)');\n *\n * @return {{r: number, g: number, b: number, [a]: number}|null}\n */\nexport const colorToRgb = ( color ) => {\n\n\tlet hex3 = color.match( /^#([0-9a-f]{3})$/i );\n\tif( hex3 && hex3[1] ) {\n\t\thex3 = hex3[1];\n\t\treturn {\n\t\t\tr: parseInt( hex3.charAt( 0 ), 16 ) * 0x11,\n\t\t\tg: parseInt( hex3.charAt( 1 ), 16 ) * 0x11,\n\t\t\tb: parseInt( hex3.charAt( 2 ), 16 ) * 0x11\n\t\t};\n\t}\n\n\tlet hex6 = color.match( /^#([0-9a-f]{6})$/i );\n\tif( hex6 && hex6[1] ) {\n\t\thex6 = hex6[1];\n\t\treturn {\n\t\t\tr: parseInt( hex6.substr( 0, 2 ), 16 ),\n\t\t\tg: parseInt( hex6.substr( 2, 2 ), 16 ),\n\t\t\tb: parseInt( hex6.substr( 4, 2 ), 16 )\n\t\t};\n\t}\n\n\tlet rgb = color.match( /^rgb\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/i );\n\tif( rgb ) {\n\t\treturn {\n\t\t\tr: parseInt( rgb[1], 10 ),\n\t\t\tg: parseInt( rgb[2], 10 ),\n\t\t\tb: parseInt( rgb[3], 10 )\n\t\t};\n\t}\n\n\tlet rgba = color.match( /^rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\,\\s*([\\d]+|[\\d]*.[\\d]+)\\s*\\)$/i );\n\tif( rgba ) {\n\t\treturn {\n\t\t\tr: parseInt( rgba[1], 10 ),\n\t\t\tg: parseInt( rgba[2], 10 ),\n\t\t\tb: parseInt( rgba[3], 10 ),\n\t\t\ta: parseFloat( rgba[4] )\n\t\t};\n\t}\n\n\treturn null;\n\n}\n\n/**\n * Calculates brightness on a scale of 0-255.\n *\n * @param {string} color See colorToRgb for supported formats.\n * @see {@link colorToRgb}\n */\nexport const colorBrightness = ( color ) => {\n\n\tif( typeof color === 'string' ) color = colorToRgb( color );\n\n\tif( color ) {\n\t\treturn ( color.r * 299 + color.g * 587 + color.b * 114 ) / 1000;\n\t}\n\n\treturn null;\n\n}","import { queryAll } from '../utils/util.js'\nimport { colorToRgb, colorBrightness } from '../utils/color.js'\n\n/**\n * Creates and updates slide backgrounds.\n */\nexport default class Backgrounds {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'backgrounds';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Creates the slide background elements and appends them\n\t * to the background container. One element is created per\n\t * slide no matter if the given slide has visible background.\n\t */\n\tcreate() {\n\n\t\t// Clear prior backgrounds\n\t\tthis.element.innerHTML = '';\n\t\tthis.element.classList.add( 'no-transition' );\n\n\t\t// Iterate over all horizontal slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( slideh => {\n\n\t\t\tlet backgroundStack = this.createBackground( slideh, this.element );\n\n\t\t\t// Iterate over all vertical slides\n\t\t\tqueryAll( slideh, 'section' ).forEach( slidev => {\n\n\t\t\t\tthis.createBackground( slidev, backgroundStack );\n\n\t\t\t\tbackgroundStack.classList.add( 'stack' );\n\n\t\t\t} );\n\n\t\t} );\n\n\t\t// Add parallax background if specified\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tthis.element.style.backgroundImage = 'url(\"' + this.Reveal.getConfig().parallaxBackgroundImage + '\")';\n\t\t\tthis.element.style.backgroundSize = this.Reveal.getConfig().parallaxBackgroundSize;\n\t\t\tthis.element.style.backgroundRepeat = this.Reveal.getConfig().parallaxBackgroundRepeat;\n\t\t\tthis.element.style.backgroundPosition = this.Reveal.getConfig().parallaxBackgroundPosition;\n\n\t\t\t// Make sure the below properties are set on the element - these properties are\n\t\t\t// needed for proper transitions to be set on the element via CSS. To remove\n\t\t\t// annoying background slide-in effect when the presentation starts, apply\n\t\t\t// these properties after short time delay\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.add( 'has-parallax-background' );\n\t\t\t}, 1 );\n\n\t\t}\n\t\telse {\n\n\t\t\tthis.element.style.backgroundImage = '';\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'has-parallax-background' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a background for the given slide.\n\t *\n\t * @param {HTMLElement} slide\n\t * @param {HTMLElement} container The element that the background\n\t * should be appended to\n\t * @return {HTMLElement} New background div\n\t */\n\tcreateBackground( slide, container ) {\n\n\t\t// Main slide background element\n\t\tlet element = document.createElement( 'div' );\n\t\telement.className = 'slide-background ' + slide.className.replace( /present|past|future/, '' );\n\n\t\t// Inner background element that wraps images/videos/iframes\n\t\tlet contentElement = document.createElement( 'div' );\n\t\tcontentElement.className = 'slide-background-content';\n\n\t\telement.appendChild( contentElement );\n\t\tcontainer.appendChild( element );\n\n\t\tslide.slideBackgroundElement = element;\n\t\tslide.slideBackgroundContentElement = contentElement;\n\n\t\t// Syncs the background to reflect all current background settings\n\t\tthis.sync( slide );\n\n\t\treturn element;\n\n\t}\n\n\t/**\n\t * Renders all of the visual properties of a slide background\n\t * based on the various background attributes.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tsync( slide ) {\n\n\t\tconst element = slide.slideBackgroundElement,\n\t\t\tcontentElement = slide.slideBackgroundContentElement;\n\n\t\tconst data = {\n\t\t\tbackground: slide.getAttribute( 'data-background' ),\n\t\t\tbackgroundSize: slide.getAttribute( 'data-background-size' ),\n\t\t\tbackgroundImage: slide.getAttribute( 'data-background-image' ),\n\t\t\tbackgroundVideo: slide.getAttribute( 'data-background-video' ),\n\t\t\tbackgroundIframe: slide.getAttribute( 'data-background-iframe' ),\n\t\t\tbackgroundColor: slide.getAttribute( 'data-background-color' ),\n\t\t\tbackgroundRepeat: slide.getAttribute( 'data-background-repeat' ),\n\t\t\tbackgroundPosition: slide.getAttribute( 'data-background-position' ),\n\t\t\tbackgroundTransition: slide.getAttribute( 'data-background-transition' ),\n\t\t\tbackgroundOpacity: slide.getAttribute( 'data-background-opacity' ),\n\t\t};\n\n\t\tconst dataPreload = slide.hasAttribute( 'data-preload' );\n\n\t\t// Reset the prior background state in case this is not the\n\t\t// initial sync\n\t\tslide.classList.remove( 'has-dark-background' );\n\t\tslide.classList.remove( 'has-light-background' );\n\n\t\telement.removeAttribute( 'data-loaded' );\n\t\telement.removeAttribute( 'data-background-hash' );\n\t\telement.removeAttribute( 'data-background-size' );\n\t\telement.removeAttribute( 'data-background-transition' );\n\t\telement.style.backgroundColor = '';\n\n\t\tcontentElement.style.backgroundSize = '';\n\t\tcontentElement.style.backgroundRepeat = '';\n\t\tcontentElement.style.backgroundPosition = '';\n\t\tcontentElement.style.backgroundImage = '';\n\t\tcontentElement.style.opacity = '';\n\t\tcontentElement.innerHTML = '';\n\n\t\tif( data.background ) {\n\t\t\t// Auto-wrap image urls in url(...)\n\t\t\tif( /^(http|file|\\/\\/)/gi.test( data.background ) || /\\.(svg|png|jpg|jpeg|gif|bmp)([?#\\s]|$)/gi.test( data.background ) ) {\n\t\t\t\tslide.setAttribute( 'data-background-image', data.background );\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.background = data.background;\n\t\t\t}\n\t\t}\n\n\t\t// Create a hash for this combination of background settings.\n\t\t// This is used to determine when two slide backgrounds are\n\t\t// the same.\n\t\tif( data.background || data.backgroundColor || data.backgroundImage || data.backgroundVideo || data.backgroundIframe ) {\n\t\t\telement.setAttribute( 'data-background-hash', data.background +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundSize +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundImage +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundVideo +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundIframe +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundColor +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundRepeat +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundPosition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundTransition +\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata.backgroundOpacity );\n\t\t}\n\n\t\t// Additional and optional background properties\n\t\tif( data.backgroundSize ) element.setAttribute( 'data-background-size', data.backgroundSize );\n\t\tif( data.backgroundColor ) element.style.backgroundColor = data.backgroundColor;\n\t\tif( data.backgroundTransition ) element.setAttribute( 'data-background-transition', data.backgroundTransition );\n\n\t\tif( dataPreload ) element.setAttribute( 'data-preload', '' );\n\n\t\t// Background image options are set on the content wrapper\n\t\tif( data.backgroundSize ) contentElement.style.backgroundSize = data.backgroundSize;\n\t\tif( data.backgroundRepeat ) contentElement.style.backgroundRepeat = data.backgroundRepeat;\n\t\tif( data.backgroundPosition ) contentElement.style.backgroundPosition = data.backgroundPosition;\n\t\tif( data.backgroundOpacity ) contentElement.style.opacity = data.backgroundOpacity;\n\n\t\t// If this slide has a background color, we add a class that\n\t\t// signals if it is light or dark. If the slide has no background\n\t\t// color, no class will be added\n\t\tlet contrastColor = data.backgroundColor;\n\n\t\t// If no bg color was found, or it cannot be converted by colorToRgb, check the computed background\n\t\tif( !contrastColor || !colorToRgb( contrastColor ) ) {\n\t\t\tlet computedBackgroundStyle = window.getComputedStyle( element );\n\t\t\tif( computedBackgroundStyle && computedBackgroundStyle.backgroundColor ) {\n\t\t\t\tcontrastColor = computedBackgroundStyle.backgroundColor;\n\t\t\t}\n\t\t}\n\n\t\tif( contrastColor ) {\n\t\t\tconst rgb = colorToRgb( contrastColor );\n\n\t\t\t// Ignore fully transparent backgrounds. Some browsers return\n\t\t\t// rgba(0,0,0,0) when reading the computed background color of\n\t\t\t// an element with no background\n\t\t\tif( rgb && rgb.a !== 0 ) {\n\t\t\t\tif( colorBrightness( contrastColor ) < 128 ) {\n\t\t\t\t\tslide.classList.add( 'has-dark-background' );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslide.classList.add( 'has-light-background' );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the background elements to reflect the current\n\t * slide.\n\t *\n\t * @param {boolean} includeAll If true, the backgrounds of\n\t * all vertical slides (not just the present) will be updated.\n\t */\n\tupdate( includeAll = false ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tlet currentBackground = null;\n\n\t\t// Reverse past/future classes when in RTL mode\n\t\tlet horizontalPast = this.Reveal.getConfig().rtl ? 'future' : 'past',\n\t\t\thorizontalFuture = this.Reveal.getConfig().rtl ? 'past' : 'future';\n\n\t\t// Update the classes of all backgrounds to match the\n\t\t// states of their slides (past/present/future)\n\t\tArray.from( this.element.childNodes ).forEach( ( backgroundh, h ) => {\n\n\t\t\tbackgroundh.classList.remove( 'past', 'present', 'future' );\n\n\t\t\tif( h < indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalPast );\n\t\t\t}\n\t\t\telse if ( h > indices.h ) {\n\t\t\t\tbackgroundh.classList.add( horizontalFuture );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundh.classList.add( 'present' );\n\n\t\t\t\t// Store a reference to the current background element\n\t\t\t\tcurrentBackground = backgroundh;\n\t\t\t}\n\n\t\t\tif( includeAll || h === indices.h ) {\n\t\t\t\tqueryAll( backgroundh, '.slide-background' ).forEach( ( backgroundv, v ) => {\n\n\t\t\t\t\tbackgroundv.classList.remove( 'past', 'present', 'future' );\n\n\t\t\t\t\tif( v < indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'past' );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( v > indices.v ) {\n\t\t\t\t\t\tbackgroundv.classList.add( 'future' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundv.classList.add( 'present' );\n\n\t\t\t\t\t\t// Only if this is the present horizontal and vertical slide\n\t\t\t\t\t\tif( h === indices.h ) currentBackground = backgroundv;\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t}\n\n\t\t} );\n\n\t\t// Stop content inside of previous backgrounds\n\t\tif( this.previousBackground ) {\n\n\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( this.previousBackground, { unloadIframes: !this.Reveal.slideContent.shouldPreload( this.previousBackground ) } );\n\n\t\t}\n\n\t\t// Start content in the current background\n\t\tif( currentBackground ) {\n\n\t\t\tthis.Reveal.slideContent.startEmbeddedContent( currentBackground );\n\n\t\t\tlet currentBackgroundContent = currentBackground.querySelector( '.slide-background-content' );\n\t\t\tif( currentBackgroundContent ) {\n\n\t\t\t\tlet backgroundImageURL = currentBackgroundContent.style.backgroundImage || '';\n\n\t\t\t\t// Restart GIFs (doesn't work in Firefox)\n\t\t\t\tif( /\\.gif/i.test( backgroundImageURL ) ) {\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = '';\n\t\t\t\t\twindow.getComputedStyle( currentBackgroundContent ).opacity;\n\t\t\t\t\tcurrentBackgroundContent.style.backgroundImage = backgroundImageURL;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Don't transition between identical backgrounds. This\n\t\t\t// prevents unwanted flicker.\n\t\t\tlet previousBackgroundHash = this.previousBackground ? this.previousBackground.getAttribute( 'data-background-hash' ) : null;\n\t\t\tlet currentBackgroundHash = currentBackground.getAttribute( 'data-background-hash' );\n\t\t\tif( currentBackgroundHash && currentBackgroundHash === previousBackgroundHash && currentBackground !== this.previousBackground ) {\n\t\t\t\tthis.element.classList.add( 'no-transition' );\n\t\t\t}\n\n\t\t\tthis.previousBackground = currentBackground;\n\n\t\t}\n\n\t\t// If there's a background brightness flag for this slide,\n\t\t// bubble it to the .reveal container\n\t\tif( currentSlide ) {\n\t\t\t[ 'has-light-background', 'has-dark-background' ].forEach( classToBubble => {\n\t\t\t\tif( currentSlide.classList.contains( classToBubble ) ) {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.add( classToBubble );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.getRevealElement().classList.remove( classToBubble );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t}\n\n\t\t// Allow the first background to apply without transition\n\t\tsetTimeout( () => {\n\t\t\tthis.element.classList.remove( 'no-transition' );\n\t\t}, 1 );\n\n\t}\n\n\t/**\n\t * Updates the position of the parallax background based\n\t * on the current slide index.\n\t */\n\tupdateParallax() {\n\n\t\tlet indices = this.Reveal.getIndices();\n\n\t\tif( this.Reveal.getConfig().parallaxBackgroundImage ) {\n\n\t\t\tlet horizontalSlides = this.Reveal.getHorizontalSlides(),\n\t\t\t\tverticalSlides = this.Reveal.getVerticalSlides();\n\n\t\t\tlet backgroundSize = this.element.style.backgroundSize.split( ' ' ),\n\t\t\t\tbackgroundWidth, backgroundHeight;\n\n\t\t\tif( backgroundSize.length === 1 ) {\n\t\t\t\tbackgroundWidth = backgroundHeight = parseInt( backgroundSize[0], 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbackgroundWidth = parseInt( backgroundSize[0], 10 );\n\t\t\t\tbackgroundHeight = parseInt( backgroundSize[1], 10 );\n\t\t\t}\n\n\t\t\tlet slideWidth = this.element.offsetWidth,\n\t\t\t\thorizontalSlideCount = horizontalSlides.length,\n\t\t\t\thorizontalOffsetMultiplier,\n\t\t\t\thorizontalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundHorizontal === 'number' ) {\n\t\t\t\thorizontalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundHorizontal;\n\t\t\t}\n\t\t\telse {\n\t\t\t\thorizontalOffsetMultiplier = horizontalSlideCount > 1 ? ( backgroundWidth - slideWidth ) / ( horizontalSlideCount-1 ) : 0;\n\t\t\t}\n\n\t\t\thorizontalOffset = horizontalOffsetMultiplier * indices.h * -1;\n\n\t\t\tlet slideHeight = this.element.offsetHeight,\n\t\t\t\tverticalSlideCount = verticalSlides.length,\n\t\t\t\tverticalOffsetMultiplier,\n\t\t\t\tverticalOffset;\n\n\t\t\tif( typeof this.Reveal.getConfig().parallaxBackgroundVertical === 'number' ) {\n\t\t\t\tverticalOffsetMultiplier = this.Reveal.getConfig().parallaxBackgroundVertical;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tverticalOffsetMultiplier = ( backgroundHeight - slideHeight ) / ( verticalSlideCount-1 );\n\t\t\t}\n\n\t\t\tverticalOffset = verticalSlideCount > 0 ? verticalOffsetMultiplier * indices.v : 0;\n\n\t\t\tthis.element.style.backgroundPosition = horizontalOffset + 'px ' + -verticalOffset + 'px';\n\n\t\t}\n\n\t}\n\n}\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar nativeSlice = [].slice;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = toLength(O.length);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return nativeSlice.call(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util.js'\nimport { FRAGMENT_STYLE_REGEX } from '../utils/constants.js'\n\n// Counter used to generate unique IDs for auto-animated elements\nlet autoAnimateCounter = 0;\n\n/**\n * Automatically animates matching elements across\n * slides with the [data-auto-animate] attribute.\n */\nexport default class AutoAnimate {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Runs an auto-animation between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t */\n\trun( fromSlide, toSlide ) {\n\n\t\t// Clean up after prior animations\n\t\tthis.reset();\n\n\t\tlet allSlides = this.Reveal.getSlides();\n\t\tlet toSlideIndex = allSlides.indexOf( toSlide );\n\t\tlet fromSlideIndex = allSlides.indexOf( fromSlide );\n\n\t\t// Ensure that both slides are auto-animate targets with the same data-auto-animate-id value\n\t\t// (including null if absent on both) and that data-auto-animate-restart isn't set on the\n\t\t// physically latter slide (independent of slide direction)\n\t\tif( fromSlide.hasAttribute( 'data-auto-animate' ) && toSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t&& fromSlide.getAttribute( 'data-auto-animate-id' ) === toSlide.getAttribute( 'data-auto-animate-id' ) \n\t\t\t\t&& !( toSlideIndex > fromSlideIndex ? toSlide : fromSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t// Create a new auto-animate sheet\n\t\t\tthis.autoAnimateStyleSheet = this.autoAnimateStyleSheet || createStyleSheet();\n\n\t\t\tlet animationOptions = this.getAutoAnimateOptions( toSlide );\n\n\t\t\t// Set our starting state\n\t\t\tfromSlide.dataset.autoAnimate = 'pending';\n\t\t\ttoSlide.dataset.autoAnimate = 'pending';\n\n\t\t\t// Flag the navigation direction, needed for fragment buildup\n\t\t\tanimationOptions.slideDirection = toSlideIndex > fromSlideIndex ? 'forward' : 'backward';\n\n\t\t\t// Inject our auto-animate styles for this transition\n\t\t\tlet css = this.getAutoAnimatableElements( fromSlide, toSlide ).map( elements => {\n\t\t\t\treturn this.autoAnimateElements( elements.from, elements.to, elements.options || {}, animationOptions, autoAnimateCounter++ );\n\t\t\t} );\n\n\t\t\t// Animate unmatched elements, if enabled\n\t\t\tif( toSlide.dataset.autoAnimateUnmatched !== 'false' && this.Reveal.getConfig().autoAnimateUnmatched === true ) {\n\n\t\t\t\t// Our default timings for unmatched elements\n\t\t\t\tlet defaultUnmatchedDuration = animationOptions.duration * 0.8,\n\t\t\t\t\tdefaultUnmatchedDelay = animationOptions.duration * 0.2;\n\n\t\t\t\tthis.getUnmatchedAutoAnimateElements( toSlide ).forEach( unmatchedElement => {\n\n\t\t\t\t\tlet unmatchedOptions = this.getAutoAnimateOptions( unmatchedElement, animationOptions );\n\t\t\t\t\tlet id = 'unmatched';\n\n\t\t\t\t\t// If there is a duration or delay set specifically for this\n\t\t\t\t\t// element our unmatched elements should adhere to those\n\t\t\t\t\tif( unmatchedOptions.duration !== animationOptions.duration || unmatchedOptions.delay !== animationOptions.delay ) {\n\t\t\t\t\t\tid = 'unmatched-' + autoAnimateCounter++;\n\t\t\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"${id}\"] { transition: opacity ${unmatchedOptions.duration}s ease ${unmatchedOptions.delay}s; }` );\n\t\t\t\t\t}\n\n\t\t\t\t\tunmatchedElement.dataset.autoAnimateTarget = id;\n\n\t\t\t\t}, this );\n\n\t\t\t\t// Our default transition for unmatched elements\n\t\t\t\tcss.push( `[data-auto-animate=\"running\"] [data-auto-animate-target=\"unmatched\"] { transition: opacity ${defaultUnmatchedDuration}s ease ${defaultUnmatchedDelay}s; }` );\n\n\t\t\t}\n\n\t\t\t// Setting the whole chunk of CSS at once is the most\n\t\t\t// efficient way to do this. Using sheet.insertRule\n\t\t\t// is multiple factors slower.\n\t\t\tthis.autoAnimateStyleSheet.innerHTML = css.join( '' );\n\n\t\t\t// Start the animation next cycle\n\t\t\trequestAnimationFrame( () => {\n\t\t\t\tif( this.autoAnimateStyleSheet ) {\n\t\t\t\t\t// This forces our newly injected styles to be applied in Firefox\n\t\t\t\t\tgetComputedStyle( this.autoAnimateStyleSheet ).fontWeight;\n\n\t\t\t\t\ttoSlide.dataset.autoAnimate = 'running';\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'autoanimate',\n\t\t\t\tdata: {\n\t\t\t\t\tfromSlide,\n\t\t\t\t\ttoSlide,\n\t\t\t\t\tsheet: this.autoAnimateStyleSheet\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Rolls back all changes that we've made to the DOM so\n\t * that as part of animating.\n\t */\n\treset() {\n\n\t\t// Reset slides\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate]:not([data-auto-animate=\"\"])' ).forEach( element => {\n\t\t\telement.dataset.autoAnimate = '';\n\t\t} );\n\n\t\t// Reset elements\n\t\tqueryAll( this.Reveal.getRevealElement(), '[data-auto-animate-target]' ).forEach( element => {\n\t\t\tdelete element.dataset.autoAnimateTarget;\n\t\t} );\n\n\t\t// Remove the animation sheet\n\t\tif( this.autoAnimateStyleSheet && this.autoAnimateStyleSheet.parentNode ) {\n\t\t\tthis.autoAnimateStyleSheet.parentNode.removeChild( this.autoAnimateStyleSheet );\n\t\t\tthis.autoAnimateStyleSheet = null;\n\t\t}\n\n\t}\n\n\t/**\n\t * Creates a FLIP animation where the `to` element starts out\n\t * in the `from` element position and animates to its original\n\t * state.\n\t *\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @param {Object} elementOptions Options for this element pair\n\t * @param {Object} animationOptions Options set at the slide level\n\t * @param {String} id Unique ID that we can use to identify this\n\t * auto-animate element in the DOM\n\t */\n\tautoAnimateElements( from, to, elementOptions, animationOptions, id ) {\n\n\t\t// 'from' elements are given a data-auto-animate-target with no value,\n\t\t// 'to' elements are are given a data-auto-animate-target with an ID\n\t\tfrom.dataset.autoAnimateTarget = '';\n\t\tto.dataset.autoAnimateTarget = id;\n\n\t\t// Each element may override any of the auto-animate options\n\t\t// like transition easing, duration and delay via data-attributes\n\t\tlet options = this.getAutoAnimateOptions( to, animationOptions );\n\n\t\t// If we're using a custom element matcher the element options\n\t\t// may contain additional transition overrides\n\t\tif( typeof elementOptions.delay !== 'undefined' ) options.delay = elementOptions.delay;\n\t\tif( typeof elementOptions.duration !== 'undefined' ) options.duration = elementOptions.duration;\n\t\tif( typeof elementOptions.easing !== 'undefined' ) options.easing = elementOptions.easing;\n\n\t\tlet fromProps = this.getAutoAnimatableProperties( 'from', from, elementOptions ),\n\t\t\ttoProps = this.getAutoAnimatableProperties( 'to', to, elementOptions );\n\n\t\t// Maintain fragment visibility for matching elements when\n\t\t// we're navigating forwards, this way the viewer won't need\n\t\t// to step through the same fragments twice\n\t\tif( to.classList.contains( 'fragment' ) ) {\n\n\t\t\t// Don't auto-animate the opacity of fragments to avoid\n\t\t\t// conflicts with fragment animations\n\t\t\tdelete toProps.styles['opacity'];\n\n\t\t\tif( from.classList.contains( 'fragment' ) ) {\n\n\t\t\t\tlet fromFragmentStyle = ( from.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\t\t\t\tlet toFragmentStyle = ( to.className.match( FRAGMENT_STYLE_REGEX ) || [''] )[0];\n\n\t\t\t\t// Only skip the fragment if the fragment animation style\n\t\t\t\t// remains unchanged\n\t\t\t\tif( fromFragmentStyle === toFragmentStyle && animationOptions.slideDirection === 'forward' ) {\n\t\t\t\t\tto.classList.add( 'visible', 'disabled' );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If translation and/or scaling are enabled, css transform\n\t\t// the 'to' element so that it matches the position and size\n\t\t// of the 'from' element\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\n\t\t\tlet presentationScale = this.Reveal.getScale();\n\n\t\t\tlet delta = {\n\t\t\t\tx: ( fromProps.x - toProps.x ) / presentationScale,\n\t\t\t\ty: ( fromProps.y - toProps.y ) / presentationScale,\n\t\t\t\tscaleX: fromProps.width / toProps.width,\n\t\t\t\tscaleY: fromProps.height / toProps.height\n\t\t\t};\n\n\t\t\t// Limit decimal points to avoid 0.0001px blur and stutter\n\t\t\tdelta.x = Math.round( delta.x * 1000 ) / 1000;\n\t\t\tdelta.y = Math.round( delta.y * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\t\t\tdelta.scaleX = Math.round( delta.scaleX * 1000 ) / 1000;\n\n\t\t\tlet translate = elementOptions.translate !== false && ( delta.x !== 0 || delta.y !== 0 ),\n\t\t\t\tscale = elementOptions.scale !== false && ( delta.scaleX !== 0 || delta.scaleY !== 0 );\n\n\t\t\t// No need to transform if nothing's changed\n\t\t\tif( translate || scale ) {\n\n\t\t\t\tlet transform = [];\n\n\t\t\t\tif( translate ) transform.push( `translate(${delta.x}px, ${delta.y}px)` );\n\t\t\t\tif( scale ) transform.push( `scale(${delta.scaleX}, ${delta.scaleY})` );\n\n\t\t\t\tfromProps.styles['transform'] = transform.join( ' ' );\n\t\t\t\tfromProps.styles['transform-origin'] = 'top left';\n\n\t\t\t\ttoProps.styles['transform'] = 'none';\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Delete all unchanged 'to' styles\n\t\tfor( let propertyName in toProps.styles ) {\n\t\t\tconst toValue = toProps.styles[propertyName];\n\t\t\tconst fromValue = fromProps.styles[propertyName];\n\n\t\t\tif( toValue === fromValue ) {\n\t\t\t\tdelete toProps.styles[propertyName];\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// If these property values were set via a custom matcher providing\n\t\t\t\t// an explicit 'from' and/or 'to' value, we always inject those values.\n\t\t\t\tif( toValue.explicitValue === true ) {\n\t\t\t\t\ttoProps.styles[propertyName] = toValue.value;\n\t\t\t\t}\n\n\t\t\t\tif( fromValue.explicitValue === true ) {\n\t\t\t\t\tfromProps.styles[propertyName] = fromValue.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet css = '';\n\n\t\tlet toStyleProperties = Object.keys( toProps.styles );\n\n\t\t// Only create animate this element IF at least one style\n\t\t// property has changed\n\t\tif( toStyleProperties.length > 0 ) {\n\n\t\t\t// Instantly move to the 'from' state\n\t\t\tfromProps.styles['transition'] = 'none';\n\n\t\t\t// Animate towards the 'to' state\n\t\t\ttoProps.styles['transition'] = `all ${options.duration}s ${options.easing} ${options.delay}s`;\n\t\t\ttoProps.styles['transition-property'] = toStyleProperties.join( ', ' );\n\t\t\ttoProps.styles['will-change'] = toStyleProperties.join( ', ' );\n\n\t\t\t// Build up our custom CSS. We need to override inline styles\n\t\t\t// so we need to make our styles vErY IMPORTANT!1!!\n\t\t\tlet fromCSS = Object.keys( fromProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + fromProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tlet toCSS = Object.keys( toProps.styles ).map( propertyName => {\n\t\t\t\treturn propertyName + ': ' + toProps.styles[propertyName] + ' !important;';\n\t\t\t} ).join( '' );\n\n\t\t\tcss = \t'[data-auto-animate-target=\"'+ id +'\"] {'+ fromCSS +'}' +\n\t\t\t\t\t'[data-auto-animate=\"running\"] [data-auto-animate-target=\"'+ id +'\"] {'+ toCSS +'}';\n\n\t\t}\n\n\t\treturn css;\n\n\t}\n\n\t/**\n\t * Returns the auto-animate options for the given element.\n\t *\n\t * @param {HTMLElement} element Element to pick up options\n\t * from, either a slide or an animation target\n\t * @param {Object} [inheritedOptions] Optional set of existing\n\t * options\n\t */\n\tgetAutoAnimateOptions( element, inheritedOptions ) {\n\n\t\tlet options = {\n\t\t\teasing: this.Reveal.getConfig().autoAnimateEasing,\n\t\t\tduration: this.Reveal.getConfig().autoAnimateDuration,\n\t\t\tdelay: 0\n\t\t};\n\n\t\toptions = extend( options, inheritedOptions );\n\n\t\t// Inherit options from parent elements\n\t\tif( element.parentNode ) {\n\t\t\tlet autoAnimatedParent = closest( element.parentNode, '[data-auto-animate-target]' );\n\t\t\tif( autoAnimatedParent ) {\n\t\t\t\toptions = this.getAutoAnimateOptions( autoAnimatedParent, options );\n\t\t\t}\n\t\t}\n\n\t\tif( element.dataset.autoAnimateEasing ) {\n\t\t\toptions.easing = element.dataset.autoAnimateEasing;\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDuration ) {\n\t\t\toptions.duration = parseFloat( element.dataset.autoAnimateDuration );\n\t\t}\n\n\t\tif( element.dataset.autoAnimateDelay ) {\n\t\t\toptions.delay = parseFloat( element.dataset.autoAnimateDelay );\n\t\t}\n\n\t\treturn options;\n\n\t}\n\n\t/**\n\t * Returns an object containing all of the properties\n\t * that can be auto-animated for the given element and\n\t * their current computed values.\n\t *\n\t * @param {String} direction 'from' or 'to'\n\t */\n\tgetAutoAnimatableProperties( direction, element, elementOptions ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\tlet properties = { styles: [] };\n\n\t\t// Position and size\n\t\tif( elementOptions.translate !== false || elementOptions.scale !== false ) {\n\t\t\tlet bounds;\n\n\t\t\t// Custom auto-animate may optionally return a custom tailored\n\t\t\t// measurement function\n\t\t\tif( typeof elementOptions.measure === 'function' ) {\n\t\t\t\tbounds = elementOptions.measure( element );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( config.center ) {\n\t\t\t\t\t// More precise, but breaks when used in combination\n\t\t\t\t\t// with zoom for scaling the deck ¯\\_(ツ)_/¯\n\t\t\t\t\tbounds = element.getBoundingClientRect();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet scale = this.Reveal.getScale();\n\t\t\t\t\tbounds = {\n\t\t\t\t\t\tx: element.offsetLeft * scale,\n\t\t\t\t\t\ty: element.offsetTop * scale,\n\t\t\t\t\t\twidth: element.offsetWidth * scale,\n\t\t\t\t\t\theight: element.offsetHeight * scale\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tproperties.x = bounds.x;\n\t\t\tproperties.y = bounds.y;\n\t\t\tproperties.width = bounds.width;\n\t\t\tproperties.height = bounds.height;\n\t\t}\n\n\t\tconst computedStyles = getComputedStyle( element );\n\n\t\t// CSS styles\n\t\t( elementOptions.styles || config.autoAnimateStyles ).forEach( style => {\n\t\t\tlet value;\n\n\t\t\t// `style` is either the property name directly, or an object\n\t\t\t// definition of a style property\n\t\t\tif( typeof style === 'string' ) style = { property: style };\n\n\t\t\tif( typeof style.from !== 'undefined' && direction === 'from' ) {\n\t\t\t\tvalue = { value: style.from, explicitValue: true };\n\t\t\t}\n\t\t\telse if( typeof style.to !== 'undefined' && direction === 'to' ) {\n\t\t\t\tvalue = { value: style.to, explicitValue: true };\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalue = computedStyles[style.property];\n\t\t\t}\n\n\t\t\tif( value !== '' ) {\n\t\t\t\tproperties.styles[style.property] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn properties;\n\n\t}\n\n\t/**\n\t * Get a list of all element pairs that we can animate\n\t * between the given slides.\n\t *\n\t * @param {HTMLElement} fromSlide\n\t * @param {HTMLElement} toSlide\n\t *\n\t * @return {Array} Each value is an array where [0] is\n\t * the element we're animating from and [1] is the\n\t * element we're animating to\n\t */\n\tgetAutoAnimatableElements( fromSlide, toSlide ) {\n\n\t\tlet matcher = typeof this.Reveal.getConfig().autoAnimateMatcher === 'function' ? this.Reveal.getConfig().autoAnimateMatcher : this.getAutoAnimatePairs;\n\n\t\tlet pairs = matcher.call( this, fromSlide, toSlide );\n\n\t\tlet reserved = [];\n\n\t\t// Remove duplicate pairs\n\t\treturn pairs.filter( ( pair, index ) => {\n\t\t\tif( reserved.indexOf( pair.to ) === -1 ) {\n\t\t\t\treserved.push( pair.to );\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Identifies matching elements between slides.\n\t *\n\t * You can specify a custom matcher function by using\n\t * the `autoAnimateMatcher` config option.\n\t */\n\tgetAutoAnimatePairs( fromSlide, toSlide ) {\n\n\t\tlet pairs = [];\n\n\t\tconst codeNodes = 'pre';\n\t\tconst textNodes = 'h1, h2, h3, h4, h5, h6, p, li';\n\t\tconst mediaNodes = 'img, video, iframe';\n\n\t\t// Eplicit matches via data-id\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, '[data-id]', node => {\n\t\t\treturn node.nodeName + ':::' + node.getAttribute( 'data-id' );\n\t\t} );\n\n\t\t// Text\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, textNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\t// Media\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, mediaNodes, node => {\n\t\t\treturn node.nodeName + ':::' + ( node.getAttribute( 'src' ) || node.getAttribute( 'data-src' ) );\n\t\t} );\n\n\t\t// Code\n\t\tthis.findAutoAnimateMatches( pairs, fromSlide, toSlide, codeNodes, node => {\n\t\t\treturn node.nodeName + ':::' + node.innerText;\n\t\t} );\n\n\t\tpairs.forEach( pair => {\n\n\t\t\t// Disable scale transformations on text nodes, we transition\n\t\t\t// each individual text property instead\n\t\t\tif( matches( pair.from, textNodes ) ) {\n\t\t\t\tpair.options = { scale: false };\n\t\t\t}\n\t\t\t// Animate individual lines of code\n\t\t\telse if( matches( pair.from, codeNodes ) ) {\n\n\t\t\t\t// Transition the code block's width and height instead of scaling\n\t\t\t\t// to prevent its content from being squished\n\t\t\t\tpair.options = { scale: false, styles: [ 'width', 'height' ] };\n\n\t\t\t\t// Lines of code\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-code', node => {\n\t\t\t\t\treturn node.textContent;\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t\t// Line numbers\n\t\t\t\tthis.findAutoAnimateMatches( pairs, pair.from, pair.to, '.hljs .hljs-ln-line[data-line-number]', node => {\n\t\t\t\t\treturn node.getAttribute( 'data-line-number' );\n\t\t\t\t}, {\n\t\t\t\t\tscale: false,\n\t\t\t\t\tstyles: [ 'width' ],\n\t\t\t\t\tmeasure: this.getLocalBoundingBox.bind( this )\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\treturn pairs;\n\n\t}\n\n\t/**\n\t * Helper method which returns a bounding box based on\n\t * the given elements offset coordinates.\n\t *\n\t * @param {HTMLElement} element\n\t * @return {Object} x, y, width, height\n\t */\n\tgetLocalBoundingBox( element ) {\n\n\t\tconst presentationScale = this.Reveal.getScale();\n\n\t\treturn {\n\t\t\tx: Math.round( ( element.offsetLeft * presentationScale ) * 100 ) / 100,\n\t\t\ty: Math.round( ( element.offsetTop * presentationScale ) * 100 ) / 100,\n\t\t\twidth: Math.round( ( element.offsetWidth * presentationScale ) * 100 ) / 100,\n\t\t\theight: Math.round( ( element.offsetHeight * presentationScale ) * 100 ) / 100\n\t\t};\n\n\t}\n\n\t/**\n\t * Finds matching elements between two slides.\n\t *\n\t * @param {Array} pairs \tList of pairs to push matches to\n\t * @param {HTMLElement} fromScope Scope within the from element exists\n\t * @param {HTMLElement} toScope Scope within the to element exists\n\t * @param {String} selector CSS selector of the element to match\n\t * @param {Function} serializer A function that accepts an element and returns\n\t * a stringified ID based on its contents\n\t * @param {Object} animationOptions Optional config options for this pair\n\t */\n\tfindAutoAnimateMatches( pairs, fromScope, toScope, selector, serializer, animationOptions ) {\n\n\t\tlet fromMatches = {};\n\t\tlet toMatches = {};\n\n\t\t[].slice.call( fromScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\tif( typeof key === 'string' && key.length ) {\n\t\t\t\tfromMatches[key] = fromMatches[key] || [];\n\t\t\t\tfromMatches[key].push( element );\n\t\t\t}\n\t\t} );\n\n\t\t[].slice.call( toScope.querySelectorAll( selector ) ).forEach( ( element, i ) => {\n\t\t\tconst key = serializer( element );\n\t\t\ttoMatches[key] = toMatches[key] || [];\n\t\t\ttoMatches[key].push( element );\n\n\t\t\tlet fromElement;\n\n\t\t\t// Retrieve the 'from' element\n\t\t\tif( fromMatches[key] ) {\n\t\t\t\tconst pimaryIndex = toMatches[key].length - 1;\n\t\t\t\tconst secondaryIndex = fromMatches[key].length - 1;\n\n\t\t\t\t// If there are multiple identical from elements, retrieve\n\t\t\t\t// the one at the same index as our to-element.\n\t\t\t\tif( fromMatches[key][ pimaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ pimaryIndex ];\n\t\t\t\t\tfromMatches[key][ pimaryIndex ] = null;\n\t\t\t\t}\n\t\t\t\t// If there are no matching from-elements at the same index,\n\t\t\t\t// use the last one.\n\t\t\t\telse if( fromMatches[key][ secondaryIndex ] ) {\n\t\t\t\t\tfromElement = fromMatches[key][ secondaryIndex ];\n\t\t\t\t\tfromMatches[key][ secondaryIndex ] = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If we've got a matching pair, push it to the list of pairs\n\t\t\tif( fromElement ) {\n\t\t\t\tpairs.push({\n\t\t\t\t\tfrom: fromElement,\n\t\t\t\t\tto: element,\n\t\t\t\t\toptions: animationOptions\n\t\t\t\t});\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns a all elements within the given scope that should\n\t * be considered unmatched in an auto-animate transition. If\n\t * fading of unmatched elements is turned on, these elements\n\t * will fade when going between auto-animate slides.\n\t *\n\t * Note that parents of auto-animate targets are NOT considerd\n\t * unmatched since fading them would break the auto-animation.\n\t *\n\t * @param {HTMLElement} rootElement\n\t * @return {Array}\n\t */\n\tgetUnmatchedAutoAnimateElements( rootElement ) {\n\n\t\treturn [].slice.call( rootElement.children ).reduce( ( result, element ) => {\n\n\t\t\tconst containsAnimatedElements = element.querySelector( '[data-auto-animate-target]' );\n\n\t\t\t// The element is unmatched if\n\t\t\t// - It is not an auto-animate target\n\t\t\t// - It does not contain any auto-animate targets\n\t\t\tif( !element.hasAttribute( 'data-auto-animate-target' ) && !containsAnimatedElements ) {\n\t\t\t\tresult.push( element );\n\t\t\t}\n\n\t\t\tif( element.querySelector( '[data-auto-animate-target]' ) ) {\n\t\t\t\tresult = result.concat( this.getUnmatchedAutoAnimateElements( element ) );\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}, [] );\n\n\t}\n\n}\n","import { extend, queryAll } from '../utils/util.js'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments are elements within a slide that are\n * revealed/animated incrementally.\n */\nexport default class Fragments {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.fragments === false ) {\n\t\t\tthis.disable();\n\t\t}\n\t\telse if( oldConfig.fragments === false ) {\n\t\t\tthis.enable();\n\t\t}\n\n\t}\n\n\t/**\n\t * If fragments are disabled in the deck, they should all be\n\t * visible rather than stepped through.\n\t */\n\tdisable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.add( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Reverse of #disable(). Only called if fragments have\n\t * previously been disabled.\n\t */\n\tenable() {\n\n\t\tqueryAll( this.Reveal.getSlidesElement(), '.fragment' ).forEach( element => {\n\t\t\telement.classList.remove( 'visible' );\n\t\t\telement.classList.remove( 'current-fragment' );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Returns an object describing the available fragment\n\t * directions.\n\t *\n\t * @return {{prev: boolean, next: boolean}}\n\t */\n\tavailableRoutes() {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\t\t\tlet fragments = currentSlide.querySelectorAll( '.fragment:not(.disabled)' );\n\t\t\tlet hiddenFragments = currentSlide.querySelectorAll( '.fragment:not(.disabled):not(.visible)' );\n\n\t\t\treturn {\n\t\t\t\tprev: fragments.length - hiddenFragments.length > 0,\n\t\t\t\tnext: !!hiddenFragments.length\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\treturn { prev: false, next: false };\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a sorted fragments list, ordered by an increasing\n\t * \"data-fragment-index\" attribute.\n\t *\n\t * Fragments will be revealed in the order that they are returned by\n\t * this function, so you can use the index attributes to control the\n\t * order of fragment appearance.\n\t *\n\t * To maintain a sensible default fragment order, fragments are presumed\n\t * to be passed in document order. This function adds a \"fragment-index\"\n\t * attribute to each node if such an attribute is not already present,\n\t * and sets that attribute to an integer value which is the position of\n\t * the fragment within the fragments list.\n\t *\n\t * @param {object[]|*} fragments\n\t * @param {boolean} grouped If true the returned array will contain\n\t * nested arrays for all fragments with the same index\n\t * @return {object[]} sorted Sorted array of fragments\n\t */\n\tsort( fragments, grouped = false ) {\n\n\t\tfragments = Array.from( fragments );\n\n\t\tlet ordered = [],\n\t\t\tunordered = [],\n\t\t\tsorted = [];\n\n\t\t// Group ordered and unordered elements\n\t\tfragments.forEach( fragment => {\n\t\t\tif( fragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\tlet index = parseInt( fragment.getAttribute( 'data-fragment-index' ), 10 );\n\n\t\t\t\tif( !ordered[index] ) {\n\t\t\t\t\tordered[index] = [];\n\t\t\t\t}\n\n\t\t\t\tordered[index].push( fragment );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tunordered.push( [ fragment ] );\n\t\t\t}\n\t\t} );\n\n\t\t// Append fragments without explicit indices in their\n\t\t// DOM order\n\t\tordered = ordered.concat( unordered );\n\n\t\t// Manually count the index up per group to ensure there\n\t\t// are no gaps\n\t\tlet index = 0;\n\n\t\t// Push all fragments in their sorted order to an array,\n\t\t// this flattens the groups\n\t\tordered.forEach( group => {\n\t\t\tgroup.forEach( fragment => {\n\t\t\t\tsorted.push( fragment );\n\t\t\t\tfragment.setAttribute( 'data-fragment-index', index );\n\t\t\t} );\n\n\t\t\tindex ++;\n\t\t} );\n\n\t\treturn grouped === true ? ordered : sorted;\n\n\t}\n\n\t/**\n\t * Sorts and formats all of fragments in the\n\t * presentation.\n\t */\n\tsortAll() {\n\n\t\tthis.Reveal.getHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tlet verticalSlides = queryAll( horizontalSlide, 'section' );\n\t\t\tverticalSlides.forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tthis.sort( verticalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\t}, this );\n\n\t\t\tif( verticalSlides.length === 0 ) this.sort( horizontalSlide.querySelectorAll( '.fragment' ) );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Refreshes the fragments on the current slide so that they\n\t * have the appropriate classes (.visible + .current-fragment).\n\t *\n\t * @param {number} [index] The index of the current fragment\n\t * @param {array} [fragments] Array containing all fragments\n\t * in the current slide\n\t *\n\t * @return {{shown: array, hidden: array}}\n\t */\n\tupdate( index, fragments ) {\n\n\t\tlet changedFragments = {\n\t\t\tshown: [],\n\t\t\thidden: []\n\t\t};\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tfragments = fragments || this.sort( currentSlide.querySelectorAll( '.fragment' ) );\n\n\t\t\tif( fragments.length ) {\n\n\t\t\t\tlet maxIndex = 0;\n\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet currentFragment = this.sort( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();\n\t\t\t\t\tif( currentFragment ) {\n\t\t\t\t\t\tindex = parseInt( currentFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tArray.from( fragments ).forEach( ( el, i ) => {\n\n\t\t\t\t\tif( el.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\t\ti = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t\t}\n\n\t\t\t\t\tmaxIndex = Math.max( maxIndex, i );\n\n\t\t\t\t\t// Visible fragments\n\t\t\t\t\tif( i <= index ) {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.add( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( i === index ) {\n\t\t\t\t\t\t\t// Announce the fragments one by one to the Screen Reader\n\t\t\t\t\t\t\tthis.Reveal.announceStatus( this.Reveal.getStatusText( el ) );\n\n\t\t\t\t\t\t\tel.classList.add( 'current-fragment' );\n\t\t\t\t\t\t\tthis.Reveal.slideContent.startEmbeddedContent( el );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif( !wasVisible ) {\n\t\t\t\t\t\t\tchangedFragments.shown.push( el )\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'visible',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Hidden fragments\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet wasVisible = el.classList.contains( 'visible' )\n\t\t\t\t\t\tel.classList.remove( 'visible' );\n\t\t\t\t\t\tel.classList.remove( 'current-fragment' );\n\n\t\t\t\t\t\tif( wasVisible ) {\n\t\t\t\t\t\t\tthis.Reveal.slideContent.stopEmbeddedContent( el );\n\t\t\t\t\t\t\tchangedFragments.hidden.push( el );\n\t\t\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\t\t\ttarget: el,\n\t\t\t\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\t\t\t\tbubbles: false\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\t// Write the current fragment index to the slide <section>.\n\t\t\t\t// This can be used by end users to apply styles based on\n\t\t\t\t// the current fragment index.\n\t\t\t\tindex = typeof index === 'number' ? index : -1;\n\t\t\t\tindex = Math.max( Math.min( index, maxIndex ), -1 );\n\t\t\t\tcurrentSlide.setAttribute( 'data-fragment', index );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn changedFragments;\n\n\t}\n\n\t/**\n\t * Formats the fragments on the given slide so that they have\n\t * valid indices. Call this if fragments are changed in the DOM\n\t * after reveal.js has already initialized.\n\t *\n\t * @param {HTMLElement} slide\n\t * @return {Array} a list of the HTML fragments that were synced\n\t */\n\tsync( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\treturn this.sort( slide.querySelectorAll( '.fragment' ) );\n\n\t}\n\n\t/**\n\t * Navigate to the specified slide fragment.\n\t *\n\t * @param {?number} index The index of the fragment that\n\t * should be shown, -1 means all are invisible\n\t * @param {number} offset Integer offset to apply to the\n\t * fragment index\n\t *\n\t * @return {boolean} true if a change was made in any\n\t * fragments visibility as part of this call\n\t */\n\tgoto( index, offset = 0 ) {\n\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide && this.Reveal.getConfig().fragments ) {\n\n\t\t\tlet fragments = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled)' ) );\n\t\t\tif( fragments.length ) {\n\n\t\t\t\t// If no index is specified, find the current\n\t\t\t\tif( typeof index !== 'number' ) {\n\t\t\t\t\tlet lastVisibleFragment = this.sort( currentSlide.querySelectorAll( '.fragment:not(.disabled).visible' ) ).pop();\n\n\t\t\t\t\tif( lastVisibleFragment ) {\n\t\t\t\t\t\tindex = parseInt( lastVisibleFragment.getAttribute( 'data-fragment-index' ) || 0, 10 );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindex = -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply the offset if there is one\n\t\t\t\tindex += offset;\n\n\t\t\t\tlet changedFragments = this.update( index, fragments );\n\n\t\t\t\tif( changedFragments.hidden.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmenthidden',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.hidden[0],\n\t\t\t\t\t\t\tfragments: changedFragments.hidden\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif( changedFragments.shown.length ) {\n\t\t\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\t\t\ttype: 'fragmentshown',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\tfragment: changedFragments.shown[0],\n\t\t\t\t\t\t\tfragments: changedFragments.shown\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthis.Reveal.controls.update();\n\t\t\t\tthis.Reveal.progress.update();\n\n\t\t\t\tif( this.Reveal.getConfig().fragmentInURL ) {\n\t\t\t\t\tthis.Reveal.location.writeURL();\n\t\t\t\t}\n\n\t\t\t\treturn !!( changedFragments.shown.length || changedFragments.hidden.length );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Navigate to the next slide fragment.\n\t *\n\t * @return {boolean} true if there was a next fragment,\n\t * false otherwise\n\t */\n\tnext() {\n\n\t\treturn this.goto( null, 1 );\n\n\t}\n\n\t/**\n\t * Navigate to the previous slide fragment.\n\t *\n\t * @return {boolean} true if there was a previous fragment,\n\t * false otherwise\n\t */\n\tprev() {\n\n\t\treturn this.goto( null, -1 );\n\n\t}\n\n}","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { extend, queryAll, transformElement } from '../utils/util.js'\n\n/**\n * Handles all logic related to the overview mode\n * (birds-eye view of all slides).\n */\nexport default class Overview {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.active = false;\n\n\t\tthis.onSlideClicked = this.onSlideClicked.bind( this );\n\n\t}\n\n\t/**\n\t * Displays the overview of slides (quick nav) by scaling\n\t * down and arranging all slide elements.\n\t */\n\tactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview && !this.isActive() ) {\n\n\t\t\tthis.active = true;\n\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview' );\n\n\t\t\t// Don't auto-slide while in overview mode\n\t\t\tthis.Reveal.cancelAutoSlide();\n\n\t\t\t// Move the backgrounds element into the slide container to\n\t\t\t// that the same scaling is applied\n\t\t\tthis.Reveal.getSlidesElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clicking on an overview slide navigates to it\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\tif( !slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\tslide.addEventListener( 'click', this.onSlideClicked, true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Calculate slide sizes\n\t\t\tconst margin = 70;\n\t\t\tconst slideSize = this.Reveal.getComputedSlideSize();\n\t\t\tthis.overviewSlideWidth = slideSize.width + margin;\n\t\t\tthis.overviewSlideHeight = slideSize.height + margin;\n\n\t\t\t// Reverse in RTL mode\n\t\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\t\tthis.overviewSlideWidth = -this.overviewSlideWidth;\n\t\t\t}\n\n\t\t\tthis.Reveal.updateSlidesVisibility();\n\n\t\t\tthis.layout();\n\t\t\tthis.update();\n\n\t\t\tthis.Reveal.layout();\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\t// Notify observers of the overview showing\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewshown',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Uses CSS transforms to position all slides in a grid for\n\t * display inside of the overview mode.\n\t */\n\tlayout() {\n\n\t\t// Layout slides\n\t\tthis.Reveal.getHorizontalSlides().forEach( ( hslide, h ) => {\n\t\t\thslide.setAttribute( 'data-index-h', h );\n\t\t\ttransformElement( hslide, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tif( hslide.classList.contains( 'stack' ) ) {\n\n\t\t\t\tqueryAll( hslide, 'section' ).forEach( ( vslide, v ) => {\n\t\t\t\t\tvslide.setAttribute( 'data-index-h', h );\n\t\t\t\t\tvslide.setAttribute( 'data-index-v', v );\n\n\t\t\t\t\ttransformElement( vslide, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t\t} );\n\n\t\t\t}\n\t\t} );\n\n\t\t// Layout slide backgrounds\n\t\tArray.from( this.Reveal.getBackgroundsElement().childNodes ).forEach( ( hbackground, h ) => {\n\t\t\ttransformElement( hbackground, 'translate3d(' + ( h * this.overviewSlideWidth ) + 'px, 0, 0)' );\n\n\t\t\tqueryAll( hbackground, '.slide-background' ).forEach( ( vbackground, v ) => {\n\t\t\t\ttransformElement( vbackground, 'translate3d(0, ' + ( v * this.overviewSlideHeight ) + 'px, 0)' );\n\t\t\t} );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Moves the overview viewport to the current slides.\n\t * Called each time the current slide changes.\n\t */\n\tupdate() {\n\n\t\tconst vmin = Math.min( window.innerWidth, window.innerHeight );\n\t\tconst scale = Math.max( vmin / 5, 150 ) / vmin;\n\t\tconst indices = this.Reveal.getIndices();\n\n\t\tthis.Reveal.transformSlides( {\n\t\t\toverview: [\n\t\t\t\t'scale('+ scale +')',\n\t\t\t\t'translateX('+ ( -indices.h * this.overviewSlideWidth ) +'px)',\n\t\t\t\t'translateY('+ ( -indices.v * this.overviewSlideHeight ) +'px)'\n\t\t\t].join( ' ' )\n\t\t} );\n\n\t}\n\n\t/**\n\t * Exits the slide overview and enters the currently\n\t * active slide.\n\t */\n\tdeactivate() {\n\n\t\t// Only proceed if enabled in config\n\t\tif( this.Reveal.getConfig().overview ) {\n\n\t\t\tthis.active = false;\n\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview' );\n\n\t\t\t// Temporarily add a class so that transitions can do different things\n\t\t\t// depending on whether they are exiting/entering overview, or just\n\t\t\t// moving from slide to slide\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'overview-deactivating' );\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tthis.Reveal.getRevealElement().classList.remove( 'overview-deactivating' );\n\t\t\t}, 1 );\n\n\t\t\t// Move the background element back out\n\t\t\tthis.Reveal.getRevealElement().appendChild( this.Reveal.getBackgroundsElement() );\n\n\t\t\t// Clean up changes made to slides\n\t\t\tqueryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR ).forEach( slide => {\n\t\t\t\ttransformElement( slide, '' );\n\n\t\t\t\tslide.removeEventListener( 'click', this.onSlideClicked, true );\n\t\t\t} );\n\n\t\t\t// Clean up changes made to backgrounds\n\t\t\tqueryAll( this.Reveal.getBackgroundsElement(), '.slide-background' ).forEach( background => {\n\t\t\t\ttransformElement( background, '' );\n\t\t\t} );\n\n\t\t\tthis.Reveal.transformSlides( { overview: '' } );\n\n\t\t\tconst indices = this.Reveal.getIndices();\n\n\t\t\tthis.Reveal.slide( indices.h, indices.v );\n\t\t\tthis.Reveal.layout();\n\t\t\tthis.Reveal.cueAutoSlide();\n\n\t\t\t// Notify observers of the overview hiding\n\t\t\tthis.Reveal.dispatchEvent({\n\t\t\t\ttype: 'overviewhidden',\n\t\t\t\tdata: {\n\t\t\t\t\t'indexh': indices.h,\n\t\t\t\t\t'indexv': indices.v,\n\t\t\t\t\t'currentSlide': this.Reveal.getCurrentSlide()\n\t\t\t\t}\n\t\t\t});\n\n\t\t}\n\t}\n\n\t/**\n\t * Toggles the slide overview mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * overview is open, false means it's closed.\n\t */\n\ttoggle( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? this.activate() : this.deactivate();\n\t\t}\n\t\telse {\n\t\t\tthis.isActive() ? this.deactivate() : this.activate();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the overview is currently active.\n\t *\n\t * @return {Boolean} true if the overview is active,\n\t * false otherwise\n\t */\n\tisActive() {\n\n\t\treturn this.active;\n\n\t}\n\n\t/**\n\t * Invoked when a slide is and we're in the overview.\n\t *\n\t * @param {object} event\n\t */\n\tonSlideClicked( event ) {\n\n\t\tif( this.isActive() ) {\n\t\t\tevent.preventDefault();\n\n\t\t\tlet element = event.target;\n\n\t\t\twhile( element && !element.nodeName.match( /section/gi ) ) {\n\t\t\t\telement = element.parentNode;\n\t\t\t}\n\n\t\t\tif( element && !element.classList.contains( 'disabled' ) ) {\n\n\t\t\t\tthis.deactivate();\n\n\t\t\t\tif( element.nodeName.match( /section/gi ) ) {\n\t\t\t\t\tlet h = parseInt( element.getAttribute( 'data-index-h' ), 10 ),\n\t\t\t\t\t\tv = parseInt( element.getAttribute( 'data-index-v' ), 10 );\n\n\t\t\t\t\tthis.Reveal.slide( h, v );\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t}\n\n}","import { enterFullscreen } from '../utils/util.js'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default class Keyboard {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// A key:value map of keyboard keys and descriptions of\n\t\t// the actions they trigger\n\t\tthis.shortcuts = {};\n\n\t\t// Holds custom key code mappings\n\t\tthis.bindings = {};\n\n\t\tthis.onDocumentKeyDown = this.onDocumentKeyDown.bind( this );\n\t\tthis.onDocumentKeyPress = this.onDocumentKeyPress.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.navigationMode === 'linear' ) {\n\t\t\tthis.shortcuts['→ , ↓ , SPACE , N , L , J'] = 'Next slide';\n\t\t\tthis.shortcuts['← , ↑ , P , H , K'] = 'Previous slide';\n\t\t}\n\t\telse {\n\t\t\tthis.shortcuts['N , SPACE'] = 'Next slide';\n\t\t\tthis.shortcuts['P'] = 'Previous slide';\n\t\t\tthis.shortcuts['← , H'] = 'Navigate left';\n\t\t\tthis.shortcuts['→ , L'] = 'Navigate right';\n\t\t\tthis.shortcuts['↑ , K'] = 'Navigate up';\n\t\t\tthis.shortcuts['↓ , J'] = 'Navigate down';\n\t\t}\n\n\t\tthis.shortcuts['Home , Shift ←'] = 'First slide';\n\t\tthis.shortcuts['End , Shift →'] = 'Last slide';\n\t\tthis.shortcuts['B , .'] = 'Pause';\n\t\tthis.shortcuts['F'] = 'Fullscreen';\n\t\tthis.shortcuts['ESC, O'] = 'Slide overview';\n\n\t}\n\n\t/**\n\t * Starts listening for keyboard events.\n\t */\n\tbind() {\n\n\t\tdocument.addEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.addEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Stops listening for keyboard events.\n\t */\n\tunbind() {\n\n\t\tdocument.removeEventListener( 'keydown', this.onDocumentKeyDown, false );\n\t\tdocument.removeEventListener( 'keypress', this.onDocumentKeyPress, false );\n\n\t}\n\n\t/**\n\t * Add a custom key binding with optional description to\n\t * be added to the help screen.\n\t */\n\taddKeyBinding( binding, callback ) {\n\n\t\tif( typeof binding === 'object' && binding.keyCode ) {\n\t\t\tthis.bindings[binding.keyCode] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: binding.key,\n\t\t\t\tdescription: binding.description\n\t\t\t};\n\t\t}\n\t\telse {\n\t\t\tthis.bindings[binding] = {\n\t\t\t\tcallback: callback,\n\t\t\t\tkey: null,\n\t\t\t\tdescription: null\n\t\t\t};\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes the specified custom key binding.\n\t */\n\tremoveKeyBinding( keyCode ) {\n\n\t\tdelete this.bindings[keyCode];\n\n\t}\n\n\t/**\n\t * Programmatically triggers a keyboard event\n\t *\n\t * @param {int} keyCode\n\t */\n\ttriggerKey( keyCode ) {\n\n\t\tthis.onDocumentKeyDown( { keyCode } );\n\n\t}\n\n\t/**\n\t * Registers a new shortcut to include in the help overlay\n\t *\n\t * @param {String} key\n\t * @param {String} value\n\t */\n\tregisterKeyboardShortcut( key, value ) {\n\n\t\tthis.shortcuts[key] = value;\n\n\t}\n\n\tgetShortcuts() {\n\n\t\treturn this.shortcuts;\n\n\t}\n\n\tgetBindings() {\n\n\t\treturn this.bindings;\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keypress' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyPress( event ) {\n\n\t\t// Check if the pressed key is question mark\n\t\tif( event.shiftKey && event.charCode === 63 ) {\n\t\t\tthis.Reveal.toggleHelp();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the document level 'keydown' event.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentKeyDown( event ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// If there's a condition specified and it returns false,\n\t\t// ignore this event\n\t\tif( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If keyboardCondition is set, only capture keyboard events\n\t\t// for embedded decks when they are focused\n\t\tif( config.keyboardCondition === 'focused' && !this.Reveal.isFocused() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Shorthand\n\t\tlet keyCode = event.keyCode;\n\n\t\t// Remember if auto-sliding was paused so we can toggle it\n\t\tlet autoSlideWasPaused = !this.Reveal.isAutoSliding();\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\t// Is there a focused element that could be using the keyboard?\n\t\tlet activeElementIsCE = document.activeElement && document.activeElement.isContentEditable === true;\n\t\tlet activeElementIsInput = document.activeElement && document.activeElement.tagName && /input|textarea/i.test( document.activeElement.tagName );\n\t\tlet activeElementIsNotes = document.activeElement && document.activeElement.className && /speaker-notes/i.test( document.activeElement.className);\n\n\t\t// Whitelist specific modified + keycode combinations\n\t\tlet prevSlideShortcut = event.shiftKey && event.keyCode === 32;\n\t\tlet firstSlideShortcut = event.shiftKey && keyCode === 37;\n\t\tlet lastSlideShortcut = event.shiftKey && keyCode === 39;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!prevSlideShortcut && !firstSlideShortcut && !lastSlideShortcut &&\n\t\t\t\t\t\t\t\t( event.shiftKey || event.altKey || event.ctrlKey || event.metaKey );\n\n\t\t// Disregard the event if there's a focused element or a\n\t\t// keyboard modifier key is present\n\t\tif( activeElementIsCE || activeElementIsInput || activeElementIsNotes || unusedModifier ) return;\n\n\t\t// While paused only allow resume keyboard events; 'b', 'v', '.'\n\t\tlet resumeKeyCodes = [66,86,190,191];\n\t\tlet key;\n\n\t\t// Custom key bindings for togglePause should be able to resume\n\t\tif( typeof config.keyboard === 'object' ) {\n\t\t\tfor( key in config.keyboard ) {\n\t\t\t\tif( config.keyboard[key] === 'togglePause' ) {\n\t\t\t\t\tresumeKeyCodes.push( parseInt( key, 10 ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif( this.Reveal.isPaused() && resumeKeyCodes.indexOf( keyCode ) === -1 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use linear navigation if we're configured to OR if\n\t\t// the presentation is one-dimensional\n\t\tlet useLinearMode = config.navigationMode === 'linear' || !this.Reveal.hasHorizontalSlides() || !this.Reveal.hasVerticalSlides();\n\n\t\tlet triggered = false;\n\n\t\t// 1. User defined key bindings\n\t\tif( typeof config.keyboard === 'object' ) {\n\n\t\t\tfor( key in config.keyboard ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet value = config.keyboard[ key ];\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof value === 'function' ) {\n\t\t\t\t\t\tvalue.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof value === 'string' && typeof this.Reveal[ value ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ value ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// 2. Registered custom key bindings\n\t\tif( triggered === false ) {\n\n\t\t\tfor( key in this.bindings ) {\n\n\t\t\t\t// Check if this binding matches the pressed key\n\t\t\t\tif( parseInt( key, 10 ) === keyCode ) {\n\n\t\t\t\t\tlet action = this.bindings[ key ].callback;\n\n\t\t\t\t\t// Callback function\n\t\t\t\t\tif( typeof action === 'function' ) {\n\t\t\t\t\t\taction.apply( null, [ event ] );\n\t\t\t\t\t}\n\t\t\t\t\t// String shortcuts to reveal.js API\n\t\t\t\t\telse if( typeof action === 'string' && typeof this.Reveal[ action ] === 'function' ) {\n\t\t\t\t\t\tthis.Reveal[ action ].call();\n\t\t\t\t\t}\n\n\t\t\t\t\ttriggered = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// 3. System defined key bindings\n\t\tif( triggered === false ) {\n\n\t\t\t// Assume true and try to prove false\n\t\t\ttriggered = true;\n\n\t\t\t// P, PAGE UP\n\t\t\tif( keyCode === 80 || keyCode === 33 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\t\t\t// N, PAGE DOWN\n\t\t\telse if( keyCode === 78 || keyCode === 34 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( firstSlideShortcut ) {\n\t\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// L, RIGHT\n\t\t\telse if( keyCode === 76 || keyCode === 39 ) {\n\t\t\t\tif( lastSlideShortcut ) {\n\t\t\t\t\tthis.Reveal.slide( Number.MAX_VALUE );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// K, UP\n\t\t\telse if( keyCode === 75 || keyCode === 38 ) {\n\t\t\t\tif( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// J, DOWN\n\t\t\telse if( keyCode === 74 || keyCode === 40 ) {\n\t\t\t\tif( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// HOME\n\t\t\telse if( keyCode === 36 ) {\n\t\t\t\tthis.Reveal.slide( 0 );\n\t\t\t}\n\t\t\t// END\n\t\t\telse if( keyCode === 35 ) {\n\t\t\t\tthis.Reveal.slide( Number.MAX_VALUE );\n\t\t\t}\n\t\t\t// SPACE\n\t\t\telse if( keyCode === 32 ) {\n\t\t\t\tif( this.Reveal.overview.isActive() ) {\n\t\t\t\t\tthis.Reveal.overview.deactivate();\n\t\t\t\t}\n\t\t\t\tif( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// TWO-SPOT, SEMICOLON, B, V, PERIOD, LOGITECH PRESENTER TOOLS \"BLACK SCREEN\" BUTTON\n\t\t\telse if( keyCode === 58 || keyCode === 59 || keyCode === 66 || keyCode === 86 || keyCode === 190 || keyCode === 191 ) {\n\t\t\t\tthis.Reveal.togglePause();\n\t\t\t}\n\t\t\t// F\n\t\t\telse if( keyCode === 70 ) {\n\t\t\t\tenterFullscreen( config.embedded ? this.Reveal.getViewportElement() : document.documentElement );\n\t\t\t}\n\t\t\t// A\n\t\t\telse if( keyCode === 65 ) {\n\t\t\t\tif ( config.autoSlideStoppable ) {\n\t\t\t\t\tthis.Reveal.toggleAutoSlide( autoSlideWasPaused );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\ttriggered = false;\n\t\t\t}\n\n\t\t}\n\n\t\t// If the input resulted in a triggered action we should prevent\n\t\t// the browsers default behavior\n\t\tif( triggered ) {\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\t\t// ESC or O key\n\t\telse if( keyCode === 27 || keyCode === 79 ) {\n\t\t\tif( this.Reveal.closeOverlay() === false ) {\n\t\t\t\tthis.Reveal.overview.toggle();\n\t\t\t}\n\n\t\t\tevent.preventDefault && event.preventDefault();\n\t\t}\n\n\t\t// If auto-sliding is enabled we need to cue up\n\t\t// another timeout\n\t\tthis.Reveal.cueAutoSlide();\n\n\t}\n\n}","/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Delays updates to the URL due to a Chrome thumbnailer bug\n\t\tthis.writeURLTimeout = 0;\n\n\t\tthis.onWindowHashChange = this.onWindowHashChange.bind( this );\n\n\t}\n\n\tbind() {\n\n\t\twindow.addEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\tunbind() {\n\n\t\twindow.removeEventListener( 'hashchange', this.onWindowHashChange, false );\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet indices = this.Reveal.getIndices();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\tlet hash = window.location.hash;\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet bits = hash.slice( 2 ).split( '/' ),\n\t\t\tname = hash.replace( /#\\/?/gi, '' );\n\n\t\t// If the first bit is not fully numeric and there is a name we\n\t\t// can assume that this is a named link\n\t\tif( !/^[0-9]*$/.test( bits[0] ) && name.length ) {\n\t\t\tlet element;\n\n\t\t\tlet f;\n\n\t\t\t// Parse named links with fragments (#/named-link/2)\n\t\t\tif( /\\/[-\\d]+$/g.test( name ) ) {\n\t\t\t\tf = parseInt( name.split( '/' ).pop(), 10 );\n\t\t\t\tf = isNaN(f) ? undefined : f;\n\t\t\t\tname = name.split( '/' ).shift();\n\t\t\t}\n\n\t\t\t// Ensure the named link is a valid HTML ID attribute\n\t\t\ttry {\n\t\t\t\telement = document.getElementById( decodeURIComponent( name ) );\n\t\t\t}\n\t\t\tcatch ( error ) { }\n\n\t\t\t// Ensure that we're not already on a slide with the same name\n\t\t\tlet isSameNameAsCurrentSlide = currentSlide ? currentSlide.getAttribute( 'id' ) === name : false;\n\n\t\t\tif( element ) {\n\t\t\t\t// If the slide exists and is not the current slide...\n\t\t\t\tif ( !isSameNameAsCurrentSlide || typeof f !== 'undefined' ) {\n\t\t\t\t\t// ...find the position of the named slide and navigate to it\n\t\t\t\t\tlet slideIndices = this.Reveal.getIndices( element );\n\t\t\t\t\tthis.Reveal.slide( slideIndices.h, slideIndices.v, f );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If the slide doesn't exist, navigate to the current slide\n\t\t\telse {\n\t\t\t\tthis.Reveal.slide( indices.h || 0, indices.v || 0 );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tlet hashIndexBase = config.hashOneBasedIndex ? 1 : 0;\n\n\t\t\t// Read the index components of the hash\n\t\t\tlet h = ( parseInt( bits[0], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tv = ( parseInt( bits[1], 10 ) - hashIndexBase ) || 0,\n\t\t\t\tf;\n\n\t\t\tif( config.fragmentInURL ) {\n\t\t\t\tf = parseInt( bits[2], 10 );\n\t\t\t\tif( isNaN( f ) ) {\n\t\t\t\t\tf = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif( h !== indices.h || v !== indices.v || f !== undefined ) {\n\t\t\t\tthis.Reveal.slide( h, v, f );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the page URL (hash) to reflect the current\n\t * state.\n\t *\n\t * @param {number} delay The time in ms to wait before\n\t * writing the hash\n\t */\n\twriteURL( delay ) {\n\n\t\tlet config = this.Reveal.getConfig();\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\n\t\t// Make sure there's never more than one timeout running\n\t\tclearTimeout( this.writeURLTimeout );\n\n\t\t// If a delay is specified, timeout this call\n\t\tif( typeof delay === 'number' ) {\n\t\t\tthis.writeURLTimeout = setTimeout( this.writeURL, delay );\n\t\t}\n\t\telse if( currentSlide ) {\n\n\t\t\tlet hash = this.getHash();\n\n\t\t\t// If we're configured to push to history OR the history\n\t\t\t// API is not avaialble.\n\t\t\tif( config.history ) {\n\t\t\t\twindow.location.hash = hash;\n\t\t\t}\n\t\t\t// If we're configured to reflect the current slide in the\n\t\t\t// URL without pushing to history.\n\t\t\telse if( config.hash ) {\n\t\t\t\t// If the hash is empty, don't add it to the URL\n\t\t\t\tif( hash === '/' ) {\n\t\t\t\t\twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\twindow.history.replaceState( null, null, '#' + hash );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// UPDATE: The below nuking of all hash changes breaks\n\t\t\t// anchors on pages where reveal.js is running. Removed\n\t\t\t// in 4.0. Why was it here in the first place? ¯\\_(ツ)_/¯\n\t\t\t//\n\t\t\t// If history and hash are both disabled, a hash may still\n\t\t\t// be added to the URL by clicking on a href with a hash\n\t\t\t// target. Counter this by always removing the hash.\n\t\t\t// else {\n\t\t\t// \twindow.history.replaceState( null, null, window.location.pathname + window.location.search );\n\t\t\t// }\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Return a hash URL that will resolve to the given slide location.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to link to\n\t */\n\tgetHash( slide ) {\n\n\t\tlet url = '/';\n\n\t\t// Attempt to create a named link based on the slide's ID\n\t\tlet s = slide || this.Reveal.getCurrentSlide();\n\t\tlet id = s ? s.getAttribute( 'id' ) : null;\n\t\tif( id ) {\n\t\t\tid = encodeURIComponent( id );\n\t\t}\n\n\t\tlet index = this.Reveal.getIndices( slide );\n\t\tif( !this.Reveal.getConfig().fragmentInURL ) {\n\t\t\tindex.f = undefined;\n\t\t}\n\n\t\t// If the current slide has an ID, use that as a named link,\n\t\t// but we don't support named links with a fragment index\n\t\tif( typeof id === 'string' && id.length ) {\n\t\t\turl = '/' + id;\n\n\t\t\t// If there is also a fragment, append that at the end\n\t\t\t// of the named link, like: #/named-link/2\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\t\t// Otherwise use the /h/v index\n\t\telse {\n\t\t\tlet hashIndexBase = this.Reveal.getConfig().hashOneBasedIndex ? 1 : 0;\n\t\t\tif( index.h > 0 || index.v > 0 || index.f >= 0 ) url += index.h + hashIndexBase;\n\t\t\tif( index.v > 0 || index.f >= 0 ) url += '/' + (index.v + hashIndexBase );\n\t\t\tif( index.f >= 0 ) url += '/' + index.f;\n\t\t}\n\n\t\treturn url;\n\n\t}\n\n\t/**\n\t * Handler for the window level 'hashchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tonWindowHashChange( event ) {\n\n\t\tthis.readURL();\n\n\t}\n\n}","import { queryAll } from '../utils/util.js'\nimport { isAndroid } from '../utils/device.js'\n\n/**\n * Manages our presentation controls. This includes both\n * the built-in control arrows as well as event monitoring\n * of any elements within the presentation with either of the\n * following helper classes:\n * - .navigate-up\n * - .navigate-right\n * - .navigate-down\n * - .navigate-left\n * - .navigate-next\n * - .navigate-prev\n */\nexport default class Controls {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );\n\t\tthis.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );\n\t\tthis.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );\n\t\tthis.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );\n\t\tthis.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );\n\t\tthis.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tconst rtl = this.Reveal.getConfig().rtl;\n\t\tconst revealElement = this.Reveal.getRevealElement();\n\n\t\tthis.element = document.createElement( 'aside' );\n\t\tthis.element.className = 'controls';\n\t\tthis.element.innerHTML =\n\t\t\t`<button class=\"navigate-left\" aria-label=\"${ rtl ? 'next slide' : 'previous slide' }\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-right\" aria-label=\"${ rtl ? 'previous slide' : 'next slide' }\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-up\" aria-label=\"above slide\"><div class=\"controls-arrow\"></div></button>\n\t\t\t<button class=\"navigate-down\" aria-label=\"below slide\"><div class=\"controls-arrow\"></div></button>`;\n\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\t// There can be multiple instances of controls throughout the page\n\t\tthis.controlsLeft = queryAll( revealElement, '.navigate-left' );\n\t\tthis.controlsRight = queryAll( revealElement, '.navigate-right' );\n\t\tthis.controlsUp = queryAll( revealElement, '.navigate-up' );\n\t\tthis.controlsDown = queryAll( revealElement, '.navigate-down' );\n\t\tthis.controlsPrev = queryAll( revealElement, '.navigate-prev' );\n\t\tthis.controlsNext = queryAll( revealElement, '.navigate-next' );\n\n\t\t// The left, right and down arrows in the standard reveal.js controls\n\t\tthis.controlsRightArrow = this.element.querySelector( '.navigate-right' );\n\t\tthis.controlsLeftArrow = this.element.querySelector( '.navigate-left' );\n\t\tthis.controlsDownArrow = this.element.querySelector( '.navigate-down' );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.controls ? 'block' : 'none';\n\n\t\tthis.element.setAttribute( 'data-controls-layout', config.controlsLayout );\n\t\tthis.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );\n\n\t}\n\n\tbind() {\n\n\t\t// Listen to both touch and click events, in case the device\n\t\t// supports both\n\t\tlet pointerEvents = [ 'touchstart', 'click' ];\n\n\t\t// Only support touch for Android, fixes double navigations in\n\t\t// stock browser\n\t\tif( isAndroid ) {\n\t\t\tpointerEvents = [ 'touchstart' ];\n\t\t}\n\n\t\tpointerEvents.forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\tunbind() {\n\n\t\t[ 'touchstart', 'click' ].forEach( eventName => {\n\t\t\tthis.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );\n\t\t\tthis.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );\n\t\t\tthis.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );\n\t\t\tthis.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );\n\t\t\tthis.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );\n\t\t\tthis.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates the state of all control/navigation arrows.\n\t */\n\tupdate() {\n\n\t\tlet routes = this.Reveal.availableRoutes();\n\n\t\t// Remove the 'enabled' class from all directions\n\t\t[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {\n\t\t\tnode.classList.remove( 'enabled', 'fragmented' );\n\n\t\t\t// Set 'disabled' attribute on all directions\n\t\t\tnode.setAttribute( 'disabled', 'disabled' );\n\t\t} );\n\n\t\t// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons\n\t\tif( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Prev/next buttons\n\t\tif( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\tif( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t// Highlight fragment directions\n\t\tlet currentSlide = this.Reveal.getCurrentSlide();\n\t\tif( currentSlide ) {\n\n\t\t\tlet fragmentsRoutes = this.Reveal.fragments.availableRoutes();\n\n\t\t\t// Always apply fragment decorator to prev/next buttons\n\t\t\tif( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\tif( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\n\t\t\t// Apply fragment decorators to directional buttons based on\n\t\t\t// what slide axis they are in\n\t\t\tif( this.Reveal.isVerticalSlide( currentSlide ) ) {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t\tif( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );\n\t\t\t}\n\n\t\t}\n\n\t\tif( this.Reveal.getConfig().controlsTutorial ) {\n\n\t\t\tlet indices = this.Reveal.getIndices();\n\n\t\t\t// Highlight control arrows with an animation to ensure\n\t\t\t// that the viewer knows how to navigate\n\t\t\tif( !this.Reveal.hasNavigatedVertically() && routes.down ) {\n\t\t\t\tthis.controlsDownArrow.classList.add( 'highlight' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.controlsDownArrow.classList.remove( 'highlight' );\n\n\t\t\t\tif( this.Reveal.getConfig().rtl ) {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsLeftArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.add( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.controlsRightArrow.classList.remove( 'highlight' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Event handlers for navigation control buttons.\n\t */\n\tonNavigateLeftClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.prev();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.left();\n\t\t}\n\n\t}\n\n\tonNavigateRightClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tif( this.Reveal.getConfig().navigationMode === 'linear' ) {\n\t\t\tthis.Reveal.next();\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.right();\n\t\t}\n\n\t}\n\n\tonNavigateUpClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.up();\n\n\t}\n\n\tonNavigateDownClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.down();\n\n\t}\n\n\tonNavigatePrevClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.prev();\n\n\t}\n\n\tonNavigateNextClicked( event ) {\n\n\t\tevent.preventDefault();\n\t\tthis.Reveal.onUserInput();\n\n\t\tthis.Reveal.next();\n\n\t}\n\n\n}","/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onProgressClicked = this.onProgressClicked.bind( this );\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'progress';\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t\tthis.bar = document.createElement( 'span' );\n\t\tthis.element.appendChild( this.bar );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tthis.element.style.display = config.progress ? 'block' : 'none';\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.addEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tif ( this.Reveal.getConfig().progress && this.element ) {\n\t\t\tthis.element.removeEventListener( 'click', this.onProgressClicked, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the progress bar to reflect the current slide.\n\t */\n\tupdate() {\n\n\t\t// Update progress if enabled\n\t\tif( this.Reveal.getConfig().progress && this.bar ) {\n\n\t\t\tlet scale = this.Reveal.getProgress();\n\n\t\t\t// Don't fill the progress bar if there's only one slide\n\t\t\tif( this.Reveal.getTotalSlides() < 2 ) {\n\t\t\t\tscale = 0;\n\t\t\t}\n\n\t\t\tthis.bar.style.transform = 'scaleX('+ scale +')';\n\n\t\t}\n\n\t}\n\n\tgetMaxWidth() {\n\n\t\treturn this.Reveal.getRevealElement().offsetWidth;\n\n\t}\n\n\t/**\n\t * Clicking on the progress bar results in a navigation to the\n\t * closest approximate horizontal slide using this equation:\n\t *\n\t * ( clickX / presentationWidth ) * numberOfSlides\n\t *\n\t * @param {object} event\n\t */\n\tonProgressClicked( event ) {\n\n\t\tthis.Reveal.onUserInput( event );\n\n\t\tevent.preventDefault();\n\n\t\tlet slides = this.Reveal.getSlides();\n\t\tlet slidesTotal = slides.length;\n\t\tlet slideIndex = Math.floor( ( event.clientX / this.getMaxWidth() ) * slidesTotal );\n\n\t\tif( this.Reveal.getConfig().rtl ) {\n\t\t\tslideIndex = slidesTotal - slideIndex;\n\t\t}\n\n\t\tlet targetIndices = this.Reveal.getIndices(slides[slideIndex]);\n\t\tthis.Reveal.slide( targetIndices.h, targetIndices.v );\n\n\t}\n\n\n}","/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Throttles mouse wheel navigation\n\t\tthis.lastMouseWheelStep = 0;\n\n\t\t// Is the mouse pointer currently hidden from view\n\t\tthis.cursorHidden = false;\n\n\t\t// Timeout used to determine when the cursor is inactive\n\t\tthis.cursorInactiveTimeout = 0;\n\n\t\tthis.onDocumentCursorActive = this.onDocumentCursorActive.bind( this );\n\t\tthis.onDocumentMouseScroll = this.onDocumentMouseScroll.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.mouseWheel ) {\n\t\t\tdocument.addEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.addEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\t\telse {\n\t\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false ); // FF\n\t\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\t}\n\n\t\t// Auto-hide the mouse pointer when its inactive\n\t\tif( config.hideInactiveCursor ) {\n\t\t\tdocument.addEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.addEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\t\telse {\n\t\t\tthis.showCursor();\n\n\t\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Shows the mouse pointer after it has been hidden with\n\t * #hideCursor.\n\t */\n\tshowCursor() {\n\n\t\tif( this.cursorHidden ) {\n\t\t\tthis.cursorHidden = false;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = '';\n\t\t}\n\n\t}\n\n\t/**\n\t * Hides the mouse pointer when it's on top of the .reveal\n\t * container.\n\t */\n\thideCursor() {\n\n\t\tif( this.cursorHidden === false ) {\n\t\t\tthis.cursorHidden = true;\n\t\t\tthis.Reveal.getRevealElement().style.cursor = 'none';\n\t\t}\n\n\t}\n\n\t/**\n\t * Called whenever there is mouse input at the document level\n\t * to determine if the cursor is active or not.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentCursorActive( event ) {\n\n\t\tthis.showCursor();\n\n\t\tclearTimeout( this.cursorInactiveTimeout );\n\n\t\tthis.cursorInactiveTimeout = setTimeout( this.hideCursor.bind( this ), this.Reveal.getConfig().hideCursorTime );\n\n\t}\n\n\t/**\n\t * Handles mouse wheel scrolling, throttled to avoid skipping\n\t * multiple slides.\n\t *\n\t * @param {object} event\n\t */\n\tonDocumentMouseScroll( event ) {\n\n\t\tif( Date.now() - this.lastMouseWheelStep > 1000 ) {\n\n\t\t\tthis.lastMouseWheelStep = Date.now();\n\n\t\t\tlet delta = event.detail || -event.wheelDelta;\n\t\t\tif( delta > 0 ) {\n\t\t\t\tthis.Reveal.next();\n\t\t\t}\n\t\t\telse if( delta < 0 ) {\n\t\t\t\tthis.Reveal.prev();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}","var DESCRIPTORS = require('../internals/descriptors');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(O, key)) {\n result.push(TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to load\n * @param {function} callback Method to invoke when the script\n * has loaded and executed\n */\nexport const loadScript = ( url, callback ) => {\n\n\tconst script = document.createElement( 'script' );\n\tscript.type = 'text/javascript';\n\tscript.async = false;\n\tscript.defer = false;\n\tscript.src = url;\n\n\tif( typeof callback === 'function' ) {\n\n\t\t// Success callback\n\t\tscript.onload = script.onreadystatechange = event => {\n\t\t\tif( event.type === 'load' || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t// Kill event listeners\n\t\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\t\tcallback();\n\n\t\t\t}\n\t\t};\n\n\t\t// Error callback\n\t\tscript.onerror = err => {\n\n\t\t\t// Kill event listeners\n\t\t\tscript.onload = script.onreadystatechange = script.onerror = null;\n\n\t\t\tcallback( new Error( 'Failed loading script: ' + script.src + '\\n' + err ) );\n\n\t\t};\n\n\t}\n\n\t// Append the script at the end of <head>\n\tconst head = document.querySelector( 'head' );\n\thead.insertBefore( script, head.lastChild );\n\n}","import { loadScript } from '../utils/loader.js'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport default class Plugins {\n\n\tconstructor( reveal ) {\n\n\t\tthis.Reveal = reveal;\n\n\t\t// Flags our current state (idle -> loading -> loaded)\n\t\tthis.state = 'idle';\n\n\t\t// An id:instance map of currently registed plugins\n\t\tthis.registeredPlugins = {};\n\n\t\tthis.asyncDependencies = [];\n\n\t}\n\n\t/**\n\t * Loads reveal.js dependencies, registers and\n\t * initializes plugins.\n\t *\n\t * Plugins are direct references to a reveal.js plugin\n\t * object that we register and initialize after any\n\t * synchronous dependencies have loaded.\n\t *\n\t * Dependencies are defined via the 'dependencies' config\n\t * option and will be loaded prior to starting reveal.js.\n\t * Some dependencies may have an 'async' flag, if so they\n\t * will load after reveal.js has been started up.\n\t */\n\tload( plugins, dependencies ) {\n\n\t\tthis.state = 'loading';\n\n\t\tplugins.forEach( this.registerPlugin.bind( this ) );\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet scripts = [],\n\t\t\t\tscriptsToLoad = 0;\n\n\t\t\tdependencies.forEach( s => {\n\t\t\t\t// Load if there's no condition or the condition is truthy\n\t\t\t\tif( !s.condition || s.condition() ) {\n\t\t\t\t\tif( s.async ) {\n\t\t\t\t\t\tthis.asyncDependencies.push( s );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tscripts.push( s );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif( scripts.length ) {\n\t\t\t\tscriptsToLoad = scripts.length;\n\n\t\t\t\tconst scriptLoadedCallback = (s) => {\n\t\t\t\t\tif( s && typeof s.callback === 'function' ) s.callback();\n\n\t\t\t\t\tif( --scriptsToLoad === 0 ) {\n\t\t\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Load synchronous scripts\n\t\t\t\tscripts.forEach( s => {\n\t\t\t\t\tif( typeof s.id === 'string' ) {\n\t\t\t\t\t\tthis.registerPlugin( s );\n\t\t\t\t\t\tscriptLoadedCallback( s );\n\t\t\t\t\t}\n\t\t\t\t\telse if( typeof s.src === 'string' ) {\n\t\t\t\t\t\tloadScript( s.src, () => scriptLoadedCallback(s) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tconsole.warn( 'Unrecognized plugin format', s );\n\t\t\t\t\t\tscriptLoadedCallback();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.initPlugins().then( resolve );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Initializes our plugins and waits for them to be ready\n\t * before proceeding.\n\t */\n\tinitPlugins() {\n\n\t\treturn new Promise( resolve => {\n\n\t\t\tlet pluginValues = Object.values( this.registeredPlugins );\n\t\t\tlet pluginsToInitialize = pluginValues.length;\n\n\t\t\t// If there are no plugins, skip this step\n\t\t\tif( pluginsToInitialize === 0 ) {\n\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t}\n\t\t\t// ... otherwise initialize plugins\n\t\t\telse {\n\n\t\t\t\tlet initNextPlugin;\n\n\t\t\t\tlet afterPlugInitialized = () => {\n\t\t\t\t\tif( --pluginsToInitialize === 0 ) {\n\t\t\t\t\t\tthis.loadAsync().then( resolve );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tinitNextPlugin();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tlet i = 0;\n\n\t\t\t\t// Initialize plugins serially\n\t\t\t\tinitNextPlugin = () => {\n\n\t\t\t\t\tlet plugin = pluginValues[i++];\n\n\t\t\t\t\t// If the plugin has an 'init' method, invoke it\n\t\t\t\t\tif( typeof plugin.init === 'function' ) {\n\t\t\t\t\t\tlet promise = plugin.init( this.Reveal );\n\n\t\t\t\t\t\t// If the plugin returned a Promise, wait for it\n\t\t\t\t\t\tif( promise && typeof promise.then === 'function' ) {\n\t\t\t\t\t\t\tpromise.then( afterPlugInitialized );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tafterPlugInitialized();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tinitNextPlugin();\n\n\t\t\t}\n\n\t\t} )\n\n\t}\n\n\t/**\n\t * Loads all async reveal.js dependencies.\n\t */\n\tloadAsync() {\n\n\t\tthis.state = 'loaded';\n\n\t\tif( this.asyncDependencies.length ) {\n\t\t\tthis.asyncDependencies.forEach( s => {\n\t\t\t\tloadScript( s.src, s.callback );\n\t\t\t} );\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n\t/**\n\t * Registers a new plugin with this reveal.js instance.\n\t *\n\t * reveal.js waits for all regisered plugins to initialize\n\t * before considering itself ready, as long as the plugin\n\t * is registered before calling `Reveal.initialize()`.\n\t */\n\tregisterPlugin( plugin ) {\n\n\t\t// Backwards compatibility to make reveal.js ~3.9.0\n\t\t// plugins work with reveal.js 4.0.0\n\t\tif( arguments.length === 2 && typeof arguments[0] === 'string' ) {\n\t\t\tplugin = arguments[1];\n\t\t\tplugin.id = arguments[0];\n\t\t}\n\t\t// Plugin can optionally be a function which we call\n\t\t// to create an instance of the plugin\n\t\telse if( typeof plugin === 'function' ) {\n\t\t\tplugin = plugin();\n\t\t}\n\n\t\tlet id = plugin.id;\n\n\t\tif( typeof id !== 'string' ) {\n\t\t\tconsole.warn( 'Unrecognized plugin format; can\\'t find plugin.id', plugin );\n\t\t}\n\t\telse if( this.registeredPlugins[id] === undefined ) {\n\t\t\tthis.registeredPlugins[id] = plugin;\n\n\t\t\t// If a plugin is registered after reveal.js is loaded,\n\t\t\t// initialize it right away\n\t\t\tif( this.state === 'loaded' && typeof plugin.init === 'function' ) {\n\t\t\t\tplugin.init( this.Reveal );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconsole.warn( 'reveal.js: \"'+ id +'\" plugin has already been registered' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if a specific plugin has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\thasPlugin( id ) {\n\n\t\treturn !!this.registeredPlugins[id];\n\n\t}\n\n\t/**\n\t * Returns the specific plugin instance, if a plugin\n\t * with the given ID has been registered.\n\t *\n\t * @param {String} id Unique plugin identifier\n\t */\n\tgetPlugin( id ) {\n\n\t\treturn this.registeredPlugins[id];\n\n\t}\n\n\tgetRegisteredPlugins() {\n\n\t\treturn this.registeredPlugins;\n\n\t}\n\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import { SLIDES_SELECTOR } from '../utils/constants.js'\nimport { queryAll, createStyleSheet } from '../utils/util.js'\n\n/**\n * Setups up our presentation for printing/exporting to PDF.\n */\nexport default class Print {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\t/**\n\t * Configures the presentation for printing to a static\n\t * PDF.\n\t */\n\tasync setupPDF() {\n\n\t\tconst config = this.Reveal.getConfig();\n\t\tconst slides = queryAll( this.Reveal.getRevealElement(), SLIDES_SELECTOR )\n\n\t\t// Compute slide numbers now, before we start duplicating slides\n\t\tconst doingSlideNumbers = config.slideNumber && /all|print/i.test( config.showSlideNumber );\n\n\t\tconst slideSize = this.Reveal.getComputedSlideSize( window.innerWidth, window.innerHeight );\n\n\t\t// Dimensions of the PDF pages\n\t\tconst pageWidth = Math.floor( slideSize.width * ( 1 + config.margin ) ),\n\t\t\tpageHeight = Math.floor( slideSize.height * ( 1 + config.margin ) );\n\n\t\t// Dimensions of slides within the pages\n\t\tconst slideWidth = slideSize.width,\n\t\t\tslideHeight = slideSize.height;\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\t// Let the browser know what page size we want to print\n\t\tcreateStyleSheet( '@page{size:'+ pageWidth +'px '+ pageHeight +'px; margin: 0px;}' );\n\n\t\t// Limit the size of certain elements to the dimensions of the slide\n\t\tcreateStyleSheet( '.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: '+ slideWidth +'px; max-height:'+ slideHeight +'px}' );\n\n\t\tdocument.documentElement.classList.add( 'print-pdf' );\n\t\tdocument.body.style.width = pageWidth + 'px';\n\t\tdocument.body.style.height = pageHeight + 'px';\n\n\t\t// Make sure stretch elements fit on slide\n\t\tawait new Promise( requestAnimationFrame );\n\t\tthis.Reveal.layoutSlideContents( slideWidth, slideHeight );\n\n\t\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t// the printed slide size\n\t\tslides.forEach( slide => this.Reveal.slideContent.layout( slide ) );\n\n\t\t// Batch scrollHeight access to prevent layout thrashing\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tconst slideScrollHeights = slides.map( slide => slide.scrollHeight );\n\n\t\tconst pages = [];\n\t\tconst pageContainer = slides[0].parentNode;\n\n\t\t// Slide and slide background layout\n\t\tslides.forEach( function( slide, index ) {\n\n\t\t\t// Vertical stacks are not centred since their section\n\t\t\t// children will be\n\t\t\tif( slide.classList.contains( 'stack' ) === false ) {\n\t\t\t\t// Center the slide inside of the page, giving the slide some margin\n\t\t\t\tlet left = ( pageWidth - slideWidth ) / 2;\n\t\t\t\tlet top = ( pageHeight - slideHeight ) / 2;\n\n\t\t\t\tconst contentHeight = slideScrollHeights[ index ];\n\t\t\t\tlet numberOfPages = Math.max( Math.ceil( contentHeight / pageHeight ), 1 );\n\n\t\t\t\t// Adhere to configured pages per slide limit\n\t\t\t\tnumberOfPages = Math.min( numberOfPages, config.pdfMaxPagesPerSlide );\n\n\t\t\t\t// Center slides vertically\n\t\t\t\tif( numberOfPages === 1 && config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\ttop = Math.max( ( pageHeight - contentHeight ) / 2, 0 );\n\t\t\t\t}\n\n\t\t\t\t// Wrap the slide in a page element and hide its overflow\n\t\t\t\t// so that no page ever flows onto another\n\t\t\t\tconst page = document.createElement( 'div' );\n\t\t\t\tpages.push( page );\n\n\t\t\t\tpage.className = 'pdf-page';\n\t\t\t\tpage.style.height = ( ( pageHeight + config.pdfPageHeightOffset ) * numberOfPages ) + 'px';\n\t\t\t\tpage.appendChild( slide );\n\n\t\t\t\t// Position the slide inside of the page\n\t\t\t\tslide.style.left = left + 'px';\n\t\t\t\tslide.style.top = top + 'px';\n\t\t\t\tslide.style.width = slideWidth + 'px';\n\n\t\t\t\tif( slide.slideBackgroundElement ) {\n\t\t\t\t\tpage.insertBefore( slide.slideBackgroundElement, slide );\n\t\t\t\t}\n\n\t\t\t\t// Inject notes if `showNotes` is enabled\n\t\t\t\tif( config.showNotes ) {\n\n\t\t\t\t\t// Are there notes for this slide?\n\t\t\t\t\tconst notes = this.Reveal.getSlideNotes( slide );\n\t\t\t\t\tif( notes ) {\n\n\t\t\t\t\t\tconst notesSpacing = 8;\n\t\t\t\t\t\tconst notesLayout = typeof config.showNotes === 'string' ? config.showNotes : 'inline';\n\t\t\t\t\t\tconst notesElement = document.createElement( 'div' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes' );\n\t\t\t\t\t\tnotesElement.classList.add( 'speaker-notes-pdf' );\n\t\t\t\t\t\tnotesElement.setAttribute( 'data-layout', notesLayout );\n\t\t\t\t\t\tnotesElement.innerHTML = notes;\n\n\t\t\t\t\t\tif( notesLayout === 'separate-page' ) {\n\t\t\t\t\t\t\tpages.push( notesElement );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnotesElement.style.left = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.bottom = notesSpacing + 'px';\n\t\t\t\t\t\t\tnotesElement.style.width = ( pageWidth - notesSpacing*2 ) + 'px';\n\t\t\t\t\t\t\tpage.appendChild( notesElement );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Inject slide numbers if `slideNumbers` are enabled\n\t\t\t\tif( doingSlideNumbers ) {\n\t\t\t\t\tconst slideNumber = index + 1;\n\t\t\t\t\tconst numberElement = document.createElement( 'div' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number' );\n\t\t\t\t\tnumberElement.classList.add( 'slide-number-pdf' );\n\t\t\t\t\tnumberElement.innerHTML = slideNumber;\n\t\t\t\t\tpage.appendChild( numberElement );\n\t\t\t\t}\n\n\t\t\t\t// Copy page and show fragments one after another\n\t\t\t\tif( config.pdfSeparateFragments ) {\n\n\t\t\t\t\t// Each fragment 'group' is an array containing one or more\n\t\t\t\t\t// fragments. Multiple fragments that appear at the same time\n\t\t\t\t\t// are part of the same group.\n\t\t\t\t\tconst fragmentGroups = this.Reveal.fragments.sort( page.querySelectorAll( '.fragment' ), true );\n\n\t\t\t\t\tlet previousFragmentStep;\n\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\n\t\t\t\t\t\t// Remove 'current-fragment' from the previous group\n\t\t\t\t\t\tif( previousFragmentStep ) {\n\t\t\t\t\t\t\tpreviousFragmentStep.forEach( function( fragment ) {\n\t\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Show the fragments for the current index\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible', 'current-fragment' );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Create a separate page for the current fragment state\n\t\t\t\t\t\tconst clonedPage = page.cloneNode( true );\n\t\t\t\t\t\tpages.push( clonedPage );\n\n\t\t\t\t\t\tpreviousFragmentStep = fragments;\n\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Reset the first/original page so that all fragments are hidden\n\t\t\t\t\tfragmentGroups.forEach( function( fragments ) {\n\t\t\t\t\t\tfragments.forEach( function( fragment ) {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\t\t\t\t// Show all fragments\n\t\t\t\telse {\n\t\t\t\t\tqueryAll( page, '.fragment:not(.fade-out)' ).forEach( function( fragment ) {\n\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}, this );\n\n\t\tawait new Promise( requestAnimationFrame );\n\n\t\tpages.forEach( page => pageContainer.appendChild( page ) );\n\n\t\t// Notify subscribers that the PDF layout is good to go\n\t\tthis.Reveal.dispatchEvent({ type: 'pdf-ready' });\n\n\t}\n\n\t/**\n\t * Checks if this instance is being used to print a PDF.\n\t */\n\tisPrintingPDF() {\n\n\t\treturn ( /print-pdf/gi ).test( window.location.search );\n\n\t}\n\n}\n","import { isAndroid } from '../utils/device.js'\nimport { matches } from '../utils/util.js'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n * Controls all touch interactions and navigations for\n * a presentation.\n */\nexport default class Touch {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\t// Holds information about the currently ongoing touch interaction\n\t\tthis.touchStartX = 0;\n\t\tthis.touchStartY = 0;\n\t\tthis.touchStartCount = 0;\n\t\tthis.touchCaptured = false;\n\n\t\tthis.onPointerDown = this.onPointerDown.bind( this );\n\t\tthis.onPointerMove = this.onPointerMove.bind( this );\n\t\tthis.onPointerUp = this.onPointerUp.bind( this );\n\t\tthis.onTouchStart = this.onTouchStart.bind( this );\n\t\tthis.onTouchMove = this.onTouchMove.bind( this );\n\t\tthis.onTouchEnd = this.onTouchEnd.bind( this );\n\n\t}\n\n\t/**\n\t *\n\t */\n\tbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\tif( 'onpointerdown' in window ) {\n\t\t\t// Use W3C pointer events\n\t\t\trevealElement.addEventListener( 'pointerdown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'pointermove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'pointerup', this.onPointerUp, false );\n\t\t}\n\t\telse if( window.navigator.msPointerEnabled ) {\n\t\t\t// IE 10 uses prefixed version of pointer events\n\t\t\trevealElement.addEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\t\trevealElement.addEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\t\trevealElement.addEventListener( 'MSPointerUp', this.onPointerUp, false );\n\t\t}\n\t\telse {\n\t\t\t// Fall back to touch events\n\t\t\trevealElement.addEventListener( 'touchstart', this.onTouchStart, false );\n\t\t\trevealElement.addEventListener( 'touchmove', this.onTouchMove, false );\n\t\t\trevealElement.addEventListener( 'touchend', this.onTouchEnd, false );\n\t\t}\n\n\t}\n\n\t/**\n\t *\n\t */\n\tunbind() {\n\n\t\tlet revealElement = this.Reveal.getRevealElement();\n\n\t\trevealElement.removeEventListener( 'pointerdown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'pointermove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'pointerup', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'MSPointerDown', this.onPointerDown, false );\n\t\trevealElement.removeEventListener( 'MSPointerMove', this.onPointerMove, false );\n\t\trevealElement.removeEventListener( 'MSPointerUp', this.onPointerUp, false );\n\n\t\trevealElement.removeEventListener( 'touchstart', this.onTouchStart, false );\n\t\trevealElement.removeEventListener( 'touchmove', this.onTouchMove, false );\n\t\trevealElement.removeEventListener( 'touchend', this.onTouchEnd, false );\n\n\t}\n\n\t/**\n\t * Checks if the target element prevents the triggering of\n\t * swipe navigation.\n\t */\n\tisSwipePrevented( target ) {\n\n\t\t// Prevent accidental swipes when scrubbing timelines\n\t\tif( matches( target, 'video, audio' ) ) return true;\n\n\t\twhile( target && typeof target.hasAttribute === 'function' ) {\n\t\t\tif( target.hasAttribute( 'data-prevent-swipe' ) ) return true;\n\t\t\ttarget = target.parentNode;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchstart' event, enables support for\n\t * swipe and pinch gestures.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchStart( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tthis.touchStartX = event.touches[0].clientX;\n\t\tthis.touchStartY = event.touches[0].clientY;\n\t\tthis.touchStartCount = event.touches.length;\n\n\t}\n\n\t/**\n\t * Handler for the 'touchmove' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchMove( event ) {\n\n\t\tif( this.isSwipePrevented( event.target ) ) return true;\n\n\t\tlet config = this.Reveal.getConfig();\n\n\t\t// Each touch should only trigger one action\n\t\tif( !this.touchCaptured ) {\n\t\t\tthis.Reveal.onUserInput( event );\n\n\t\t\tlet currentX = event.touches[0].clientX;\n\t\t\tlet currentY = event.touches[0].clientY;\n\n\t\t\t// There was only one touch point, look for a swipe\n\t\t\tif( event.touches.length === 1 && this.touchStartCount !== 2 ) {\n\n\t\t\t\tlet availableRoutes = this.Reveal.availableRoutes({ includeFragments: true });\n\n\t\t\t\tlet deltaX = currentX - this.touchStartX,\n\t\t\t\t\tdeltaY = currentY - this.touchStartY;\n\n\t\t\t\tif( deltaX > SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.left();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaX < -SWIPE_THRESHOLD && Math.abs( deltaX ) > Math.abs( deltaY ) ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tif( config.rtl ) {\n\t\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.right();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY > SWIPE_THRESHOLD && availableRoutes.up ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.prev();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.up();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( deltaY < -SWIPE_THRESHOLD && availableRoutes.down ) {\n\t\t\t\t\tthis.touchCaptured = true;\n\t\t\t\t\tif( config.navigationMode === 'linear' ) {\n\t\t\t\t\t\tthis.Reveal.next();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.Reveal.down();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we're embedded, only block touch events if they have\n\t\t\t\t// triggered an action\n\t\t\t\tif( config.embedded ) {\n\t\t\t\t\tif( this.touchCaptured || this.Reveal.isVerticalSlide() ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Not embedded? Block them all to avoid needless tossing\n\t\t\t\t// around of the viewport in iOS\n\t\t\t\telse {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t\t// There's a bug with swiping on some Android devices unless\n\t\t// the default action is always prevented\n\t\telse if( isAndroid ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the 'touchend' event.\n\t *\n\t * @param {object} event\n\t */\n\tonTouchEnd( event ) {\n\n\t\tthis.touchCaptured = false;\n\n\t}\n\n\t/**\n\t * Convert pointer down to touch start.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerDown( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchStart( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer move to touch move.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerMove( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchMove( event );\n\t\t}\n\n\t}\n\n\t/**\n\t * Convert pointer up to touch end.\n\t *\n\t * @param {object} event\n\t */\n\tonPointerUp( event ) {\n\n\t\tif( event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === \"touch\" ) {\n\t\t\tevent.touches = [{ clientX: event.clientX, clientY: event.clientY }];\n\t\t\tthis.onTouchEnd( event );\n\t\t}\n\n\t}\n\n}","import { closest } from '../utils/util.js'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only capture keyboard from the presentation\n * a user is currently interacting with in a page where\n * multiple presentations are embedded.\n */\n\nconst STATE_FOCUS = 'focus';\nconst STATE_BLUR = 'blur';\n\nexport default class Focus {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t\tthis.onRevealPointerDown = this.onRevealPointerDown.bind( this );\n\t\tthis.onDocumentPointerDown = this.onDocumentPointerDown.bind( this );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.embedded ) {\n\t\t\tthis.blur();\n\t\t}\n\t\telse {\n\t\t\tthis.focus();\n\t\t\tthis.unbind();\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tif( this.Reveal.getConfig().embedded ) {\n\t\t\tthis.Reveal.getRevealElement().addEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tthis.Reveal.getRevealElement().removeEventListener( 'pointerdown', this.onRevealPointerDown, false );\n\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\n\t}\n\n\tfocus() {\n\n\t\tif( this.state !== STATE_FOCUS ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'focused' );\n\t\t\tdocument.addEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_FOCUS;\n\n\t}\n\n\tblur() {\n\n\t\tif( this.state !== STATE_BLUR ) {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\n\t\t\tdocument.removeEventListener( 'pointerdown', this.onDocumentPointerDown, false );\n\t\t}\n\n\t\tthis.state = STATE_BLUR;\n\n\t}\n\n\tisFocused() {\n\n\t\treturn this.state === STATE_FOCUS;\n\n\t}\n\n\tonRevealPointerDown( event ) {\n\n\t\tthis.focus();\n\n\t}\n\n\tonDocumentPointerDown( event ) {\n\n\t\tlet revealElement = closest( event.target, '.reveal' );\n\t\tif( !revealElement || revealElement !== this.Reveal.getRevealElement() ) {\n\t\t\tthis.blur();\n\t\t}\n\n\t}\n\n}","/**\n * Handles the showing and \n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = Reveal;\n\n\t}\n\n\trender() {\n\n\t\tthis.element = document.createElement( 'div' );\n\t\tthis.element.className = 'speaker-notes';\n\t\tthis.element.setAttribute( 'data-prevent-swipe', '' );\n\t\tthis.element.setAttribute( 'tabindex', '0' );\n\t\tthis.Reveal.getRevealElement().appendChild( this.element );\n\n\t}\n\n\t/**\n\t * Called when the reveal.js config is updated.\n\t */\n\tconfigure( config, oldConfig ) {\n\n\t\tif( config.showNotes ) {\n\t\t\tthis.element.setAttribute( 'data-layout', typeof config.showNotes === 'string' ? config.showNotes : 'inline' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Pick up notes from the current slide and display them\n\t * to the viewer.\n\t *\n\t * @see {@link config.showNotes}\n\t */\n\tupdate() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.element && this.Reveal.getCurrentSlide() && !this.Reveal.print.isPrintingPDF() ) {\n\n\t\t\tthis.element.innerHTML = this.getSlideNotes() || '<span class=\"notes-placeholder\">No notes on this slide.</span>';\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates the visibility of the speaker notes sidebar that\n\t * is used to share annotated slides. The notes sidebar is\n\t * only visible if showNotes is true and there are notes on\n\t * one or more slides in the deck.\n\t */\n\tupdateVisibility() {\n\n\t\tif( this.Reveal.getConfig().showNotes && this.hasNotes() && !this.Reveal.print.isPrintingPDF() ) {\n\t\t\tthis.Reveal.getRevealElement().classList.add( 'show-notes' );\n\t\t}\n\t\telse {\n\t\t\tthis.Reveal.getRevealElement().classList.remove( 'show-notes' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if there are speaker notes for ANY slide in the\n\t * presentation.\n\t */\n\thasNotes() {\n\n\t\treturn this.Reveal.getSlidesElement().querySelectorAll( '[data-notes], aside.notes' ).length > 0;\n\n\t}\n\n\t/**\n\t * Checks if this presentation is running inside of the\n\t * speaker notes window.\n\t *\n\t * @return {boolean}\n\t */\n\tisSpeakerNotesWindow() {\n\n\t\treturn !!window.location.search.match( /receiver/gi );\n\n\t}\n\n\t/**\n\t * Retrieves the speaker notes from a slide. Notes can be\n\t * defined in two ways:\n\t * 1. As a data-notes attribute on the slide <section>\n\t * 2. As an <aside class=\"notes\"> inside of the slide\n\t *\n\t * @param {HTMLElement} [slide=currentSlide]\n\t * @return {(string|null)}\n\t */\n\tgetSlideNotes( slide = this.Reveal.getCurrentSlide() ) {\n\n\t\t// Notes can be specified via the data-notes attribute...\n\t\tif( slide.hasAttribute( 'data-notes' ) ) {\n\t\t\treturn slide.getAttribute( 'data-notes' );\n\t\t}\n\n\t\t// ... or using an <aside class=\"notes\"> element\n\t\tlet notesElement = slide.querySelector( 'aside.notes' );\n\t\tif( notesElement ) {\n\t\t\treturn notesElement.innerHTML;\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n}","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","/**\n * UI component that lets the use control auto-slide\n * playback via play/pause.\n */\nexport default class Playback {\n\n\t/**\n\t * @param {HTMLElement} container The component will append\n\t * itself to this\n\t * @param {function} progressCheck A method which will be\n\t * called frequently to get the current playback progress on\n\t * a range of 0-1\n\t */\n\tconstructor( container, progressCheck ) {\n\n\t\t// Cosmetics\n\t\tthis.diameter = 100;\n\t\tthis.diameter2 = this.diameter/2;\n\t\tthis.thickness = 6;\n\n\t\t// Flags if we are currently playing\n\t\tthis.playing = false;\n\n\t\t// Current progress on a 0-1 range\n\t\tthis.progress = 0;\n\n\t\t// Used to loop the animation smoothly\n\t\tthis.progressOffset = 1;\n\n\t\tthis.container = container;\n\t\tthis.progressCheck = progressCheck;\n\n\t\tthis.canvas = document.createElement( 'canvas' );\n\t\tthis.canvas.className = 'playback';\n\t\tthis.canvas.width = this.diameter;\n\t\tthis.canvas.height = this.diameter;\n\t\tthis.canvas.style.width = this.diameter2 + 'px';\n\t\tthis.canvas.style.height = this.diameter2 + 'px';\n\t\tthis.context = this.canvas.getContext( '2d' );\n\n\t\tthis.container.appendChild( this.canvas );\n\n\t\tthis.render();\n\n\t}\n\n\tsetPlaying( value ) {\n\n\t\tconst wasPlaying = this.playing;\n\n\t\tthis.playing = value;\n\n\t\t// Start repainting if we weren't already\n\t\tif( !wasPlaying && this.playing ) {\n\t\t\tthis.animate();\n\t\t}\n\t\telse {\n\t\t\tthis.render();\n\t\t}\n\n\t}\n\n\tanimate() {\n\n\t\tconst progressBefore = this.progress;\n\n\t\tthis.progress = this.progressCheck();\n\n\t\t// When we loop, offset the progress so that it eases\n\t\t// smoothly rather than immediately resetting\n\t\tif( progressBefore > 0.8 && this.progress < 0.2 ) {\n\t\t\tthis.progressOffset = this.progress;\n\t\t}\n\n\t\tthis.render();\n\n\t\tif( this.playing ) {\n\t\t\trequestAnimationFrame( this.animate.bind( this ) );\n\t\t}\n\n\t}\n\n\t/**\n\t * Renders the current progress and playback state.\n\t */\n\trender() {\n\n\t\tlet progress = this.playing ? this.progress : 0,\n\t\t\tradius = ( this.diameter2 ) - this.thickness,\n\t\t\tx = this.diameter2,\n\t\t\ty = this.diameter2,\n\t\t\ticonSize = 28;\n\n\t\t// Ease towards 1\n\t\tthis.progressOffset += ( 1 - this.progressOffset ) * 0.1;\n\n\t\tconst endAngle = ( - Math.PI / 2 ) + ( progress * ( Math.PI * 2 ) );\n\t\tconst startAngle = ( - Math.PI / 2 ) + ( this.progressOffset * ( Math.PI * 2 ) );\n\n\t\tthis.context.save();\n\t\tthis.context.clearRect( 0, 0, this.diameter, this.diameter );\n\n\t\t// Solid background color\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius + 4, 0, Math.PI * 2, false );\n\t\tthis.context.fillStyle = 'rgba( 0, 0, 0, 0.4 )';\n\t\tthis.context.fill();\n\n\t\t// Draw progress track\n\t\tthis.context.beginPath();\n\t\tthis.context.arc( x, y, radius, 0, Math.PI * 2, false );\n\t\tthis.context.lineWidth = this.thickness;\n\t\tthis.context.strokeStyle = 'rgba( 255, 255, 255, 0.2 )';\n\t\tthis.context.stroke();\n\n\t\tif( this.playing ) {\n\t\t\t// Draw progress on top of track\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.arc( x, y, radius, startAngle, endAngle, false );\n\t\t\tthis.context.lineWidth = this.thickness;\n\t\t\tthis.context.strokeStyle = '#fff';\n\t\t\tthis.context.stroke();\n\t\t}\n\n\t\tthis.context.translate( x - ( iconSize / 2 ), y - ( iconSize / 2 ) );\n\n\t\t// Draw play/pause icons\n\t\tif( this.playing ) {\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fillRect( 0, 0, iconSize / 2 - 4, iconSize );\n\t\t\tthis.context.fillRect( iconSize / 2 + 4, 0, iconSize / 2 - 4, iconSize );\n\t\t}\n\t\telse {\n\t\t\tthis.context.beginPath();\n\t\t\tthis.context.translate( 4, 0 );\n\t\t\tthis.context.moveTo( 0, 0 );\n\t\t\tthis.context.lineTo( iconSize - 4, iconSize / 2 );\n\t\t\tthis.context.lineTo( 0, iconSize );\n\t\t\tthis.context.fillStyle = '#fff';\n\t\t\tthis.context.fill();\n\t\t}\n\n\t\tthis.context.restore();\n\n\t}\n\n\ton( type, listener ) {\n\t\tthis.canvas.addEventListener( type, listener, false );\n\t}\n\n\toff( type, listener ) {\n\t\tthis.canvas.removeEventListener( type, listener, false );\n\t}\n\n\tdestroy() {\n\n\t\tthis.playing = false;\n\n\t\tif( this.canvas.parentNode ) {\n\t\t\tthis.container.removeChild( this.canvas );\n\t\t}\n\n\t}\n\n}","/**\n * The default reveal.js config object.\n */\nexport default {\n\n\t// The \"normal\" size of the presentation, aspect ratio will be preserved\n\t// when the presentation is scaled to fit different resolutions\n\twidth: 960,\n\theight: 700,\n\n\t// Factor of the display size that should remain empty around the content\n\tmargin: 0.04,\n\n\t// Bounds for smallest/largest possible scale to apply to content\n\tminScale: 0.2,\n\tmaxScale: 2.0,\n\n\t// Display presentation control arrows\n\tcontrols: true,\n\n\t// Help the user learn the controls by providing hints, for example by\n\t// bouncing the down arrow when they first encounter a vertical slide\n\tcontrolsTutorial: true,\n\n\t// Determines where controls appear, \"edges\" or \"bottom-right\"\n\tcontrolsLayout: 'bottom-right',\n\n\t// Visibility rule for backwards navigation arrows; \"faded\", \"hidden\"\n\t// or \"visible\"\n\tcontrolsBackArrows: 'faded',\n\n\t// Display a presentation progress bar\n\tprogress: true,\n\n\t// Display the page number of the current slide\n\t// - true: Show slide number\n\t// - false: Hide slide number\n\t//\n\t// Can optionally be set as a string that specifies the number formatting:\n\t// - \"h.v\":\t Horizontal . vertical slide number (default)\n\t// - \"h/v\":\t Horizontal / vertical slide number\n\t// - \"c\":\t Flattened slide number\n\t// - \"c/t\":\t Flattened slide number / total slides\n\t//\n\t// Alternatively, you can provide a function that returns the slide\n\t// number for the current slide. The function should take in a slide\n\t// object and return an array with one string [slideNumber] or\n\t// three strings [n1,delimiter,n2]. See #formatSlideNumber().\n\tslideNumber: false,\n\n\t// Can be used to limit the contexts in which the slide number appears\n\t// - \"all\": Always show the slide number\n\t// - \"print\": Only when printing to PDF\n\t// - \"speaker\": Only in the speaker view\n\tshowSlideNumber: 'all',\n\n\t// Use 1 based indexing for # links to match slide number (default is zero\n\t// based)\n\thashOneBasedIndex: false,\n\n\t// Add the current slide number to the URL hash so that reloading the\n\t// page/copying the URL will return you to the same slide\n\thash: false,\n\n\t// Flags if we should monitor the hash and change slides accordingly\n\trespondToHashChanges: true,\n\n\t// Push each slide change to the browser history. Implies `hash: true`\n\thistory: false,\n\n\t// Enable keyboard shortcuts for navigation\n\tkeyboard: true,\n\n\t// Optional function that blocks keyboard events when retuning false\n\t//\n\t// If you set this to 'focused', we will only capture keyboard events\n\t// for embedded decks when they are in focus\n\tkeyboardCondition: null,\n\n\t// Disables the default reveal.js slide layout (scaling and centering)\n\t// so that you can use custom CSS layout\n\tdisableLayout: false,\n\n\t// Enable the slide overview mode\n\toverview: true,\n\n\t// Vertical centering of slides\n\tcenter: true,\n\n\t// Enables touch navigation on devices with touch input\n\ttouch: true,\n\n\t// Loop the presentation\n\tloop: false,\n\n\t// Change the presentation direction to be RTL\n\trtl: false,\n\n\t// Changes the behavior of our navigation directions.\n\t//\n\t// \"default\"\n\t// Left/right arrow keys step between horizontal slides, up/down\n\t// arrow keys step between vertical slides. Space key steps through\n\t// all slides (both horizontal and vertical).\n\t//\n\t// \"linear\"\n\t// Removes the up/down arrows. Left/right arrows step through all\n\t// slides (both horizontal and vertical).\n\t//\n\t// \"grid\"\n\t// When this is enabled, stepping left/right from a vertical stack\n\t// to an adjacent vertical stack will land you at the same vertical\n\t// index.\n\t//\n\t// Consider a deck with six slides ordered in two vertical stacks:\n\t// 1.1 2.1\n\t// 1.2 2.2\n\t// 1.3 2.3\n\t//\n\t// If you're on slide 1.3 and navigate right, you will normally move\n\t// from 1.3 -> 2.1. If \"grid\" is used, the same navigation takes you\n\t// from 1.3 -> 2.3.\n\tnavigationMode: 'default',\n\n\t// Randomizes the order of slides each time the presentation loads\n\tshuffle: false,\n\n\t// Turns fragments on and off globally\n\tfragments: true,\n\n\t// Flags whether to include the current fragment in the URL,\n\t// so that reloading brings you to the same fragment position\n\tfragmentInURL: true,\n\n\t// Flags if the presentation is running in an embedded mode,\n\t// i.e. contained within a limited portion of the screen\n\tembedded: false,\n\n\t// Flags if we should show a help overlay when the question-mark\n\t// key is pressed\n\thelp: true,\n\n\t// Flags if it should be possible to pause the presentation (blackout)\n\tpause: true,\n\n\t// Flags if speaker notes should be visible to all viewers\n\tshowNotes: false,\n\n\t// Flags if slides with data-visibility=\"hidden\" should be kep visible\n\tshowHiddenSlides: false,\n\n\t// Global override for autoplaying embedded media (video/audio/iframe)\n\t// - null: Media will only autoplay if data-autoplay is present\n\t// - true: All media will autoplay, regardless of individual setting\n\t// - false: No media will autoplay, regardless of individual setting\n\tautoPlayMedia: null,\n\n\t// Global override for preloading lazy-loaded iframes\n\t// - null: Iframes with data-src AND data-preload will be loaded when within\n\t// the viewDistance, iframes with only data-src will be loaded when visible\n\t// - true: All iframes with data-src will be loaded when within the viewDistance\n\t// - false: All iframes with data-src will be loaded only when visible\n\tpreloadIframes: null,\n\n\t// Can be used to globally disable auto-animation\n\tautoAnimate: true,\n\n\t// Optionally provide a custom element matcher that will be\n\t// used to dictate which elements we can animate between.\n\tautoAnimateMatcher: null,\n\n\t// Default settings for our auto-animate transitions, can be\n\t// overridden per-slide or per-element via data arguments\n\tautoAnimateEasing: 'ease',\n\tautoAnimateDuration: 1.0,\n\tautoAnimateUnmatched: true,\n\n\t// CSS properties that can be auto-animated. Position & scale\n\t// is matched separately so there's no need to include styles\n\t// like top/right/bottom/left, width/height or margin.\n\tautoAnimateStyles: [\n\t\t'opacity',\n\t\t'color',\n\t\t'background-color',\n\t\t'padding',\n\t\t'font-size',\n\t\t'line-height',\n\t\t'letter-spacing',\n\t\t'border-width',\n\t\t'border-color',\n\t\t'border-radius',\n\t\t'outline',\n\t\t'outline-offset'\n\t],\n\n\t// Controls automatic progression to the next slide\n\t// - 0: Auto-sliding only happens if the data-autoslide HTML attribute\n\t// is present on the current slide or fragment\n\t// - 1+: All slides will progress automatically at the given interval\n\t// - false: No auto-sliding, even if data-autoslide is present\n\tautoSlide: 0,\n\n\t// Stop auto-sliding after user input\n\tautoSlideStoppable: true,\n\n\t// Use this method for navigation when auto-sliding (defaults to navigateNext)\n\tautoSlideMethod: null,\n\n\t// Specify the average time in seconds that you think you will spend\n\t// presenting each slide. This is used to show a pacing timer in the\n\t// speaker view\n\tdefaultTiming: null,\n\n\t// Enable slide navigation via mouse wheel\n\tmouseWheel: false,\n\n\t// Opens links in an iframe preview overlay\n\t// Add `data-preview-link` and `data-preview-link=\"false\"` to customise each link\n\t// individually\n\tpreviewLinks: false,\n\n\t// Exposes the reveal.js API through window.postMessage\n\tpostMessage: true,\n\n\t// Dispatches all reveal.js events to the parent window through postMessage\n\tpostMessageEvents: false,\n\n\t// Focuses body when page changes visibility to ensure keyboard shortcuts work\n\tfocusBodyOnPageVisibilityChange: true,\n\n\t// Transition style\n\ttransition: 'slide', // none/fade/slide/convex/concave/zoom\n\n\t// Transition speed\n\ttransitionSpeed: 'default', // default/fast/slow\n\n\t// Transition style for full page slide backgrounds\n\tbackgroundTransition: 'fade', // none/fade/slide/convex/concave/zoom\n\n\t// Parallax background image\n\tparallaxBackgroundImage: '', // CSS syntax, e.g. \"a.jpg\"\n\n\t// Parallax background size\n\tparallaxBackgroundSize: '', // CSS syntax, e.g. \"3000px 2000px\"\n\n\t// Parallax background repeat\n\tparallaxBackgroundRepeat: '', // repeat/repeat-x/repeat-y/no-repeat/initial/inherit\n\n\t// Parallax background position\n\tparallaxBackgroundPosition: '', // CSS syntax, e.g. \"top left\"\n\n\t// Amount of pixels to move the parallax background per slide step\n\tparallaxBackgroundHorizontal: null,\n\tparallaxBackgroundVertical: null,\n\n\t// The maximum number of pages a single slide can expand onto when printing\n\t// to PDF, unlimited by default\n\tpdfMaxPagesPerSlide: Number.POSITIVE_INFINITY,\n\n\t// Prints each fragment on a separate slide\n\tpdfSeparateFragments: true,\n\n\t// Offset used to reduce the height of content within exported PDF pages.\n\t// This exists to account for environment differences based on how you\n\t// print to PDF. CLI printing options, like phantomjs and wkpdf, can end\n\t// on precisely the total height of the document whereas in-browser\n\t// printing has to end one pixel before.\n\tpdfPageHeightOffset: -1,\n\n\t// Number of slides away from the current that are visible\n\tviewDistance: 3,\n\n\t// Number of slides away from the current that are visible on mobile\n\t// devices. It is advisable to set this to a lower number than\n\t// viewDistance in order to save resources.\n\tmobileViewDistance: 2,\n\n\t// The display mode that will be used to show slides\n\tdisplay: 'block',\n\n\t// Hide cursor if inactive\n\thideInactiveCursor: true,\n\n\t// Time before the cursor is hidden (in ms)\n\thideCursorTime: 5000,\n\n\t// Script dependencies to load\n\tdependencies: [],\n\n\t// Plugin objects to register and use for this presentation\n\tplugins: []\n\n}","import SlideContent from './controllers/slidecontent.js'\nimport SlideNumber from './controllers/slidenumber.js'\nimport Backgrounds from './controllers/backgrounds.js'\nimport AutoAnimate from './controllers/autoanimate.js'\nimport Fragments from './controllers/fragments.js'\nimport Overview from './controllers/overview.js'\nimport Keyboard from './controllers/keyboard.js'\nimport Location from './controllers/location.js'\nimport Controls from './controllers/controls.js'\nimport Progress from './controllers/progress.js'\nimport Pointer from './controllers/pointer.js'\nimport Plugins from './controllers/plugins.js'\nimport Print from './controllers/print.js'\nimport Touch from './controllers/touch.js'\nimport Focus from './controllers/focus.js'\nimport Notes from './controllers/notes.js'\nimport Playback from './components/playback.js'\nimport defaultConfig from './config.js'\nimport * as Util from './utils/util.js'\nimport * as Device from './utils/device.js'\nimport {\n\tSLIDES_SELECTOR,\n\tHORIZONTAL_SLIDES_SELECTOR,\n\tVERTICAL_SLIDES_SELECTOR,\n\tPOST_MESSAGE_METHOD_BLACKLIST\n} from './utils/constants.js'\n\n// The reveal.js version\nexport const VERSION = '4.1.2';\n\n/**\n * reveal.js\n * https://revealjs.com\n * MIT licensed\n *\n * Copyright (C) 2020 Hakim El Hattab, https://hakim.se\n */\nexport default function( revealElement, options ) {\n\n\t// Support initialization with no args, one arg\n\t// [options] or two args [revealElement, options]\n\tif( arguments.length < 2 ) {\n\t\toptions = arguments[0];\n\t\trevealElement = document.querySelector( '.reveal' );\n\t}\n\n\tconst Reveal = {};\n\n\t// Configuration defaults, can be overridden at initialization time\n\tlet config = {},\n\n\t\t// Flags if reveal.js is loaded (has dispatched the 'ready' event)\n\t\tready = false,\n\n\t\t// The horizontal and vertical index of the currently active slide\n\t\tindexh,\n\t\tindexv,\n\n\t\t// The previous and current slide HTML elements\n\t\tpreviousSlide,\n\t\tcurrentSlide,\n\n\t\t// Remember which directions that the user has navigated towards\n\t\tnavigationHistory = {\n\t\t\thasNavigatedHorizontally: false,\n\t\t\thasNavigatedVertically: false\n\t\t},\n\n\t\t// Slides may have a data-state attribute which we pick up and apply\n\t\t// as a class to the body. This list contains the combined state of\n\t\t// all current slides.\n\t\tstate = [],\n\n\t\t// The current scale of the presentation (see width/height config)\n\t\tscale = 1,\n\n\t\t// CSS transform that is currently applied to the slides container,\n\t\t// split into two groups\n\t\tslidesTransform = { layout: '', overview: '' },\n\n\t\t// Cached references to DOM elements\n\t\tdom = {},\n\n\t\t// Flags if the interaction event listeners are bound\n\t\teventsAreBound = false,\n\n\t\t// The current slide transition state; idle or running\n\t\ttransition = 'idle',\n\n\t\t// The current auto-slide duration\n\t\tautoSlide = 0,\n\n\t\t// Auto slide properties\n\t\tautoSlidePlayer,\n\t\tautoSlideTimeout = 0,\n\t\tautoSlideStartTime = -1,\n\t\tautoSlidePaused = false,\n\n\t\t// Controllers for different aspects of our presentation. They're\n\t\t// all given direct references to this Reveal instance since there\n\t\t// may be multiple presentations running in parallel.\n\t\tslideContent = new SlideContent( Reveal ),\n\t\tslideNumber = new SlideNumber( Reveal ),\n\t\tautoAnimate = new AutoAnimate( Reveal ),\n\t\tbackgrounds = new Backgrounds( Reveal ),\n\t\tfragments = new Fragments( Reveal ),\n\t\toverview = new Overview( Reveal ),\n\t\tkeyboard = new Keyboard( Reveal ),\n\t\tlocation = new Location( Reveal ),\n\t\tcontrols = new Controls( Reveal ),\n\t\tprogress = new Progress( Reveal ),\n\t\tpointer = new Pointer( Reveal ),\n\t\tplugins = new Plugins( Reveal ),\n\t\tprint = new Print( Reveal ),\n\t\tfocus = new Focus( Reveal ),\n\t\ttouch = new Touch( Reveal ),\n\t\tnotes = new Notes( Reveal );\n\n\t/**\n\t * Starts up the presentation.\n\t */\n\tfunction initialize( initOptions ) {\n\n\t\t// Cache references to key DOM elements\n\t\tdom.wrapper = revealElement;\n\t\tdom.slides = revealElement.querySelector( '.slides' );\n\n\t\t// Compose our config object in order of increasing precedence:\n\t\t// 1. Default reveal.js options\n\t\t// 2. Options provided via Reveal.configure() prior to\n\t\t// initialization\n\t\t// 3. Options passed to the Reveal constructor\n\t\t// 4. Options passed to Reveal.initialize\n\t\t// 5. Query params\n\t\tconfig = { ...defaultConfig, ...config, ...options, ...initOptions, ...Util.getQueryHash() };\n\n\t\tsetViewport();\n\n\t\t// Force a layout when the whole page, incl fonts, has loaded\n\t\twindow.addEventListener( 'load', layout, false );\n\n\t\t// Register plugins and load dependencies, then move on to #start()\n\t\tplugins.load( config.plugins, config.dependencies ).then( start );\n\n\t\treturn new Promise( resolve => Reveal.on( 'ready', resolve ) );\n\n\t}\n\n\t/**\n\t * Encase the presentation in a reveal.js viewport. The\n\t * extent of the viewport differs based on configuration.\n\t */\n\tfunction setViewport() {\n\n\t\t// Embedded decks use the reveal element as their viewport\n\t\tif( config.embedded === true ) {\n\t\t\tdom.viewport = Util.closest( revealElement, '.reveal-viewport' ) || revealElement;\n\t\t}\n\t\t// Full-page decks use the body as their viewport\n\t\telse {\n\t\t\tdom.viewport = document.body;\n\t\t\tdocument.documentElement.classList.add( 'reveal-full-page' );\n\t\t}\n\n\t\tdom.viewport.classList.add( 'reveal-viewport' );\n\n\t}\n\n\t/**\n\t * Starts up reveal.js by binding input events and navigating\n\t * to the current URL deeplink if there is one.\n\t */\n\tfunction start() {\n\n\t\tready = true;\n\n\t\t// Remove slides hidden with data-visibility\n\t\tremoveHiddenSlides();\n\n\t\t// Make sure we've got all the DOM elements we need\n\t\tsetupDOM();\n\n\t\t// Listen to messages posted to this window\n\t\tsetupPostMessage();\n\n\t\t// Prevent the slides from being scrolled out of view\n\t\tsetupScrollPrevention();\n\n\t\t// Resets all vertical slides so that only the first is visible\n\t\tresetVerticalSlides();\n\n\t\t// Updates the presentation to match the current configuration values\n\t\tconfigure();\n\n\t\t// Read the initial hash\n\t\tlocation.readURL();\n\n\t\t// Create slide backgrounds\n\t\tbackgrounds.update( true );\n\n\t\t// Notify listeners that the presentation is ready but use a 1ms\n\t\t// timeout to ensure it's not fired synchronously after #initialize()\n\t\tsetTimeout( () => {\n\t\t\t// Enable transitions now that we're loaded\n\t\t\tdom.slides.classList.remove( 'no-transition' );\n\n\t\t\tdom.wrapper.classList.add( 'ready' );\n\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'ready',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tcurrentSlide\n\t\t\t\t}\n\t\t\t});\n\t\t}, 1 );\n\n\t\t// Special setup and config is required when printing to PDF\n\t\tif( print.isPrintingPDF() ) {\n\t\t\tremoveEventListeners();\n\n\t\t\t// The document needs to have loaded for the PDF layout\n\t\t\t// measurements to be accurate\n\t\t\tif( document.readyState === 'complete' ) {\n\t\t\t\tprint.setupPDF();\n\t\t\t}\n\t\t\telse {\n\t\t\t\twindow.addEventListener( 'load', () => {\n\t\t\t\t\tprint.setupPDF();\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Removes all slides with data-visibility=\"hidden\". This\n\t * is done right before the rest of the presentation is\n\t * initialized.\n\t *\n\t * If you want to show all hidden slides, initialize\n\t * reveal.js with showHiddenSlides set to true.\n\t */\n\tfunction removeHiddenSlides() {\n\n\t\tif( !config.showHiddenSlides ) {\n\t\t\tUtil.queryAll( dom.wrapper, 'section[data-visibility=\"hidden\"]' ).forEach( slide => {\n\t\t\t\tslide.parentNode.removeChild( slide );\n\t\t\t} );\n\t\t}\n\n\t}\n\n\t/**\n\t * Finds and stores references to DOM elements which are\n\t * required by the presentation. If a required element is\n\t * not found, it is created.\n\t */\n\tfunction setupDOM() {\n\n\t\t// Prevent transitions while we're loading\n\t\tdom.slides.classList.add( 'no-transition' );\n\n\t\tif( Device.isMobile ) {\n\t\t\tdom.wrapper.classList.add( 'no-hover' );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.classList.remove( 'no-hover' );\n\t\t}\n\n\t\tbackgrounds.render();\n\t\tslideNumber.render();\n\t\tcontrols.render();\n\t\tprogress.render();\n\t\tnotes.render();\n\n\t\t// Overlay graphic which is displayed during the paused mode\n\t\tdom.pauseOverlay = Util.createSingletonNode( dom.wrapper, 'div', 'pause-overlay', config.controls ? '<button class=\"resume-button\">Resume presentation</button>' : null );\n\n\t\tdom.statusElement = createStatusElement();\n\n\t\tdom.wrapper.setAttribute( 'role', 'application' );\n\t}\n\n\t/**\n\t * Creates a hidden div with role aria-live to announce the\n\t * current slide content. Hide the div off-screen to make it\n\t * available only to Assistive Technologies.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction createStatusElement() {\n\n\t\tlet statusElement = dom.wrapper.querySelector( '.aria-status' );\n\t\tif( !statusElement ) {\n\t\t\tstatusElement = document.createElement( 'div' );\n\t\t\tstatusElement.style.position = 'absolute';\n\t\t\tstatusElement.style.height = '1px';\n\t\t\tstatusElement.style.width = '1px';\n\t\t\tstatusElement.style.overflow = 'hidden';\n\t\t\tstatusElement.style.clip = 'rect( 1px, 1px, 1px, 1px )';\n\t\t\tstatusElement.classList.add( 'aria-status' );\n\t\t\tstatusElement.setAttribute( 'aria-live', 'polite' );\n\t\t\tstatusElement.setAttribute( 'aria-atomic','true' );\n\t\t\tdom.wrapper.appendChild( statusElement );\n\t\t}\n\t\treturn statusElement;\n\n\t}\n\n\t/**\n\t * Announces the given text to screen readers.\n\t */\n\tfunction announceStatus( value ) {\n\n\t\tdom.statusElement.textContent = value;\n\n\t}\n\n\t/**\n\t * Converts the given HTML element into a string of text\n\t * that can be announced to a screen reader. Hidden\n\t * elements are excluded.\n\t */\n\tfunction getStatusText( node ) {\n\n\t\tlet text = '';\n\n\t\t// Text node\n\t\tif( node.nodeType === 3 ) {\n\t\t\ttext += node.textContent;\n\t\t}\n\t\t// Element node\n\t\telse if( node.nodeType === 1 ) {\n\n\t\t\tlet isAriaHidden = node.getAttribute( 'aria-hidden' );\n\t\t\tlet isDisplayHidden = window.getComputedStyle( node )['display'] === 'none';\n\t\t\tif( isAriaHidden !== 'true' && !isDisplayHidden ) {\n\n\t\t\t\tArray.from( node.childNodes ).forEach( child => {\n\t\t\t\t\ttext += getStatusText( child );\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t\ttext = text.trim();\n\n\t\treturn text === '' ? '' : text + ' ';\n\n\t}\n\n\t/**\n\t * This is an unfortunate necessity. Some actions – such as\n\t * an input field being focused in an iframe or using the\n\t * keyboard to expand text selection beyond the bounds of\n\t * a slide – can trigger our content to be pushed out of view.\n\t * This scrolling can not be prevented by hiding overflow in\n\t * CSS (we already do) so we have to resort to repeatedly\n\t * checking if the slides have been offset :(\n\t */\n\tfunction setupScrollPrevention() {\n\n\t\tsetInterval( () => {\n\t\t\tif( dom.wrapper.scrollTop !== 0 || dom.wrapper.scrollLeft !== 0 ) {\n\t\t\t\tdom.wrapper.scrollTop = 0;\n\t\t\t\tdom.wrapper.scrollLeft = 0;\n\t\t\t}\n\t\t}, 1000 );\n\n\t}\n\n\t/**\n\t * Registers a listener to postMessage events, this makes it\n\t * possible to call all reveal.js API methods from another\n\t * window. For example:\n\t *\n\t * revealWindow.postMessage( JSON.stringify({\n\t * method: 'slide',\n\t * args: [ 2 ]\n\t * }), '*' );\n\t */\n\tfunction setupPostMessage() {\n\n\t\tif( config.postMessage ) {\n\t\t\twindow.addEventListener( 'message', event => {\n\t\t\t\tlet data = event.data;\n\n\t\t\t\t// Make sure we're dealing with JSON\n\t\t\t\tif( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\t\t\tdata = JSON.parse( data );\n\n\t\t\t\t\t// Check if the requested method can be found\n\t\t\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\n\t\t\t\t\t\tif( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {\n\n\t\t\t\t\t\t\tconst result = Reveal[data.method].apply( Reveal, data.args );\n\n\t\t\t\t\t\t\t// Dispatch a postMessage event with the returned value from\n\t\t\t\t\t\t\t// our method invocation for getter functions\n\t\t\t\t\t\t\tdispatchPostMessage( 'callback', { method: data.method, result: result } );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.warn( 'reveal.js: \"'+ data.method +'\" is is blacklisted from the postMessage API' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies the configuration settings from the config\n\t * object. May be called multiple times.\n\t *\n\t * @param {object} options\n\t */\n\tfunction configure( options ) {\n\n\t\tconst oldConfig = { ...config }\n\n\t\t// New config options may be passed when this method\n\t\t// is invoked through the API after initialization\n\t\tif( typeof options === 'object' ) Util.extend( config, options );\n\n\t\t// Abort if reveal.js hasn't finished loading, config\n\t\t// changes will be applied automatically once ready\n\t\tif( Reveal.isReady() === false ) return;\n\n\t\tconst numberOfSlides = dom.wrapper.querySelectorAll( SLIDES_SELECTOR ).length;\n\n\t\t// The transition is added as a class on the .reveal element\n\t\tdom.wrapper.classList.remove( oldConfig.transition );\n\t\tdom.wrapper.classList.add( config.transition );\n\n\t\tdom.wrapper.setAttribute( 'data-transition-speed', config.transitionSpeed );\n\t\tdom.wrapper.setAttribute( 'data-background-transition', config.backgroundTransition );\n\n\t\t// Expose our configured slide dimensions as custom props\n\t\tdom.viewport.style.setProperty( '--slide-width', config.width + 'px' );\n\t\tdom.viewport.style.setProperty( '--slide-height', config.height + 'px' );\n\n\t\tif( config.shuffle ) {\n\t\t\tshuffle();\n\t\t}\n\n\t\tUtil.toggleClass( dom.wrapper, 'embedded', config.embedded );\n\t\tUtil.toggleClass( dom.wrapper, 'rtl', config.rtl );\n\t\tUtil.toggleClass( dom.wrapper, 'center', config.center );\n\n\t\t// Exit the paused mode if it was configured off\n\t\tif( config.pause === false ) {\n\t\t\tresume();\n\t\t}\n\n\t\t// Iframe link previews\n\t\tif( config.previewLinks ) {\n\t\t\tenablePreviewLinks();\n\t\t\tdisablePreviewLinks( '[data-preview-link=false]' );\n\t\t}\n\t\telse {\n\t\t\tdisablePreviewLinks();\n\t\t\tenablePreviewLinks( '[data-preview-link]:not([data-preview-link=false])' );\n\t\t}\n\n\t\t// Reset all changes made by auto-animations\n\t\tautoAnimate.reset();\n\n\t\t// Remove existing auto-slide controls\n\t\tif( autoSlidePlayer ) {\n\t\t\tautoSlidePlayer.destroy();\n\t\t\tautoSlidePlayer = null;\n\t\t}\n\n\t\t// Generate auto-slide controls if needed\n\t\tif( numberOfSlides > 1 && config.autoSlide && config.autoSlideStoppable ) {\n\t\t\tautoSlidePlayer = new Playback( dom.wrapper, () => {\n\t\t\t\treturn Math.min( Math.max( ( Date.now() - autoSlideStartTime ) / autoSlide, 0 ), 1 );\n\t\t\t} );\n\n\t\t\tautoSlidePlayer.on( 'click', onAutoSlidePlayerClick );\n\t\t\tautoSlidePaused = false;\n\t\t}\n\n\t\t// Add the navigation mode to the DOM so we can adjust styling\n\t\tif( config.navigationMode !== 'default' ) {\n\t\t\tdom.wrapper.setAttribute( 'data-navigation-mode', config.navigationMode );\n\t\t}\n\t\telse {\n\t\t\tdom.wrapper.removeAttribute( 'data-navigation-mode' );\n\t\t}\n\n\t\tnotes.configure( config, oldConfig );\n\t\tfocus.configure( config, oldConfig );\n\t\tpointer.configure( config, oldConfig );\n\t\tcontrols.configure( config, oldConfig );\n\t\tprogress.configure( config, oldConfig );\n\t\tkeyboard.configure( config, oldConfig );\n\t\tfragments.configure( config, oldConfig );\n\t\tslideNumber.configure( config, oldConfig );\n\n\t\tsync();\n\n\t}\n\n\t/**\n\t * Binds all event listeners.\n\t */\n\tfunction addEventListeners() {\n\n\t\teventsAreBound = true;\n\n\t\twindow.addEventListener( 'resize', onWindowResize, false );\n\n\t\tif( config.touch ) touch.bind();\n\t\tif( config.keyboard ) keyboard.bind();\n\t\tif( config.progress ) progress.bind();\n\t\tif( config.respondToHashChanges ) location.bind();\n\t\tcontrols.bind();\n\t\tfocus.bind();\n\n\t\tdom.slides.addEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.addEventListener( 'click', resume, false );\n\n\t\tif( config.focusBodyOnPageVisibilityChange ) {\n\t\t\tdocument.addEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\t}\n\n\t}\n\n\t/**\n\t * Unbinds all event listeners.\n\t */\n\tfunction removeEventListeners() {\n\n\t\teventsAreBound = false;\n\n\t\ttouch.unbind();\n\t\tfocus.unbind();\n\t\tkeyboard.unbind();\n\t\tcontrols.unbind();\n\t\tprogress.unbind();\n\t\tlocation.unbind();\n\n\t\twindow.removeEventListener( 'resize', onWindowResize, false );\n\n\t\tdom.slides.removeEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.removeEventListener( 'click', resume, false );\n\n\t}\n\n\t/**\n\t * Adds a listener to one of our custom reveal.js events,\n\t * like slidechanged.\n\t */\n\tfunction on( type, listener, useCapture ) {\n\n\t\trevealElement.addEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Unsubscribes from a reveal.js event.\n\t */\n\tfunction off( type, listener, useCapture ) {\n\n\t\trevealElement.removeEventListener( type, listener, useCapture );\n\n\t}\n\n\t/**\n\t * Applies CSS transforms to the slides container. The container\n\t * is transformed from two separate sources: layout and the overview\n\t * mode.\n\t *\n\t * @param {object} transforms\n\t */\n\tfunction transformSlides( transforms ) {\n\n\t\t// Pick up new transforms from arguments\n\t\tif( typeof transforms.layout === 'string' ) slidesTransform.layout = transforms.layout;\n\t\tif( typeof transforms.overview === 'string' ) slidesTransform.overview = transforms.overview;\n\n\t\t// Apply the transforms to the slides container\n\t\tif( slidesTransform.layout ) {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.layout + ' ' + slidesTransform.overview );\n\t\t}\n\t\telse {\n\t\t\tUtil.transformElement( dom.slides, slidesTransform.overview );\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatches an event of the specified type from the\n\t * reveal DOM element.\n\t */\n\tfunction dispatchEvent({ target=dom.wrapper, type, data, bubbles=true }) {\n\n\t\tlet event = document.createEvent( 'HTMLEvents', 1, 2 );\n\t\tevent.initEvent( type, bubbles, true );\n\t\tUtil.extend( event, data );\n\t\ttarget.dispatchEvent( event );\n\n\t\tif( target === dom.wrapper ) {\n\t\t\t// If we're in an iframe, post each reveal.js event to the\n\t\t\t// parent window. Used by the notes plugin\n\t\t\tdispatchPostMessage( type );\n\t\t}\n\n\t}\n\n\t/**\n\t * Dispatched a postMessage of the given type from our window.\n\t */\n\tfunction dispatchPostMessage( type, data ) {\n\n\t\tif( config.postMessageEvents && window.parent !== window.self ) {\n\t\t\tlet message = {\n\t\t\t\tnamespace: 'reveal',\n\t\t\t\teventName: type,\n\t\t\t\tstate: getState()\n\t\t\t};\n\n\t\t\tUtil.extend( message, data );\n\n\t\t\twindow.parent.postMessage( JSON.stringify( message ), '*' );\n\t\t}\n\n\t}\n\n\t/**\n\t * Bind preview frame links.\n\t *\n\t * @param {string} [selector=a] - selector for anchors\n\t */\n\tfunction enablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.addEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Unbind preview frame links.\n\t */\n\tfunction disablePreviewLinks( selector = 'a' ) {\n\n\t\tArray.from( dom.wrapper.querySelectorAll( selector ) ).forEach( element => {\n\t\t\tif( /^(http|www)/gi.test( element.getAttribute( 'href' ) ) ) {\n\t\t\t\telement.removeEventListener( 'click', onPreviewLinkClicked, false );\n\t\t\t}\n\t\t} );\n\n\t}\n\n\t/**\n\t * Opens a preview window for the target URL.\n\t *\n\t * @param {string} url - url for preview iframe src\n\t */\n\tfunction showPreview( url ) {\n\n\t\tcloseOverlay();\n\n\t\tdom.overlay = document.createElement( 'div' );\n\t\tdom.overlay.classList.add( 'overlay' );\n\t\tdom.overlay.classList.add( 'overlay-preview' );\n\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\tdom.overlay.innerHTML =\n\t\t\t`<header>\n\t\t\t\t<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>\n\t\t\t\t<a class=\"external\" href=\"${url}\" target=\"_blank\"><span class=\"icon\"></span></a>\n\t\t\t</header>\n\t\t\t<div class=\"spinner\"></div>\n\t\t\t<div class=\"viewport\">\n\t\t\t\t<iframe src=\"${url}\"></iframe>\n\t\t\t\t<small class=\"viewport-inner\">\n\t\t\t\t\t<span class=\"x-frame-error\">Unable to load iframe. This is likely due to the site's policy (x-frame-options).</span>\n\t\t\t\t</small>\n\t\t\t</div>`;\n\n\t\tdom.overlay.querySelector( 'iframe' ).addEventListener( 'load', event => {\n\t\t\tdom.overlay.classList.add( 'loaded' );\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t\tevent.preventDefault();\n\t\t}, false );\n\n\t\tdom.overlay.querySelector( '.external' ).addEventListener( 'click', event => {\n\t\t\tcloseOverlay();\n\t\t}, false );\n\n\t}\n\n\t/**\n\t * Open or close help overlay window.\n\t *\n\t * @param {Boolean} [override] Flag which overrides the\n\t * toggle logic and forcibly sets the desired state. True means\n\t * help is open, false means it's closed.\n\t */\n\tfunction toggleHelp( override ){\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? showHelp() : closeOverlay();\n\t\t}\n\t\telse {\n\t\t\tif( dom.overlay ) {\n\t\t\t\tcloseOverlay();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tshowHelp();\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Opens an overlay window with help material.\n\t */\n\tfunction showHelp() {\n\n\t\tif( config.help ) {\n\n\t\t\tcloseOverlay();\n\n\t\t\tdom.overlay = document.createElement( 'div' );\n\t\t\tdom.overlay.classList.add( 'overlay' );\n\t\t\tdom.overlay.classList.add( 'overlay-help' );\n\t\t\tdom.wrapper.appendChild( dom.overlay );\n\n\t\t\tlet html = '<p class=\"title\">Keyboard Shortcuts</p><br/>';\n\n\t\t\tlet shortcuts = keyboard.getShortcuts(),\n\t\t\t\tbindings = keyboard.getBindings();\n\n\t\t\thtml += '<table><th>KEY</th><th>ACTION</th>';\n\t\t\tfor( let key in shortcuts ) {\n\t\t\t\thtml += `<tr><td>${key}</td><td>${shortcuts[ key ]}</td></tr>`;\n\t\t\t}\n\n\t\t\t// Add custom key bindings that have associated descriptions\n\t\t\tfor( let binding in bindings ) {\n\t\t\t\tif( bindings[binding].key && bindings[binding].description ) {\n\t\t\t\t\thtml += `<tr><td>${bindings[binding].key}</td><td>${bindings[binding].description}</td></tr>`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thtml += '</table>';\n\n\t\t\tdom.overlay.innerHTML = `\n\t\t\t\t<header>\n\t\t\t\t\t<a class=\"close\" href=\"#\"><span class=\"icon\"></span></a>\n\t\t\t\t</header>\n\t\t\t\t<div class=\"viewport\">\n\t\t\t\t\t<div class=\"viewport-inner\">${html}</div>\n\t\t\t\t</div>\n\t\t\t`;\n\n\t\t\tdom.overlay.querySelector( '.close' ).addEventListener( 'click', event => {\n\t\t\t\tcloseOverlay();\n\t\t\t\tevent.preventDefault();\n\t\t\t}, false );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Closes any currently open overlay.\n\t */\n\tfunction closeOverlay() {\n\n\t\tif( dom.overlay ) {\n\t\t\tdom.overlay.parentNode.removeChild( dom.overlay );\n\t\t\tdom.overlay = null;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Applies JavaScript-controlled layout rules to the\n\t * presentation.\n\t */\n\tfunction layout() {\n\n\t\tif( dom.wrapper && !print.isPrintingPDF() ) {\n\n\t\t\tif( !config.disableLayout ) {\n\n\t\t\t\t// On some mobile devices '100vh' is taller than the visible\n\t\t\t\t// viewport which leads to part of the presentation being\n\t\t\t\t// cut off. To work around this we define our own '--vh' custom\n\t\t\t\t// property where 100x adds up to the correct height.\n\t\t\t\t//\n\t\t\t\t// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/\n\t\t\t\tif( Device.isMobile && !config.embedded ) {\n\t\t\t\t\tdocument.documentElement.style.setProperty( '--vh', ( window.innerHeight * 0.01 ) + 'px' );\n\t\t\t\t}\n\n\t\t\t\tconst size = getComputedSlideSize();\n\n\t\t\t\tconst oldScale = scale;\n\n\t\t\t\t// Layout the contents of the slides\n\t\t\t\tlayoutSlideContents( config.width, config.height );\n\n\t\t\t\tdom.slides.style.width = size.width + 'px';\n\t\t\t\tdom.slides.style.height = size.height + 'px';\n\n\t\t\t\t// Determine scale of content to fit within available space\n\t\t\t\tscale = Math.min( size.presentationWidth / size.width, size.presentationHeight / size.height );\n\n\t\t\t\t// Respect max/min scale settings\n\t\t\t\tscale = Math.max( scale, config.minScale );\n\t\t\t\tscale = Math.min( scale, config.maxScale );\n\n\t\t\t\t// Don't apply any scaling styles if scale is 1\n\t\t\t\tif( scale === 1 ) {\n\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Zoom Scaling\n\t\t\t\t\t// Content remains crisp no matter how much we scale. Side\n\t\t\t\t\t// effects are minor differences in text layout and iframe\n\t\t\t\t\t// viewports changing size. A 200x200 iframe viewport in a\n\t\t\t\t\t// 2x zoomed presentation ends up having a 400x400 viewport.\n\t\t\t\t\tif( scale > 1 && Device.supportsZoom && window.devicePixelRatio < 2 ) {\n\t\t\t\t\t\tdom.slides.style.zoom = scale;\n\t\t\t\t\t\tdom.slides.style.left = '';\n\t\t\t\t\t\tdom.slides.style.top = '';\n\t\t\t\t\t\tdom.slides.style.bottom = '';\n\t\t\t\t\t\tdom.slides.style.right = '';\n\t\t\t\t\t\ttransformSlides( { layout: '' } );\n\t\t\t\t\t}\n\t\t\t\t\t// Transform Scaling\n\t\t\t\t\t// Content layout remains the exact same when scaled up.\n\t\t\t\t\t// Side effect is content becoming blurred, especially with\n\t\t\t\t\t// high scale values on ldpi screens.\n\t\t\t\t\telse {\n\t\t\t\t\t\tdom.slides.style.zoom = '';\n\t\t\t\t\t\tdom.slides.style.left = '50%';\n\t\t\t\t\t\tdom.slides.style.top = '50%';\n\t\t\t\t\t\tdom.slides.style.bottom = 'auto';\n\t\t\t\t\t\tdom.slides.style.right = 'auto';\n\t\t\t\t\t\ttransformSlides( { layout: 'translate(-50%, -50%) scale('+ scale +')' } );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Select all slides, vertical and horizontal\n\t\t\t\tconst slides = Array.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) );\n\n\t\t\t\tfor( let i = 0, len = slides.length; i < len; i++ ) {\n\t\t\t\t\tconst slide = slides[ i ];\n\n\t\t\t\t\t// Don't bother updating invisible slides\n\t\t\t\t\tif( slide.style.display === 'none' ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif( config.center || slide.classList.contains( 'center' ) ) {\n\t\t\t\t\t\t// Vertical stacks are not centred since their section\n\t\t\t\t\t\t// children will be\n\t\t\t\t\t\tif( slide.classList.contains( 'stack' ) ) {\n\t\t\t\t\t\t\tslide.style.top = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslide.style.top = Math.max( ( size.height - slide.scrollHeight ) / 2, 0 ) + 'px';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tslide.style.top = '';\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif( oldScale !== scale ) {\n\t\t\t\t\tdispatchEvent({\n\t\t\t\t\t\ttype: 'resize',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\toldScale,\n\t\t\t\t\t\t\tscale,\n\t\t\t\t\t\t\tsize\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tprogress.update();\n\t\t\tbackgrounds.updateParallax();\n\n\t\t\tif( overview.isActive() ) {\n\t\t\t\toverview.update();\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Applies layout logic to the contents of all slides in\n\t * the presentation.\n\t *\n\t * @param {string|number} width\n\t * @param {string|number} height\n\t */\n\tfunction layoutSlideContents( width, height ) {\n\n\t\t// Handle sizing of elements with the 'r-stretch' class\n\t\tUtil.queryAll( dom.slides, 'section > .stretch, section > .r-stretch' ).forEach( element => {\n\n\t\t\t// Determine how much vertical space we can use\n\t\t\tlet remainingHeight = Util.getRemainingHeight( element, height );\n\n\t\t\t// Consider the aspect ratio of media elements\n\t\t\tif( /(img|video)/gi.test( element.nodeName ) ) {\n\t\t\t\tconst nw = element.naturalWidth || element.videoWidth,\n\t\t\t\t\t nh = element.naturalHeight || element.videoHeight;\n\n\t\t\t\tconst es = Math.min( width / nw, remainingHeight / nh );\n\n\t\t\t\telement.style.width = ( nw * es ) + 'px';\n\t\t\t\telement.style.height = ( nh * es ) + 'px';\n\n\t\t\t}\n\t\t\telse {\n\t\t\t\telement.style.width = width + 'px';\n\t\t\t\telement.style.height = remainingHeight + 'px';\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Calculates the computed pixel size of our slides. These\n\t * values are based on the width and height configuration\n\t * options.\n\t *\n\t * @param {number} [presentationWidth=dom.wrapper.offsetWidth]\n\t * @param {number} [presentationHeight=dom.wrapper.offsetHeight]\n\t */\n\tfunction getComputedSlideSize( presentationWidth, presentationHeight ) {\n\n\t\tconst size = {\n\t\t\t// Slide size\n\t\t\twidth: config.width,\n\t\t\theight: config.height,\n\n\t\t\t// Presentation size\n\t\t\tpresentationWidth: presentationWidth || dom.wrapper.offsetWidth,\n\t\t\tpresentationHeight: presentationHeight || dom.wrapper.offsetHeight\n\t\t};\n\n\t\t// Reduce available space by margin\n\t\tsize.presentationWidth -= ( size.presentationWidth * config.margin );\n\t\tsize.presentationHeight -= ( size.presentationHeight * config.margin );\n\n\t\t// Slide width may be a percentage of available width\n\t\tif( typeof size.width === 'string' && /%$/.test( size.width ) ) {\n\t\t\tsize.width = parseInt( size.width, 10 ) / 100 * size.presentationWidth;\n\t\t}\n\n\t\t// Slide height may be a percentage of available height\n\t\tif( typeof size.height === 'string' && /%$/.test( size.height ) ) {\n\t\t\tsize.height = parseInt( size.height, 10 ) / 100 * size.presentationHeight;\n\t\t}\n\n\t\treturn size;\n\n\t}\n\n\t/**\n\t * Stores the vertical index of a stack so that the same\n\t * vertical slide can be selected when navigating to and\n\t * from the stack.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t * @param {string|number} [v=0] Index to memorize\n\t */\n\tfunction setPreviousVerticalIndex( stack, v ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' ) {\n\t\t\tstack.setAttribute( 'data-previous-indexv', v || 0 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Retrieves the vertical index which was stored using\n\t * #setPreviousVerticalIndex() or 0 if no previous index\n\t * exists.\n\t *\n\t * @param {HTMLElement} stack The vertical stack element\n\t */\n\tfunction getPreviousVerticalIndex( stack ) {\n\n\t\tif( typeof stack === 'object' && typeof stack.setAttribute === 'function' && stack.classList.contains( 'stack' ) ) {\n\t\t\t// Prefer manually defined start-indexv\n\t\t\tconst attributeName = stack.hasAttribute( 'data-start-indexv' ) ? 'data-start-indexv' : 'data-previous-indexv';\n\n\t\t\treturn parseInt( stack.getAttribute( attributeName ) || 0, 10 );\n\t\t}\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Checks if the current or specified slide is vertical\n\t * (nested within another slide).\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide to check\n\t * orientation of\n\t * @return {Boolean}\n\t */\n\tfunction isVerticalSlide( slide = currentSlide ) {\n\n\t\treturn slide && slide.parentNode && !!slide.parentNode.nodeName.match( /section/i );\n\n\t}\n\n\t/**\n\t * Returns true if we're on the last slide in the current\n\t * vertical stack.\n\t */\n\tfunction isLastVerticalSlide() {\n\n\t\tif( currentSlide && isVerticalSlide( currentSlide ) ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the first slide in\n\t * the presentation.\n\t */\n\tfunction isFirstSlide() {\n\n\t\treturn indexh === 0 && indexv === 0;\n\n\t}\n\n\t/**\n\t * Returns true if we're currently on the last slide in\n\t * the presenation. If the last slide is a stack, we only\n\t * consider this the last slide if it's at the end of the\n\t * stack.\n\t */\n\tfunction isLastSlide() {\n\n\t\tif( currentSlide ) {\n\t\t\t// Does this slide have a next sibling?\n\t\t\tif( currentSlide.nextElementSibling ) return false;\n\n\t\t\t// If it's vertical, does its parent have a next sibling?\n\t\t\tif( isVerticalSlide( currentSlide ) && currentSlide.parentNode.nextElementSibling ) return false;\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t/**\n\t * Enters the paused mode which fades everything on screen to\n\t * black.\n\t */\n\tfunction pause() {\n\n\t\tif( config.pause ) {\n\t\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\n\t\t\tcancelAutoSlide();\n\t\t\tdom.wrapper.classList.add( 'paused' );\n\n\t\t\tif( wasPaused === false ) {\n\t\t\t\tdispatchEvent({ type: 'paused' });\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Exits from the paused mode.\n\t */\n\tfunction resume() {\n\n\t\tconst wasPaused = dom.wrapper.classList.contains( 'paused' );\n\t\tdom.wrapper.classList.remove( 'paused' );\n\n\t\tcueAutoSlide();\n\n\t\tif( wasPaused ) {\n\t\t\tdispatchEvent({ type: 'resumed' });\n\t\t}\n\n\t}\n\n\t/**\n\t * Toggles the paused mode on and off.\n\t */\n\tfunction togglePause( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? pause() : resume();\n\t\t}\n\t\telse {\n\t\t\tisPaused() ? resume() : pause();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if we are currently in the paused mode.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isPaused() {\n\n\t\treturn dom.wrapper.classList.contains( 'paused' );\n\n\t}\n\n\t/**\n\t * Toggles the auto slide mode on and off.\n\t *\n\t * @param {Boolean} [override] Flag which sets the desired state.\n\t * True means autoplay starts, false means it stops.\n\t */\n\n\tfunction toggleAutoSlide( override ) {\n\n\t\tif( typeof override === 'boolean' ) {\n\t\t\toverride ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t\telse {\n\t\t\tautoSlidePaused ? resumeAutoSlide() : pauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Checks if the auto slide mode is currently on.\n\t *\n\t * @return {Boolean}\n\t */\n\tfunction isAutoSliding() {\n\n\t\treturn !!( autoSlide && !autoSlidePaused );\n\n\t}\n\n\t/**\n\t * Steps from the current point in the presentation to the\n\t * slide which matches the specified horizontal and vertical\n\t * indices.\n\t *\n\t * @param {number} [h=indexh] Horizontal index of the target slide\n\t * @param {number} [v=indexv] Vertical index of the target slide\n\t * @param {number} [f] Index of a fragment within the\n\t * target slide to activate\n\t * @param {number} [o] Origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, o ) {\n\n\t\t// Remember where we were at before\n\t\tpreviousSlide = currentSlide;\n\n\t\t// Query all horizontal slides in the deck\n\t\tconst horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR );\n\n\t\t// Abort if there are no slides\n\t\tif( horizontalSlides.length === 0 ) return;\n\n\t\t// If no vertical index is specified and the upcoming slide is a\n\t\t// stack, resume at its previous vertical index\n\t\tif( v === undefined && !overview.isActive() ) {\n\t\t\tv = getPreviousVerticalIndex( horizontalSlides[ h ] );\n\t\t}\n\n\t\t// If we were on a vertical stack, remember what vertical index\n\t\t// it was on so we can resume at the same position when returning\n\t\tif( previousSlide && previousSlide.parentNode && previousSlide.parentNode.classList.contains( 'stack' ) ) {\n\t\t\tsetPreviousVerticalIndex( previousSlide.parentNode, indexv );\n\t\t}\n\n\t\t// Remember the state before this slide\n\t\tconst stateBefore = state.concat();\n\n\t\t// Reset the state array\n\t\tstate.length = 0;\n\n\t\tlet indexhBefore = indexh || 0,\n\t\t\tindexvBefore = indexv || 0;\n\n\t\t// Activate and transition to the new slide\n\t\tindexh = updateSlides( HORIZONTAL_SLIDES_SELECTOR, h === undefined ? indexh : h );\n\t\tindexv = updateSlides( VERTICAL_SLIDES_SELECTOR, v === undefined ? indexv : v );\n\n\t\t// Dispatch an event if the slide changed\n\t\tlet slideChanged = ( indexh !== indexhBefore || indexv !== indexvBefore );\n\n\t\t// Ensure that the previous slide is never the same as the current\n\t\tif( !slideChanged ) previousSlide = null;\n\n\t\t// Find the current horizontal slide and any possible vertical slides\n\t\t// within it\n\t\tlet currentHorizontalSlide = horizontalSlides[ indexh ],\n\t\t\tcurrentVerticalSlides = currentHorizontalSlide.querySelectorAll( 'section' );\n\n\t\t// Store references to the previous and current slides\n\t\tcurrentSlide = currentVerticalSlides[ indexv ] || currentHorizontalSlide;\n\n\t\tlet autoAnimateTransition = false;\n\n\t\t// Detect if we're moving between two auto-animated slides\n\t\tif( slideChanged && previousSlide && currentSlide && !overview.isActive() ) {\n\n\t\t\t// If this is an auto-animated transition, we disable the\n\t\t\t// regular slide transition\n\t\t\t//\n\t\t\t// Note 20-03-2020:\n\t\t\t// This needs to happen before we update slide visibility,\n\t\t\t// otherwise transitions will still run in Safari.\n\t\t\tif( previousSlide.hasAttribute( 'data-auto-animate' ) && currentSlide.hasAttribute( 'data-auto-animate' )\n\t\t\t\t\t&& previousSlide.getAttribute( 'data-auto-animate-id' ) === currentSlide.getAttribute( 'data-auto-animate-id' )\n\t\t\t\t\t&& !( ( indexh > indexhBefore || indexv > indexvBefore ) ? currentSlide : previousSlide ).hasAttribute( 'data-auto-animate-restart' ) ) {\n\n\t\t\t\tautoAnimateTransition = true;\n\t\t\t\tdom.slides.classList.add( 'disable-slide-transitions' );\n\t\t\t}\n\n\t\t\ttransition = 'running';\n\n\t\t}\n\n\t\t// Update the visibility of slides now that the indices have changed\n\t\tupdateSlidesVisibility();\n\n\t\tlayout();\n\n\t\t// Update the overview if it's currently active\n\t\tif( overview.isActive() ) {\n\t\t\toverview.update();\n\t\t}\n\n\t\t// Show fragment, if specified\n\t\tif( typeof f !== 'undefined' ) {\n\t\t\tfragments.goto( f );\n\t\t}\n\n\t\t// Solves an edge case where the previous slide maintains the\n\t\t// 'present' class when navigating between adjacent vertical\n\t\t// stacks\n\t\tif( previousSlide && previousSlide !== currentSlide ) {\n\t\t\tpreviousSlide.classList.remove( 'present' );\n\t\t\tpreviousSlide.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t// Reset all slides upon navigate to home\n\t\t\tif( isFirstSlide() ) {\n\t\t\t\t// Launch async task\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tgetVerticalStacks().forEach( slide => {\n\t\t\t\t\t\tsetPreviousVerticalIndex( slide, 0 );\n\t\t\t\t\t} );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Apply the new state\n\t\tstateLoop: for( let i = 0, len = state.length; i < len; i++ ) {\n\t\t\t// Check if this state existed on the previous slide. If it\n\t\t\t// did, we will avoid adding it repeatedly\n\t\t\tfor( let j = 0; j < stateBefore.length; j++ ) {\n\t\t\t\tif( stateBefore[j] === state[i] ) {\n\t\t\t\t\tstateBefore.splice( j, 1 );\n\t\t\t\t\tcontinue stateLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdom.viewport.classList.add( state[i] );\n\n\t\t\t// Dispatch custom event matching the state's name\n\t\t\tdispatchEvent({ type: state[i] });\n\t\t}\n\n\t\t// Clean up the remains of the previous state\n\t\twhile( stateBefore.length ) {\n\t\t\tdom.viewport.classList.remove( stateBefore.pop() );\n\t\t}\n\n\t\tif( slideChanged ) {\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidechanged',\n\t\t\t\tdata: {\n\t\t\t\t\tindexh,\n\t\t\t\t\tindexv,\n\t\t\t\t\tpreviousSlide,\n\t\t\t\t\tcurrentSlide,\n\t\t\t\t\torigin: o\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// Handle embedded content\n\t\tif( slideChanged || !previousSlide ) {\n\t\t\tslideContent.stopEmbeddedContent( previousSlide );\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\t// Announce the current slide contents to screen readers\n\t\t// Use animation frame to prevent getComputedStyle in getStatusText\n\t\t// from triggering layout mid-frame\n\t\trequestAnimationFrame( () => {\n\t\t\tannounceStatus( getStatusText( currentSlide ) );\n\t\t});\n\n\t\tprogress.update();\n\t\tcontrols.update();\n\t\tnotes.update();\n\t\tbackgrounds.update();\n\t\tbackgrounds.updateParallax();\n\t\tslideNumber.update();\n\t\tfragments.update();\n\n\t\t// Update the URL hash\n\t\tlocation.writeURL();\n\n\t\tcueAutoSlide();\n\n\t\t// Auto-animation\n\t\tif( autoAnimateTransition ) {\n\n\t\t\tsetTimeout( () => {\n\t\t\t\tdom.slides.classList.remove( 'disable-slide-transitions' );\n\t\t\t}, 0 );\n\n\t\t\tif( config.autoAnimate ) {\n\t\t\t\t// Run the auto-animation between our slides\n\t\t\t\tautoAnimate.run( previousSlide, currentSlide );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Syncs the presentation with the current DOM. Useful\n\t * when new slides or control elements are added or when\n\t * the configuration has changed.\n\t */\n\tfunction sync() {\n\n\t\t// Subscribe to input\n\t\tremoveEventListeners();\n\t\taddEventListeners();\n\n\t\t// Force a layout to make sure the current config is accounted for\n\t\tlayout();\n\n\t\t// Reflect the current autoSlide value\n\t\tautoSlide = config.autoSlide;\n\n\t\t// Start auto-sliding if it's enabled\n\t\tcueAutoSlide();\n\n\t\t// Re-create all slide backgrounds\n\t\tbackgrounds.create();\n\n\t\t// Write the current hash to the URL\n\t\tlocation.writeURL();\n\n\t\tfragments.sortAll();\n\n\t\tcontrols.update();\n\t\tprogress.update();\n\n\t\tupdateSlidesVisibility();\n\n\t\tnotes.update();\n\t\tnotes.updateVisibility();\n\t\tbackgrounds.update( true );\n\t\tslideNumber.update();\n\t\tslideContent.formatEmbeddedContent();\n\n\t\t// Start or stop embedded content depending on global config\n\t\tif( config.autoPlayMedia === false ) {\n\t\t\tslideContent.stopEmbeddedContent( currentSlide, { unloadIframes: false } );\n\t\t}\n\t\telse {\n\t\t\tslideContent.startEmbeddedContent( currentSlide );\n\t\t}\n\n\t\tif( overview.isActive() ) {\n\t\t\toverview.layout();\n\t\t}\n\n\t}\n\n\t/**\n\t * Updates reveal.js to keep in sync with new slide attributes. For\n\t * example, if you add a new `data-background-image` you can call\n\t * this to have reveal.js render the new background image.\n\t *\n\t * Similar to #sync() but more efficient when you only need to\n\t * refresh a specific slide.\n\t *\n\t * @param {HTMLElement} slide\n\t */\n\tfunction syncSlide( slide = currentSlide ) {\n\n\t\tbackgrounds.sync( slide );\n\t\tfragments.sync( slide );\n\n\t\tslideContent.load( slide );\n\n\t\tbackgrounds.update();\n\t\tnotes.update();\n\n\t}\n\n\t/**\n\t * Resets all vertical slides so that only the first\n\t * is visible.\n\t */\n\tfunction resetVerticalSlides() {\n\n\t\tgetHorizontalSlides().forEach( horizontalSlide => {\n\n\t\t\tUtil.queryAll( horizontalSlide, 'section' ).forEach( ( verticalSlide, y ) => {\n\n\t\t\t\tif( y > 0 ) {\n\t\t\t\t\tverticalSlide.classList.remove( 'present' );\n\t\t\t\t\tverticalSlide.classList.remove( 'past' );\n\t\t\t\t\tverticalSlide.classList.add( 'future' );\n\t\t\t\t\tverticalSlide.setAttribute( 'aria-hidden', 'true' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Randomly shuffles all slides in the deck.\n\t */\n\tfunction shuffle( slides = getHorizontalSlides() ) {\n\n\t\tslides.forEach( ( slide, i ) => {\n\n\t\t\t// Insert the slide next to a randomly picked sibling slide\n\t\t\t// slide. This may cause the slide to insert before itself,\n\t\t\t// but that's not an issue.\n\t\t\tlet beforeSlide = slides[ Math.floor( Math.random() * slides.length ) ];\n\t\t\tif( beforeSlide.parentNode === slide.parentNode ) {\n\t\t\t\tslide.parentNode.insertBefore( slide, beforeSlide );\n\t\t\t}\n\n\t\t\t// Randomize the order of vertical slides (if there are any)\n\t\t\tlet verticalSlides = slide.querySelectorAll( 'section' );\n\t\t\tif( verticalSlides.length ) {\n\t\t\t\tshuffle( verticalSlides );\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Updates one dimension of slides by showing the slide\n\t * with the specified index.\n\t *\n\t * @param {string} selector A CSS selector that will fetch\n\t * the group of slides we are working with\n\t * @param {number} index The index of the slide that should be\n\t * shown\n\t *\n\t * @return {number} The index of the slide that is now shown,\n\t * might differ from the passed in index if it was out of\n\t * bounds.\n\t */\n\tfunction updateSlides( selector, index ) {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet slides = Util.queryAll( dom.wrapper, selector ),\n\t\t\tslidesLength = slides.length;\n\n\t\tlet printMode = print.isPrintingPDF();\n\n\t\tif( slidesLength ) {\n\n\t\t\t// Should the index loop?\n\t\t\tif( config.loop ) {\n\t\t\t\tindex %= slidesLength;\n\n\t\t\t\tif( index < 0 ) {\n\t\t\t\t\tindex = slidesLength + index;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Enforce max and minimum index bounds\n\t\t\tindex = Math.max( Math.min( index, slidesLength - 1 ), 0 );\n\n\t\t\tfor( let i = 0; i < slidesLength; i++ ) {\n\t\t\t\tlet element = slides[i];\n\n\t\t\t\tlet reverse = config.rtl && !isVerticalSlide( element );\n\n\t\t\t\t// Avoid .remove() with multiple args for IE11 support\n\t\t\t\telement.classList.remove( 'past' );\n\t\t\t\telement.classList.remove( 'present' );\n\t\t\t\telement.classList.remove( 'future' );\n\n\t\t\t\t// http://www.w3.org/html/wg/drafts/html/master/editing.html#the-hidden-attribute\n\t\t\t\telement.setAttribute( 'hidden', '' );\n\t\t\t\telement.setAttribute( 'aria-hidden', 'true' );\n\n\t\t\t\t// If this element contains vertical slides\n\t\t\t\tif( element.querySelector( 'section' ) ) {\n\t\t\t\t\telement.classList.add( 'stack' );\n\t\t\t\t}\n\n\t\t\t\t// If we're printing static slides, all slides are \"present\"\n\t\t\t\tif( printMode ) {\n\t\t\t\t\telement.classList.add( 'present' );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif( i < index ) {\n\t\t\t\t\t// Any element previous to index is given the 'past' class\n\t\t\t\t\telement.classList.add( reverse ? 'future' : 'past' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Show all fragments in prior slides\n\t\t\t\t\t\tUtil.queryAll( element, '.fragment' ).forEach( fragment => {\n\t\t\t\t\t\t\tfragment.classList.add( 'visible' );\n\t\t\t\t\t\t\tfragment.classList.remove( 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if( i > index ) {\n\t\t\t\t\t// Any element subsequent to index is given the 'future' class\n\t\t\t\t\telement.classList.add( reverse ? 'past' : 'future' );\n\n\t\t\t\t\tif( config.fragments ) {\n\t\t\t\t\t\t// Hide all fragments in future slides\n\t\t\t\t\t\tUtil.queryAll( element, '.fragment.visible' ).forEach( fragment => {\n\t\t\t\t\t\t\tfragment.classList.remove( 'visible', 'current-fragment' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet slide = slides[index];\n\t\t\tlet wasPresent = slide.classList.contains( 'present' );\n\n\t\t\t// Mark the current slide as present\n\t\t\tslide.classList.add( 'present' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\n\t\t\tif( !wasPresent ) {\n\t\t\t\t// Dispatch an event indicating the slide is now visible\n\t\t\t\tdispatchEvent({\n\t\t\t\t\ttarget: slide,\n\t\t\t\t\ttype: 'visible',\n\t\t\t\t\tbubbles: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If this slide has a state associated with it, add it\n\t\t\t// onto the current state of the deck\n\t\t\tlet slideState = slide.getAttribute( 'data-state' );\n\t\t\tif( slideState ) {\n\t\t\t\tstate = state.concat( slideState.split( ' ' ) );\n\t\t\t}\n\n\t\t}\n\t\telse {\n\t\t\t// Since there are no slides we can't be anywhere beyond the\n\t\t\t// zeroth index\n\t\t\tindex = 0;\n\t\t}\n\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Optimization method; hide all slides that are far away\n\t * from the present slide.\n\t */\n\tfunction updateSlidesVisibility() {\n\n\t\t// Select all slides and convert the NodeList result to\n\t\t// an array\n\t\tlet horizontalSlides = getHorizontalSlides(),\n\t\t\thorizontalSlidesLength = horizontalSlides.length,\n\t\t\tdistanceX,\n\t\t\tdistanceY;\n\n\t\tif( horizontalSlidesLength && typeof indexh !== 'undefined' ) {\n\n\t\t\t// The number of steps away from the present slide that will\n\t\t\t// be visible\n\t\t\tlet viewDistance = overview.isActive() ? 10 : config.viewDistance;\n\n\t\t\t// Shorten the view distance on devices that typically have\n\t\t\t// less resources\n\t\t\tif( Device.isMobile ) {\n\t\t\t\tviewDistance = overview.isActive() ? 6 : config.mobileViewDistance;\n\t\t\t}\n\n\t\t\t// All slides need to be visible when exporting to PDF\n\t\t\tif( print.isPrintingPDF() ) {\n\t\t\t\tviewDistance = Number.MAX_VALUE;\n\t\t\t}\n\n\t\t\tfor( let x = 0; x < horizontalSlidesLength; x++ ) {\n\t\t\t\tlet horizontalSlide = horizontalSlides[x];\n\n\t\t\t\tlet verticalSlides = Util.queryAll( horizontalSlide, 'section' ),\n\t\t\t\t\tverticalSlidesLength = verticalSlides.length;\n\n\t\t\t\t// Determine how far away this slide is from the present\n\t\t\t\tdistanceX = Math.abs( ( indexh || 0 ) - x ) || 0;\n\n\t\t\t\t// If the presentation is looped, distance should measure\n\t\t\t\t// 1 between the first and last slides\n\t\t\t\tif( config.loop ) {\n\t\t\t\t\tdistanceX = Math.abs( ( ( indexh || 0 ) - x ) % ( horizontalSlidesLength - viewDistance ) ) || 0;\n\t\t\t\t}\n\n\t\t\t\t// Show the horizontal slide if it's within the view distance\n\t\t\t\tif( distanceX < viewDistance ) {\n\t\t\t\t\tslideContent.load( horizontalSlide );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tslideContent.unload( horizontalSlide );\n\t\t\t\t}\n\n\t\t\t\tif( verticalSlidesLength ) {\n\n\t\t\t\t\tlet oy = getPreviousVerticalIndex( horizontalSlide );\n\n\t\t\t\t\tfor( let y = 0; y < verticalSlidesLength; y++ ) {\n\t\t\t\t\t\tlet verticalSlide = verticalSlides[y];\n\n\t\t\t\t\t\tdistanceY = x === ( indexh || 0 ) ? Math.abs( ( indexv || 0 ) - y ) : Math.abs( y - oy );\n\n\t\t\t\t\t\tif( distanceX + distanceY < viewDistance ) {\n\t\t\t\t\t\t\tslideContent.load( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tslideContent.unload( verticalSlide );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Flag if there are ANY vertical slides, anywhere in the deck\n\t\t\tif( hasVerticalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-vertical-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-vertical-slides' );\n\t\t\t}\n\n\t\t\t// Flag if there are ANY horizontal slides, anywhere in the deck\n\t\t\tif( hasHorizontalSlides() ) {\n\t\t\t\tdom.wrapper.classList.add( 'has-horizontal-slides' );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdom.wrapper.classList.remove( 'has-horizontal-slides' );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Determine what available routes there are for navigation.\n\t *\n\t * @return {{left: boolean, right: boolean, up: boolean, down: boolean}}\n\t */\n\tfunction availableRoutes({ includeFragments = false } = {}) {\n\n\t\tlet horizontalSlides = dom.wrapper.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR ),\n\t\t\tverticalSlides = dom.wrapper.querySelectorAll( VERTICAL_SLIDES_SELECTOR );\n\n\t\tlet routes = {\n\t\t\tleft: indexh > 0,\n\t\t\tright: indexh < horizontalSlides.length - 1,\n\t\t\tup: indexv > 0,\n\t\t\tdown: indexv < verticalSlides.length - 1\n\t\t};\n\n\t\t// Looped presentations can always be navigated as long as\n\t\t// there are slides available\n\t\tif( config.loop ) {\n\t\t\tif( horizontalSlides.length > 1 ) {\n\t\t\t\troutes.left = true;\n\t\t\t\troutes.right = true;\n\t\t\t}\n\n\t\t\tif( verticalSlides.length > 1 ) {\n\t\t\t\troutes.up = true;\n\t\t\t\troutes.down = true;\n\t\t\t}\n\t\t}\n\n\t\tif ( horizontalSlides.length > 1 && config.navigationMode === 'linear' ) {\n\t\t\troutes.right = routes.right || routes.down;\n\t\t\troutes.left = routes.left || routes.up;\n\t\t}\n\n\t\t// If includeFragments is set, a route will be considered\n\t\t// availalbe if either a slid OR fragment is available in\n\t\t// the given direction\n\t\tif( includeFragments === true ) {\n\t\t\tlet fragmentRoutes = fragments.availableRoutes();\n\t\t\troutes.left = routes.left || fragmentRoutes.prev;\n\t\t\troutes.up = routes.up || fragmentRoutes.prev;\n\t\t\troutes.down = routes.down || fragmentRoutes.next;\n\t\t\troutes.right = routes.right || fragmentRoutes.next;\n\t\t}\n\n\t\t// Reverse horizontal controls for rtl\n\t\tif( config.rtl ) {\n\t\t\tlet left = routes.left;\n\t\t\troutes.left = routes.right;\n\t\t\troutes.right = left;\n\t\t}\n\n\t\treturn routes;\n\n\t}\n\n\t/**\n\t * Returns the number of past slides. This can be used as a global\n\t * flattened index for slides.\n\t *\n\t * @param {HTMLElement} [slide=currentSlide] The slide we're counting before\n\t *\n\t * @return {number} Past slide count\n\t */\n\tfunction getSlidePastCount( slide = currentSlide ) {\n\n\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t// The number of past slides\n\t\tlet pastCount = 0;\n\n\t\t// Step through all slides and count the past ones\n\t\tmainLoop: for( let i = 0; i < horizontalSlides.length; i++ ) {\n\n\t\t\tlet horizontalSlide = horizontalSlides[i];\n\t\t\tlet verticalSlides = horizontalSlide.querySelectorAll( 'section' );\n\n\t\t\tfor( let j = 0; j < verticalSlides.length; j++ ) {\n\n\t\t\t\t// Stop as soon as we arrive at the present\n\t\t\t\tif( verticalSlides[j] === slide ) {\n\t\t\t\t\tbreak mainLoop;\n\t\t\t\t}\n\n\t\t\t\t// Don't count slides with the \"uncounted\" class\n\t\t\t\tif( verticalSlides[j].dataset.visibility !== 'uncounted' ) {\n\t\t\t\t\tpastCount++;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Stop as soon as we arrive at the present\n\t\t\tif( horizontalSlide === slide ) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Don't count the wrapping section for vertical slides and\n\t\t\t// slides marked as uncounted\n\t\t\tif( horizontalSlide.classList.contains( 'stack' ) === false && horizontalSlide.dataset.visibility !== 'uncounted' ) {\n\t\t\t\tpastCount++;\n\t\t\t}\n\n\t\t}\n\n\t\treturn pastCount;\n\n\t}\n\n\t/**\n\t * Returns a value ranging from 0-1 that represents\n\t * how far into the presentation we have navigated.\n\t *\n\t * @return {number}\n\t */\n\tfunction getProgress() {\n\n\t\t// The number of past and total slides\n\t\tlet totalCount = getTotalSlides();\n\t\tlet pastCount = getSlidePastCount();\n\n\t\tif( currentSlide ) {\n\n\t\t\tlet allFragments = currentSlide.querySelectorAll( '.fragment' );\n\n\t\t\t// If there are fragments in the current slide those should be\n\t\t\t// accounted for in the progress.\n\t\t\tif( allFragments.length > 0 ) {\n\t\t\t\tlet visibleFragments = currentSlide.querySelectorAll( '.fragment.visible' );\n\n\t\t\t\t// This value represents how big a portion of the slide progress\n\t\t\t\t// that is made up by its fragments (0-1)\n\t\t\t\tlet fragmentWeight = 0.9;\n\n\t\t\t\t// Add fragment progress to the past slide count\n\t\t\t\tpastCount += ( visibleFragments.length / allFragments.length ) * fragmentWeight;\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.min( pastCount / ( totalCount - 1 ), 1 );\n\n\t}\n\n\t/**\n\t * Retrieves the h/v location and fragment of the current,\n\t * or specified, slide.\n\t *\n\t * @param {HTMLElement} [slide] If specified, the returned\n\t * index will be for this slide rather than the currently\n\t * active one\n\t *\n\t * @return {{h: number, v: number, f: number}}\n\t */\n\tfunction getIndices( slide ) {\n\n\t\t// By default, return the current indices\n\t\tlet h = indexh,\n\t\t\tv = indexv,\n\t\t\tf;\n\n\t\t// If a slide is specified, return the indices of that slide\n\t\tif( slide ) {\n\t\t\tlet isVertical = isVerticalSlide( slide );\n\t\t\tlet slideh = isVertical ? slide.parentNode : slide;\n\n\t\t\t// Select all horizontal slides\n\t\t\tlet horizontalSlides = getHorizontalSlides();\n\n\t\t\t// Now that we know which the horizontal slide is, get its index\n\t\t\th = Math.max( horizontalSlides.indexOf( slideh ), 0 );\n\n\t\t\t// Assume we're not vertical\n\t\t\tv = undefined;\n\n\t\t\t// If this is a vertical slide, grab the vertical index\n\t\t\tif( isVertical ) {\n\t\t\t\tv = Math.max( Util.queryAll( slide.parentNode, 'section' ).indexOf( slide ), 0 );\n\t\t\t}\n\t\t}\n\n\t\tif( !slide && currentSlide ) {\n\t\t\tlet hasFragments = currentSlide.querySelectorAll( '.fragment' ).length > 0;\n\t\t\tif( hasFragments ) {\n\t\t\t\tlet currentFragment = currentSlide.querySelector( '.current-fragment' );\n\t\t\t\tif( currentFragment && currentFragment.hasAttribute( 'data-fragment-index' ) ) {\n\t\t\t\t\tf = parseInt( currentFragment.getAttribute( 'data-fragment-index' ), 10 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tf = currentSlide.querySelectorAll( '.fragment.visible' ).length - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn { h, v, f };\n\n\t}\n\n\t/**\n\t * Retrieves all slides in this presentation.\n\t */\n\tfunction getSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, SLIDES_SELECTOR + ':not(.stack):not([data-visibility=\"uncounted\"])' );\n\n\t}\n\n\t/**\n\t * Returns a list of all horizontal slides in the deck. Each\n\t * vertical stack is included as one horizontal slide in the\n\t * resulting array.\n\t */\n\tfunction getHorizontalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR );\n\n\t}\n\n\t/**\n\t * Returns all vertical slides that exist within this deck.\n\t */\n\tfunction getVerticalSlides() {\n\n\t\treturn Util.queryAll( dom.wrapper, '.slides>section>section' );\n\n\t}\n\n\t/**\n\t * Returns all vertical stacks (each stack can contain multiple slides).\n\t */\n\tfunction getVerticalStacks() {\n\n\t\treturn Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.stack');\n\n\t}\n\n\t/**\n\t * Returns true if there are at least two horizontal slides.\n\t */\n\tfunction hasHorizontalSlides() {\n\n\t\treturn getHorizontalSlides().length > 1;\n\t}\n\n\t/**\n\t * Returns true if there are at least two vertical slides.\n\t */\n\tfunction hasVerticalSlides() {\n\n\t\treturn getVerticalSlides().length > 1;\n\n\t}\n\n\t/**\n\t * Returns an array of objects where each object represents the\n\t * attributes on its respective slide.\n\t */\n\tfunction getSlidesAttributes() {\n\n\t\treturn getSlides().map( slide => {\n\n\t\t\tlet attributes = {};\n\t\t\tfor( let i = 0; i < slide.attributes.length; i++ ) {\n\t\t\t\tlet attribute = slide.attributes[ i ];\n\t\t\t\tattributes[ attribute.name ] = attribute.value;\n\t\t\t}\n\t\t\treturn attributes;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Retrieves the total number of slides in this presentation.\n\t *\n\t * @return {number}\n\t */\n\tfunction getTotalSlides() {\n\n\t\treturn getSlides().length;\n\n\t}\n\n\t/**\n\t * Returns the slide element matching the specified index.\n\t *\n\t * @return {HTMLElement}\n\t */\n\tfunction getSlide( x, y ) {\n\n\t\tlet horizontalSlide = getHorizontalSlides()[ x ];\n\t\tlet verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' );\n\n\t\tif( verticalSlides && verticalSlides.length && typeof y === 'number' ) {\n\t\t\treturn verticalSlides ? verticalSlides[ y ] : undefined;\n\t\t}\n\n\t\treturn horizontalSlide;\n\n\t}\n\n\t/**\n\t * Returns the background element for the given slide.\n\t * All slides, even the ones with no background properties\n\t * defined, have a background element so as long as the\n\t * index is valid an element will be returned.\n\t *\n\t * @param {mixed} x Horizontal background index OR a slide\n\t * HTML element\n\t * @param {number} y Vertical background index\n\t * @return {(HTMLElement[]|*)}\n\t */\n\tfunction getSlideBackground( x, y ) {\n\n\t\tlet slide = typeof x === 'number' ? getSlide( x, y ) : x;\n\t\tif( slide ) {\n\t\t\treturn slide.slideBackgroundElement;\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\t/**\n\t * Retrieves the current state of the presentation as\n\t * an object. This state can then be restored at any\n\t * time.\n\t *\n\t * @return {{indexh: number, indexv: number, indexf: number, paused: boolean, overview: boolean}}\n\t */\n\tfunction getState() {\n\n\t\tlet indices = getIndices();\n\n\t\treturn {\n\t\t\tindexh: indices.h,\n\t\t\tindexv: indices.v,\n\t\t\tindexf: indices.f,\n\t\t\tpaused: isPaused(),\n\t\t\toverview: overview.isActive()\n\t\t};\n\n\t}\n\n\t/**\n\t * Restores the presentation to the given state.\n\t *\n\t * @param {object} state As generated by getState()\n\t * @see {@link getState} generates the parameter `state`\n\t */\n\tfunction setState( state ) {\n\n\t\tif( typeof state === 'object' ) {\n\t\t\tslide( Util.deserialize( state.indexh ), Util.deserialize( state.indexv ), Util.deserialize( state.indexf ) );\n\n\t\t\tlet pausedFlag = Util.deserialize( state.paused ),\n\t\t\t\toverviewFlag = Util.deserialize( state.overview );\n\n\t\t\tif( typeof pausedFlag === 'boolean' && pausedFlag !== isPaused() ) {\n\t\t\t\ttogglePause( pausedFlag );\n\t\t\t}\n\n\t\t\tif( typeof overviewFlag === 'boolean' && overviewFlag !== overview.isActive() ) {\n\t\t\t\toverview.toggle( overviewFlag );\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Cues a new automated slide if enabled in the config.\n\t */\n\tfunction cueAutoSlide() {\n\n\t\tcancelAutoSlide();\n\n\t\tif( currentSlide && config.autoSlide !== false ) {\n\n\t\t\tlet fragment = currentSlide.querySelector( '.current-fragment' );\n\n\t\t\t// When the slide first appears there is no \"current\" fragment so\n\t\t\t// we look for a data-autoslide timing on the first fragment\n\t\t\tif( !fragment ) fragment = currentSlide.querySelector( '.fragment' );\n\n\t\t\tlet fragmentAutoSlide = fragment ? fragment.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet parentAutoSlide = currentSlide.parentNode ? currentSlide.parentNode.getAttribute( 'data-autoslide' ) : null;\n\t\t\tlet slideAutoSlide = currentSlide.getAttribute( 'data-autoslide' );\n\n\t\t\t// Pick value in the following priority order:\n\t\t\t// 1. Current fragment's data-autoslide\n\t\t\t// 2. Current slide's data-autoslide\n\t\t\t// 3. Parent slide's data-autoslide\n\t\t\t// 4. Global autoSlide setting\n\t\t\tif( fragmentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( fragmentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( slideAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( slideAutoSlide, 10 );\n\t\t\t}\n\t\t\telse if( parentAutoSlide ) {\n\t\t\t\tautoSlide = parseInt( parentAutoSlide, 10 );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tautoSlide = config.autoSlide;\n\n\t\t\t\t// If there are media elements with data-autoplay,\n\t\t\t\t// automatically set the autoSlide duration to the\n\t\t\t\t// length of that media. Not applicable if the slide\n\t\t\t\t// is divided up into fragments.\n\t\t\t\t// playbackRate is accounted for in the duration.\n\t\t\t\tif( currentSlide.querySelectorAll( '.fragment' ).length === 0 ) {\n\t\t\t\t\tUtil.queryAll( currentSlide, 'video, audio' ).forEach( el => {\n\t\t\t\t\t\tif( el.hasAttribute( 'data-autoplay' ) ) {\n\t\t\t\t\t\t\tif( autoSlide && (el.duration * 1000 / el.playbackRate ) > autoSlide ) {\n\t\t\t\t\t\t\t\tautoSlide = ( el.duration * 1000 / el.playbackRate ) + 1000;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cue the next auto-slide if:\n\t\t\t// - There is an autoSlide value\n\t\t\t// - Auto-sliding isn't paused by the user\n\t\t\t// - The presentation isn't paused\n\t\t\t// - The overview isn't active\n\t\t\t// - The presentation isn't over\n\t\t\tif( autoSlide && !autoSlidePaused && !isPaused() && !overview.isActive() && ( !isLastSlide() || fragments.availableRoutes().next || config.loop === true ) ) {\n\t\t\t\tautoSlideTimeout = setTimeout( () => {\n\t\t\t\t\tif( typeof config.autoSlideMethod === 'function' ) {\n\t\t\t\t\t\tconfig.autoSlideMethod()\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnavigateNext();\n\t\t\t\t\t}\n\t\t\t\t\tcueAutoSlide();\n\t\t\t\t}, autoSlide );\n\t\t\t\tautoSlideStartTime = Date.now();\n\t\t\t}\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( autoSlideTimeout !== -1 );\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Cancels any ongoing request to auto-slide.\n\t */\n\tfunction cancelAutoSlide() {\n\n\t\tclearTimeout( autoSlideTimeout );\n\t\tautoSlideTimeout = -1;\n\n\t}\n\n\tfunction pauseAutoSlide() {\n\n\t\tif( autoSlide && !autoSlidePaused ) {\n\t\t\tautoSlidePaused = true;\n\t\t\tdispatchEvent({ type: 'autoslidepaused' });\n\t\t\tclearTimeout( autoSlideTimeout );\n\n\t\t\tif( autoSlidePlayer ) {\n\t\t\t\tautoSlidePlayer.setPlaying( false );\n\t\t\t}\n\t\t}\n\n\t}\n\n\tfunction resumeAutoSlide() {\n\n\t\tif( autoSlide && autoSlidePaused ) {\n\t\t\tautoSlidePaused = false;\n\t\t\tdispatchEvent({ type: 'autoslideresumed' });\n\t\t\tcueAutoSlide();\n\t\t}\n\n\t}\n\n\tfunction navigateLeft() {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || fragments.next() === false ) && availableRoutes().left ) {\n\t\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || fragments.prev() === false ) && availableRoutes().left ) {\n\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateRight() {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || fragments.prev() === false ) && availableRoutes().right ) {\n\t\t\t\tslide( indexh - 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t\t}\n\t\t}\n\t\t// Normal navigation\n\t\telse if( ( overview.isActive() || fragments.next() === false ) && availableRoutes().right ) {\n\t\t\tslide( indexh + 1, config.navigationMode === 'grid' ? indexv : undefined );\n\t\t}\n\n\t}\n\n\tfunction navigateUp() {\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( overview.isActive() || fragments.prev() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown() {\n\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( overview.isActive() || fragments.next() === false ) && availableRoutes().down ) {\n\t\t\tslide( indexh, indexv + 1 );\n\t\t}\n\n\t}\n\n\t/**\n\t * Navigates backwards, prioritized in the following order:\n\t * 1) Previous fragment\n\t * 2) Previous vertical slide\n\t * 3) Previous horizontal slide\n\t */\n\tfunction navigatePrev() {\n\n\t\t// Prioritize revealing fragments\n\t\tif( fragments.prev() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp();\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Fetch the previous horizontal slide, if there is one\n\t\t\t\tlet previousSlide;\n\n\t\t\t\tif( config.rtl ) {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.future' ).pop();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpreviousSlide = Util.queryAll( dom.wrapper, HORIZONTAL_SLIDES_SELECTOR + '.past' ).pop();\n\t\t\t\t}\n\n\t\t\t\tif( previousSlide ) {\n\t\t\t\t\tlet v = ( previousSlide.querySelectorAll( 'section' ).length - 1 ) || undefined;\n\t\t\t\t\tlet h = indexh - 1;\n\t\t\t\t\tslide( h, v );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * The reverse of #navigatePrev().\n\t */\n\tfunction navigateNext() {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( fragments.next() === false ) {\n\n\t\t\tlet routes = availableRoutes();\n\n\t\t\t// When looping is enabled `routes.down` is always available\n\t\t\t// so we need a separate check for when we've reached the\n\t\t\t// end of a stack and should move horizontally\n\t\t\tif( routes.down && routes.right && config.loop && isLastVerticalSlide() ) {\n\t\t\t\troutes.down = false;\n\t\t\t}\n\n\t\t\tif( routes.down ) {\n\t\t\t\tnavigateDown();\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight();\n\t\t\t}\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ----------------------------- EVENTS -------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t/**\n\t * Called by all event handlers that are based on user\n\t * input.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onUserInput( event ) {\n\n\t\tif( config.autoSlideStoppable ) {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\t/**\n\t * Event listener for transition end on the current slide.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onTransitionEnd( event ) {\n\n\t\tif( transition === 'running' && /section/gi.test( event.target.nodeName ) ) {\n\t\t\ttransition = 'idle';\n\t\t\tdispatchEvent({\n\t\t\t\ttype: 'slidetransitionend',\n\t\t\t\tdata: { indexh, indexv, previousSlide, currentSlide }\n\t\t\t});\n\t\t}\n\n\t}\n\n\t/**\n\t * Handler for the window level 'resize' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onWindowResize( event ) {\n\n\t\tlayout();\n\n\t}\n\n\t/**\n\t * Handle for the window level 'visibilitychange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onPageVisibilityChange( event ) {\n\n\t\t// If, after clicking a link or similar and we're coming back,\n\t\t// focus the document.body to ensure we can use keyboard shortcuts\n\t\tif( document.hidden === false && document.activeElement !== document.body ) {\n\t\t\t// Not all elements support .blur() - SVGs among them.\n\t\t\tif( typeof document.activeElement.blur === 'function' ) {\n\t\t\t\tdocument.activeElement.blur();\n\t\t\t}\n\t\t\tdocument.body.focus();\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles clicks on links that are set to preview in the\n\t * iframe overlay.\n\t *\n\t * @param {object} event\n\t */\n\tfunction onPreviewLinkClicked( event ) {\n\n\t\tif( event.currentTarget && event.currentTarget.hasAttribute( 'href' ) ) {\n\t\t\tlet url = event.currentTarget.getAttribute( 'href' );\n\t\t\tif( url ) {\n\t\t\t\tshowPreview( url );\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\n\t}\n\n\t/**\n\t * Handles click on the auto-sliding controls element.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onAutoSlidePlayerClick( event ) {\n\n\t\t// Replay\n\t\tif( isLastSlide() && config.loop === false ) {\n\t\t\tslide( 0, 0 );\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Resume\n\t\telse if( autoSlidePaused ) {\n\t\t\tresumeAutoSlide();\n\t\t}\n\t\t// Pause\n\t\telse {\n\t\t\tpauseAutoSlide();\n\t\t}\n\n\t}\n\n\n\t// --------------------------------------------------------------------//\n\t// ------------------------------- API --------------------------------//\n\t// --------------------------------------------------------------------//\n\n\t// The public reveal.js API\n\tconst API = {\n\t\tVERSION,\n\n\t\tinitialize,\n\t\tconfigure,\n\n\t\tsync,\n\t\tsyncSlide,\n\t\tsyncFragments: fragments.sync.bind( fragments ),\n\n\t\t// Navigation methods\n\t\tslide,\n\t\tleft: navigateLeft,\n\t\tright: navigateRight,\n\t\tup: navigateUp,\n\t\tdown: navigateDown,\n\t\tprev: navigatePrev,\n\t\tnext: navigateNext,\n\n\t\t// Navigation aliases\n\t\tnavigateLeft, navigateRight, navigateUp, navigateDown, navigatePrev, navigateNext,\n\n\t\t// Fragment methods\n\t\tnavigateFragment: fragments.goto.bind( fragments ),\n\t\tprevFragment: fragments.prev.bind( fragments ),\n\t\tnextFragment: fragments.next.bind( fragments ),\n\n\t\t// Event binding\n\t\ton,\n\t\toff,\n\n\t\t// Legacy event binding methods left in for backwards compatibility\n\t\taddEventListener: on,\n\t\tremoveEventListener: off,\n\n\t\t// Forces an update in slide layout\n\t\tlayout,\n\n\t\t// Randomizes the order of slides\n\t\tshuffle,\n\n\t\t// Returns an object with the available routes as booleans (left/right/top/bottom)\n\t\tavailableRoutes,\n\n\t\t// Returns an object with the available fragments as booleans (prev/next)\n\t\tavailableFragments: fragments.availableRoutes.bind( fragments ),\n\n\t\t// Toggles a help overlay with keyboard shortcuts\n\t\ttoggleHelp,\n\n\t\t// Toggles the overview mode on/off\n\t\ttoggleOverview: overview.toggle.bind( overview ),\n\n\t\t// Toggles the \"black screen\" mode on/off\n\t\ttogglePause,\n\n\t\t// Toggles the auto slide mode on/off\n\t\ttoggleAutoSlide,\n\n\t\t// Slide navigation checks\n\t\tisFirstSlide,\n\t\tisLastSlide,\n\t\tisLastVerticalSlide,\n\t\tisVerticalSlide,\n\n\t\t// State checks\n\t\tisPaused,\n\t\tisAutoSliding,\n\t\tisSpeakerNotes: notes.isSpeakerNotesWindow.bind( notes ),\n\t\tisOverview: overview.isActive.bind( overview ),\n\t\tisFocused: focus.isFocused.bind( focus ),\n\t\tisPrintingPDF: print.isPrintingPDF.bind( print ),\n\n\t\t// Checks if reveal.js has been loaded and is ready for use\n\t\tisReady: () => ready,\n\n\t\t// Slide preloading\n\t\tloadSlide: slideContent.load.bind( slideContent ),\n\t\tunloadSlide: slideContent.unload.bind( slideContent ),\n\n\t\t// Preview management\n\t\tshowPreview,\n\t\thidePreview: closeOverlay,\n\n\t\t// Adds or removes all internal event listeners\n\t\taddEventListeners,\n\t\tremoveEventListeners,\n\t\tdispatchEvent,\n\n\t\t// Facility for persisting and restoring the presentation state\n\t\tgetState,\n\t\tsetState,\n\n\t\t// Presentation progress on range of 0-1\n\t\tgetProgress,\n\n\t\t// Returns the indices of the current, or specified, slide\n\t\tgetIndices,\n\n\t\t// Returns an Array of key:value maps of the attributes of each\n\t\t// slide in the deck\n\t\tgetSlidesAttributes,\n\n\t\t// Returns the number of slides that we have passed\n\t\tgetSlidePastCount,\n\n\t\t// Returns the total number of slides\n\t\tgetTotalSlides,\n\n\t\t// Returns the slide element at the specified index\n\t\tgetSlide,\n\n\t\t// Returns the previous slide element, may be null\n\t\tgetPreviousSlide: () => previousSlide,\n\n\t\t// Returns the current slide element\n\t\tgetCurrentSlide: () => currentSlide,\n\n\t\t// Returns the slide background element at the specified index\n\t\tgetSlideBackground,\n\n\t\t// Returns the speaker notes string for a slide, or null\n\t\tgetSlideNotes: notes.getSlideNotes.bind( notes ),\n\n\t\t// Returns an Array of all slides\n\t\tgetSlides,\n\n\t\t// Returns an array with all horizontal/vertical slides in the deck\n\t\tgetHorizontalSlides,\n\t\tgetVerticalSlides,\n\n\t\t// Checks if the presentation contains two or more horizontal\n\t\t// and vertical slides\n\t\thasHorizontalSlides,\n\t\thasVerticalSlides,\n\n\t\t// Checks if the deck has navigated on either axis at least once\n\t\thasNavigatedHorizontally: () => navigationHistory.hasNavigatedHorizontally,\n\t\thasNavigatedVertically: () => navigationHistory.hasNavigatedVertically,\n\n\t\t// Adds/removes a custom key binding\n\t\taddKeyBinding: keyboard.addKeyBinding.bind( keyboard ),\n\t\tremoveKeyBinding: keyboard.removeKeyBinding.bind( keyboard ),\n\n\t\t// Programmatically triggers a keyboard event\n\t\ttriggerKey: keyboard.triggerKey.bind( keyboard ),\n\n\t\t// Registers a new shortcut to include in the help overlay\n\t\tregisterKeyboardShortcut: keyboard.registerKeyboardShortcut.bind( keyboard ),\n\n\t\tgetComputedSlideSize,\n\n\t\t// Returns the current scale of the presentation content\n\t\tgetScale: () => scale,\n\n\t\t// Returns the current configuration object\n\t\tgetConfig: () => config,\n\n\t\t// Helper method, retrieves query string as a key:value map\n\t\tgetQueryHash: Util.getQueryHash,\n\n\t\t// Returns reveal.js DOM elements\n\t\tgetRevealElement: () => revealElement,\n\t\tgetSlidesElement: () => dom.slides,\n\t\tgetViewportElement: () => dom.viewport,\n\t\tgetBackgroundsElement: () => backgrounds.element,\n\n\t\t// API for registering and retrieving plugins\n\t\tregisterPlugin: plugins.registerPlugin.bind( plugins ),\n\t\thasPlugin: plugins.hasPlugin.bind( plugins ),\n\t\tgetPlugin: plugins.getPlugin.bind( plugins ),\n\t\tgetPlugins: plugins.getRegisteredPlugins.bind( plugins )\n\n\t};\n\n\t// Our internal API which controllers have access to\n\tUtil.extend( Reveal, {\n\t\t...API,\n\n\t\t// Methods for announcing content to screen readers\n\t\tannounceStatus,\n\t\tgetStatusText,\n\n\t\t// Controllers\n\t\tprint,\n\t\tfocus,\n\t\tprogress,\n\t\tcontrols,\n\t\tlocation,\n\t\toverview,\n\t\tfragments,\n\t\tslideContent,\n\t\tslideNumber,\n\n\t\tonUserInput,\n\t\tcloseOverlay,\n\t\tupdateSlidesVisibility,\n\t\tlayoutSlideContents,\n\t\ttransformSlides,\n\t\tcueAutoSlide,\n\t\tcancelAutoSlide\n\t} );\n\n\treturn API;\n\n};\n","import Deck, { VERSION } from './reveal.js'\n\n/**\n * Expose the Reveal class to the window. To create a\n * new instance:\n * let deck = new Reveal( document.querySelector( '.reveal' ), {\n * controls: false\n * } );\n * deck.initialize().then(() => {\n * // reveal.js is ready\n * });\n */\nlet Reveal = Deck;\n\n\n/**\n * The below is a thin shell that mimics the pre 4.0\n * reveal.js API and ensures backwards compatibility.\n * This API only allows for one Reveal instance per\n * page, whereas the new API above lets you run many\n * presentations on the same page.\n *\n * Reveal.initialize( { controls: false } ).then(() => {\n * // reveal.js is ready\n * });\n */\n\nlet enqueuedAPICalls = [];\n\nReveal.initialize = options => {\n\n\t// Create our singleton reveal.js instance\n\tObject.assign( Reveal, new Deck( document.querySelector( '.reveal' ), options ) );\n\n\t// Invoke any enqueued API calls\n\tenqueuedAPICalls.map( method => method( Reveal ) );\n\n\treturn Reveal.initialize();\n\n}\n\n/**\n * The pre 4.0 API let you add event listener before\n * initializing. We maintain the same behavior by\n * queuing up premature API calls and invoking all\n * of them when Reveal.initialize is called.\n */\n[ 'configure', 'on', 'off', 'addEventListener', 'removeEventListener', 'registerPlugin' ].forEach( method => {\n\tReveal[method] = ( ...args ) => {\n\t\tenqueuedAPICalls.push( deck => deck[method].call( null, ...args ) );\n\t}\n} );\n\nReveal.isReady = () => false;\n\nReveal.VERSION = VERSION;\n\nexport default Reveal;"],"names":["check","it","Math","global","globalThis","window","self","this","Function","fails","exec","error","descriptors","require$$0","Object","defineProperty","get","$propertyIsEnumerable","propertyIsEnumerable","getOwnPropertyDescriptor","NASHORN_BUG","call","1","V","descriptor","enumerable","createPropertyDescriptor","bitmap","value","configurable","writable","toString","classofRaw","slice","classof","require$$1","split","indexedObject","requireObjectCoercible","undefined","TypeError","IndexedObject","toIndexedObject","isObject","toPrimitive","input","PREFERRED_STRING","fn","val","valueOf","toObject","argument","hasOwnProperty","has","key","document","EXISTS","createElement","documentCreateElement","require$$2","ie8DomDefine","a","DESCRIPTORS","propertyIsEnumerableModule","require$$3","require$$4","require$$5","IE8_DOM_DEFINE","require$$6","$getOwnPropertyDescriptor","O","P","f","anObject","String","$defineProperty","Attributes","definePropertyModule","createNonEnumerableProperty","object","setGlobal","SHARED","sharedStore","store","functionToString","inspectSource","WeakMap","nativeWeakMap","test","sharedModule","push","version","mode","copyright","set","id","postfix","random","uid","shared","keys","sharedKey","hiddenKeys","NATIVE_WEAK_MAP","objectHas","require$$7","OBJECT_ALREADY_INITIALIZED","state","wmget","wmhas","wmset","metadata","facade","STATE","internalState","enforce","getterFor","TYPE","type","getInternalState","enforceInternalState","TEMPLATE","redefineModule","options","unsafe","simple","noTargetGet","source","join","prototype","path","aFunction","variable","getBuiltIn","namespace","method","arguments","length","ceil","floor","toInteger","isNaN","min","toLength","max","toAbsoluteIndex","index","integer","createMethod","IS_INCLUDES","$this","el","fromIndex","arrayIncludes","includes","indexOf","objectKeysInternal","names","i","result","enumBugKeys","internalObjectKeys","concat","getOwnPropertyNames","getOwnPropertySymbols","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","ownKeys","getOwnPropertyDescriptorModule","copyConstructorProperties","target","replacement","isForced","feature","detection","data","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","isForced_1","redefine","_export","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","forced","sham","objectKeys","$assign","assign","b","A","B","symbol","Symbol","alphabet","forEach","chr","T","argumentsLength","S","j","match","functionBindContext","that","c","apply","isArray","Array","arg","engineUserAgent","userAgent","process","versions","v8","engineV8Version","V8_VERSION","nativeSymbol","useSymbolAsUid","iterator","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","wellKnownSymbol","name","SPECIES","arraySpeciesCreate","originalArray","C","constructor","bind","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_OUT","NO_HOLES","callbackfn","specificCreate","boundFunction","create","arrayIteration","map","filter","some","every","find","findIndex","filterOut","arrayMethodHasSpeciesSupport","METHOD_NAME","array","foo","Boolean","$map","proto","createProperty","propertyKey","$","require$$8","require$$10","IS_CONCAT_SPREADABLE","require$$9","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","k","len","E","n","toStringTagSupport","TO_STRING_TAG_SUPPORT","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","objectToString","nativePromiseConstructor","Promise","aPossiblePrototype","objectSetPrototypeOf","setPrototypeOf","setter","CORRECT_SETTER","__proto__","setToStringTag","TAG","iterators","Iterators","ITERATOR","ArrayPrototype","isArrayIteratorMethod","getIteratorMethod","iteratorClose","returnMethod","Result","stopped","SAFE_CLOSING","called","iteratorWithReturn","next","done","return","from","defer","channel","port","checkCorrectnessOfIteration","SKIP_CLOSING","ITERATION_SUPPORT","speciesConstructor","defaultConstructor","html","engineIsIos","engineIsNode","IS_IOS","IS_NODE","location","setImmediate","clear","clearImmediate","MessageChannel","Dispatch","counter","queue","ONREADYSTATECHANGE","run","runner","listener","event","post","postMessage","protocol","host","args","nextTick","now","port2","port1","onmessage","addEventListener","importScripts","appendChild","removeChild","setTimeout","flush","head","last","notify","toggle","node","promise","then","task","engineIsWebosWebkit","macrotask","IS_WEBOS_WEBKIT","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","parent","domain","exit","enter","resolve","createTextNode","observe","characterData","microtask","PromiseCapability","reject","$$resolve","$$reject","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","newPromiseCapability","engineIsBrowser","NativePromise","redefineAll","src","setSpecies","CONSTRUCTOR_NAME","Constructor","require$$11","anInstance","require$$13","iterate","iterable","unboundFunction","iterFn","step","AS_ENTRIES","IS_ITERATOR","INTERRUPTED","stop","condition","callFn","require$$15","require$$16","require$$17","require$$18","promiseResolve","x","promiseCapability","hostReportErrors","console","newPromiseCapabilityModule","require$$21","perform","InternalStateModule","require$$23","require$$24","IS_BROWSER","require$$26","require$$27","require$$28","require$$25","PROMISE","setInternalState","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromiseConstructorPrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","FORCED","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","all","isThenable","isReject","notified","chain","reactions","ok","exited","reaction","handler","fail","rejection","onHandleUnhandled","onUnhandled","reason","initEvent","isUnhandled","emit","unwrap","internalReject","internalResolve","wrapper","executor","onFulfilled","onRejected","catch","wrap","r","capability","$promiseResolve","values","remaining","alreadyCalled","race","arrayMethodIsStrict","$forEach","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","COLLECTION_NAME","Collection","CollectionPrototype","callWithSafeIterationClosing","ENTRIES","arrayLike","mapfn","mapping","iteratorMethod","IteratorPrototype","PrototypeOfArrayIteratorPrototype","arrayIterator","CONVERT_TO_STRING","pos","first","second","position","size","charCodeAt","charAt","stringMultibyte","codeAt","correctPrototypeGetter","F","getPrototypeOf","CORRECT_PROTOTYPE_GETTER","IE_PROTO","ObjectPrototype","objectGetPrototypeOf","BUGGY_SAFARI_ITERATORS","activeXDocument","iteratorsCore","objectDefineProperties","defineProperties","Properties","EmptyConstructor","scriptTag","content","LT","NullProtoObject","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","style","display","contentWindow","open","objectCreate","returnThis","createIteratorConstructor","IteratorConstructor","NAME","KEYS","VALUES","defineIterator","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","STRING_ITERATOR","iterated","point","whitespaces","whitespace","ltrim","RegExp","rtrim","stringTrim","start","end","trim","$trim","forcedStringTrimMethod","$getOwnPropertyNames","windowNames","getWindowNames","wrappedWellKnownSymbolModule","require$$12","require$$14","nativeObjectCreate","getOwnPropertyNamesExternal","require$$19","require$$20","require$$22","require$$29","require$$30","require$$31","defineWellKnownSymbol","require$$33","require$$34","require$$35","HIDDEN","SYMBOL","TO_PRIMITIVE","$Symbol","$stringify","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","description","isSymbol","$defineProperties","properties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","for","keyFor","sym","useSetter","useSimple","stringify","replacer","space","$replacer","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","regexp","desc","RE","s","re","lastIndex","re1","re2","regexpFlags","ignoreCase","multiline","dotAll","unicode","sticky","stickyHelpers","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","str","reCopy","flags","charsAdded","strCopy","regexpExec","RegExpPrototype","REPLACE_SUPPORTS_NAMED_GROUPS","groups","REPLACE_KEEPS_$0","REPLACE","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","fixRegexpWellKnownSymbolLogic","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","arg2","forceStringMethod","$exec","stringMethod","regexMethod","advanceStringIndex","regexpExecAbstract","R","regExpExec","MATCH","nativeMatch","maybeCallNative","matcher","res","rx","fullUnicode","matchStr","HAS_SPECIES_SUPPORT","MAXIMUM_ALLOWED_LENGTH_EXCEEDED","splice","deleteCount","insertCount","actualDeleteCount","to","actualStart","fixRegExpWellKnownSymbolLogic","isRegExp","callRegExpExec","arrayPush","MAX_UINT32","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","lastLastIndex","separatorCopy","splitter","unicodeMatching","p","q","e","z","inheritIfRequired","dummy","Wrapper","NewTarget","NewTargetPrototype","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","third","radix","maxCode","digits","code","NaN","parseInt","NumberWrapper","FunctionPrototype","FunctionPrototypeToString","nameRE","nativeJoin","ES3_STRINGS","STRICT_METHOD","SLIDES_SELECTOR","HORIZONTAL_SLIDES_SELECTOR","VERTICAL_SLIDES_SELECTOR","POST_MESSAGE_METHOD_BLACKLIST","FRAGMENT_STYLE_REGEX","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","getSubstitution","matched","captures","namedCaptures","tailPos","m","symbols","ch","capture","UNSAFE_SUBSTITUTE","searchValue","replaceValue","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","sameValue","is","y","SEARCH","nativeSearch","searcher","previousLastIndex","extend","queryAll","selector","querySelectorAll","toggleClass","className","classList","add","remove","deserialize","parseFloat","transformElement","element","transform","matches","matchesMethod","matchesSelector","msMatchesSelector","closest","parentNode","createSingletonNode","container","tagname","classname","innerHTML","nodes","testNode","createStyleSheet","styleSheet","cssText","getQueryHash","query","search","shift","pop","unescape","getRemainingHeight","height","newHeight","oldHeight","offsetHeight","removeProperty","UA","navigator","testElement","isMobile","platform","maxTouchPoints","isChrome","isAndroid","supportsZoom","fitty_module","_extends","w","toArray","nl","DrawState","fitties","redrawFrame","requestRedraw","cancelAnimationFrame","requestAnimationFrame","redraw","dirty","active","redrawAll","styleComputed","computeStyle","shouldPreStyle","applyStyle","fittiesToRedraw","shouldRedraw","calculateStyles","markAsClean","dispatchFitEvent","availableWidth","clientWidth","currentWidth","scrollWidth","previousFontSize","currentFontSize","minSize","maxSize","whiteSpace","multiLine","getComputedStyle","getPropertyValue","preStyle","preStyleTestCompleted","fontSize","CustomEvent","detail","oldValue","newValue","scaleFactor","fit","destroy","_","observeMutations","observer","disconnect","originalStyle","subscribe","unsubscribe","defaultOptions","subtree","childList","resizeDebounce","onWindowResized","clearTimeout","fitty","observeWindowDelay","events","enabled","observeWindow","fitAll","fittyCreate","elements","fittyOptions","publicFitties","newbie","init","unfreeze","freeze","SlideContent","Reveal","startEmbeddedIframe","preload","getConfig","preloadIframes","hasAttribute","slide","tagName","_this","shouldPreload","setAttribute","getAttribute","removeAttribute","media","sources","load","background","slideBackgroundElement","backgroundContent","slideBackgroundContentElement","backgroundIframe","backgroundImage","backgroundVideo","backgroundVideoLoop","backgroundVideoMuted","encodeURI","isSpeakerNotes","video","muted","excludeIframes","width","maxHeight","maxWidth","backgroundIframeElement","querySelector","layout","_this2","getSlideBackground","_appendParamToIframeSource","sourceAttribute","sourceURL","param","_this3","getSlidesElement","autoplay","_this4","autoPlayMedia","play","readyState","startEmbeddedMedia","controls","removeEventListener","isAttachedToDOM","isVisible","currentTime","unloadIframes","pause","_this5","SlideNumber","getRevealElement","config","oldConfig","slideNumberDisplay","slideNumber","isPrintingPDF","showSlideNumber","getSlideNumber","getCurrentSlide","format","getHorizontalSlides","horizontalOffset","dataset","visibility","getSlidePastCount","getTotalSlides","indices","getIndices","h","sep","isVerticalSlide","v","url","getHash","formatNumber","delimiter","colorToRgb","color","hex3","g","hex6","substr","rgb","rgba","Backgrounds","slideh","backgroundStack","createBackground","slidev","parallaxBackgroundImage","backgroundSize","parallaxBackgroundSize","backgroundRepeat","parallaxBackgroundRepeat","backgroundPosition","parallaxBackgroundPosition","contentElement","sync","backgroundColor","backgroundTransition","backgroundOpacity","dataPreload","opacity","contrastColor","computedBackgroundStyle","includeAll","currentSlide","currentBackground","horizontalPast","rtl","horizontalFuture","childNodes","backgroundh","backgroundv","previousBackground","slideContent","stopEmbeddedContent","startEmbeddedContent","currentBackgroundContent","backgroundImageURL","previousBackgroundHash","currentBackgroundHash","classToBubble","contains","backgroundWidth","backgroundHeight","horizontalSlides","verticalSlides","getVerticalSlides","slideWidth","offsetWidth","horizontalSlideCount","parallaxBackgroundHorizontal","verticalOffsetMultiplier","verticalOffset","slideHeight","verticalSlideCount","parallaxBackgroundVertical","nativeKeys","$filter","nativeSlice","fin","autoAnimateCounter","AutoAnimate","fromSlide","toSlide","reset","allSlides","getSlides","toSlideIndex","fromSlideIndex","autoAnimateStyleSheet","animationOptions","getAutoAnimateOptions","autoAnimate","slideDirection","css","getAutoAnimatableElements","autoAnimateElements","autoAnimateUnmatched","defaultUnmatchedDuration","duration","defaultUnmatchedDelay","getUnmatchedAutoAnimateElements","unmatchedElement","unmatchedOptions","delay","autoAnimateTarget","fontWeight","sheet","elementOptions","easing","fromProps","getAutoAnimatableProperties","toProps","styles","translate","scale","presentationScale","getScale","delta","scaleX","scaleY","round","propertyName","toValue","fromValue","explicitValue","toStyleProperties","inheritedOptions","autoAnimateEasing","autoAnimateDuration","autoAnimatedParent","autoAnimateDelay","direction","bounds","measure","center","getBoundingClientRect","offsetLeft","offsetTop","computedStyles","autoAnimateStyles","property","pairs","autoAnimateMatcher","getAutoAnimatePairs","reserved","pair","textNodes","findAutoAnimateMatches","nodeName","innerText","textContent","getLocalBoundingBox","fromScope","toScope","serializer","fromMatches","toMatches","fromElement","pimaryIndex","secondaryIndex","rootElement","children","reduce","containsAnimatedElements","Fragments","fragments","disable","enable","hiddenFragments","prev","grouped","ordered","unordered","sorted","fragment","group","horizontalSlide","verticalSlide","sort","changedFragments","shown","hidden","maxIndex","currentFragment","wasVisible","announceStatus","getStatusText","bubbles","offset","lastVisibleFragment","update","progress","fragmentInURL","writeURL","goto","Overview","onSlideClicked","overview","isActive","cancelAutoSlide","getBackgroundsElement","slideSize","getComputedSlideSize","overviewSlideWidth","overviewSlideHeight","updateSlidesVisibility","hslide","vslide","hbackground","vbackground","vmin","innerWidth","innerHeight","transformSlides","cueAutoSlide","override","activate","deactivate","preventDefault","Keyboard","shortcuts","bindings","onDocumentKeyDown","onDocumentKeyPress","navigationMode","binding","callback","_typeof","keyCode","shiftKey","charCode","toggleHelp","keyboardCondition","isFocused","autoSlideWasPaused","isAutoSliding","onUserInput","activeElementIsCE","activeElement","isContentEditable","activeElementIsInput","activeElementIsNotes","prevSlideShortcut","firstSlideShortcut","lastSlideShortcut","unusedModifier","altKey","ctrlKey","metaKey","resumeKeyCodes","keyboard","isPaused","requestMethod","useLinearMode","hasHorizontalSlides","hasVerticalSlides","triggered","action","left","Number","MAX_VALUE","right","up","down","togglePause","embedded","getViewportElement","documentElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","autoSlideStoppable","toggleAutoSlide","closeOverlay","Location","writeURLTimeout","onWindowHashChange","hash","bits","getElementById","decodeURIComponent","isSameNameAsCurrentSlide","slideIndices","hashIndexBase","hashOneBasedIndex","history","replaceState","pathname","encodeURIComponent","readURL","Controls","onNavigateLeftClicked","onNavigateRightClicked","onNavigateUpClicked","onNavigateDownClicked","onNavigatePrevClicked","onNavigateNextClicked","revealElement","controlsLeft","controlsRight","controlsUp","controlsDown","controlsPrev","controlsNext","controlsRightArrow","controlsLeftArrow","controlsDownArrow","controlsLayout","controlsBackArrows","pointerEvents","eventName","routes","availableRoutes","fragmentsRoutes","controlsTutorial","hasNavigatedVertically","hasNavigatedHorizontally","Progress","onProgressClicked","bar","getProgress","slides","slidesTotal","slideIndex","clientX","getMaxWidth","targetIndices","Pointer","lastMouseWheelStep","cursorHidden","cursorInactiveTimeout","onDocumentCursorActive","onDocumentMouseScroll","mouseWheel","hideInactiveCursor","showCursor","cursor","hideCursor","hideCursorTime","Date","wheelDelta","TO_ENTRIES","$values","loadScript","script","async","onload","onreadystatechange","onerror","err","Error","insertBefore","lastChild","Plugins","reveal","registeredPlugins","asyncDependencies","plugins","dependencies","registerPlugin","scripts","scriptsToLoad","scriptLoadedCallback","initPlugins","warn","pluginValues","pluginsToInitialize","loadAsync","initNextPlugin","afterPlugInitialized","plugin","runtime","exports","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","invoke","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","iter","reverse","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","Print","doingSlideNumbers","pageWidth","margin","pageHeight","body","layoutSlideContents","slideScrollHeights","scrollHeight","pages","pageContainer","top","contentHeight","numberOfPages","pdfMaxPagesPerSlide","page","pdfPageHeightOffset","showNotes","notes","getSlideNotes","notesLayout","notesElement","notesSpacing","bottom","numberElement","pdfSeparateFragments","previousFragmentStep","fragmentGroups","clonedPage","cloneNode","Touch","touchStartX","touchStartY","touchStartCount","touchCaptured","onPointerDown","onPointerMove","onPointerUp","onTouchStart","onTouchMove","onTouchEnd","msPointerEnabled","isSwipePrevented","touches","clientY","currentX","currentY","includeFragments","deltaX","deltaY","abs","pointerType","MSPOINTER_TYPE_TOUCH","STATE_FOCUS","STATE_BLUR","Focus","onRevealPointerDown","onDocumentPointerDown","blur","focus","unbind","Notes","print","hasNotes","UNSCOPABLES","addToUnscopables","fill","endPos","Playback","progressCheck","diameter","diameter2","thickness","playing","progressOffset","canvas","getContext","render","wasPlaying","animate","progressBefore","radius","iconSize","endAngle","PI","startAngle","save","clearRect","beginPath","arc","fillStyle","lineWidth","strokeStyle","stroke","fillRect","moveTo","lineTo","restore","minScale","maxScale","respondToHashChanges","disableLayout","touch","loop","shuffle","help","showHiddenSlides","autoSlide","autoSlideMethod","defaultTiming","previewLinks","postMessageEvents","focusBodyOnPageVisibilityChange","transition","transitionSpeed","POSITIVE_INFINITY","viewDistance","mobileViewDistance","VERSION","indexh","indexv","previousSlide","autoSlidePlayer","ready","navigationHistory","slidesTransform","dom","autoSlideTimeout","autoSlideStartTime","autoSlidePaused","backgrounds","pointer","initialize","initOptions","defaultConfig","Util","setViewport","on","viewport","removeHiddenSlides","setupDOM","setupPostMessage","setupScrollPrevention","resetVerticalSlides","configure","removeEventListeners","setupPDF","Device","pauseOverlay","statusElement","createStatusElement","overflow","clip","text","nodeType","isAriaHidden","isDisplayHidden","child","setInterval","scrollTop","scrollLeft","JSON","parse","dispatchPostMessage","isReady","numberOfSlides","setProperty","resume","enablePreviewLinks","disablePreviewLinks","onAutoSlidePlayerClick","addEventListeners","onWindowResize","onTransitionEnd","onPageVisibilityChange","useCapture","off","transforms","message","getState","onPreviewLinkClicked","showPreview","overlay","showHelp","getShortcuts","getBindings","oldScale","presentationWidth","presentationHeight","zoom","devicePixelRatio","updateParallax","remainingHeight","nw","naturalWidth","videoWidth","nh","naturalHeight","videoHeight","es","setPreviousVerticalIndex","stack","getPreviousVerticalIndex","attributeName","isLastVerticalSlide","nextElementSibling","isFirstSlide","isLastSlide","wasPaused","resumeAutoSlide","pauseAutoSlide","o","stateBefore","indexhBefore","indexvBefore","updateSlides","slideChanged","currentHorizontalSlide","currentVerticalSlides","autoAnimateTransition","getVerticalStacks","stateLoop","origin","sortAll","updateVisibility","formatEmbeddedContent","syncSlide","beforeSlide","slidesLength","printMode","wasPresent","slideState","distanceX","horizontalSlidesLength","verticalSlidesLength","unload","oy","fragmentRoutes","pastCount","mainLoop","totalCount","allFragments","isVertical","getSlidesAttributes","attributes","attribute","getSlide","indexf","paused","setState","pausedFlag","overviewFlag","fragmentAutoSlide","parentAutoSlide","slideAutoSlide","playbackRate","navigateNext","setPlaying","navigateLeft","navigateRight","navigateUp","navigateDown","navigatePrev","currentTarget","API","syncFragments","navigateFragment","prevFragment","nextFragment","availableFragments","toggleOverview","isSpeakerNotesWindow","isOverview","loadSlide","unloadSlide","hidePreview","getPreviousSlide","addKeyBinding","removeKeyBinding","triggerKey","registerKeyboardShortcut","hasPlugin","getPlugin","getPlugins","getRegisteredPlugins","Deck","enqueuedAPICalls","deck"],"mappings":"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"} |