1 line
600 KiB
Plaintext
1 line
600 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","../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/utils/constants.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","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}\n\nconst fileExtensionToMimeMap = {\n\t'mp4': 'video/mp4',\n\t'm4a': 'video/mp4',\n\t'ogv': 'video/ogg',\n\t'mpeg': 'video/mpeg',\n\t'webm': 'video/webm'\n}\n\n/**\n * Guess the MIME type for common file formats.\n */\nexport const getMimeTypeFromFile = ( filename='' ) => {\n\treturn fileExtensionToMimeMap[filename.split('.').pop()]\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 { extend, queryAll, closest, getMimeTypeFromFile } 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\t// base64\n\t\t\t\t\tif( /^data:/.test( backgroundImage.trim() ) ) {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = `url(${backgroundImage.trim()})`;\n\t\t\t\t\t}\n\t\t\t\t\t// URL(s)\n\t\t\t\t\telse {\n\t\t\t\t\t\tbackgroundContent.style.backgroundImage = backgroundImage.split( ',' ).map( background => {\n\t\t\t\t\t\t\treturn `url(${encodeURI(background.trim())})`;\n\t\t\t\t\t\t}).join( ',' );\n\t\t\t\t\t}\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\tlet type = getMimeTypeFromFile( source );\n\t\t\t\t\t\tif( type ) {\n\t\t\t\t\t\t\tvideo.innerHTML += `<source src=\"${source}\" type=\"${type}\">`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvideo.innerHTML += `<source src=\"${source}\">`;\n\t\t\t\t\t\t}\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","/**\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\tdestroy() {\n\n\t\tthis.element.remove();\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\tdestroy() {\n\n\t\tthis.element.remove();\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","\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/;","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 , Shift SPACE'] = '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['Alt + ←/↑/→/↓'] = 'Navigate without fragments';\n\t\tthis.shortcuts['Shift + ←/↑/→/↓'] = 'Jump to first/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 certain modifiers for slide navigation shortcuts\n\t\tlet isNavigationKey = [32, 37, 38, 39, 40, 78, 80].indexOf( event.keyCode ) !== -1;\n\n\t\t// Prevent all other events when a modifier is pressed\n\t\tlet unusedModifier = \t!( isNavigationKey && event.shiftKey || event.altKey ) &&\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({skipFragments: event.altKey});\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({skipFragments: event.altKey});\n\t\t\t}\n\t\t\t// H, LEFT\n\t\t\telse if( keyCode === 72 || keyCode === 37 ) {\n\t\t\t\tif( event.shiftKey ) {\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({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.left({skipFragments: event.altKey});\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( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( this.Reveal.getHorizontalSlides().length - 1 );\n\t\t\t\t}\n\t\t\t\telse if( !this.Reveal.overview.isActive() && useLinearMode ) {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.right({skipFragments: event.altKey});\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( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 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({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.up({skipFragments: event.altKey});\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( event.shiftKey ) {\n\t\t\t\t\tthis.Reveal.slide( undefined, 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({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.down({skipFragments: event.altKey});\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( this.Reveal.getHorizontalSlides().length - 1 );\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({skipFragments: event.altKey});\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.Reveal.next({skipFragments: event.altKey});\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 * Returns the slide indices for the given hash link.\n\t *\n\t * @param {string} [hash] the hash string that we want to\n\t * find the indices for\n\t *\n\t * @returns slide indices or null\n\t */\n\tgetIndicesFromHash( hash=window.location.hash ) {\n\n\t\t// Attempt to parse the hash as either an index or name\n\t\tlet name = hash.replace( /^#\\/?/, '' );\n\t\tlet bits = name.split( '/' );\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\tif( element ) {\n\t\t\t\treturn { ...this.Reveal.getIndices( element ), f };\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst config = this.Reveal.getConfig();\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\treturn { h, v, f };\n\t\t}\n\n\t\t// The hash couldn't be parsed or no matching named link was found\n\t\treturn null\n\n\t}\n\n\t/**\n\t * Reads the current URL (hash) and navigates accordingly.\n\t */\n\treadURL() {\n\n\t\tconst currentIndices = this.Reveal.getIndices();\n\t\tconst newIndices = this.getIndicesFromHash();\n\n\t\tif( newIndices ) {\n\t\t\tif( ( newIndices.h !== currentIndices.h || newIndices.v !== currentIndices.v || newIndices.f !== undefined ) ) {\n\t\t\t\t\tthis.Reveal.slide( newIndices.h, newIndices.v, newIndices.f );\n\t\t\t}\n\t\t}\n\t\t// If no new indices are available, we're trying to navigate to\n\t\t// a slide hash that does not exist\n\t\telse {\n\t\t\tthis.Reveal.slide( currentIndices.h || 0, currentIndices.v || 0 );\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\tdestroy() {\n\n\t\tthis.unbind();\n\t\tthis.element.remove();\n\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\tdestroy() {\n\n\t\tthis.element.remove();\n\n\t}\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\tdestroy() {\n\n\t\tthis.showCursor();\n\n\t\tdocument.removeEventListener( 'DOMMouseScroll', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousewheel', this.onDocumentMouseScroll, false );\n\t\tdocument.removeEventListener( 'mousemove', this.onDocumentCursorActive, false );\n\t\tdocument.removeEventListener( 'mousedown', this.onDocumentCursorActive, false );\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\tdestroy() {\n\n\t\tObject.values( this.registeredPlugins ).forEach( plugin => {\n\t\t\tif( typeof plugin.destroy === 'function' ) {\n\t\t\t\tplugin.destroy();\n\t\t\t}\n\t\t} );\n\n\t\tthis.registeredPlugins = {};\n\t\tthis.asyncDependencies = [];\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\tconst viewportElement = document.querySelector( '.reveal-viewport' );\n\t\tlet presentationBackground;\n\t\tif( viewportElement ) {\n\t\t\tconst viewportStyles = window.getComputedStyle( viewportElement );\n\t\t\tif( viewportStyles && viewportStyles.background ) {\n\t\t\t\tpresentationBackground = viewportStyles.background;\n\t\t\t}\n\t\t}\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// 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\n\t\t\t\t// Copy the presentation-wide background to each individual\n\t\t\t\t// page when printing\n\t\t\t\tif( presentationBackground ) {\n\t\t\t\t\tpage.style.background = presentationBackground;\n\t\t\t\t}\n\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\t// Re-run the slide layout so that r-fit-text is applied based on\n\t\t\t\t// the printed slide size\n\t\t\t\tthis.Reveal.slideContent.layout( slide )\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\tdestroy() {\n\n\t\tthis.Reveal.getRevealElement().classList.remove( 'focused' );\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\tdestroy() {\n\n\t\tthis.element.remove();\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.2.2';\n\n/**\n * reveal.js\n * https://revealjs.com\n * MIT licensed\n *\n * Copyright (C) 2011-2022 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\tif( !revealElement ) throw 'Unable to find presentation root (<div class=\"reveal\">).';\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\tif( !dom.slides ) throw 'Unable to find slides container (<div class=\"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// Adds bindings for fullscreen mode\n\t\tsetupFullscreen();\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 * After entering fullscreen we need to force a layout to\n\t * get our presentations to scale correctly. This behavior\n\t * is inconsistent across browsers but a force layout seems\n\t * to normalize it.\n\t */\n\tfunction setupFullscreen() {\n\n\t\tdocument.addEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.addEventListener( 'webkitfullscreenchange', onFullscreenChange );\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', onPostMessage, 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( 'click', onSlidesClicked, false );\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( 'click', onSlidesClicked, false );\n\t\tdom.slides.removeEventListener( 'transitionend', onTransitionEnd, false );\n\t\tdom.pauseOverlay.removeEventListener( 'click', resume, false );\n\n\t}\n\n\t/**\n\t * Uninitializes reveal.js by undoing changes made to the\n\t * DOM and removing all event listeners.\n\t */\n\tfunction destroy() {\n\n\t\tremoveEventListeners();\n\t\tcancelAutoSlide();\n\t\tdisablePreviewLinks();\n\n\t\t// Destroy controllers\n\t\tnotes.destroy();\n\t\tfocus.destroy();\n\t\tplugins.destroy();\n\t\tpointer.destroy();\n\t\tcontrols.destroy();\n\t\tprogress.destroy();\n\t\tbackgrounds.destroy();\n\t\tslideNumber.destroy();\n\n\t\t// Remove event listeners\n\t\tdocument.removeEventListener( 'fullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'webkitfullscreenchange', onFullscreenChange );\n\t\tdocument.removeEventListener( 'visibilitychange', onPageVisibilityChange, false );\n\t\twindow.removeEventListener( 'message', onPostMessage, false );\n\t\twindow.removeEventListener( 'load', layout, false );\n\n\t\t// Undo DOM changes\n\t\tif( dom.pauseOverlay ) dom.pauseOverlay.remove();\n\t\tif( dom.statusElement ) dom.statusElement.remove();\n\n\t\tdocument.documentElement.classList.remove( 'reveal-full-page' );\n\n\t\tdom.wrapper.classList.remove( 'ready', 'center', 'has-horizontal-slides', 'has-vertical-slides' );\n\t\tdom.wrapper.removeAttribute( 'data-transition-speed' );\n\t\tdom.wrapper.removeAttribute( 'data-background-transition' );\n\n\t\tdom.viewport.classList.remove( 'reveal-viewport' );\n\t\tdom.viewport.style.removeProperty( '--slide-width' );\n\t\tdom.viewport.style.removeProperty( '--slide-height' );\n\n\t\tdom.slides.style.removeProperty( 'width' );\n\t\tdom.slides.style.removeProperty( 'height' );\n\t\tdom.slides.style.removeProperty( 'zoom' );\n\t\tdom.slides.style.removeProperty( 'left' );\n\t\tdom.slides.style.removeProperty( 'top' );\n\t\tdom.slides.style.removeProperty( 'bottom' );\n\t\tdom.slides.style.removeProperty( 'right' );\n\t\tdom.slides.style.removeProperty( 'transform' );\n\n\t\tArray.from( dom.wrapper.querySelectorAll( SLIDES_SELECTOR ) ).forEach( slide => {\n\t\t\tslide.style.removeProperty( 'display' );\n\t\t\tslide.style.removeProperty( 'top' );\n\t\t\tslide.removeAttribute( 'hidden' );\n\t\t\tslide.removeAttribute( 'aria-hidden' );\n\t\t} );\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\treturn event;\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} [origin] Origin for use in multimaster environments\n\t */\n\tfunction slide( h, v, f, origin ) {\n\n\t\t// Dispatch an event before hte slide\n\t\tconst slidechange = dispatchEvent({\n\t\t\ttype: 'beforeslidechange',\n\t\t\tdata: {\n\t\t\t\tindexh: h === undefined ? indexh : h,\n\t\t\t\tindexv: v === undefined ? indexv : v,\n\t\t\t\torigin\n\t\t\t}\n\t\t});\n\n\t\t// Abort if this slide change was prevented by an event listener\n\t\tif( slidechange.defaultPrevented ) return;\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\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({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || 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() || skipFragments || 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({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\n\t\t// Reverse for RTL\n\t\tif( config.rtl ) {\n\t\t\tif( ( overview.isActive() || skipFragments || 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() || skipFragments || 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({skipFragments=false}={}) {\n\n\t\t// Prioritize hiding fragments\n\t\tif( ( overview.isActive() || skipFragments || fragments.prev() === false ) && availableRoutes().up ) {\n\t\t\tslide( indexh, indexv - 1 );\n\t\t}\n\n\t}\n\n\tfunction navigateDown({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( ( overview.isActive() || skipFragments || 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({skipFragments=false}={}) {\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || fragments.prev() === false ) {\n\t\t\tif( availableRoutes().up ) {\n\t\t\t\tnavigateUp({skipFragments});\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\t// When going backwards and arriving on a stack we start\n\t\t\t\t// at the bottom of the stack\n\t\t\t\tif( previousSlide && previousSlide.classList.contains( 'stack' ) ) {\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\telse {\n\t\t\t\t\tnavigateLeft({skipFragments});\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({skipFragments=false}={}) {\n\n\t\tnavigationHistory.hasNavigatedHorizontally = true;\n\t\tnavigationHistory.hasNavigatedVertically = true;\n\n\t\t// Prioritize revealing fragments\n\t\tif( skipFragments || 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({skipFragments});\n\t\t\t}\n\t\t\telse if( config.rtl ) {\n\t\t\t\tnavigateLeft({skipFragments});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnavigateRight({skipFragments});\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* Listener for post message events posted to this window.\n\t*/\n\tfunction onPostMessage( event ) {\n\n\t\tlet data = event.data;\n\n\t\t// Make sure we're dealing with JSON\n\t\tif( typeof data === 'string' && data.charAt( 0 ) === '{' && data.charAt( data.length - 1 ) === '}' ) {\n\t\t\tdata = JSON.parse( data );\n\n\t\t\t// Check if the requested method can be found\n\t\t\tif( data.method && typeof Reveal[data.method] === 'function' ) {\n\n\t\t\t\tif( POST_MESSAGE_METHOD_BLACKLIST.test( data.method ) === false ) {\n\n\t\t\t\t\tconst result = Reveal[data.method].apply( Reveal, data.args );\n\n\t\t\t\t\t// Dispatch a postMessage event with the returned value from\n\t\t\t\t\t// our method invocation for getter functions\n\t\t\t\t\tdispatchPostMessage( 'callback', { method: data.method, result: result } );\n\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tconsole.warn( 'reveal.js: \"'+ data.method +'\" is is blacklisted from the postMessage API' );\n\t\t\t\t}\n\n\t\t\t}\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 * A global listener for all click events inside of the\n\t * .slides container.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onSlidesClicked( event ) {\n\n\t\tconst anchor = Util.closest( event.target, 'a[href^=\"#\"]' );\n\n\t\t// If a hash link is clicked, we find the target slide\n\t\t// and navigate to it. We previously relied on 'hashchange'\n\t\t// for links like these but that prevented media with\n\t\t// audio tracks from playing in mobile browsers since it\n\t\t// wasn't considered a direct interaction with the document.\n\t\tif( anchor ) {\n\t\t\tconst hash = anchor.getAttribute( 'href' );\n\t\t\tconst indices = location.getIndicesFromHash( hash );\n\n\t\t\tif( indices ) {\n\t\t\t\tReveal.slide( indices.h, indices.v, indices.f );\n\t\t\t\tevent.preventDefault();\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 * Handler for the document level 'fullscreenchange' event.\n\t *\n\t * @param {object} [event]\n\t */\n\tfunction onFullscreenChange( event ) {\n\n\t\tlet element = document.fullscreenElement || document.webkitFullscreenElement;\n\t\tif( element === dom.wrapper ) {\n\t\t\tevent.stopImmediatePropagation();\n\n\t\t\t// Timeout to avoid layout shift in Safari\n\t\t\tsetTimeout( () => {\n\t\t\t\tReveal.layout();\n\t\t\t\tReveal.focus.focus(); // focus.focus :'(\n\t\t\t}, 1 );\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\t\tdestroy,\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","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","fileExtensionToMimeMap","getMimeTypeFromFile","filename","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","SLIDES_SELECTOR","HORIZONTAL_SLIDES_SELECTOR","VERTICAL_SLIDES_SELECTOR","POST_MESSAGE_METHOD_BLACKLIST","FRAGMENT_STYLE_REGEX","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","unusedModifier","altKey","ctrlKey","metaKey","resumeKeyCodes","keyboard","isPaused","requestMethod","useLinearMode","hasHorizontalSlides","hasVerticalSlides","triggered","action","skipFragments","left","right","up","Number","MAX_VALUE","down","togglePause","embedded","getViewportElement","documentElement","requestFullscreen","webkitRequestFullscreen","webkitRequestFullScreen","mozRequestFullScreen","msRequestFullscreen","autoSlideStoppable","toggleAutoSlide","closeOverlay","Location","writeURLTimeout","onWindowHashChange","hash","bits","hashIndexBase","hashOneBasedIndex","getElementById","decodeURIComponent","currentIndices","newIndices","getIndicesFromHash","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","unbind","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","viewportElement","viewportStyles","presentationBackground","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","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","setupFullscreen","resetVerticalSlides","configure","removeEventListeners","setupPDF","Device","pauseOverlay","statusElement","createStatusElement","overflow","clip","text","nodeType","isAriaHidden","isDisplayHidden","child","setInterval","scrollTop","scrollLeft","onFullscreenChange","onPostMessage","isReady","numberOfSlides","setProperty","resume","enablePreviewLinks","disablePreviewLinks","onAutoSlidePlayerClick","addEventListeners","onWindowResize","onSlidesClicked","onTransitionEnd","onPageVisibilityChange","useCapture","off","transforms","dispatchPostMessage","message","getState","JSON","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","origin","defaultPrevented","stateBefore","indexhBefore","indexvBefore","updateSlides","slideChanged","currentHorizontalSlide","currentVerticalSlides","autoAnimateTransition","getVerticalStacks","stateLoop","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","parse","anchor","fullscreenElement","webkitFullscreenElement","stopImmediatePropagation","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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"} |